0.バンドル調整 〜 目次
ご無沙汰しております!社長です!「月に1本のブログアップ」といった新年の誓いもなんのその(笑),更新せずに半年たっちゃいましたが,せっかくの自粛GWを活かして勉強したことまとめ書きします!ということで,以下,エントリです∠(`・ω・´)
春だ,桜だ,バンドル調整だ~.ということで,牛歩のように進めている一人SFMプロジェクト,やっとこさバンドル調整まで来ました(笑)仕事でも最適化が使いこなせるようになりたいと思っていたことも有り,少しずつ勉強していたのですが,ちょうどいい機会なのでバンドル調整の文脈で最適化のエントリを書いてみたいと思います.このページは目次として書いていますが,個々のページが書き終わった段階でここにリンクを貼りたいと思います.心が折れなければ,,,,最後まで書ききれると思います!
ちなみに,どの文献をよんでも「ヘッシアンの計算は大変なので,,,」とあったので,力ずくで計算してみました.どろんこになりながら実装したので,少しは最適化を身近に感じるようになりました(笑)
X.モデル化,及び問題設定
バンドル調整の簡単な説明,モデル化,最小化する数式を説明します.
daily-tech.hatenablog.com
X.回転のパラメータ化
回転行列のエントリは9つ(3x3)ありますが,回転の自由度は3なので,回転行列以外の方法でパラメータ化しなければいけません.今回は,Angle-Axisを用いてパラメータ化しています.
daily-tech.hatenablog.com
X.Sympy を使った微分計算
ヤコビアン,ヘッシアンともに近似をつかわず(!)計算しています(笑)さすがに手計算はむりだったので,Sympyを使っています.
daily-tech.hatenablog.com
X.勾配ベクトルとヘッシアンの作成
バンドル調整における典型的なヘッシアンの構造を踏まえて,勾配ベクトル/ヘッシアンを作ります.
daily-tech.hatenablog.com
X.直線探索
最急降下法・ニュートン法を実行する上で必要となる直線探索のアルゴリズムを調べています.
daily-tech.hatenablog.com
X.ニュートン法を用いた解法
力ずくで計算したヘッシアンを使って,最適化をやってみました.ただ,簡単には収束せず...
X.レベンバーグ・マルカート法を用いた解法
非線形最小二乗法のデファクトスタンダードである,レベンバーグマルカート法を試しました.
X.Ceres-Solver を用いた解法
最後に,,,同じ問題設定を Ceres-Solver を用いて解きました.ヤコビアンもヘッシアンも計算せず,あっという間ですね...
X.参考文献
Bundle Adjustment – A Modern Synthesis
SBA: A software package for generic sparse bundle adjustment
Numerical Optimization (Springer Series in Operations Research and Financial Engineering)
- 作者:Nocedal, Jorge,Wright, Stephen
- 発売日: 2006/06/01
- メディア: ハードカバー
- 作者:健一, 金谷
- 発売日: 2005/09/01
- メディア: 単行本
X.実験に使ったソースコード
ソースコードはまだちょっと整理中でして,個々のエントリのアップする時には間に合わせるようにします.
github.com