26
2017 / 6/ 5 SLAM 勉強会 3 LSD-SLAM: Large-Scale Direct Monocular SLAM

SLAM勉強会(3) LSD-SLAM

Embed Size (px)

Citation preview

2017 / 6/ 5

SLAM 勉強会 3LSD-SLAM: Large-Scale Direct Monocular SLAM

自己紹介

石見 和也 (Iwami Kazuya)

東京大学大学院 学際情報学府 相澤研 M2

研究テーマは 単眼 Visual SLAM(や一時期小型ドローン)

Deep learningとSLAMの融合分野で面白い研究をしたいなあと模索中

2

LSD-SLAMとは

LSD-SLAM: Large-Scale Direct Monocular SLAM

Jakob Engel(ミュンヘン工科大)らの有名単眼SLAM論文

ECCV 2014

Directベースで大規模なVisual SLAMを実現

公式HP http://vision.in.tum.de/research/vslam/lsdslam

コード https://github.com/tum-vision/lsd_slam

動画 https://www.youtube.com/watch?v=GnuQzP3gty4

以下日本語資料

日本語訳 http://daily-tech.hatenablog.com/entry/2016/04/29/145737

既存のECCV読み会資料 https://www.slideshare.net/satoshibfujimoto/2cv-lsdslam

3

Monocular SLAMのおさらい

4

Tracking - マップにおける新規フレームのカメラ姿勢を推定

Mapping - キーフレーム(+マップ中の特徴点)の位置関係を最適化

キーフレームを選出

キーフレーム間の位置関係を最適化

キーフレーム

キーフレーム以外のフレーム

where?

復元されたマップ(キーフレーム+周囲の環境の点群)

TrackingとMappingを同時に行うことで自己位置及び周辺環境を復元

Monocular SLAMのおさらい

5

Tracking - マップにおける新規フレームのカメラ姿勢を推定

どのように推定するか

Mapping - キーフレーム(+マップ中の特徴点)の位置関係を最適化

キーフレームをどのように選出するか

復元したマップをどのように改善するか

その一部としてLoop Closureをどのように実現するか

Monocular SLAMのおさらい

6

Tracking - マップにおける新規フレームの姿勢を推定

どのように推定するか

Mapping - キーフレーム(+マップ中の特徴点)の位置関係を最適化

キーフレームをどのように選出するか

復元したマップをどのように改善するか

その一部としてLoop Closureをどのように実現するか

特徴点ベースのSLAM(PTAM, ORB-SLAM)では

特徴点を利用し,再投影誤差を最小化

大きく動いた場合等の複雑な判断基準を採用

局所及び全体のバンドル調整

BoWで類似画像検索し幾何検証→ 特徴点ベースのHorn Methodとポーズグラフ最適化

(ORB-SLAMの場合)

Monocular SLAMのおさらい

7

Tracking - マップにおける新規フレームの姿勢を推定

どのように推定するか

Mapping - キーフレーム(+マップ中の特徴点)の位置関係を最適化

キーフレームをどのように選出するか

復元したマップをどのように改善するか

その一部としてLoop Closureをどのように実現するか

DirectベースなLSD-SLAMでは

輝度勾配の大きいより密な点を利用 輝度値の差を最小化 = Direct

単に大きく動いた場合キーフレームに選出

Loop Closure以外では改善しない

特徴点を利用しない、Directベースな手法を提案

概要

8

画像が入力される度に,その画像のカメラ姿勢を推定

新規キーフレームを作成・または現在のキーフレームを改善

ループを検出しマップ全体を最適化

Tracking

9

画像が入力される度に,その画像のカメラ姿勢を推定

新規キーフレームを作成・または現在のキーフレームを改善

ループを検出しマップ全体を最適化

Direct Image Alignment

10

photometric errorを最小化して2フレーム間の相対3D姿勢 𝜉 を推定する手法

前フレーム𝐾𝑟𝑒𝑓の奥行きマップ 𝐷𝑟𝑒𝑓 が既知の場合

𝐾𝑟𝑒𝑓上のある点𝑝𝑖が現フレーム𝐾上で対応する点 は 𝜉 の関数として表される

十分に2フレーム間の移動が少なければ,同じ場所を観測している点は同じ輝度値という仮定を置く

→ 各点𝑝𝑖での輝度値の差が最小になるような 𝜉 を推定する

ここでは輝度勾配大きい点のみ扱う

輝度値の誤差

Tracking

11

LSD-SLAMではどのようにTrackingを行っているのか?

キーフレーム𝐾𝑖から入力フレーム𝐾𝑗への相対3D姿勢 𝜉𝑗𝑖 ∈ 𝑠𝑒(3)を求める

そのために推定された奥行きの不確かさを考慮したphotometric errorを最小化

monocular SLAMでは,推定された奥行きの不確かさがピクセルごとに大きく異なるため

(RGB-Dデータでは奥行きの不確かさがほぼ一定)

奥行きの逆数の分散の例

Tracking

12

奥行きの不確かさを考慮したphotometric error最小化

キーフレーム𝐾𝑖の画像 𝐼𝑖,奥行きマップ 𝐷𝑖 とその逆数の分散 𝑉𝑖は既知 以下の関数𝐸𝑝の最小化問題をガウスニュートン法で解く

※論文の3.3 Tracking New Frames: Direct se(3) Image Alignmentを参照

一般的なphotometric error

奥行きの不確かさから推定されるphotometric errorの分散(誤差伝播の法則より求まる)

Huber損失関数を用いる

Tracking

13

誤差伝播の法則

ある関数 y = f x1, x2, … について,誤差が正規分布に従う場合

𝜎𝑦2 =

𝜕𝑓

𝜕𝑥1𝜎𝑥1

2

+𝜕𝑓

𝜕𝑥2𝜎𝑥2

2

+⋯

が成立する

※x1, x2, …は無相関であるとする

Depth Map Estimation

14

画像が入力される度に,その画像のカメラ姿勢を推定

新規キーフレームを作成・または現在のキーフレームを改善

ループを検出しマップ全体を最適化

Depth Map Estimation

15

キーフレームの選出

カメラが直前のキーフレームから大きく回転または並進移動した場合、現在のフレームをキーフレームとする

以下の式で求まる値がしきい値を超えるかどうかで判断

𝜉は相対3D姿勢を表すse(3)の要素.6次元のベクトルで表される

Wは重みの対角行列 相対3D姿勢はinverse depth(奥行きの逆数)の平均が1になるよう正規化する

→ 遠距離を観測している際は疎に、近距離を撮影している際は密に選出

Depth Map Estimation

16

キーフレームの作成

奥行きマップを初期化

前回のキーフレームの奥行きを投影し反映 奥行きマップを正規化 詳細はSemi-Dense Visual Odometry for a Monocular Cameraを参照😥

以降のトラッキングでは作成したキーフレームを用いる

Depth Map Estimation

17

キーフレームの改善

キーフレームに選出されなかったフレームは、現在のキーフレームの改善に使用される

詳細はSemi-Dense Visual Odometry for a Monocular Cameraを参照😥

ステレオマッチングで新たなdepth mapを推定し、確率的に統合 奥行きマップ 𝐷𝑖 とその逆数の分散 𝑉𝑖が改善される

Depth Map Estimation

18

画像が入力される度に,その画像のカメラ姿勢を推定

新規キーフレームを作成・または現在のキーフレームを改善

ループを検出しマップ全体を最適化

Map Optimization

19

つまりLoop Closureのこと

同じ場所を観測している2画像を検出すると,ループを閉じるように全体のキーフレームの姿勢を最適化する

Map Optimization

20

ループの検出

新たなキーフレームが追加されると,位置的に近い10個のキーフレームをループが閉じうる候補とする(検索などはしていない)

ループ候補に対して双方向のトラッキング検証を行い,ループを閉じてよいか検証する

候補キーフレームに対して以下の式のeが十分に小さい場合ループを閉じる

同じ場所を観測している2画像の場合,双方向の 𝜉が正しく求まる(つまり一致する)ので𝑒は0に近づく(という理解で合っている?)

「候補フレーム→現在のフレーム相対姿勢」と「現在のフレーム→候補フレームの相対姿勢」をどちらもトラッキングして求め,それらを足し合わせる

Map Optimization

21

ループを閉じる

1. 同じ場所を観測している2キーフレーム間の3D相対相似変換 sim(3)を求める

2. ポーズグラフ最適化により全キーフレームの姿勢を最適化する

Map Optimization

22

ループを閉じる 1

ORB-SLAMでは,同じ場所を観測している2キーフレーム間の3D相対相似変換sim(3)を,特徴点ベースのHorn Methodで求める

LSD-SLAMではdirect image alignmentで求める トラッキングの際に用いたphotometric errorに,不確かさを考慮した

depth errorも追加

これにより,sim(3)におけるscaleを推定可能に

Map Optimization

23

ループを閉じる 2

ポーズグラフ最適化により全キーフレームの姿勢を最適化

ORB-SLAMと同じ手法で全キーフレームのカメラ姿勢を最適化

ゆるやかなスケールの変化を許容しつつ,前ステップで求めた正しい位置関係を他のキーフレームにも伝播させる

詳細はScale Drift-Aware Large Scale Monocular SLAMを読むべし

結果

24

[9] LSD-SLAMからMap optimization抜いたもの

[15] PTAM

[14] directなRGB-D SLAM

[7] 特徴点ベースなRGB-D SLAM

値はRMSE [cm]を表す高精度且つトラッキングも失敗していない

まとめ

25

Tracking - マップにおける新規フレームの姿勢を推定

どのように推定するか

Mapping - キーフレーム(+マップ中の特徴点)の位置関係を最適化

キーフレームをどのように選出するか

復元したマップをどのように改善するか

その一部としてLoop Closureをどのように実現するか

輝度勾配の大きいより密な点を利用奥行き推定の不確かさを考慮した輝度値の差を最小化(新規)

単に大きく動いた場合キーフレームに選出

Loop Closure以外では改善しない

位置的に周囲のキーフレームを候補にdirectベースな検証→ Direct image Alignmentとポーズグラフ最適化(新規)

感想

26

全体を追うには色々別論文を読む必要あり

高fps・global shutterのカメラを用いつつ,きちんとキャリブレーションしないと上手く動かないので,簡単便利というわけではない

特徴点ベースの手法ばかり見ていたのでdirectな手法は目から鱗

そろそろDirect Sparse Odometry読まなきゃなあ