狠狠撸

狠狠撸Share a Scribd company logo
第1回 3D勉強会@関東 (2018/05/27)
(SLAMチュートリアル大会)
論文紹介: ORB-SLAM
東京大学 相澤研究室所属
M1 金子 真也 (@syinari0123)
1
自己紹介
? 氏名
– 金子 真也 (かねこ まさや)
? 所属
– 東京大学大学院 学際情報学府 相澤研 M1
? 興味
– Visual SLAM/SfM, 深層学習
– 「乃木坂46メンバーを動画から三次元へ復元する」
(https://qiita.com/syinari0123/items/f8b8ae08a80002361855)
2
本発表の目標
? 画像から三次元復元を行うVisual SLAMの話
– 入力は「画像」, 今回は単眼カメラ画像
– リアルタイム版SfM
? Visual SLAMの代表例としてのORB-SLAM
– リアルタイムなSfMを実現する機構の大雑把な理解
? 高速化?効率化?
– 詳しい内容は論文 or 以下のメモスライド
? 「ORB-SLAMの手法解説」
(/MasayaKaneko/orbslam-84842802)
3
SfMのおさらい
? SfM (Structure from Motion)
– 問題設定
? 入力:様々な視点で撮影された画像群
? 出力:カメラ姿勢推定 + 三次元構造復元
画像群 カメラ姿勢推定 + 三次元構造復元
4
SfM vs Visual SLAM
? Visual SLAM (Simultaneous Localization and Mapping)
– リアルタイムにSfMを解く問題
? 画像が入力される度にカメラ姿勢を推定
映像 カメラ姿勢推定 + 三次元構造復元
5
SfM vs Visual SLAM
? 問題設定の違い
手法 SfM Visual SLAM
主な目的 物体の三次元構造の復元 リアルタイムなカメラ姿勢推定
データの
与え方
画像群全て使える 逐次的に画像が挿入
問題設定 正確性 >>> 速度 正確性 < 速度
結果例
6
逐次的な姿勢推定
? 逐次的なカメラ姿勢推定をどのように行うか?
? 自己位置推定と地図作成を交互に行い実現
(Simultaneous Localization and Mapping)
Tracking
Local Mapping
地図に登録する
画像を選択
地図の提供
現在のカメラ姿勢を求める
地図の作成/修正
7
逐次的な姿勢推定
? 逐次的なカメラ姿勢推定をどのように行うか?
? 自己位置推定と地図作成を交互に行い実現
(Simultaneous Localization and Mapping)
時刻 t-1
過去の
カメラの軌跡
現在時刻 t
?
地図
復元した
三次元構造
Tracking
Local Mapping
地図に登録する
画像を選択
地図の提供
現在のカメラ姿勢を求める
地図の作成/修正
8
逐次的な姿勢推定
? 逐次的なカメラ姿勢推定をどのように行うか?
? 自己位置推定と地図作成を交互に行い実現
(Simultaneous Localization and Mapping)
Tracking
Local Mapping
地図に登録する
画像を選択
地図の提供
現在のカメラ姿勢を求める
地図の作成/修正
時刻 t-1
過去の
カメラの軌跡
現在時刻 t
?
地図
復元した
三次元構造
9
逐次的な姿勢推定
? 逐次的なカメラ姿勢推定をどのように行うか?
? 自己位置推定と地図作成を交互に行い実現
(Simultaneous Localization and Mapping)
時刻 t-1
過去の
カメラの軌跡
現在時刻 t
?
地図
復元した
三次元構造
局所的な最適化
Tracking
Local Mapping
地図に登録する
画像を選択
地図の提供
現在のカメラ姿勢を求める
地図の作成/修正
10
逐次的な姿勢推定
? 逐次的なカメラ姿勢推定をどのように行うか?
? 自己位置推定と地図作成を交互に行い実現
(Simultaneous Localization and Mapping)
時刻 t-1
過去の
カメラの軌跡
現在時刻 t
地図
復元した
三次元構造
Tracking
Local Mapping
地図に登録する
画像を選択
地図の提供
現在のカメラ姿勢を求める
地図の作成/修正
? 逐次的なカメラ姿勢推定をどのように行うか?
? 自己位置推定と地図作成を交互に行い実現
(Simultaneous Localization and Mapping)
11
逐次的な姿勢推定
Tracking
Local Mapping
地図に登録する
画像を選択
地図の提供
現在のカメラ姿勢を求める
地図の作成/修正
時刻 t-1
過去の
カメラの軌跡
現在時刻 t
地図
復元した
三次元構造
? 逐次的なカメラ姿勢推定をどのように行うか?
? 自己位置推定と地図作成を交互に行い実現
(Simultaneous Localization and Mapping)
12
逐次的な姿勢推定
時刻 t-1
過去の
カメラの軌跡
現在時刻 t
地図
復元した
三次元構造
Tracking
Local Mapping
地図に登録する
画像を選択
地図の提供
現在のカメラ姿勢を求める
地図の作成/修正
13
逐次的な姿勢推定
? 逐次的なカメラ姿勢推定をどのように行うか?
? 自己位置推定と地図作成を交互に行い実現
(Simultaneous Localization and Mapping)
時刻 t-1
過去の
カメラの軌跡
地図
復元した
三次元構造
?
時刻 t
現在時刻
t+1
…
Tracking
Local Mapping
地図に登録する
画像を選択
地図の提供
現在のカメラ姿勢を求める
地図の作成/修正
14
全体的な最适化
? 逐次的な姿勢推定では局所的な最適化のみしか
行わないため, 歪みが生じる
– Loop Closingによる全体の軌跡の歪み修正
Loop Closing
歪み
15
Visual SLAM まとめ
? リアルタイムなカメラ姿勢推定の実現
– 局所的な最適化:Tracking + Local Mapping
– 全体的な最适化:Loop Closing
? 局所的な最適化だけ行う Visual Odometry (VO)
? 全体的な最适化も考慮 Visual SLAM
– Visual SLAM = VO + Loop Closing
? ORB SLAMではどのようになっているか?
16
ORB-SLAM
? 局所的な最適化 + 全体的な最适化
17
ORB-SLAM
? 局所的な最適化 + 全体的な最适化
全体的な最适化
局所的な最適化
18
1. 地図の定義1
? 構成要素
– 得られたカメラの画像????と姿勢????
– 三次元点群の復元結果 ????
? 対応する画像????のORB特徴点 ??????
? ORB特徴量 ??????
? ORB特徴点(特徴量) : FAST corner + rBRIEF descriptor
– 画像のcorner点, 回転/スケール不変な特徴量を持つ
????
????
??????
????
…
(特徴量??????)
19
1. 地図の定義2
? Covisibility Graph
– 三次元位置????は基本的には複数の画像で共有
– 共有する点の数を可視化したGraphを定義
? 効率の良い最適化 (Local Mapping/Loop Closingで利用)
? 共有点が多いnode同士のみ: Essential Graph
Covisibility Graph Essential Graphカメラの姿勢
三次元点群
点の共有度(共有する点の数)
を重みとしたedge
20
2. Tracking
[仕事1] 現在のカメラ姿勢を求める
1. 画像から特徴点抽出
2. 前の画像との点の対応を求める
3. 対応点を投影することでカメラ姿勢の最適化
画像 ?????1 画像 ????
(現在時刻)
?????1,??
?????1
?????1,??
????
????
?
地図
21
2. Tracking
[仕事1] 現在のカメラ姿勢を求める
1. 画像から特徴点抽出
2. 前の画像との点の対応を求める
3. 対応点を投影することでカメラ姿勢の最適化
画像 ?????1 画像 ????
(現在時刻)
?????1,??
?????1
?????1,??
????
????
?
地図
????,??
22
2. Tracking
[仕事1] 現在のカメラ姿勢を求める
1. 画像から特徴点抽出
2. 前の画像との点の対応を求める
3. 対応点を投影することでカメラ姿勢の最適化
画像 ?????1 画像 ????
(現在時刻)
?????1,??
?????1
?????1,??
????
????
?
地図
????,??
23
2. Tracking
[仕事1] 現在のカメラ姿勢を求める
1. 画像から特徴点抽出
2. 前の画像との点の対応を求める
3. 対応点を投影することでカメラ姿勢の最適化
画像 ?????1 画像 ????
(現在時刻)
?????1,??
?????1
?????1,??
????
????
地図
????,??
?????1,??
24
2. Tracking
[仕事1] 現在のカメラ姿勢を求める
1. 画像から特徴点抽出
2. 前の画像との点の対応を求める
3. 対応点を投影することでカメラ姿勢の最適化
画像 ?????1 画像 ????
(現在時刻)
?????1,??
?????1
?????1,??
????
????
地図
????,??
?????1,??
25
2. Tracking
[仕事1] 現在のカメラ姿勢を求める
1. 画像から特徴点抽出
2. 前の画像との点の対応を求める
3. 対応点を投影することでカメラ姿勢の最適化
[仕事2] 地図に保存するかの決定
– 毎時刻の画像を保存するとメモリ/計算量的に発散す
るため, 冗長にならないように画像を選択(緩く)
? KeyFrame (KF)
26
3. Local Mapping
[仕事1] 地図の作成
Trackingから渡された画像(KFnew)を地図に追加する
1. Covisibility Graphの更新
2. Graph上で隣接するKF群との比較で新しい点を追加
3. この範囲で点とカメラ姿勢の最適化(Local BA)
Covisibility Graph
?
27
3. Local Mapping
[仕事1] 地図の作成
Trackingから渡された画像(KFnew)を地図に追加する
1. Covisibility Graphの更新
2. Graph上で隣接するKF群との比較で新しい点を追加
3. この範囲で点とカメラ姿勢の最適化(Local BA)
Covisibility Graph更新!
28
3. Local Mapping
[仕事1] 地図の作成
Trackingから渡された画像(KFnew)を地図に追加する
1. Covisibility Graphの更新
2. Graph上で隣接するKF群との比較で新しい点を追加
3. この範囲で点とカメラ姿勢の最適化(Local BA)
Covisibility Graph
隣接するKF群
29
3. Local Mapping
[仕事1] 地図の作成
Trackingから渡された画像(KFnew)を地図に追加する
1. Covisibility Graphの更新
2. Graph上で隣接するKF群との比較で新しい点を追加
3. この範囲で点とカメラ姿勢の最適化(Local BA)
Covisibility Graph
追加!
隣接するKF群
30
3. Local Mapping
[仕事1] 地図の作成
Trackingから渡された画像(KFnew)を地図に追加する
1. Covisibility Graphの更新
2. Graph上で隣接するKF群との比較で新しい点を追加
3. この範囲で点とカメラ姿勢の最適化 (Local BA)
Covisibility Graph
Localな最適化
隣接するKF群
31
3. Local Mapping
[仕事1] 地図の作成
Trackingから渡された画像(KFnew)を地図に追加する
1. Covisibility Graphの更新
2. Graph上で隣接するKF群との比較で新しい点を追加
3. この範囲で点とカメラ姿勢の最適化(Local BA)
[仕事2] 地図の修正
– KFを監視し,冗長なKFを除外する(厳しく)
? Arrival of the fittest
32
4. Loop Closing
[仕事] Loop closingによる全体最適化
1. 地図に挿入されたKFが既に見たことがあるか?
? ORB特徴量から構成したBag of Words (BoW)
画像特徴量同士の比較
2. Loopを検知したらそれらを結ぶように最適化
? Essential Graphによるスケールを含めた最適化
?
Covisibility Graph
33
4. Loop Closing
[仕事] Loop closingによる全体最適化
1. 地図に挿入されたKFが既に見たことがあるか?
? ORB特徴量から構成したBag of Words (BoW)
画像特徴量同士の比較
2. Loopを検知したらそれらを結ぶように最適化
? Essential Graphによるスケールを含めた最適化
?
Essential Graph
34
4. Loop Closing
[仕事] Loop closingによる全体最適化
1. 地図に挿入されたKFが既に見たことがあるか?
? ORB特徴量から構成したBag of Words (BoW)
画像特徴量同士の比較
2. Loopを検知したらそれらを結ぶように最適化
? Essential Graphによるスケールを含めた最適化
Essential Graph
Loop Closed!
Sim(3) 全体最適化
35
まとめ
? Visual SLAM
– Tracking + Local Mapping + Loop Closing
? ORB-SLAM
– ORB特徴量で画像間の対応を決定し三次元復元
– Trackingが地図にすべき画像(KeyFrame)を選択,
Local Mappingがそれを地図に追加/修正する
? Covisibility GraphによるLocal BA
– Loop ClosingはBoW画像特徴量で画像間の特徴量の
近さを計算し, Loopを閉じるようにSim(3)最適化
? Essential Graphの利用
36
ORB-SLAMの立ち位置
? Visual SLAMの分類 Direct vs Feature, Dense vs Sparse
手法 Direct (画素値を直接利用) Feature (特徴量を抽出し利用)
Sparse
(画像から疎に抽出
された点のみ利用)
Direct Sparse Odometry
[Engel+, 2016]
ORB-SLAM
[Mur-Artal+, 2015]
Dense/
Semi-Dense
(画像全体/
輝度勾配の高い
領域の点を密に利用)
LSD-SLAM [Engel+, 2014]
SLAMでは特になし
(Optical Flow等)

More Related Content

厂尝础惭チュートリアル大会资料(翱搁叠-厂尝础惭)