狠狠撸

狠狠撸Share a Scribd company logo
Direct Sparse Odometry
東京大学 相澤山崎研究室
Qoncept Internship
2018/01/13 B4 金子 真也
1
What is this?
? 現在, 株式会社Qoncept(http://qoncept.jp/)でのInternshipに参
加しており, その成果の一つとして作成した資料です.
? 近年VOとしてかなり精度が高いと話題のDirect Sparse Odometry
(https://vision.in.tum.de/research/vslam/dso)の論文を翻訳し
まとめました.
? DSOに関する日本語の文献は現在かなり少ないので, 参考になると
思い公開しました.
? 私自身, 勉強中の身で理解が甘い箇所が多々あると思うので, 何かコ
メント等あれば気軽にお願いします.
? 本スライド中の数式番号は元論文に対応した番号を付けています
(違う論文の数式の場合は番号に引用を付けています)
Demo, Abstract, Motivation, ...
3
Demo-Video (YouTube)
4
Abstract
? SLAMやVOは特徴点ベース(indirect)の手法が長い間主流だったが,
近年はdirectでdenseな手法が人気。
? Direct vs Indirect, Dense vs Sparseの2軸で方法を分類できる
? 本論文はDirect + Sparseという部分の方法を提案する
手法 Direct Indirect
Sparse DSO(本手法)
monoSLAM(2007)
PTAM(2007)
ORB-SLAM(2015)
Dense/
Semi-Dense
DTAM(2011)
LSD-SLAM(2014)
3D geometry
Estimation ...
5
Motivation
? Direct
– 特徴点ベース(Indirect)の手法の利点としては画像中の幾何学的
歪みに対して頑強性を持つ
– 一方, Directな手法では点がそれ自身認識する必要がないため,
より細かい幾何学表現が可能 + 輝度の微弱な変化を含めたデー
タ全体からサンプリングできるのでテクスチャがまばらな環境
でも頑強な性能を持つ
? Sparse
– Sparseな場合にはgeo-geoが対角行列(青)なので, Schur補元を
使って簡単にBAができる
– 一方, Directな場合にはgeo-geo
の相関関係が生じるため(橙), 上
の方法では足りずBAが難しい
(工夫が必要)
6
Contribution
? 全てのモデルパラメータの完全尤度の最適化は一般的にDirectな手
法で行われているため, Direct + Sparseな手法を提案
– Cameraの位置, 内部パラメータ, および幾何学パラメータ等
? 最適化はsliding windowベースで行い, 古いカメラの位置は除外
? 既存の手法と異なり, カメラのphotometric calibrationを十分に
活用することで正確さと頑強性を向上させる
? CPUベースの実装であり, かつLSD-SLAM[1]と同じ密度のモデルを
作りながら, 既存の手法を上回る精度と頑強性 + 5倍の速さ
[1] J. Engel, T. Schops, and D. Cremers. LSD-SLAM: Largescale direct monocular SLAM. In European Conference on Computer Vision (E
CCV), 2014.
Methods
8
Method
以下の手順で解説する
1. Direct-Sparse Modelの解説
1. Camera Calibration
Geometric Calibration + Photometric Calibration
2. Modelの定式化
3. Windowベースの最適化
2. DSOのFront-End部分の解説
1. Frameの操作手順
2. Pointの操作手順
1. Direct-Sparse Modelの解説
10
1. Camera Calibration
? Directな手法ではこの部分がかなり大事
– Indirectな手法では特徴抽出器?記述子は測光の変動に頑強性を
持つのでこの操作の大部分は無視することができる
– Geometric CalibrationとPhotometric Calibrationの2種類で
モデル化する
? Geometric Calibration
– よく知られたピンホールカメラモデル
– 3D点 ?, ?, ? ∈ ?3
から画像点 ? ?, ? ? ∈ Ωへ
(投影関数であり, Π ? ∶ ?3 → Ω と表記)
(1)[1]
[1] J. Engel, V. Usenko, D. Cremers. A Photometrically Calibrated Benchmark For Monocular Visual Odometry, In arXiv:1607.02555, 2016.
11
1. Camera Calibration
– 今回は歪みあり画像点 ? ?, ? ? から歪みなし画像点 ? ?, ? ? へ変換
– この点を三次元へ変換する際には以下の変換を行う
(逆投影関数であり, Π ?
?1 ∶ ? × Ω → ?3 と表記)
– 今回のcalibrationはPTAM[2]の実装を使い,チェックボードを用
いることで [??, ??, ? ?, ? ?, ?]を推定
[1] J. Engel, V. Usenko, D. Cremers. A Photometrically Calibrated Benchmark For Monocular Visual Odometry, In arXiv:1607.02555, 2016.
[2] G. Klein and D. Murray. Parallel tracking and mapping for small AR workspaces. In International Symposium on Mixed and Augmented Reality (ISMAR), 2007.
(2,3) [1]
12
? Photometric Calibration
– 非線形反応関数? + レンズ減衰?でモデル化
– フレーム?において, これらを組み合わせたモデルは以下で定義
??は放射照度, ??は観測されたピクセル強度, ??は露光時間
– フレーム??を測光修正し, 修正フレーム?′?を得るには上の式から
反応関数? レンズ減衰? 露光時間?
(2)
(3)
1. Camera Calibration
13
2. Modelの定式化
? 参照フレーム??上の点? ∈ Ω?が, 対象のフレーム??で観測された時の
測光誤差を定義
– ピクセル近傍のパターン??の重み付きSSDにより計算
? モーションブラーに頑強に
? フレーム??, ??間の測光誤差
– ??は近傍パターン, ??, ??は露光時間, ? ?はHuberノルム
– ?′は逆深度? ?による?の投影点
パターン??の例
参照フレーム??
(位置??)
対象フレーム??
(位置??)
? ? ?
?′
深度1/? ?
逆投影関数 Π ?
?1
投影関数 Π ?
:相対的なカメラの動き
(4)
(5,6)
14
2. Modelの定式化
– 露光時間が未知の場合のためにもアフィン輝度変換関数として,
??? ?(?? ? ??)を含めている
– Huber損失に加えて, 画素勾配に依存した重み? ?を定義
? 勾配が高いピクセルに関しては重み小に(ノイズを抑える)
– まとめると測光誤差? ??は以下の要素に依存している
1. 点の逆深度値? ?
2. カメラの内部パラメータ?
3. フレームの位置??, ??
4. 輝度変換関数のパラメータ??, ??, ??, ??
(7)
15
2. Modelの定式化
? 全体の測光誤差
– 全てのフレーム番号の集合?において, ?番目のフレーム
– フレーム?上の全ての点集合??の中で点?
– 点?が観測されたフレーム集合obs(?)の中で, ?番目のフレーム
? 古典的な再投影誤差との違いは1枚だけでなく, それぞれの項が2枚
のフレームに依存されていること
? KF毎の測光誤差の依存関係グラフの例
は右のようになる
(8)
16
2. Modelの定式化
? 点の持つパラメータ数に関して
– Directな手法では点の持つパラメータ数を抑えられる
? 点利用の一貫性
– 今回は観測点をひたすら何度も使い, 使わない点は全く使わない
? 画像から点を取得する際に重複を許しているため
– 空間内に点を分布させ, テクスチャが少ないシーンでもうまく推
定できるようにする
手法 点の次元数 理由
Direct
1
(depth)
逆深度値の推定のみ
Indirect
3
(X,Y,Z)
コーナー位置の推定(特徴点抽出)
+ 深さの推定
17
3. Windowベースの最適化
? 式(8)をsliding windowでGauss-Newton法を使うことで最適化
– 速度と柔軟さで良い性能を持つ
? [定義] 表記としてLie代数 ?? 3 とLie群 SE(3)を用いる(詳細は[3])
– パラメータ ? ∈ ?? 3 ? × ? ? とその行列表記 ? ∈ SE 3 ? × ? ?
互いの空間の写像は
exp: ?? 3 ? SE 3 , log: SE(3) ? ??(3)
– 演算子?: ?? 3 × SE(3) → SE(3)
直接パラメータから行列表記を更新する演算子
? = ? ? ?0 ≡ ? ? ? ?0
? 接ベクトル空間(パラメータ空間)を動かし最適化
– Gauss-Newton法で?ずつ動かす
[3] B. Jose-Luis. A tutorial on se (3) transformation parameterizations and on-manifold optimization. University of Malaga, 2010.
18
3. Windowベースの最適化
? 今回最適化したいのは式(8)だが, 総和でなく残差ベクトル?として
考えるっぽい?(論文の表記から見る感じ)
? 残差ベクトル?の要素??の定義
– 各画素は ?? = 8として誤差を計算
– 今回, 最適化すべきパラメータはLie代数?? 3 を使って定義
(?を動かすことで最適化パラメータも動かす)
(11)
19
3. Windowベースの最適化
? Jacob行列? ?の定義
– Gauss-Newton法において?を動かす方向(勾配を降りる)となる
– Jacob行列は?geo = ??, ??, ?, ? , ?photo = (??, ??, ??, ??)で分割
– これにより以下2つの近似を行うことができる
? First Estimate Jacobians [4]による安定性の確保?
– ?geo, ?photoは?に対してsmoothな空間になっている
? ?geoは??全体で等しくなるので中央画素だけ計算する(削減)
(12)
(13)
[4] G. P. Huang, A. I. Mourikis, and S. I. Roumeliotis. A first-estimates Jacobian EKF for improving SLAM consistency. In International Symposium on Experimental Robotics, 2008.
6
20
3. Windowベースの最適化
? Gauss-Newton法による最適化
1. パラメータ?の更新(何をやっているかは[5]が参考になる)
1. First Estimate Jacobiansにより? = 0からスタート
2. 式(11),式(12)からパラメータ?における以下の要素を計算
3. 上式から?から勾配を降りる幅?を計算
4. パラメータ?を更新する
(式(12)を ? + ? ? ?0 ? ? ? (? ? ?0)にした場合は次式)
2. 行列表記?0の更新
上の1iterationが終わったら, Marginalizationの項でない変数
を更新し, ? = 0からスタートできるようにする
(10)
(14)
[5] E. Ethan. Gauss-Newton / Levenberg-Marquardt optimization. 2013.
21
3. Windowベースの最適化
? Marginalizationの方法
– 変数が増加し過ぎるとヤバいのでHessianの疎な構造に影響を与
える古い変数を除外する
– フレーム?を除外する時にはまず最新の2枚のKFで観測されない
点を除外してから, 残りの点を除外する
– 手順としては以下(何をやっているかは[6]が参考になる)
1. Marginalizeする変数を全て含んだ誤差関数?′を展開
– ? や bに関しては前ページで定義したもの.
(15)
[6] 岡谷貴之, et al. バンドルアジャストメント. 研究報告コンピュータビジョンとイメージメディア (CVIM), 2009, 2009.37: 1-16.
22
3. Windowベースの最適化
2. 式(15)の右辺を最小化するので, 微分して0を取ると
– この時, ?がMarginalizeする変数ブロック
3. Schurの補行列によって?ブロックのみを取り出して
4. 最終的に?ブロックのみの誤差関数は以下となり, ?photoに
足し合わせることで?ブロックの変数のみ最適化される
?? = ?′ ? (16)
(17,18)
(19)
2. DSOのFront-End部分の解説
24
Front-Endの概要
大きく分けて以下のアルゴリズムで構成される
? ? ?????の以下の構成要素の決定(outlier, occlusionの決定)
– フレーム番号の集合?
– フレーム?上の全ての点集合??
– 点?が観測されたフレーム集合obs(?)
? ? ?????の計算に用いる, 新しいパラメータに対する初期化
– 近似のため, 画像?の線形化は1-2pixel半径の間だけ有効に
? 点とフレームに関するMarginalizationをいつ行うか?の決定
indirectな手法におけるKF detectorやRANSACによる初期化手順関連
のいろいろな部分を書き換えて達成される(今回は単眼を想定)
(8)
25
1. Frameの操作手順
1. Frame追跡の初期化
– 常に最大??(= 7)個のKFを保持(参照フレーム)
– 新しいKFが作成されると, 参照フレーム中の全ての点が投影+僅
かに拡張され, semi-denseな深さマップが作られる
– 新しいFrameはこれらのKFだけを参照してTracking.
(Multi-scale Image Pyramid + 定速度モデル)
26
1. Frameの操作手順
– RMSEが前フレームの2倍になった場合には失敗と見なし, 最大
27の異なる方向で小さく回転を加えてrecovery-trackingをする
? Pyramid levelが一番高い(画質が粗い)スケールでのみ行う
? 1試行に約0.5msかかる
? この手順はほとんど起こらないし(cameraをぶん回した時),
IMUを使えば不要になると言っている
2. KFの作成
– ORB-SLAMと同様にできるだけ多くのKFを取って(5~10 KF/s),
後でMarginalizationで除去するという戦略
– 以下の基準でKFを採用する
1. 新しいKFは見える範囲で作成
– Mean square optical flowを計算 (最新KFとFrame間)
2. カメラの並進運動でocclusionができた場合
– Mean flowを計算 (? ?
′
は? = ?3×3として計算した点)
3. カメラの露光時間が急激に変化した時
– 2フレーム間の輝度パラメータで計算
27
1. Frameの操作手順
– 以上での計算結果の値から以下の不等式を満たす場合にKFが作
成される. (?kfの値でKFの数を調節できる)
(??, ???
, ? ?は相対的な重み, デフォルトで?kf = 1)
28
1. Frameの操作手順
3. KFに対するMarginalization
– ?1, … ? ?を時系列順のアクティブなKFとする(?1が最新)
– Hessianの疎な構造を保つため, 以下の手順に従う
1. 常に最新の2枚のKFを保持(?1と?2)
2. ?1の観測点の5%以下の点しか持たないFrameを除外する
3. ??枚以上のフレームがアクティブな場合, ?1と?2を除いた中
で距離スコア?(??)を最大化するものを除外する
– KFが良く分布するようにヒューリスティックに設計
(? ?, ? は??と??間のユークリッド距離, ?は小さい定数)
– 準最適な手法だが, 効率的にエネルギー関数を最適化できる?
29
1. Frameの操作手順
(20)
– 過去6枚のKFの一覧が以下. 黒点が既にMarginalizedされた点
– 点群全体を可視化した結果が以下. 右下が新しいKFの様子.
30
1. Frameの操作手順
31
2. Pointの操作手順
? 既存のdirectな手法ではできる限り画像を使っているが, 実時間で行
うには, 線形近似や深度三角測量は準最適化+パラメータ間の相関の
無視が必要
? 我々はデータを大幅にサンプリングし, 共同最適化を行う戦略
– データはかなり冗長であり, 単純に多くのデータポイントを使用
する利点はあまりないことが実験で分かった
– 弱テクスチャ領域, 繰り返される領域, エッジ領域などの全ての
データからサンプリングできることが強み
32
2. Pointの操作手順
1. 候補点の選択
– 空間やフレーム内で均等に分布するアクティブな??(=2000)個
の点を常に保持することを目指す.
– 具体的には以下の戦略で選ばれる.
1. 画像中で良い感じに分布している
2. 環境毎に十分高い画素勾配の強度を持つ
– Region-adaptiveな勾配の閾値を得るために画像を32 × 32に分
割し, 閾値を ? + ???と定める
( ?はブロック中の輝度勾配の絶対値の中央値, ???(= 7)は定数)
– 均一な分布のために画像を? × ?に分割し, それぞれで閾値を超
えた最大勾配の画素を選択
– 取れなかった場合, 閾値を減らすのとブロックサイズを2?,
4?にすることで調節し, 点を取得する
– Photometric修正をしていない元画像を用いる
33
2. Pointの操作手順
– 候補点を選択する様子
? 上段が元画像, 下段が2000点の候補点が選択された様子
? 1回目に選ばれた点が緑, 2回目3回目が赤, 青
? 2回目以降で画素強度が弱い, 疎な領域の点を追加している
34
2. Pointの操作手順
2. 候補点のTracking
– 候補点のTrackingは連続するフレームで, 式(4)を最小化しなが
らエピポーラ線上で離散的に探索
– 最良の一致点で深度と分散を計算し, フレーム間の探索間隔を
制限する
– 計算された深度は点がアクティブになった時の初期化に使う
– LSD-SLAMから発想を得ている
35
2. Pointの操作手順
3. 候補点のアクティブ化
– 古い点がmarginalizedされた時に, 交代で新しい候補点をアク
ティブ化するが, この時に画像で分布が均一になるように点を
選ぶ
– 全てのアクティブな点を最新のKFに投影した状態で, 残りの候
補点を投影し, その中で既存のアクティブな点との距離が最大
となるような点をアクティブ化する
– 以下は最終的に得られたアクティブな点の分布例
36
2. Pointの操作手順
? OutlierとOcclusionの検知
– 画像に含まれがちなOutlierを早く特定し, 除去する
1. 候補点のTrackingの時にエピポーラ線上を探索する時に,
絶対に最小点にならない点を永久に破棄する
– 繰り返し模様の領域ではかなり間違いを減らせる
2. 式(4)の測光誤差が閾値を超えた観測点を除外する
– 閾値はフレームの残差の中央値で連続的に調節
– 悪いフレーム(モーションブラーがある等)では閾値が高
くなり, 全ての観測点が除外される
– 良いフレームでは逆に閾値が下がって取りやすくなる
Results
38
Results
? 用いたデータセット
– TUM-monoVO dataset : 屋内および屋外の数十の異なる環境
で記録された105分のビデオを含む、50本の測光較正済映像
? Alignment誤差 (?align)で評価(Loop Close GTを含む)
– EuRoC MAV dataset : 3つの異なる室内環境で記録された19
分のビデオからなる11本のステレオ映像
? 測光較正または露光時間は利用できない(? ? = ? ? = 0)
? 並進RMSEである絶対軌跡誤差(?ate)で評価
? 最初の方は不安定なのでトリミング
– ICL-NUIM dataset : 2つの室内環境から4.5分のビデオを含む
8本のレイトレース映像
? 測光画像補正は不要であり, 全ての露光時間を? = 1と設定
? 絶対軌跡誤差(?ate)で評価
39
Results
? TUM-monoVO datasetの例
– DSOの深度推定結果を重ね合わせた単眼映像の一例
– 105分の映像(190,000 frames)
40
Results
? 評価の方法
– 全ての映像列を順方向, 逆方向それぞれ5回ずつ計10回実験
? TUM-monoVO datasetは500回、EuRoC MAV datasetは2
20回、ICR-NUIM datasetは80回実験
– ORB-SLAMでは映像を20%の速度で再生しているが、DSOはシ
ングルスレッドで実行するので実時間よりも4倍かかる
? リアルタイムと同じパラメータで評価
– 結果は累積エラー(dataset全体でエラー値の累積和)で評価
– LSD-SLAMとSVOは途中で失敗しがちだったので, 単眼ORB-SL
AM(loop closureとrelocalization無効化)と比較
– 全部のdatasetでパラメータは同じだが, 例外としてICL-NUIM
datasetではDSOで??? = 3, ORB-SLAMのFAST閾値を2に調整
41
性能の比較
? EuRoC MAV dataset(左)とICL-NUIM dataset(右)
– RT:無理やりリアルタイムにした評価(Intel i7-4910MQ CPU)
– LQ:DSOでリアルタイムの5倍の速さでの評価
(?? = 800, ?? = 6, 解像度 420 × 320, GN法のiteration≤ 4)
– ? ??? = 10?:ORB-SLAMでLoop Closureのタイミングを調節
– EuRoCでは微妙にORBの方が良い(photo calibなし+loop可)
精度が悪い
42
性能の比較
? EuRoC MAV dataset(左)とICL-NUIM dataset(右)
– 絶対軌跡誤差?ate を映像列毎に全ての結果を可視化
? 順方向と逆方向それぞれ10回ずつ
43
性能の比較
? TUM-monoVO dataset
– Alignment誤差(?align)に加えて, 回転誤差(?r)とスケールドリフ
ト誤差(?s)を可視化
– ?sに関しては?′s = max(??, ??
?1)で評価
精度が悪い
44
性能の比較
? TUM-monoVO dataset
– Alignment誤差(?align)を全ての結果を可視化
? 順方向と逆方向それぞれ10回ずつ
45
パラメータの比較
? Photometric Calibrationの有無
– TUM-monoVO datasetで以下を徐々に無効化することで比較
1. 露光時間(?? = 1, ? ? = ? ? = 0)
2. レンズ減衰(? ? = 1)
3. 反応関数(??1
= 1. ~2.)
4. 輝度定数(? ? = ? ? = ∞, アフィン輝度修正なし)
精度が悪い
46
パラメータの比較
? 利用するデータの数(点とフレームの数)
– TUM-monoVO datasetで??と??を変化させて比較
精度が悪い
47
パラメータの比較
? 利用するデータの選び方(点選択の閾値)
– TUM-monoVO datasetで以下を比較
? 点選択の閾値?thを変化させた場合(左)
? 点としてFASTコーナーのみを利用した場合(右)
精度が悪い
48
パラメータの比較
? KFの数
– TUM-monoVO datasetでKF作成時の閾値?kfを変化させて比較
? KFの数を減らすとocclusionが多い状況でロバスト性低下
? KFの数を増え過ぎるとmarginalizationがすぐに起こり, 線
形近似された点のエラーが積み重なっていく?
精度が悪い
49
パラメータの比較
? Residual pattern
– TUM-monoVO datasetでパターン??を変化させて比較
精度が悪い
50
ノイズの比較
? Indirect vs directの間での根本的な違いはノイズの仮定方法
– Geometric Noise:特徴点検出器による?, ?方向の位置に関す
る誤差(Indirectな手法で仮定される)
– Photometric Noise:ピクセル単位での測光強度の誤差(Direc
tな手法で仮定される)
? TUM-monoVO datasetにこれらのノイズを加えて評価する
? Geometric Noise
– ?? ?, ? ?
2
の一様分布のFlow-map ??: Ω → ?2
– ORB-SLAMの方がロバスト性能が高い
51
ノイズの比較
精度が悪い
52
ノイズの比較
? Photometric Noise
– ?? ?, ? ?
2
の一様分布のblur-map ??: Ω → ?2
– DSOの方がロバスト性能が高い
精度が悪い
53
ノイズの比較
? 考察
– よくcalibrationされたデータに対してはdirectな手法はかなり強
いが, Rolling shutterや内部パラメータが不正確な時には不向き
– スマホやweb cameraなどではindirectな手法が優れている
? 解像度や光感度を重視する傾向にあるため
– Machine Vision用のカメラではdirectで優れた性能を出せる
? 幾何学的な精度を重視するため
54
3D復元の結果
? 点の推定密度の比較
– 点の数??を変化させた時の可視化結果
? ?=500
? ?=2,000
? ?=10,000
55
3D復元の結果
? 最終的な3D復元結果
– 評価に用いたdatasetそれぞれの3D復元結果を可視化
56
まとめ
? リアルタイムで動作可能なDirectでsparseな手法を提示
– Direct:コーナーだけでない全ての点を利用できる
– Sparse:全てのモデルパラメータを効率的に共同最適化
? 既存の3つのDatasetで評価すると既存のindirectな手法に勝った
1. より多くのデータを使用するだけでは追跡精度は上がらず
2. コーナーのみでなく全ての点の使用で正確性が大幅に向上
3. Photometric Calibrationを組み込むことで性能が向上
? Directな手法では測光誤差に対して強いので, Machine Vision用の
カメラを使えば優れた性能を出せる
– 一般のカメラやWeb cameraではindirectな手法の方が強い
? 今回はVOだが, BAやincremental smoothing & mapping等の最適
化ライブラリと統合できる
57
参考文献
? J. Engel, V. Koltun, D. Cremers. Direct sparse odometry. IEEE Transactions on
Pattern Analysis and Machine Intelligence, 2017.
- 本論文
? J. Engel, V. Usenko, D. Cremers. A Photometrically Calibrated Benchmark For
Monocular Visual Odometry, In arXiv:1607.02555, 2016.
- Photometric Calibrationの詳細(本スライド引用[1])
? E. Ethan. Gauss-Newton / Levenberg-Marquardt optimization. 2013.
- Gauss-Newton法の説明資料(本スライド引用[5])
? B. Jose-Luis. A tutorial on se (3) transformation parameterizations and on-m
anifold optimization. University of Malaga, 2010.
- CVにおけるLie代数の説明資料(本スライド引用[3])
? 岡谷貴之, et al. バンドルアジャストメント. 研究報告コンピュータビジョンとイ
メージメディア (CVIM), 2009, 2009.37: 1-16.
- BAの最適化に関する入門資料(本スライド引用[6])
? B. Simon, I. MATTHEWS. Lucas-Kanade 20 Years On: A Unifying Framewor
k. International journal of computer vision, 2004, 56.3: 221-255.
- DirectなSLAMの最適化に使われるLucas-Kanade法の説明資料(Gauss-Ne
wton法, Levenberg-Marquardt法の部分が参考になった)

More Related Content

Direct Sparse Odometryの解説

  • 1. Direct Sparse Odometry 東京大学 相澤山崎研究室 Qoncept Internship 2018/01/13 B4 金子 真也
  • 2. 1 What is this? ? 現在, 株式会社Qoncept(http://qoncept.jp/)でのInternshipに参 加しており, その成果の一つとして作成した資料です. ? 近年VOとしてかなり精度が高いと話題のDirect Sparse Odometry (https://vision.in.tum.de/research/vslam/dso)の論文を翻訳し まとめました. ? DSOに関する日本語の文献は現在かなり少ないので, 参考になると 思い公開しました. ? 私自身, 勉強中の身で理解が甘い箇所が多々あると思うので, 何かコ メント等あれば気軽にお願いします. ? 本スライド中の数式番号は元論文に対応した番号を付けています (違う論文の数式の場合は番号に引用を付けています)
  • 5. 4 Abstract ? SLAMやVOは特徴点ベース(indirect)の手法が長い間主流だったが, 近年はdirectでdenseな手法が人気。 ? Direct vs Indirect, Dense vs Sparseの2軸で方法を分類できる ? 本論文はDirect + Sparseという部分の方法を提案する 手法 Direct Indirect Sparse DSO(本手法) monoSLAM(2007) PTAM(2007) ORB-SLAM(2015) Dense/ Semi-Dense DTAM(2011) LSD-SLAM(2014) 3D geometry Estimation ...
  • 6. 5 Motivation ? Direct – 特徴点ベース(Indirect)の手法の利点としては画像中の幾何学的 歪みに対して頑強性を持つ – 一方, Directな手法では点がそれ自身認識する必要がないため, より細かい幾何学表現が可能 + 輝度の微弱な変化を含めたデー タ全体からサンプリングできるのでテクスチャがまばらな環境 でも頑強な性能を持つ ? Sparse – Sparseな場合にはgeo-geoが対角行列(青)なので, Schur補元を 使って簡単にBAができる – 一方, Directな場合にはgeo-geo の相関関係が生じるため(橙), 上 の方法では足りずBAが難しい (工夫が必要)
  • 7. 6 Contribution ? 全てのモデルパラメータの完全尤度の最適化は一般的にDirectな手 法で行われているため, Direct + Sparseな手法を提案 – Cameraの位置, 内部パラメータ, および幾何学パラメータ等 ? 最適化はsliding windowベースで行い, 古いカメラの位置は除外 ? 既存の手法と異なり, カメラのphotometric calibrationを十分に 活用することで正確さと頑強性を向上させる ? CPUベースの実装であり, かつLSD-SLAM[1]と同じ密度のモデルを 作りながら, 既存の手法を上回る精度と頑強性 + 5倍の速さ [1] J. Engel, T. Schops, and D. Cremers. LSD-SLAM: Largescale direct monocular SLAM. In European Conference on Computer Vision (E CCV), 2014.
  • 9. 8 Method 以下の手順で解説する 1. Direct-Sparse Modelの解説 1. Camera Calibration Geometric Calibration + Photometric Calibration 2. Modelの定式化 3. Windowベースの最適化 2. DSOのFront-End部分の解説 1. Frameの操作手順 2. Pointの操作手順
  • 11. 10 1. Camera Calibration ? Directな手法ではこの部分がかなり大事 – Indirectな手法では特徴抽出器?記述子は測光の変動に頑強性を 持つのでこの操作の大部分は無視することができる – Geometric CalibrationとPhotometric Calibrationの2種類で モデル化する ? Geometric Calibration – よく知られたピンホールカメラモデル – 3D点 ?, ?, ? ∈ ?3 から画像点 ? ?, ? ? ∈ Ωへ (投影関数であり, Π ? ∶ ?3 → Ω と表記) (1)[1] [1] J. Engel, V. Usenko, D. Cremers. A Photometrically Calibrated Benchmark For Monocular Visual Odometry, In arXiv:1607.02555, 2016.
  • 12. 11 1. Camera Calibration – 今回は歪みあり画像点 ? ?, ? ? から歪みなし画像点 ? ?, ? ? へ変換 – この点を三次元へ変換する際には以下の変換を行う (逆投影関数であり, Π ? ?1 ∶ ? × Ω → ?3 と表記) – 今回のcalibrationはPTAM[2]の実装を使い,チェックボードを用 いることで [??, ??, ? ?, ? ?, ?]を推定 [1] J. Engel, V. Usenko, D. Cremers. A Photometrically Calibrated Benchmark For Monocular Visual Odometry, In arXiv:1607.02555, 2016. [2] G. Klein and D. Murray. Parallel tracking and mapping for small AR workspaces. In International Symposium on Mixed and Augmented Reality (ISMAR), 2007. (2,3) [1]
  • 13. 12 ? Photometric Calibration – 非線形反応関数? + レンズ減衰?でモデル化 – フレーム?において, これらを組み合わせたモデルは以下で定義 ??は放射照度, ??は観測されたピクセル強度, ??は露光時間 – フレーム??を測光修正し, 修正フレーム?′?を得るには上の式から 反応関数? レンズ減衰? 露光時間? (2) (3) 1. Camera Calibration
  • 14. 13 2. Modelの定式化 ? 参照フレーム??上の点? ∈ Ω?が, 対象のフレーム??で観測された時の 測光誤差を定義 – ピクセル近傍のパターン??の重み付きSSDにより計算 ? モーションブラーに頑強に ? フレーム??, ??間の測光誤差 – ??は近傍パターン, ??, ??は露光時間, ? ?はHuberノルム – ?′は逆深度? ?による?の投影点 パターン??の例 参照フレーム?? (位置??) 対象フレーム?? (位置??) ? ? ? ?′ 深度1/? ? 逆投影関数 Π ? ?1 投影関数 Π ? :相対的なカメラの動き (4) (5,6)
  • 15. 14 2. Modelの定式化 – 露光時間が未知の場合のためにもアフィン輝度変換関数として, ??? ?(?? ? ??)を含めている – Huber損失に加えて, 画素勾配に依存した重み? ?を定義 ? 勾配が高いピクセルに関しては重み小に(ノイズを抑える) – まとめると測光誤差? ??は以下の要素に依存している 1. 点の逆深度値? ? 2. カメラの内部パラメータ? 3. フレームの位置??, ?? 4. 輝度変換関数のパラメータ??, ??, ??, ?? (7)
  • 16. 15 2. Modelの定式化 ? 全体の測光誤差 – 全てのフレーム番号の集合?において, ?番目のフレーム – フレーム?上の全ての点集合??の中で点? – 点?が観測されたフレーム集合obs(?)の中で, ?番目のフレーム ? 古典的な再投影誤差との違いは1枚だけでなく, それぞれの項が2枚 のフレームに依存されていること ? KF毎の測光誤差の依存関係グラフの例 は右のようになる (8)
  • 17. 16 2. Modelの定式化 ? 点の持つパラメータ数に関して – Directな手法では点の持つパラメータ数を抑えられる ? 点利用の一貫性 – 今回は観測点をひたすら何度も使い, 使わない点は全く使わない ? 画像から点を取得する際に重複を許しているため – 空間内に点を分布させ, テクスチャが少ないシーンでもうまく推 定できるようにする 手法 点の次元数 理由 Direct 1 (depth) 逆深度値の推定のみ Indirect 3 (X,Y,Z) コーナー位置の推定(特徴点抽出) + 深さの推定
  • 18. 17 3. Windowベースの最適化 ? 式(8)をsliding windowでGauss-Newton法を使うことで最適化 – 速度と柔軟さで良い性能を持つ ? [定義] 表記としてLie代数 ?? 3 とLie群 SE(3)を用いる(詳細は[3]) – パラメータ ? ∈ ?? 3 ? × ? ? とその行列表記 ? ∈ SE 3 ? × ? ? 互いの空間の写像は exp: ?? 3 ? SE 3 , log: SE(3) ? ??(3) – 演算子?: ?? 3 × SE(3) → SE(3) 直接パラメータから行列表記を更新する演算子 ? = ? ? ?0 ≡ ? ? ? ?0 ? 接ベクトル空間(パラメータ空間)を動かし最適化 – Gauss-Newton法で?ずつ動かす [3] B. Jose-Luis. A tutorial on se (3) transformation parameterizations and on-manifold optimization. University of Malaga, 2010.
  • 19. 18 3. Windowベースの最適化 ? 今回最適化したいのは式(8)だが, 総和でなく残差ベクトル?として 考えるっぽい?(論文の表記から見る感じ) ? 残差ベクトル?の要素??の定義 – 各画素は ?? = 8として誤差を計算 – 今回, 最適化すべきパラメータはLie代数?? 3 を使って定義 (?を動かすことで最適化パラメータも動かす) (11)
  • 20. 19 3. Windowベースの最適化 ? Jacob行列? ?の定義 – Gauss-Newton法において?を動かす方向(勾配を降りる)となる – Jacob行列は?geo = ??, ??, ?, ? , ?photo = (??, ??, ??, ??)で分割 – これにより以下2つの近似を行うことができる ? First Estimate Jacobians [4]による安定性の確保? – ?geo, ?photoは?に対してsmoothな空間になっている ? ?geoは??全体で等しくなるので中央画素だけ計算する(削減) (12) (13) [4] G. P. Huang, A. I. Mourikis, and S. I. Roumeliotis. A first-estimates Jacobian EKF for improving SLAM consistency. In International Symposium on Experimental Robotics, 2008. 6
  • 21. 20 3. Windowベースの最適化 ? Gauss-Newton法による最適化 1. パラメータ?の更新(何をやっているかは[5]が参考になる) 1. First Estimate Jacobiansにより? = 0からスタート 2. 式(11),式(12)からパラメータ?における以下の要素を計算 3. 上式から?から勾配を降りる幅?を計算 4. パラメータ?を更新する (式(12)を ? + ? ? ?0 ? ? ? (? ? ?0)にした場合は次式) 2. 行列表記?0の更新 上の1iterationが終わったら, Marginalizationの項でない変数 を更新し, ? = 0からスタートできるようにする (10) (14) [5] E. Ethan. Gauss-Newton / Levenberg-Marquardt optimization. 2013.
  • 22. 21 3. Windowベースの最適化 ? Marginalizationの方法 – 変数が増加し過ぎるとヤバいのでHessianの疎な構造に影響を与 える古い変数を除外する – フレーム?を除外する時にはまず最新の2枚のKFで観測されない 点を除外してから, 残りの点を除外する – 手順としては以下(何をやっているかは[6]が参考になる) 1. Marginalizeする変数を全て含んだ誤差関数?′を展開 – ? や bに関しては前ページで定義したもの. (15) [6] 岡谷貴之, et al. バンドルアジャストメント. 研究報告コンピュータビジョンとイメージメディア (CVIM), 2009, 2009.37: 1-16.
  • 23. 22 3. Windowベースの最適化 2. 式(15)の右辺を最小化するので, 微分して0を取ると – この時, ?がMarginalizeする変数ブロック 3. Schurの補行列によって?ブロックのみを取り出して 4. 最終的に?ブロックのみの誤差関数は以下となり, ?photoに 足し合わせることで?ブロックの変数のみ最適化される ?? = ?′ ? (16) (17,18) (19)
  • 25. 24 Front-Endの概要 大きく分けて以下のアルゴリズムで構成される ? ? ?????の以下の構成要素の決定(outlier, occlusionの決定) – フレーム番号の集合? – フレーム?上の全ての点集合?? – 点?が観測されたフレーム集合obs(?) ? ? ?????の計算に用いる, 新しいパラメータに対する初期化 – 近似のため, 画像?の線形化は1-2pixel半径の間だけ有効に ? 点とフレームに関するMarginalizationをいつ行うか?の決定 indirectな手法におけるKF detectorやRANSACによる初期化手順関連 のいろいろな部分を書き換えて達成される(今回は単眼を想定) (8)
  • 26. 25 1. Frameの操作手順 1. Frame追跡の初期化 – 常に最大??(= 7)個のKFを保持(参照フレーム) – 新しいKFが作成されると, 参照フレーム中の全ての点が投影+僅 かに拡張され, semi-denseな深さマップが作られる – 新しいFrameはこれらのKFだけを参照してTracking. (Multi-scale Image Pyramid + 定速度モデル)
  • 27. 26 1. Frameの操作手順 – RMSEが前フレームの2倍になった場合には失敗と見なし, 最大 27の異なる方向で小さく回転を加えてrecovery-trackingをする ? Pyramid levelが一番高い(画質が粗い)スケールでのみ行う ? 1試行に約0.5msかかる ? この手順はほとんど起こらないし(cameraをぶん回した時), IMUを使えば不要になると言っている
  • 28. 2. KFの作成 – ORB-SLAMと同様にできるだけ多くのKFを取って(5~10 KF/s), 後でMarginalizationで除去するという戦略 – 以下の基準でKFを採用する 1. 新しいKFは見える範囲で作成 – Mean square optical flowを計算 (最新KFとFrame間) 2. カメラの並進運動でocclusionができた場合 – Mean flowを計算 (? ? ′ は? = ?3×3として計算した点) 3. カメラの露光時間が急激に変化した時 – 2フレーム間の輝度パラメータで計算 27 1. Frameの操作手順
  • 30. 3. KFに対するMarginalization – ?1, … ? ?を時系列順のアクティブなKFとする(?1が最新) – Hessianの疎な構造を保つため, 以下の手順に従う 1. 常に最新の2枚のKFを保持(?1と?2) 2. ?1の観測点の5%以下の点しか持たないFrameを除外する 3. ??枚以上のフレームがアクティブな場合, ?1と?2を除いた中 で距離スコア?(??)を最大化するものを除外する – KFが良く分布するようにヒューリスティックに設計 (? ?, ? は??と??間のユークリッド距離, ?は小さい定数) – 準最適な手法だが, 効率的にエネルギー関数を最適化できる? 29 1. Frameの操作手順 (20)
  • 31. – 過去6枚のKFの一覧が以下. 黒点が既にMarginalizedされた点 – 点群全体を可視化した結果が以下. 右下が新しいKFの様子. 30 1. Frameの操作手順
  • 32. 31 2. Pointの操作手順 ? 既存のdirectな手法ではできる限り画像を使っているが, 実時間で行 うには, 線形近似や深度三角測量は準最適化+パラメータ間の相関の 無視が必要 ? 我々はデータを大幅にサンプリングし, 共同最適化を行う戦略 – データはかなり冗長であり, 単純に多くのデータポイントを使用 する利点はあまりないことが実験で分かった – 弱テクスチャ領域, 繰り返される領域, エッジ領域などの全ての データからサンプリングできることが強み
  • 33. 32 2. Pointの操作手順 1. 候補点の選択 – 空間やフレーム内で均等に分布するアクティブな??(=2000)個 の点を常に保持することを目指す. – 具体的には以下の戦略で選ばれる. 1. 画像中で良い感じに分布している 2. 環境毎に十分高い画素勾配の強度を持つ – Region-adaptiveな勾配の閾値を得るために画像を32 × 32に分 割し, 閾値を ? + ???と定める ( ?はブロック中の輝度勾配の絶対値の中央値, ???(= 7)は定数) – 均一な分布のために画像を? × ?に分割し, それぞれで閾値を超 えた最大勾配の画素を選択 – 取れなかった場合, 閾値を減らすのとブロックサイズを2?, 4?にすることで調節し, 点を取得する – Photometric修正をしていない元画像を用いる
  • 34. 33 2. Pointの操作手順 – 候補点を選択する様子 ? 上段が元画像, 下段が2000点の候補点が選択された様子 ? 1回目に選ばれた点が緑, 2回目3回目が赤, 青 ? 2回目以降で画素強度が弱い, 疎な領域の点を追加している
  • 35. 34 2. Pointの操作手順 2. 候補点のTracking – 候補点のTrackingは連続するフレームで, 式(4)を最小化しなが らエピポーラ線上で離散的に探索 – 最良の一致点で深度と分散を計算し, フレーム間の探索間隔を 制限する – 計算された深度は点がアクティブになった時の初期化に使う – LSD-SLAMから発想を得ている
  • 36. 35 2. Pointの操作手順 3. 候補点のアクティブ化 – 古い点がmarginalizedされた時に, 交代で新しい候補点をアク ティブ化するが, この時に画像で分布が均一になるように点を 選ぶ – 全てのアクティブな点を最新のKFに投影した状態で, 残りの候 補点を投影し, その中で既存のアクティブな点との距離が最大 となるような点をアクティブ化する – 以下は最終的に得られたアクティブな点の分布例
  • 37. 36 2. Pointの操作手順 ? OutlierとOcclusionの検知 – 画像に含まれがちなOutlierを早く特定し, 除去する 1. 候補点のTrackingの時にエピポーラ線上を探索する時に, 絶対に最小点にならない点を永久に破棄する – 繰り返し模様の領域ではかなり間違いを減らせる 2. 式(4)の測光誤差が閾値を超えた観測点を除外する – 閾値はフレームの残差の中央値で連続的に調節 – 悪いフレーム(モーションブラーがある等)では閾値が高 くなり, 全ての観測点が除外される – 良いフレームでは逆に閾値が下がって取りやすくなる
  • 39. 38 Results ? 用いたデータセット – TUM-monoVO dataset : 屋内および屋外の数十の異なる環境 で記録された105分のビデオを含む、50本の測光較正済映像 ? Alignment誤差 (?align)で評価(Loop Close GTを含む) – EuRoC MAV dataset : 3つの異なる室内環境で記録された19 分のビデオからなる11本のステレオ映像 ? 測光較正または露光時間は利用できない(? ? = ? ? = 0) ? 並進RMSEである絶対軌跡誤差(?ate)で評価 ? 最初の方は不安定なのでトリミング – ICL-NUIM dataset : 2つの室内環境から4.5分のビデオを含む 8本のレイトレース映像 ? 測光画像補正は不要であり, 全ての露光時間を? = 1と設定 ? 絶対軌跡誤差(?ate)で評価
  • 40. 39 Results ? TUM-monoVO datasetの例 – DSOの深度推定結果を重ね合わせた単眼映像の一例 – 105分の映像(190,000 frames)
  • 41. 40 Results ? 評価の方法 – 全ての映像列を順方向, 逆方向それぞれ5回ずつ計10回実験 ? TUM-monoVO datasetは500回、EuRoC MAV datasetは2 20回、ICR-NUIM datasetは80回実験 – ORB-SLAMでは映像を20%の速度で再生しているが、DSOはシ ングルスレッドで実行するので実時間よりも4倍かかる ? リアルタイムと同じパラメータで評価 – 結果は累積エラー(dataset全体でエラー値の累積和)で評価 – LSD-SLAMとSVOは途中で失敗しがちだったので, 単眼ORB-SL AM(loop closureとrelocalization無効化)と比較 – 全部のdatasetでパラメータは同じだが, 例外としてICL-NUIM datasetではDSOで??? = 3, ORB-SLAMのFAST閾値を2に調整
  • 42. 41 性能の比較 ? EuRoC MAV dataset(左)とICL-NUIM dataset(右) – RT:無理やりリアルタイムにした評価(Intel i7-4910MQ CPU) – LQ:DSOでリアルタイムの5倍の速さでの評価 (?? = 800, ?? = 6, 解像度 420 × 320, GN法のiteration≤ 4) – ? ??? = 10?:ORB-SLAMでLoop Closureのタイミングを調節 – EuRoCでは微妙にORBの方が良い(photo calibなし+loop可) 精度が悪い
  • 43. 42 性能の比較 ? EuRoC MAV dataset(左)とICL-NUIM dataset(右) – 絶対軌跡誤差?ate を映像列毎に全ての結果を可視化 ? 順方向と逆方向それぞれ10回ずつ
  • 44. 43 性能の比較 ? TUM-monoVO dataset – Alignment誤差(?align)に加えて, 回転誤差(?r)とスケールドリフ ト誤差(?s)を可視化 – ?sに関しては?′s = max(??, ?? ?1)で評価 精度が悪い
  • 45. 44 性能の比較 ? TUM-monoVO dataset – Alignment誤差(?align)を全ての結果を可視化 ? 順方向と逆方向それぞれ10回ずつ
  • 46. 45 パラメータの比較 ? Photometric Calibrationの有無 – TUM-monoVO datasetで以下を徐々に無効化することで比較 1. 露光時間(?? = 1, ? ? = ? ? = 0) 2. レンズ減衰(? ? = 1) 3. 反応関数(??1 = 1. ~2.) 4. 輝度定数(? ? = ? ? = ∞, アフィン輝度修正なし) 精度が悪い
  • 48. 47 パラメータの比較 ? 利用するデータの選び方(点選択の閾値) – TUM-monoVO datasetで以下を比較 ? 点選択の閾値?thを変化させた場合(左) ? 点としてFASTコーナーのみを利用した場合(右) 精度が悪い
  • 49. 48 パラメータの比較 ? KFの数 – TUM-monoVO datasetでKF作成時の閾値?kfを変化させて比較 ? KFの数を減らすとocclusionが多い状況でロバスト性低下 ? KFの数を増え過ぎるとmarginalizationがすぐに起こり, 線 形近似された点のエラーが積み重なっていく? 精度が悪い
  • 50. 49 パラメータの比較 ? Residual pattern – TUM-monoVO datasetでパターン??を変化させて比較 精度が悪い
  • 51. 50 ノイズの比較 ? Indirect vs directの間での根本的な違いはノイズの仮定方法 – Geometric Noise:特徴点検出器による?, ?方向の位置に関す る誤差(Indirectな手法で仮定される) – Photometric Noise:ピクセル単位での測光強度の誤差(Direc tな手法で仮定される) ? TUM-monoVO datasetにこれらのノイズを加えて評価する
  • 52. ? Geometric Noise – ?? ?, ? ? 2 の一様分布のFlow-map ??: Ω → ?2 – ORB-SLAMの方がロバスト性能が高い 51 ノイズの比較 精度が悪い
  • 53. 52 ノイズの比較 ? Photometric Noise – ?? ?, ? ? 2 の一様分布のblur-map ??: Ω → ?2 – DSOの方がロバスト性能が高い 精度が悪い
  • 54. 53 ノイズの比較 ? 考察 – よくcalibrationされたデータに対してはdirectな手法はかなり強 いが, Rolling shutterや内部パラメータが不正確な時には不向き – スマホやweb cameraなどではindirectな手法が優れている ? 解像度や光感度を重視する傾向にあるため – Machine Vision用のカメラではdirectで優れた性能を出せる ? 幾何学的な精度を重視するため
  • 57. 56 まとめ ? リアルタイムで動作可能なDirectでsparseな手法を提示 – Direct:コーナーだけでない全ての点を利用できる – Sparse:全てのモデルパラメータを効率的に共同最適化 ? 既存の3つのDatasetで評価すると既存のindirectな手法に勝った 1. より多くのデータを使用するだけでは追跡精度は上がらず 2. コーナーのみでなく全ての点の使用で正確性が大幅に向上 3. Photometric Calibrationを組み込むことで性能が向上 ? Directな手法では測光誤差に対して強いので, Machine Vision用の カメラを使えば優れた性能を出せる – 一般のカメラやWeb cameraではindirectな手法の方が強い ? 今回はVOだが, BAやincremental smoothing & mapping等の最適 化ライブラリと統合できる
  • 58. 57 参考文献 ? J. Engel, V. Koltun, D. Cremers. Direct sparse odometry. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017. - 本論文 ? J. Engel, V. Usenko, D. Cremers. A Photometrically Calibrated Benchmark For Monocular Visual Odometry, In arXiv:1607.02555, 2016. - Photometric Calibrationの詳細(本スライド引用[1]) ? E. Ethan. Gauss-Newton / Levenberg-Marquardt optimization. 2013. - Gauss-Newton法の説明資料(本スライド引用[5]) ? B. Jose-Luis. A tutorial on se (3) transformation parameterizations and on-m anifold optimization. University of Malaga, 2010. - CVにおけるLie代数の説明資料(本スライド引用[3]) ? 岡谷貴之, et al. バンドルアジャストメント. 研究報告コンピュータビジョンとイ メージメディア (CVIM), 2009, 2009.37: 1-16. - BAの最適化に関する入門資料(本スライド引用[6]) ? B. Simon, I. MATTHEWS. Lucas-Kanade 20 Years On: A Unifying Framewor k. International journal of computer vision, 2004, 56.3: 221-255. - DirectなSLAMの最適化に使われるLucas-Kanade法の説明資料(Gauss-Ne wton法, Levenberg-Marquardt法の部分が参考になった)