SlideShare a Scribd company logo
1 of 44
Download to read offline
2018/04/24 AIコードレビュー
ORB-SLAM Code Reading
takmin
自己紹介
2
テクニカル・ソリューション・アーキテクト
皆川 卓也(みながわ たくや)
フリーエンジニア(ビジョン&ITラボ)
「コンピュータビジョン勉強会@関東」主催
博士(工学)
略歴:
1999-2003年
日本HP(後にアジレント・テクノロジーへ分社)にて、ITエンジニアとしてシステム構築、プリ
セールス、プロジェクトマネジメント、サポート等の業務に従事
2004-2009年
コンピュータビジョンを用いたシステム/アプリ/サービス開発等に従事
2007-2010年
慶應義塾大学大学院 後期博士課程にて、コンピュータビジョンを専攻
単位取得退学後、博士号取得(2014年)
2009年-現在
フリーランスとして、コンピュータビジョンのコンサル/研究/開発等に従事
http://visitlab.jp
コンピュータビジョン勉強会@関東
3
こんなテーマでやってきました
「コンピュータビジョ
ン最先端ガイド」の
輪読
ICCV読み会
ECCV読み会
CVPR読み会
ハッカソン
OpenCV祭り
CVのお仕事
CVでこんなもの
作ってみた
有名論文読み会
AR/VRを支える技
術
CVで便利なツール/
ライブラリ
紹介するコード
5
 ORB SLAM2
 https://github.com/raulmur/ORB_SLAM2
 人工知能?
 機械学習使ってません
 ARの世界では有名な研究/コード
 私が書いたコードではない
 仕事でずっとこれのカスタマイズに格闘してたので
紹介
 カスタマイズされたコードは出せないので、元の
コードについて解説
Visual SLAM
6
ARにおいて、カメラで撮影した画像上に3Dオブジェクトを
重畳表示するためには、撮影対象の三次元形状とそれに
対するカメラの位置と姿勢を正確に求める必要がある
Simultaneous Localization And Mapping (SLAM)
Localization
Mapping
ORB-SLAMとは?
7
 単眼カメラのVisual SLAM
 Mur-Artal, R., Montiel, J. M. M., & Tardos, J. D. (2015).
ORB-SLAM:AVersatile and Accurate Monocular
SLAM System. IEEETransactions on Robotics,
 ソースコード:
https://github.com/raulmur/ORB_SLAM2
 動画:
https://www.youtube.com/watch?v=ufvPS5wJAx0
Structure from Motion (SfM)
8
 同じ対象を撮影した複数の画像(例えば動画)から、対
象の三次元形状を復元する
Structure from Motion (SfM)
9
 同じ対象を撮影した複数の画像(例えば動画)から、対
象の三次元形状を復元する
バンドル調整を用いて、複数のカメラの相対位置、焦点距
離、対象の三次元点座標を同時に推定する
<バンドル調整>
測定結果とパラメータから誤差を計算し、誤差を小さくする方向にパ
ラメータを調整していく
バンドル調整
10
1. 三次元点群とカメラパラメータの初期値を設定する
画像から見つけた点の
三次元座標の初期値カメラの位置と焦点距離
の初期値
バンドル調整
11
2. 三次元点群を各カメラの画像平面へ投影
バンドル調整
12
3. 投影された点と観測した点との誤差の総和を算出
投影された点
観測点
誤差
バンドル調整
13
4. 誤差が小さくなる方向へ特徴点の三次元座標とカメラ
パラメータを調整 (収束するまで2から繰り返す)
ORB-SLAMの仕組み
14
ORB-SLAMの仕組み
15
 Tracking、 Local Mapping、Loop Closingの3つのスレッド
が並列に動作
 Tracking: 入力フレームのカメラ位置/姿勢を推定
 Local Mapping: 地図(点群)を生成/更新
 Loop Closing: カメラ位置/姿勢の誤差の蓄積を除去
 全スレッドでORB特徴を利用
 MAP
 点(XYZ)とそれに紐づいた代表ORB特徴
 各キーフレームの全ORB特徴を保持
 Place Recognition:
 ORBによるBags-of-Wordsでクエリー画像に近いキーフレームを検索
 追跡失敗時やMapping時に対応点が見つからない時、Loopを探す
時などに利用
ORB
16
 画素ペアの大小でキーポイントと特徴量を計算するため、非
常に高速
 キーポイントは画像ピラミッドの各レベルでFASTにより検出
 キーポイント周辺の画素ペアの値の大小を0と1に割り当て(バイナ
リ特徴)
 バイナリ特徴のため省メモリ
 回転に対して不変
ORBで使用する画素ペア
(学習された例)
ORB-SLAMの仕組み
17
• XYZ(世界座標系)
• 代表ORB特徴
ORB-SLAMの仕組み
18
• キーフレームのカメ
ラパラメータ(内部/
外部)
• 全ORB特徴とMap
Pointsへのリンク
ORB-SLAMの仕組み
19
• キーフレームをノー
ドとした無向グラフ
• 共通するMap Points
が多いほどエッジの
重さが大きい
ORB-SLAMの仕組み
20
Covisibility Graphから
作成した全域木
キーフレームとグラフ表現
21
SpanningTree
に強いエッジ
を追加
15個以上の
共有点を持つ
場合エッジを
生成
Covisibility
Graphから作
成した全域木
(Spanning Tree)
ORB-SLAMの仕組み
22
事前に作成した
VocabularyTree
ORB-SLAMの仕組み
23
キーフレームの
BoW表現
ORB-SLAMの仕組み
24
入力フレームから
Fastキーポイントと
ORB特徴抽出
ORB-SLAMの仕組み
25
• キーポイント追跡しカメラ
姿勢推定
• 前フレーム追跡失敗時
はBoWで対応キーフ
レーム検索
ORB-SLAMの仕組み
26
• キーポイントとMap上
の点とをマッチング
• カメラ姿勢再計算
ORB-SLAMの仕組み
27
• キーフレームの
条件を満たして
いるか判定
ORB-SLAMの仕組み
28
• キーフレームを挿入して
Covisibility Graphと
SpanningTreeを更新
• BoW表現を計算
ORB-SLAMの仕組み
29
• キーフレームの点
のうち、ロバストで
ないものを除去
ORB-SLAMの仕組み
30
• Covisibility Graph上の
隣接キーフレームを用
いてMap Points生成
ORB-SLAMの仕組み
31
• バンドル調整で現キー
フレームと隣接キーフ
レーム上の点とカメラ
姿勢を改善
ORB-SLAMの仕組み
32
• Covisibility Graph上の
隣接キーフレームのう
ち、他と重複の大きい
ものを除去
ORB-SLAMの仕組み
33
• Covisibility Graph
上のループ候補
を取得
ORB-SLAMの仕組み
34
• ループ上で隣接するキーフ
レーム間の対応点を算出
• キーフレーム間の相似変
換算出(3D to 3D)
ORB-SLAMの仕組み
35
• ループ候補を統合
• 相似変換を伝播させ
てカメラ姿勢補正
ORB-SLAMの仕組み
36
• Essential Graph上でLoop
Closingにより各カメラ姿勢
を最適化
• カメラ姿勢最適化後、点群
の位置を最適化
ORB-SLAMのコード
37
 ソースコード
 https://github.com/raulmur/ORB_SLAM2
 C++11
 ORB_SLAM2はORB_SLAMをステレオカメラとRGBD向け
に拡張したもの
 元のORB_SLAMのソースコードもあるが、単眼カメラの機能も
ORB_SLAM2に統合しているので、2を使うのが望ましい
 必要なライブラリをインストールしてbuild.shというシェル
を起動すればビルドできる。
 KITTI等の既存データセットを動かす場合
 リアルタイムで動作させたいときはROSをセットアップした後、
build_ros.shでビルド
ORB-SLAMの依存ライブラリ
38
 Pangolin
 ビジュアライゼーションに必要
 https://github.com/stevenlovegrove/Pangolin
 OpenCV (2.4.11と3.2でテスト)
 画像の操作と特徴量の抽出
 http://opencv.org
 Eigen3
 g2oを動かすのに必要
 http://eigen.tuxfamily.org
 DBoW2
 Place Recognitionに使用。ORB-SLAM2に同梱
 g2o
 幾何学的な最適化に使用。ORB-SLAM2に同梱
 ROS (Hydro or Newer)
 リアルタイムで動かす時、カメラ出力をROSのトピックとして動かす必要
 http://ros.org
ORB-SLAMのコード構成
39
メインのコード群
ビルドのスクリプト
リアルタイムカメラ入力を扱うためのビルドス
クリプト
各データセットのための試験コードやAR等の実
行ファイル
DBoW2とg2o
Place Recognitionを行うための学習済み辞書
データ
ORB-SLAMのコード
40
System.h
main()からcv::Mat形式の画像
を一枚一枚
System::TrackMonocular()で
Systemに渡す
Examplesフォルダにサンプル
ORB-SLAMのコード
41
System.h
Tracking.h
LocalMapping.h
LoopClosing.h
Map.hORBVocabulary.h
KeyFrameDatabase.h
Frame.h
KeyFrame.h
ORB-SLAMのコード
42
Read
Read/
Write
Read/Write
共有メモリ
Read/Write
Read
ORB-SLAMコードの特徴
43
 実装は論文通り
 論文とコードの対応を見つけやすい
 論文と実装が違うというケースも割とあるので
 ほとんど全てのパラメータがメンバ変数になっており、関数の
引数として渡されることがないため、各関数がどのようなパラ
メータに依存してるかが非常にわかりにくい。
 そのため、カスタマイズの影響範囲を見積もるのがツライ
 マルチスレッドなので尚ツライ。。。
 リアルタイム/マルチスレッドのため、デバッグがツライ。。。
 例えばLocal Mappingがデバッグ処理で遅れたらTrackingも止まる
 printfデバッグ
 なんかよい方法あったら教えて下さい。
まとめ
44
 単眼カメラによるSparseなVisual SLAM
 Tracking、Mapping、Loop Closingを別スレッドで動かすこ
とでリアルタイムに動作
 PTAMはTrackingとMappingのみ
 処理が高速でロバストな特徴量であるORBをTracking、
Mapping、Loop Closingで共通して使用
 Place Recognitionにも活用
 論文と照らし合わせながらソースコードを読んだ方が理
解が早い。
 マルチスレッドで処理が複雑、かつクラス同士が複雑に絡み
合っており、カスタマイズは非常にツライ。。。

More Related Content

What's hot

画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量
takaya imai
 

What's hot (20)

LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料LiDAR-SLAM チュートリアル資料
LiDAR-SLAM チュートリアル資料
 
ロボティクスにおける SLAM 手法と実用化例
ロボティクスにおける SLAM 手法と実用化例ロボティクスにおける SLAM 手法と実用化例
ロボティクスにおける SLAM 手法と実用化例
 
SLAM勉強会(3) LSD-SLAM
SLAM勉強会(3) LSD-SLAMSLAM勉強会(3) LSD-SLAM
SLAM勉強会(3) LSD-SLAM
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解
 
G2o
G2oG2o
G2o
 
20190825 vins mono
20190825 vins mono20190825 vins mono
20190825 vins mono
 
Direct Sparse Odometryの解説
Direct Sparse Odometryの解説Direct Sparse Odometryの解説
Direct Sparse Odometryの解説
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
 
Visual SLAM: Why Bundle Adjust?の解説(第4回3D勉強会@関東)
Visual SLAM: Why Bundle Adjust?の解説(第4回3D勉強会@関東)Visual SLAM: Why Bundle Adjust?の解説(第4回3D勉強会@関東)
Visual SLAM: Why Bundle Adjust?の解説(第4回3D勉強会@関東)
 
複数のGNSSを用いたポーズグラフ最適化
複数のGNSSを用いたポーズグラフ最適化複数のGNSSを用いたポーズグラフ最適化
複数のGNSSを用いたポーズグラフ最適化
 
SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎SLAM入門 第2章 SLAMの基礎
SLAM入門 第2章 SLAMの基礎
 
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
 
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
SSII2021 [TS1] Visual SLAM ~カメラ幾何の基礎から最近の技術動向まで~
 
オープンソース SLAM の分類
オープンソース SLAM の分類オープンソース SLAM の分類
オープンソース SLAM の分類
 
Cartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAMCartographer を用いた 3D SLAM
Cartographer を用いた 3D SLAM
 
ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築ROS を用いた自律移動ロボットのシステム構築
ROS を用いた自律移動ロボットのシステム構築
 
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
 
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
大域マッチングコスト最小化とLiDAR-IMUタイトカップリングに基づく三次元地図生成
 
CNN-SLAMざっくり
CNN-SLAMざっくりCNN-SLAMざっくり
CNN-SLAMざっくり
 
画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量
 

Similar to 20180424 orb slam

Service Design Roundtable on 2/15/2014, Y. Sawatani
Service Design Roundtable on 2/15/2014, Y. SawataniService Design Roundtable on 2/15/2014, Y. Sawatani
Service Design Roundtable on 2/15/2014, Y. Sawatani
Yuriko Sawatani
 
財務局プレゼンテーション
財務局プレゼンテーション財務局プレゼンテーション
財務局プレゼンテーション
Yoshihide Chubachi
 

Similar to 20180424 orb slam (20)

「コンピュータビジョン勉強会@関東」紹介資料
「コンピュータビジョン勉強会@関東」紹介資料「コンピュータビジョン勉強会@関東」紹介資料
「コンピュータビジョン勉強会@関東」紹介資料
 
20170211クレジットカード認識
20170211クレジットカード認識20170211クレジットカード認識
20170211クレジットカード認識
 
20160417dlibによる顔器官検出
20160417dlibによる顔器官検出20160417dlibによる顔器官検出
20160417dlibによる顔器官検出
 
run Keras model on opencv
run Keras model on opencvrun Keras model on opencv
run Keras model on opencv
 
第34回CV勉強会「コンピュテーショナルフォトグラフィ」発表資料
第34回CV勉強会「コンピュテーショナルフォトグラフィ」発表資料第34回CV勉強会「コンピュテーショナルフォトグラフィ」発表資料
第34回CV勉強会「コンピュテーショナルフォトグラフィ」発表資料
 
LiDAR点群とSfM点群との位置合わせ
LiDAR点群とSfM点群との位置合わせLiDAR点群とSfM点群との位置合わせ
LiDAR点群とSfM点群との位置合わせ
 
How to feed myself with computer vision
How to feed myself with computer visionHow to feed myself with computer vision
How to feed myself with computer vision
 
20140131 R-CNN
20140131 R-CNN20140131 R-CNN
20140131 R-CNN
 
Pn learning takmin
Pn learning takminPn learning takmin
Pn learning takmin
 
LiDAR点群と画像とのマッピング
LiDAR点群と画像とのマッピングLiDAR点群と画像とのマッピング
LiDAR点群と画像とのマッピング
 
機械学習 温故知新(第47回 Machine Learning 15minutes! Broadcast)
機械学習 温故知新(第47回 Machine Learning 15minutes! Broadcast)機械学習 温故知新(第47回 Machine Learning 15minutes! Broadcast)
機械学習 温故知新(第47回 Machine Learning 15minutes! Broadcast)
 
Service Design Roundtable on 2/15/2014, Y. Sawatani
Service Design Roundtable on 2/15/2014, Y. SawataniService Design Roundtable on 2/15/2014, Y. Sawatani
Service Design Roundtable on 2/15/2014, Y. Sawatani
 
機械学習による推定ユーザー属性の安定供給のための施策(第56回 Machine Learning 15minutes! Broadcast)
機械学習による推定ユーザー属性の安定供給のための施策(第56回 Machine Learning 15minutes! Broadcast)機械学習による推定ユーザー属性の安定供給のための施策(第56回 Machine Learning 15minutes! Broadcast)
機械学習による推定ユーザー属性の安定供給のための施策(第56回 Machine Learning 15minutes! Broadcast)
 
「業務システムにモバイルを!実践エンタープライズモバイル開発プロジェクト」
「業務システムにモバイルを!実践エンタープライズモバイル開発プロジェクト」 「業務システムにモバイルを!実践エンタープライズモバイル開発プロジェクト」
「業務システムにモバイルを!実践エンタープライズモバイル開発プロジェクト」
 
研究室紹介
研究室紹介研究室紹介
研究室紹介
 
アドテクノロジーのサービスにおけるアジャイル開発
アドテクノロジーのサービスにおけるアジャイル開発アドテクノロジーのサービスにおけるアジャイル開発
アドテクノロジーのサービスにおけるアジャイル開発
 
Microsoft AI と深層学習
Microsoft AI と深層学習Microsoft AI と深層学習
Microsoft AI と深層学習
 
財務局プレゼンテーション
財務局プレゼンテーション財務局プレゼンテーション
財務局プレゼンテーション
 
Machine Learning Operations (MLOps): Overview, Definition, and Architecture
Machine Learning Operations (MLOps): Overview, Definition, and ArchitectureMachine Learning Operations (MLOps): Overview, Definition, and Architecture
Machine Learning Operations (MLOps): Overview, Definition, and Architecture
 
サービスデザインとUXDそしてデザインプロセス
サービスデザインとUXDそしてデザインプロセスサービスデザインとUXDそしてデザインプロセス
サービスデザインとUXDそしてデザインプロセス
 

More from Takuya Minagawa

車載カメラの映像から歩行者に関わる危険を予測する技術
車載カメラの映像から歩行者に関わる危険を予測する技術車載カメラの映像から歩行者に関わる危険を予測する技術
車載カメラの映像から歩行者に関わる危険を予測する技術
Takuya Minagawa
 

More from Takuya Minagawa (20)

MobileNeRF
MobileNeRFMobileNeRF
MobileNeRF
 
点群SegmentationのためのTransformerサーベイ
点群SegmentationのためのTransformerサーベイ点群SegmentationのためのTransformerサーベイ
点群SegmentationのためのTransformerサーベイ
 
Learning to Solve Hard Minimal Problems
Learning to Solve Hard Minimal ProblemsLearning to Solve Hard Minimal Problems
Learning to Solve Hard Minimal Problems
 
ConditionalPointDiffusion.pdf
ConditionalPointDiffusion.pdfConditionalPointDiffusion.pdf
ConditionalPointDiffusion.pdf
 
楽しいコンピュータビジョンの受託仕事
楽しいコンピュータビジョンの受託仕事楽しいコンピュータビジョンの受託仕事
楽しいコンピュータビジョンの受託仕事
 
20210711 deepI2P
20210711 deepI2P20210711 deepI2P
20210711 deepI2P
 
20201010 personreid
20201010 personreid20201010 personreid
20201010 personreid
 
20200910コンピュータビジョン今昔物語(JPTA講演資料)
20200910コンピュータビジョン今昔物語(JPTA講演資料)20200910コンピュータビジョン今昔物語(JPTA講演資料)
20200910コンピュータビジョン今昔物語(JPTA講演資料)
 
2020/07/04 BSP-Net (CVPR2020)
2020/07/04 BSP-Net (CVPR2020)2020/07/04 BSP-Net (CVPR2020)
2020/07/04 BSP-Net (CVPR2020)
 
20200704 bsp net
20200704 bsp net20200704 bsp net
20200704 bsp net
 
20190706cvpr2019_3d_shape_representation
20190706cvpr2019_3d_shape_representation20190706cvpr2019_3d_shape_representation
20190706cvpr2019_3d_shape_representation
 
20190131 lidar-camera fusion semantic segmentation survey
20190131 lidar-camera fusion semantic segmentation survey20190131 lidar-camera fusion semantic segmentation survey
20190131 lidar-camera fusion semantic segmentation survey
 
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
2018/12/28 LiDARで取得した道路上点群に対するsemantic segmentation
 
20181130 lidar object detection survey
20181130 lidar object detection survey20181130 lidar object detection survey
20181130 lidar object detection survey
 
object detection with lidar-camera fusion: survey (updated)
object detection with lidar-camera fusion: survey (updated)object detection with lidar-camera fusion: survey (updated)
object detection with lidar-camera fusion: survey (updated)
 
object detection with lidar-camera fusion: survey
object detection with lidar-camera fusion: surveyobject detection with lidar-camera fusion: survey
object detection with lidar-camera fusion: survey
 
3DFeat-Net
3DFeat-Net3DFeat-Net
3DFeat-Net
 
CVPR2018のPointCloudのCNN論文とSPLATNet
CVPR2018のPointCloudのCNN論文とSPLATNetCVPR2018のPointCloudのCNN論文とSPLATNet
CVPR2018のPointCloudのCNN論文とSPLATNet
 
Curiosity driven exploration
Curiosity driven explorationCuriosity driven exploration
Curiosity driven exploration
 
車載カメラの映像から歩行者に関わる危険を予測する技術
車載カメラの映像から歩行者に関わる危険を予測する技術車載カメラの映像から歩行者に関わる危険を予測する技術
車載カメラの映像から歩行者に関わる危険を予測する技術
 

20180424 orb slam