問題タブ [ceres-solver]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Ceres Solver : 非線形最小二乗法に滑らかな近似を使用
コンピュータ ビジョン アプリケーションで発生する最適化問題を解決するために、Google ceres ソルバーを使用しています。残差を評価するためにAutoDiffCostFunctionを使用しています。密な QR ソルバーは関数を最適化し、適切な最小値を見つけることができます。しかし、fmax、fmin、relu (または残差内の if/else) のような滑らかでない関数を使用することは、悪い習慣と見なされるのでしょうか。
私たちの残差には、いくつかの滑らかでない操作が含まれています。
ゼロで微分不可能な別のスニペット:
たとえば、fmax を Smooth-approximation に置き換えることができます。
問題は、密な QR が意図したとおりに機能している場合でも、非滑らかさの残差を体系的に削除する必要があるかどうかです。
c++ - centOS7 に ceres-solver をインストールし、helloworld.cc を動作させる
問題ceres-solver
: Google のC++ ライブラリを使用したいのですが、その Web ページhelloworld.cc
でサンプルを実行できません。
インストール: CentOS7 (の新規インストール) を使用しており、ceres-solver
Web サイトのインストール手順に従っています。apt-get
を同等のパッケージに置き換えてyum
、以下をインストールしました。
- コンパイラの場合、次を使用して
g++
インストールgcc
sudo yum install "Development Tools"
cmake
これらの指示で。- いくつかのライブラリ
sudo yum install glog-devel atlas-devel gflags-devel eigen3-devel suitesparse-devel blas-devel lapack-devel
- 新しいフォルダーに、tar.gz ファイルをダウンロードしました。
続いて、Web ページのLinuxの説明ceres
、つまり
端末出力: 上記のコードの簡単な出力を以下に示します。詳細がわかる場合は、完全なログを貼り付けることができます。
- 実行中
cmake
:
- 実行後のテール出力
make install
:
g++エラーhelloworld.cc
:次のコマンドでファイルを実行しようとすると
次に、次のエラーが表示されます。
エラーはこの質問に似ていますが、満足のいく回答が得られていません。どんな助けでも大歓迎です。
mathematical-optimization - Ceres で複数の Residual ブロックを定義するのはいつですか?
Ceres Solver のチュートリアルを進めています。
パウエル関数
Powell の関数は からマッピングされるため、4 要素の配列を取り、4 要素の配列を埋める1 つの残差ブロックR^4 -> R^4
を定義するのは直感的に思えます。x
residual
代わりに、チュートリアルの例では、マッピングする 4 つの異なる残差ブロックを定義していますR^2 -> R^1
。
もちろん、 を最小化しようとしている場合1/2 || F(x) ||^2
、 の各要素を最小化すると、直接F
最小化するのと同じ解決策が暗黙的に得られます (つまり、私の提案は、 ...を個別にではなく1/2 || F(x) ||^2
単一の残差ベクトルを返すことです)。(以下のコスト関数を使用してこれを確認しました)。F
F1
F4
残差ベクトルの要素ごとに個別の残差ブロック (および暗黙的なパラメーター ブロック) を定義する利点は何
F
ですか?残差
F1
がパラメータx1
およびに依存しx2
、残差がおよびに依存する場合、 に関する のコストはの値に影響しますか?F2
x3
x4
F
x1
x3
カーブフィッティング
もう 1 つの例では、パラメーターを見つけて曲線を作成しようとしてm
いc
ますy=e^(mx + c)
。
データポイントの場所ExponentialResidual
を単純に出力するものを定義します。T(y_) - exp(m[0] * T(x_) + c[0])
(x_, y_)
次に、観測ごとに 1 つの残差ブロックを追加します。
- 私は怠惰すぎてこの例を自分で再現できませんでしたが、1D 残差がすべてのすべての合計にすぎない 1 つの残差ブロックをマップするだけでも実現できるの
R^2 -> R^1
ではないかと思います。観測ごとに残差ブロックを定義する必要がありましたか?T(y_) - exp(m[0] * T(x_) + c[0])
(x_, y_)
この長い投稿を読んでくれてありがとう!
ceres-solver - クラス内の目的関数に対する ceres ソルバーの実装
私はCeresの初心者です(1週間弱調べています)、ceresソルバーを使用してクラス内のコスト関数を解決しようとしています。以下は私のコードのサンプル バージョンです。ceres のコスト関数を設定するのに問題があります。
プロセスは次のとおりです。myStruct の operator() 内でクラスに入力する必要がある 14 個のパラメーター initparam[14] の配列があります。
演算子内で initparam にアクセスしようとすると、各要素が double ではなく ceres Jet になっています。
他のブログ投稿からわかることから、ceres のドキュメント ( http://ceres-solver.org/interfacing_with_autodiff.html ) に記載されているこの種のものを実装する必要があるかもしれません。残念ながら、私はセレスについての知識が限られており、これが実際に正しい方法であるかどうかはわかりません. 誰か助けてくれませんか?必要に応じて、さらに情報を提供していただければ幸いです