DeMoN : Depth and Motion Network for
Learning Monocular Stereo (CVPR2017)
2017論文読み会
2017/10/12
東京大学 相澤山﨑研究室所属
B4 金子 真也
1
概要
• SfM(Structure from Motion)をConvNetで行った
– 2枚の画像から三次元マップとカメラの位置を推定
画像
(時刻 t)
画像
(時刻 t+1) カメラの動き
(回転 R,並進 t)
画像(時刻 t)
の深度マップ
入力 出力
2
関連研究との比較
• 既存のSfM
– 「カメラの位置の推定→三次元地図作成」よりカメラ
の位置を誤ると全部間違ってしまう
★今回は両者を同時に推定するので大幅に間違えない
• Depth prediction from a single image
– Eigen et al. (ICCV2015)
– 画像1枚からConvNetで深度推定
★画像2枚から推定できるように構造を工夫
(単純に2枚入れても画像1枚での回帰を学習しがち)
3
ネットワークの概要
4
ネットワークの概要
①とりあえず画像ペアの情報から
深度マップとカメラの動きを出力
5
ネットワークの概要
①とりあえず画像ペアの情報から
深度マップとカメラの動きを出力
②何度も繰り返すことでスケールや深度の調整
6
ネットワークの概要
①とりあえず画像ペアの情報から
深度マップとカメラの動きを出力
②何度も繰り返すことでスケールや深度の調整
③深度マップの拡大と形を
きれいにして出力
7
1. bootstrap net
• 画像ペアを入力とし,optical flow(+確信度)の計算を
経由しながら深度マップとカメラの動きを出力
8
1. bootstrap net
• 画像ペアを入力とし,optical flow(+確信度)の計算を
経由しながら深度マップとカメラの動きを出力
画像ペア
カメラの
動き
深度マップ
+法線マップ
optical flow + 確信度
9
1. bootstrap net
• 画像ペアを入力とし,optical flow(+確信度)の計算を
経由しながら深度マップとカメラの動きを出力
画像ペア
カメラの
動き
深度マップ
+法線マップ
optical flow + 確信度
Image pair
optical flow
+confidence
warped image
Input
10
1. bootstrap net
• 画像ペアを入力とし,optical flow(+確信度)の計算を
経由しながら深度マップとカメラの動きを出力
画像ペア
カメラの
動き
深度マップ
+法線マップ
optical flowによりwarp
1st Image Warped 2nd Image
warp
optical flow + 確信度
11
1. bootstrap net
• なぜoptical flowを計算するか?
– 2枚の画像の情報を無理やり利用するため
– 計算なしでは入力を1枚にした場合と精度が変わらず
(zはdepth)
12
2. iterative net
• 深度マップとカメラの動きを繰り返し計算
• 構造的にはbootstrap netとほぼ同じ(入力が異なる)
13
2. iterative net
• 深度マップとカメラの動きを繰り返し計算
• 構造的にはbootstrap netとほぼ同じ(入力が異なる)
画像ペア
カメラの
動き
深度マップ
+法線マップ
optical flow + 確信度
14
2. iterative net
• 深度マップとカメラの動きを繰り返し計算
• 構造的にはbootstrap netとほぼ同じ(入力が異なる)
bootstrap net
と異なる部分
画像ペア
カメラの
動き
深度マップ
+法線マップ
optical flow + 確信度
iterative
15
2. iterative net
• 深度マップとカメラの動きを繰り返し計算
• 構造的にはbootstrap netとほぼ同じ(入力が異なる)
画像ペア
カメラの
動き
深度マップ
+法線マップ
optical flow + 確信度
Image pair
Depth
+normals
optical flow
+warped image
Input
Image pair
optical flow
+confidence
depth
+warped image
Input
16
2. iterative net
• 深度マップとカメラの動きを繰り返し計算
• 構造的にはbootstrap netとほぼ同じ(入力が異なる)
画像ペア
カメラの
動き
深度マップ
+法線マップ
optical flow + 確信度
Image pair
Depth
+normals
optical flow
+warped image
Input
カメラの動き+深度からoptical flowを計算
Previous depth Optical flow
17
2. iterative net
• 深度マップとカメラの動きを繰り返し計算
• 構造的にはbootstrap netとほぼ同じ(入力が異なる)
画像ペア
カメラの
動き
深度マップ
+法線マップ
optical flow + 確信度
Image pair
Depth
+normals
optical flow
+warped image
Input
Image pair
optical flow
+confidence
depth
+warped image
Input
18
2. iterative net
• 深度マップとカメラの動きを繰り返し計算
• 構造的にはbootstrap netとほぼ同じ(入力が異なる)
画像ペア
カメラの
動き
深度マップ
+法線マップ
optical flow + 確信度
Image pair
optical flow
+confidence
depth
+warped image
Input
カメラの動き+optical flowから深度の計算
depthOptical flow
19
2. iterative net
• iterativeに繰り返すことによる効果
– 徐々に精度が改善
20
2. iterative net
• iterativeに繰り返すことによる効果
– 徐々に精度が改善
– 3回が平均的に良い結果を出す(SUN3D dataset)
21
3. refinement net
• 深度マップの拡大とrefineを行う
22
3. refinement net
• refinementの結果
解像度
(64×48)
解像度
(256×192)
23
ネットワークの学習(Loss)
• 今回用いるLossとしては全部で7種類存在
– Depth Loss : 三次元的な深度のLoss
– Normal Loss : 三次元的な形の法線のLoss
– Optical flow Loss : 画像間のoptical flowのLoss
– Confidence Loss : flowの確信度のLoss
– Rotation Loss : カメラの回転運動のLoss
– Translation Loss : カメラの並進運動のLoss
– Scale Invariant gradient Loss : scale不変な勾配
のLoss
24
ネットワークの学習(Loss)
• Point-wiseなLoss
– 逆深度 𝜉𝜉 = 1/𝑧𝑧 (ground truth: ̂𝜉𝜉)
– 表面の法線 𝐧𝐧 (ground truth: �𝐧𝐧)
Optical flow 𝐰𝐰 (ground truth: �𝐰𝐰)
Depth Loss
Normal Loss
Optical flow Loss
25
ネットワークの学習(Loss)
• Point-wiseなLoss
– 確信度 𝑐𝑐𝑥𝑥 (ground truth: �𝑐𝑐𝑥𝑥)
※y方向に関しても同様に定義
Confidence Loss
26
ネットワークの学習(Loss)
• Motion Loss
– 回転 𝐫𝐫 (ground truth: �𝐫𝐫)
並進 𝐭𝐭 (ground truth: ̂𝐭𝐭)
※ground truthである ̂𝐭𝐭は以下のように正規化
(単眼カメラよりscale不定であるため)
̂𝐭𝐭 2 = 1
Rotation Loss
Translation Loss
27
ネットワークの学習(Loss)
• Scale Invariant gradient Loss
– 今回のネットワーク設計での推しポイント
– scale不変な微分演算子を以下のように定義
– 深度の誤差のLossとしてこの演算子を用いる
Scale Invariant gradient Loss
28
ネットワークの学習(Loss)
• Scale Invariant gradient Loss
– ピクセル近傍の深度値を比較することで以下が期待
・均一な領域の滑らかさの増加
・不連続点といった鋭いエッジの強調
不連続点の強調
均一な領域は滑らか
29
ネットワークの学習(Loss)
• Scale Invariant gradient Loss
– Lossの違いによる学習結果の違い
• 単純なL1 lossの結果に比べてかなり鮮明
30
ネットワークの学習(Schedule)
• ネットワークそのものは順々に学習
31
評価に用いたデータセット
• 用いたデータセットとしては
– Synthetic : 最高のGT付きだが非現実的な画像
– Real : 実世界の画像だが, GTは離散的で誤差が多い
• どちらも完璧でないので, 両方を用いて学習させればい
い感じになるのでは?
32
結果
Two-frame single-frame
Base-*の画像の解像度
640×480
DeMoNでの解像度
256×192
古典的な手法に比べて,
カメラの回転角が小さく
てもうまくいく
33
結果(Errorの定義)
• Depth error
– Single-frame predictがscale込みで推定するのに
対し, two-frame predictは含まれていない
→ スケール不変なerror metricが必要
– 古典的なSfMとの比較には以下を利用
34
結果(Errorの定義)
• Motion error
– GTとpredictionとの角度 (rotation, translation)
– Translation vectorは1に正規化されている
• Optical flow error
– Average endpoint error (EPE)
全てのピクセルでGTとpredictionとの間のEuclidian
normを出力
35
結果(two-frame depth est.)
• 古典的なSfMの手法との比較
– Base-SIFT/Base-FF
• SIFT/FlowFields(Bailer+)で画像間の対応
• 8-point algo. + RANSACでEssential matrix
• Bundle Adjustment (by ceres library)
• Stereoでdepth推定 + optimize(Hirschmuller+)
– Base-Oracle
• Stereoの代わりにGTのcamera motionを用いる
– Base-Matlab/Base-Mat-F
• KLT algo./flow(by DeMoN)で画像間の対応
• 5-point algo. + RANSACでEssential matrix
36
結果(single-frame depth est.)
• 既存の単画像手法との比較
– Eigen&Fergus
• VGG netの構造
– Liu+(indoor)
• NYUv2 datasetによるindoor sceneで訓練
– Liu+(outdoor)
• Make3D datasetによるoutdoor sceneで訓練
37
結果
• 比較的境界が明瞭で, 細かい箇所まで表現できている
38
結果
• RGB-D SLAM datasetの連続する画像からカメラの動き
をtrajectoryとして出力した結果
– 主にtranslation driftによるずれ
– SLAMの重要な要素であるdrift correctionをしていな
いのでそれはそう感がある
DeMoN trajectory
GT trajectory
39
結果
• 訓練データとかなり異なる風景でも比較的うまくいく
40
結果
• 点群データを出力した例1
41
結果
• 点群データを出力した例2
42
結果
• 点群データを出力した例3
43
結果
• 点群データを出力した例4
44
結論と今後の展望
• 2枚の画像からdepthとcamera motionを学習するdeep
を提案し, 従来の手法を上回る性能を出せた
• 全く知らない風景に対しても柔軟に対応可能
• 今後の展望としては,
– 内部パラメータが互いに異なる画像間でのSfM
– 用いる画像の枚数を増やす
などが挙げられる

論文読み会(DeMoN;CVPR2017)