Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
最近のVisual Odometryと Depth Estimation
Search
Shigeki Kobayashi
September 27, 2024
Research
1
270
最近のVisual Odometryと Depth Estimation
社内勉強会で使用した資料です。
RNNによる反復更新を用いたVisual Odometryとゼロショット深度推定の手法についてまとめました。
Shigeki Kobayashi
September 27, 2024
Tweet
Share
More Decks by Shigeki Kobayashi
See All by Shigeki Kobayashi
Matching 2D Images in 3D: Metric Relative Pose from Metric Correspondences
sgk
1
320
Other Decks in Research
See All in Research
工学としてのSRE再訪 / Revisiting SRE as Engineering
yuukit
19
11k
Geospecific View Generation - Geometry-Context Aware High-resolution Ground View Inference from Satellite Views
satai
1
100
Isotropy, Clusters, and Classifiers
hpprc
3
630
Generative Predictive Model for Autonomous Driving 第61回 コンピュータビジョン勉強会@関東 (後編)
kentosasaki
0
210
2024/10/30 産総研AIセミナー発表資料
keisuke198619
1
330
The Fellowship of Trust in AI
tomzimmermann
0
130
「並列化時代の乱数生成」
abap34
3
820
文化が形作る音楽推薦の消費と、その逆
kuri8ive
0
160
snlp2024_multiheadMoE
takase
0
430
テキストマイニングことはじめー基本的な考え方からメディアディスコース研究への応用まで
langstat
1
120
Practical The One Person Framework
asonas
1
1.6k
熊本から日本の都市交通政策を立て直す~「車1割削減、渋滞半減、公共交通2倍」の実現へ~@公共交通マーケティング研究会リスタートセミナー
trafficbrain
0
140
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Done Done
chrislema
181
16k
The World Runs on Bad Software
bkeepers
PRO
65
11k
The Language of Interfaces
destraynor
154
24k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
Being A Developer After 40
akosma
86
590k
Code Review Best Practice
trishagee
64
17k
A better future with KSS
kneath
238
17k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Docker and Python
trallard
40
3.1k
Transcript
AI 2024.07.12 小林 茂樹 GO株式会社 最近のVisual Odometryと Depth Estimation
AI 2 項目 01|最近のVisual Odometry 02|最近のDepth Estimation 03|まとめ・感想
AI 3 01 最近のVisual Odometry
AI ▪ odometry:移動量の累積から自己位置推定すること ▪ visual odometry:カメラを用いたodometry ▪ 2フレーム間の相対移動量の累積となる 4 Visual
Odometryとは?
AI 5 Visual Odometryの位置付け 櫻田健. “Visual SLAM入門〜発展の歴史と基礎の習得〜”. https://speakerdeck.com/ksakurada/visual-slamru-men-fa-zhan-falseli-shi-toji-chu-falsexi-de?slide=24 VO 動画
局所的バンドル調整 (キーフレームのみ ) 累積誤差の修正はできない (保持するキーフレームは 直近数フレームのみで良い )
AI 6 Visual Odometry (SLAM含む) の棲み分け 間接法 直接法 特徴点 ベース
Optical Flow ベース E2E DROID-SLAM (NeutIPS’21) DPVO (NeutIPS’23) DSO (TPAMI’18) 深層学習あり LSD-SLAM (ECCV’14) DF-VO (ICRA’20) ORB-SLAM (TRO’15) MONO-SLAM (ICCV’03) CNN-SLAM (CVPR’17) 教師なし学習 DualRefine (CVPR’23) D3VO (CVPR’20) SfMLearner (CVPR’17) DVSO (ECCV’18) 間接法:特徴点マッチング or Optical Flowで推定した対応点を元に再投影誤差を最適化 (一部の研究は相対姿勢を推定のみ) 直接法:逆投影 or 再投影した画素の輝度値の誤差を最適化
AI 7 Visual Odometry (SLAM含む) の棲み分け 間接法 輝度値ベース 特徴点 ベース
Optical Flow ベース E2E DROID-SLAM (NeutIPS’21) DPVO (NeutIPS’23) DSO (TPAMI’18) 深層学習あり LSD-SLAM (ECCV’14) DF-VO (ICRA’20) CNN-SLAM (CVPR’17) 教師なし学習 DualRefine (CVPR’23) D3VO (CVPR’20) SfMLearner (CVPR’17) DVSO (ECCV’18) 間接法:特徴点マッチング or Optical Flowで推定した対応点を元に再投影誤差を最適化 (一部の研究は相対姿勢を推定のみ) 直接法:逆投影 or 再投影した画素の輝度値の誤差を最適化 本資料で紹介する研究 共通点:RNNを用いた反復更新 ORB-SLAM (TRO’15) MONO-SLAM (ICCV’03)
AI ▪ RNNを用いて推論結果を反復して更新する ▪ ECCV’20のbest paperであるRAFTで提案された ▪ 上記をVisual SLAMに適応させたDROID-SLAMがすごい ▪
単眼カメラ、ステレオカメラ (TartanAir、EuRoC)、RGB-Dカメラ(TUM-RGBD) など多様な データセットで当時のSOTAを達成 ▪ シミュレーターの合成画像から学習したモデルでも実画像データセットでSOTAを達成 ▪ VOとしても良好な性能を発揮し近年のベースラインとしてよく参照される 本資料ではDROID-SLAMおよびその派生のVOに関する研究について紹介 8 RNNを用いた反復更新 RNNを用いてOptical Flowを反復して更新している例 (RAFT)
AI ▪ 多視点の深度マップとカメラ姿勢を同時最適化するE2EのSLAMシステムを提案 ▪ RNNで算出したOptical Flowに基づいて深度マップとカメラ姿勢を反復して多視点 最適化 a. 再投影で得た対応点の修正量をconvGRUで算出 b.
修正された対応点と一致するように多視点の深度マップとカメラ姿勢の更 新量を密なバンドル調整で算出し、深度マップとカメラ姿勢を更新 c. 上記の2ステップを反復して行うことで深度マップとカメラ姿勢を最適化 9 DROID-SLAM (NeurlPS’21)
AI ▪ 共通視野のあるフレームを特定するためフレームグラフを用いる ▪ ノード:フレーム ▪ エッジ:共通視野があるフレーム間 ▪ フレームグラフは学習時も推論時も出力のカメラ姿勢を用いて再計算される ▪
既に地図作成された領域にカメラ姿勢が推論されたら、long range connectionをフレームグラフに追加してループクロージングを行う フレームグラフ
AI ▪ 画像からの特徴抽出において重要なところはRAFTから引っ張ってきている ▪ 出力は1/8の密な特徴マップ ▪ ピクセル毎の相関 (correlation volume) を生成する
▪ 共有視野のあるフレームペアのそれぞれのフレームから抽出された特 徴ベクトルの内積 ▪ マルチスケールのcorrelation volumeを得るために最後の2次元の average poolingを取る 特徴抽出
AI 12 1. 現在のフレームペアにおいて、カメラ姿勢と深度マップを用いて再投影を行い対応点を算出 2. correlation volumeから対応点の特徴を取り出す 3. convGRUで対応点の修正量rと確信度wを算出 4.
修正された対応点p*と確信度wを入力として密なバンドル調整 (DBA)を行い、カメラ姿勢と 深度マップの更新量を算出 (4) (5) a. この処理は多視点に対して同時に行う 5. 多視点のカメラ姿勢と深度マップを更新 6. lossを計算 7. 上記処理を反復 微分可能な再帰的最適化 (Update Operator) の手順
AI ▪ 初期化 ▪ 12枚のフレームを集める ▪ Optical Flowが16ピクセル以上の場合のみ、前のフレームを保持 ▪ 3つの隣接するフレームにエッジを追加してupdate
operatorを10回実行 ▪ フロントエンド ▪ 新しいフレームに対して特徴抽出 ▪ フレームグラフに追加 ▪ Optical Flowの平均が近い3つのフレームに対してエッジを追加 ▪ update operatorを数回適用して、カメラ姿勢と深度マップを更新 ▪ 新しいフレームがトラッキングされた後、キーフレームを削除 ▪ フレームペア間のOptical Flowの平均から削除するキーフレームを決定 ▪ 該当する候補がない場合は最も古いキーフレームを削除 ▪ バックエンド ▪ 全てのキーフレームに対してバンドル調整を行う ▪ 完全なバンドル調整はキーフレームに対してのみ ▪ 非キーフレームは姿勢のみのバンドル調整 ▪ 数千のフレームとエッジからなるフレームグラフ全体にupdate operatorを適用 SLAMシステム
AI ▪ 学習データセットはtartanAir (合成データ) ▪ 学習にかかる時間はRTX3090 x4で1週間 ▪ 学習データの動画はフレーム間の平均Optical Flowが8~96pxになるように
する ▪ 難しすぎず簡単すぎないサンプルを取る 学習
AI ▪ poseの評価はAbsolute Trajectory Error (ATE) ▪ 3次元再構成は標準的な評価方法がないから評価していない ▪ どの3次元点を再構成するか選べるから評価が難しい
▪ TartanAir datasetでSOTA ▪ ORB-SLAM (ルールベース) が破綻するようなシナリオでも高精度 実験 (TartanAir)
AI ▪ ECCV2020 TartanAir SLAM competitionの上位3つの結果 ▪ Super Point +
Super Glue + COLMAPと比べても精度高い 実験 (ECCV 2020 SLAM Competition)
AI ▪ EuRoCでの結果 ▪ D3VOとかORB-SLAM3とか最先端の手法がある中でSOTA ▪ 合成データ (TartanAir) のみで学習しているにも関わらずSOTA 実験
(EuRoC)
AI ▪ 推論にはRTX3090 x2が必要 ▪ 1GPUでトラッキングと局所的なバンドル調整を実行 ▪ 1GPUで大域的なバンドル調整とループクロージングを実行 ▪ フロントエンドは8GBのGPUで動く
▪ 全部の組み合わせのcorrelation featureを保持するのでメモリが圧迫される ▪ 5000フレームまである動画だと24GBのGPUが必要 推論速度とメモリ使用量
AI ▪ DROID-SLAMの著者の後続研究 ▪ DROID-SLAMは共通視野のあるフレームペアのcorrelation volumeを事前に計算、 保持する必要があり計算量、メモリ使用量ともに大きかった ▪ DROID-SLAMをベースとして疎な表現 (パッチ)
を用いた手法を提案 ▪ RNNで算出したoptical flowに基づいてパッチの深度とカメラの姿勢を反復して多視点 最適化 (6) ▪ 精度を保ちながら、DROID-SLAMの1.5〜8.9倍 (平均3倍) 速く、57〜29% (平均30%) のメモリ効率性 19 DPVO (NeurlPS’23)
AI ▪ パッチとビデオフレームの関係を表すためにパッチグラフを使用 ▪ グラフのエッジはパッチとフレームを接続 ▪ パッチの軌跡は単一のパッチを複数フレームに再投影した集合になる ▪ 隣のフレームに投影することもあるので、台形になったりする (元の正
方形とは限らない) ▪ グラフは動的で、新しいビデオフレームが受信されると、新しいフレームと パッチが追加され、古いものは削除される パッチグラフ パッチの軌跡の例
AI ▪ パッチグラフの各エッジ毎にcorrelation feature (パッチ毎の相関) を計算 ▪ フレームi -> jにパッチkを再投影
▪ パッチkと再投影位置のフレームjの特徴マップの各ピクセルの内積を取る ▪ 内積を取るときにフレームjの特徴マップと対応するピクセルはバイリニア補 間で生成 Correlation Feature
AI ▪ 隣接フレームの相関性を利用するために各パッチ軌跡に対して1d convを適用 ▪ 隣接するフレームでの同一のパッチを連結してから線形射影 ▪ この1d convによって時間経過によるパッチの外観変化をモデル化 1D
Conv
AI ▪ パッチは疎だが同じオブジェクト内に属していれば相関が高くなる ▪ この相関を活用するためにパッチグラフ内のエッジ間で情報を伝達させる ▪ これはSuperGlueと一緒 ▪ エッジとその近隣エッジが定義されるときその集約関数を定義 (5)
▪ ψ, Φは全結合層、σはシグモイド ▪ 2つのsoft aggregationを実行 ▪ パッチ集約:フレーム間をまたぐ同一のパッチの情報を集約 ▪ フレーム集約:フレーム内の異なるパッチの情報を集約 Softmax Aggregation
AI ▪ パッチグラフ内の各エッジの隠れ状態を更新するためにtransition blockを追加 ▪ transition blockは以下の構成 ▪ 2つのゲート付き残差ユニット ▪
layer norm ▪ ReLU ▪ layer normはRNNのモジュールの値の発散を防げる Transition Block
AI ▪ 現在のパッチ軌跡に対してパッチ位置の更新量とそれぞれのパッチの信頼度の 重みを出力 ▪ それぞれ1つの隠れユニットを持つ2つのMLPで構成 ▪ 1つ目のMLP:パッチグラフ内の各エッジ (k, j)
に対して軌跡の更新を予測 ▪ 2つ目のMLP:信頼度の重みを予測 Factor Head
AI ▪ 更新量δを足す前と足した後の再投影されたパッチが一致するように深度マッ プとカメラ姿勢を最適化 (6) ▪ 以下2つはfactor headで予測されたfactor ▪ δは再投影したパッチの更新量
▪ Σはそれぞれのパッチの重み ▪ ||.||Σ はマハラノビス距離 ▪ ω (T, P) もP′kjも同じ再投影されたパッチ ▪ 線形化された目的関数に対してガウス-ニュートンを2回反復 Differentiable Bundle Adjustment
AI ▪ tartanAir dataset (合成データ) を学習データに使用 ▪ 学習はRTX3090で3.5日 ▪ 最初の1000ステップではGTのポーズを固定しパッチの深度のみを推定させる
▪ その後ポーズと深度の両方を推定する ▪ Optical Flowの大きさが16~72pxの間にある軌跡をサンプリング ▪ ハードサンプリングだが学習不可能ではない ▪ カメラ姿勢とOpical tFlowのGTが必要 ▪ poseのloss (7) ▪ GがGT, Tがpred ▪ 最終的なloss (8) 学習
AI ▪ 初期化 ▪ 8フレーム集まるまで待ちupdate operatorの更新を12回行う ▪ Optical Flowの平均が8ピクセル以上のフレームのみを集める ▪
フロントエンド ▪ 新しいフレームから特徴とパッチを抽出 ▪ パッチの深度は前の3フレームの全てのパッチの中央値として初期化 ▪ 各パッチが抽出されたフレームからr内の隣接フレームにそのパッチのエッジを追加 ▪ 最適化 ▪ エッジが追加されたあとupdate operatorで1回の更新 ▪ その後バンドル調整の反復を2回行う ▪ 最後の10キーフレーム以外のすべてのポーズは固定 (最適化対象外) VOシステム
AI ▪ 実験結果内の提案手法はそれぞれ以下の設定 ▪ ours (default) ▪ 96パッチを使用 ▪ 10フレームを最適化対象
▪ ours (fast) ▪ 48パッチを使用 ▪ 7フレームを最適化対象 実験
AI ▪ ECCV 2020 SLAM competition (TartanAir dataset) の結果 実験
(ECCV 2020 SLAM Competition)
AI ▪ EuRoC datasetの結果 ▪ 合成データのみで学習しているにも関わらずSOTAに匹敵 実験 (EuRoC)
AI ▪ DROID-SLAMとメモリ使用量と実行速度を比較 ▪ 平均1.5~3倍の速度 ▪ 約55%~25%のメモリ使用量 実験 (実行速度とメモリ使用量)
AI ▪ update operatorのどのコンポーネントが重要かablation (b) ▪ 1d convもsoft aggregationも効いてる ▪
パッチの選択方法で比較 ▪ なんかrandom samplingがいいらしい (c) ▪ 理由は書いてない 実験 (Ablation)
AI ▪ エピポーラ拘束を満たすように深度マップとカメラ姿勢をRNNを用いて反復して更新 ▪ DROID-SLAM・DPVOとは以下の点で異なる ▪ 深度マップとカメラ姿勢を直接推定するモデルがある ▪ 教師なし学習 ▪
損失関数はphotometric error ▪ 深度マップ、カメラ姿勢の教師なし学習手法においてともにSOTAに匹敵 34 DualRefine (CVPR’23)
AI ▪ 深度推定モデルとカメラ姿勢推定モデルの教師なし学習が注目されている ▪ SfMLearnerがベース ▪ カメラ姿勢はPoseNetベースのモデルから直接推定される ▪ 幾何的な制約がなく従来手法に劣る ▪
モデルから推定された深度マップとカメラ姿勢をエピポーラ拘束を満たすように反復し て更新 ▪ 教師なしで学習された深度マップとカメラ姿勢を幾何学的に一貫させる 35 モチベーション
AI 深度推定モデル ▪ DIFFNet ▪ backbone: HRNet カメラ姿勢モデル ▪ PoseNetベース
▪ backbone: ResNet18 36 深度推定モデルとカメラ姿勢推定モデル
AI ▪ ターゲット画像とソース画像から特徴抽出 ▪ 抽出されたそれぞれの特徴からcorrelation volume (ピクセル毎の相関) を計算する ▪ 推定された姿勢に基づいてエピポーラ線に沿っている特徴のみに対して相関を計算
する ▪ 全ペアのピクセル相関を計算する必要がない ▪ DROID-SLAMでは事前に全ペアのcorrelation volumeを計算していたが、この研究では その場で計算を行う 37 エピポーラサンプリング
AI ▪ 推定された深度を用いてエピポーラ線上の特徴をサンプリングする ▪ D k [u]:エピポーラ線上のサンプリング候補 ▪ サンプリング範囲を深度に依存させる ▪
深度推定は一般的にエラーが距離とともに増加するため ▪ マルチスケールでサンプリングを行う ▪ m s の特徴とエピポーラ線上の候補からサンプリングされたm t の特徴の絶対差分を計算 (5) ▪ 絶対差分で得たマッチングコストを深度とともに2層のCNNでエンコードし更新モジュールの入力とす る エピポーラサンプリング
AI ▪ convGRUを使用して更新された隠れ状態h k+1 を用いて深度を更新 ▪ カメラ姿勢の更新は行わない ▪ tanhの活性化関数を用いて深度の更新値の範囲を制限し学習を安定させる 39
深度更新
AI ▪ エピポーラサンプリングで得た対応する特徴が一致するように姿勢を更新する ▪ 直接に特徴の誤差を取る (8) ▪ 信頼度重みWは2つの信頼度を組み合わせる ▪ 特徴マップから計算される信頼度
▪ 動的物体やテクスチャレスな領域への対応 ▪ 隠れ状態から計算される信頼度 ▪ 深度の精度が高い領域により高い信頼度を割り当てる ▪ 隠れ状態はマッチングコストの履歴を保持 40 特徴アライメントに基づくカメラ姿勢更新 カメラ姿勢の更新量
AI ▪ KITTIで学習して評価 ▪ GPU:RTX 3090 x1 ▪ バッチサイズ:12 ▪
入力画像解像度は以下の2パターン ▪ 640x192 ▪ 960x288 ▪ Optimizer: Adam 実験
AI ▪ 教師なし学習の手法においてSOTAを達成 定量結果 (深度推定)
AI ▪ 更新された後の深度マップの方がエラーが小さい (AbsRelが小さい) ▪ 下の画像の移動車両に対してエラーが大きい ▪ 反復更新によって外れ値をさらに悪化させてしまっている 定性結果 (深度推定)
AI ▪ ORB-SLAM2 (ループクロージングあり) と同等の性能を達成 定量結果 (オドメトリ推定)
AI ▪ 更新後のカメラ姿勢を用いることで性能改善されていることが分かる 定性結果 (オドメトリ推定)
AI 46 02 最近のDepth Estimation
AI 紹介する研究 絶対深度 相対深度 Depth Anything 教師モデルで擬似ラ ベルを付与してラベ ルなしデータを活用 metric3D
カメラの焦点距離 に応じて入力画像 をリサイズ metric3Dv2 深度ラベルのみから 深度と法線を推定 uniDepth 球面座標系を用いてカメ ラパラメータと深度推定 の問題を分離 Depth Anything v2 合成データを活用 MiDaS 多様なデータ セットで学習で きるように損失 関数を設計
AI ▪ 深度推定のデータセットは場所、アノテーション方法 (LiDAR, ToF, SfM) などあらゆる条件が異なっていた ▪ 多様なデータセットでの学習方法を提案しzero-shotで相対深度推定 ▪
GT、予測の視差のスケールとシフトを合わせる (5) (6) ▪ 予測とGTの視差の差分が低い順に一定の割合Umまでのデータを使う (7) ▪ Umは実験的に0.8とする ▪ つまりGTと予測の差分が大きい2割のデータは使わない 48 MiDaS (TPAMI’22)
AI ▪ 深度推定のデータセットはたくさんあるが以下の条件が全部違う ▪ 場所:屋内/屋外 ▪ 物体:動的/静的な物体 ▪ 精度:レーザー、ToF、SfM、ステレオ、人間によるアノテーション、 合成データ
▪ 画像品質、カメラ設定 ▪ データセットのサイズ ▪ インターネットの画像はアノテーションがなく、品質が低い、カメラパラ メータがない ▪ テストデータが学習データと同じ環境 (カメラパラメータ、深度アノテー ション、環境) では良好な性能を発揮するが異なる特性を持つ場合は難しい ▪ 多様なデータセットで学習することで汎化性の向上を試みる 49 従来のデータセット
AI ▪ 多様な形式でGTが提供されるため多様なデータセットで学習することは困難 ▪ 絶対的な深度 (レーザー、既知のキャリブを持つステレオ) ▪ 未知のスケールでの深度 (SfM) ▪
視差マップ (未知のキャリブレーション) ▪ 多様なデータソースを活用できる出力空間と損失関数の設計が必要 ▪ 主な問題は3つ ▪ 深度の表現が直接な深度表現と逆深度表現 ▪ スケールの曖昧さ ▪ シフトの曖昧さ 多様なデータセットでの学習
AI 1. 最小二乗法でスケールとシフトを求める (2) 2. 平均二乗誤差 (MSE) を取る Scale and
Shift Invariant Loss (1つ目)
AI ▪ MSEは外れ値に頑健でない ▪ どのデータセットでもラベルにノイズがある ▪ スケールとシフトにより頑健な損失関数を定義 1. GT、予測の視差のスケールとシフトを合わせる (6)
2. 予測とGTの視差の差分が低い順に一定の割合Umまでのデータを使う (7) a. Umは実験的に0.8とする b. つまりGTと予測の差分が大きい2割のデータは使わない Scale and Shift Invariant Loss (2つ目)
AI ▪ 視差マップの勾配がGTと同じになるように学習 (11) ▪ Kはスケールレベルで4に設定 ▪ 最終的なloss (12) Gradient
Loss
AI ▪ ラベルなしデータも含めた6200万枚以上のデータセットで学習しzero-shotで深度推定 ▪ ラベル付きデータセットでteacherモデルTを学習 ▪ Tを用いてラベルなしデータに擬似深度ラベルを付与 ▪ ラベル付き/ラベルなしデータセット両方を用いてstudentモデルSを学習 ▪
より不変な特徴を捉えるためラベルなし画像に対しては以下の摂動を与える ▪ cutmix ▪ color jitterとガウシアンブラー ▪ DINOv2とのcos類似度を高める損失関数を追加することで意味情報を捉える特徴を学習 ▪ semantic segmentationの事前学習モデルとしても有効性を確認 54 Depth Anything (CVPR’24)
AI ▪ ラベル付きデータセットでの学習はMiDaSと同じlossを採用 ▪ 6つのデータセットから150万枚のラベル付き画像を収集 ▪ ラベルなし画像は大規模な8つのデータセットから合計6200万枚以上を収集 ▪ teacherモデルにはDINOv2を使用 ▪
studentモデルはteacherモデルからファインチューニングするのではなく 再初期化 ▪ 事前学習されたsemantic segmentationのモデルで空の領域を深度0とした 55 要点
AI ▪ Depth Anything V1 (認識モデルベース) はmarigold (拡散モデルベース) より以下の点で劣る ▪
透明物体、反射面 ▪ 細かい境界 ▪ シミュレーターからの合成画像を学習に用いることで上記の問題を克服 ▪ 従来の実画像の深度データセットにはラベルノイズが多い ▪ 透明な物体や反射面はRGB-D, LiDARなどのセンサーで深度を取れない ▪ teacherモデル (DINO-v2-G) を合成画像のみで学習 ▪ studentモデルを擬似ラベル付き実画像で学習 ▪ 高解像度画像、シーンの多様性、透明物体への正確なラベルを持つ評価用データセットを構築 56 Depth Anything V2 (arxiv’24)
AI ▪ 昨今の単眼深度推定はモデルアーキテクチャの観点から2つのグループに分けられる ▪ 1つはDINOv2など識別モデルに基づくもの ▪ もう1つはstable diffusionなど拡散モデルに基づくもの ▪ それぞれの代表としてmarigoldとDepthAnythingを比較
▪ marigoldは詳細なモデリングに優れており透明な物体や反射にも対応 ▪ Depth Anythingは複雑なシーンに対応しており比較的軽量 ▪ どちらの強みも持つ基盤モデルを提案 ▪ 透明な物体 (ガラス)、反射面 (鏡、スクリーン) ▪ 詳細な推定 (椅子の脚などの細い物体、小さい穴) ▪ 推論効率 ▪ 改善のために必要なのはdata-centricな取り組み 認識モデルベースと拡散モデルベースの比較
AI ▪ それぞれのデータセットのラベル付き画像の数 ▪ Depth Anything v1:1.5M ▪ Metric3D v1:
8M ▪ Metric3D v2: 16M ▪ ラベル付き実画像の欠点 ▪ 透明な物体の深度を測れない ▪ テスクチャレス、または繰り返しパターンに対して脆弱なステレオマッチング ▪ 動的な物体に脆弱なSfM ▪ ラベルが粗い (右図a) ▪ ラベルが粗い実画像のデータセット使うと 予測も荒くなる (右図c) ▪ 透明物体の深度推定のコンペの結果は以下 ▪ MiDaS: 25.9% ▪ depth anything v1: 53.5% ▪ depth anything v2: 83.6% ラベル付き実画像の欠点
AI ▪ 最近の拡散モデルベースの研究 (depthFM, geowizard) を参考に合成画像の みをトレーニングに使用 ▪ 合成画像の利点 ▪
ラベルが細かい ▪ 透明な物体や反射面にも正確 ▪ プライバシーの問題もない 合成画像の利点
AI 合成画像を使うにはいくつかの課題がある ▪ 1. ドメインの違い ▪ 合成画像は色がクリーンでレイアウトが整然としているが実画像はランダム性がある ▪ 2. シーンカバレッジの違い
▪ 3Dモデリングしてシーンを作らなければならないのでカバレッジを上げるの大変 ▪ 4つの事前学習済みエンコーダを用いて単眼深度推定を合成画像のみで学習し実画像で推論 ▪ DINOv2-Gだけ良い結果 (右図 5) ▪ DINOv2-Gの一般化能力に依存すれば良さそうだが問題あり ▪ 学習データに少ないシーンに対応できない ▪ 空や人の頭部など (右図 6) ▪ 計算効率の悪さ 合成画像使用の課題
AI ▪ teacher model ▪ モデル:DINO-v2-G (合成画像のみで学習しても一定の精度が出ることを確認) ▪ データ:合成画像のみ ▪
student model ▪ モデル:より軽量なモデル ▪ データ:擬似ラベル付き実画像 ▪ この構成によって合成データの欠点であった以下2つを克服 ▪ ドメインギャップ ▪ シーンカバレッジ ▪ ラベル付き実画像のデータは一切使わない Depth Anything V2
AI ▪ 既存の評価ベンチマークには以下の問題あり ▪ 多様性 ▪ 鏡や細かい物体に対するノイジーなラベル ▪ 低解像度 (500x500程度)
▪ 近年はより高解像度 (1000x2000) の画像に対して正確な深度推定が求められる ▪ 上記3つの項目を考慮し、相対的な単眼深度推定のための多用途な評価ベンチマークを構築 ▪ 疎な相対深度のGTラベルを作成 ▪ 疎なため既存のベンチマークを置き換えられるわけではない A New Evaluation Benchmark: DA-2K
AI 1. キーポイントを等間隔に配置してSAMを用いてオブジェクトマスク生成 2. ランダムに2つのキーポイント選ぶ 3. それら2つのキーポイントに対する4つのモデルの相対深度が一致していれば承認 4. 一致していなければ手動でアノテーション a.
他2人のアノテーターによって3重チェック 5. 深度推定の重要な8つのシナリオ (図b) に対してGPT4を用いて多様なキーワード生成 6. それらのキーワードに対してflickrを用いて画像をダウンロード 7. 1000枚の画像に対して2000のピクセルペアをアノテーション A New Evaluation Benchmark: DA-2K (パイプライン)
AI ▪ 提案したDA-2Kベンチマークで評価 ▪ 他手法より大幅に性能向上している 実験 (DA-2K)
AI ▪ 手動でラベル付けしたデータセットと擬似ラベルデータセットでの比較 ▪ 擬似ラベルの方が性能向上していることを確認 実験 (擬似ラベルデータの有効性確認)
AI ▪ 合成データのカバレッジが足りない ▪ 予備実験で示唆されたDINO-v2-Gも学習データにないシーンには対応 できない問題は解決できていない 66 Limitations
AI ▪ 多様なデータセットで学習できるようにするためにカメラモデルの標準化を行うモジュール を提案 ▪ f_cを標準化後の焦点距離とする (固定値で実験的に1000に設定) ▪ fはデータセットから得た既知の焦点距離 ▪
方法1 ▪ GTの深度マップをf_c/fでスケーリング ▪ 方法2 ▪ 入力画像をf_c/fでリサイズ ▪ 光学中心もこれに応じて移動 ▪ GTの深度マップもリサイズ (スケーリングはなし) 67 Metric3D (ICCV’23)
AI ▪ MiDaSのlossのように画像全体に対して正規化すると細かい深度の違いを圧 縮してしまう ▪ MiDaSのlossをランダムサンプルしたパッチに対してのみ適用するlossを提案 ▪ M:パッチの数 ▪ N:画像の数
▪ u:中央値 RPNL Loss
AI ▪ 入力画像をリサイズ (方法2) の方が良い性能を示した 69 カメラモデルの標準化を行うモジュールの効果
AI ▪ 深度推定と合わせて法線推定も行う基盤モデルを提案 ▪ 法線よりも深度のアノテーションがされているデータセットの方が圧倒的に多い ▪ GTの深度から法線の学習も行う ▪ 先出のDROID-SLAM (RAFT)
と同じくRNNを用いて深度と法線を同時最適化 (右図) ▪ 各ステージに深度と法線を推定するためのprojection headを2つ用意 ▪ 疑似的な法線マップを推論結果の深度マップから最小二乗法で算出 ▪ 疑似的な法線マップと推論結果の深度マップの類似度を近づけるような損失関数を計算 し深度と法線の一貫性を保つ Metric3D v2 (arxiv’24)
AI 71 SLAMへの統合 (KITTIで評価) ▪ DROID-SLAMにMetric 3D v2の推論結果の深度マップを入力 ▪ metric
3d v2を使うことで並進方向のドリフトがかなり減っている
AI 72 SLAMへの統合 (ETH3Dで評価) ▪ DROID-SLAMにMetric 3D v2の推論結果の深度マップを入力 ▪ metric
3d v2を使うことでATEが減っている
AI ▪ カメラの内部パラメータを必要としないzero-shot絶対深度推定を提案 ▪ 深度推定とカメラの内部キャリブレーションの2つのサブタスクに分離するため に擬似球面表現の出力空間を用いた (左図) ▪ 擬似球面表現は方位角、仰角、log深度で定義される ▪
この表現だとカメラパラメータ (方位角、仰角) と深度が分離される ▪ デカルト表現 (x, y, z) だとカメラパラメータと深度が分離されず曖昧になる ▪ 球面調和関数で角度表現を埋め込み、cross attensionでdepth moduleの条件付 けをする (右図) 73 UniDepth (CVPR’24 highlight)
AI ▪ 深度推定とカメラの内部キャリブレーションという2つのサブタスクに分離す るために擬似球面表現を利用 ▪ 基底が方位角、仰角、log深度で定義される ▪ 擬似球面表現の強みはカメラ (方位角、仰角) と深度
(zlog) 成分が分離され ること ▪ デカルト表現 (x, y, z) だと分離されない ▪ この出力空間ではカメラパラメータをテンソル HxWx2として表現する ▪ HxWは入力画像の高さと幅、最後の次元は方位角と仰角 ▪ 角度の密な表現はラプラス球面調和関数符号化を介して埋め込むことができ る 疑似球面表現
AI ▪ カメラモジュールの出力の角度の埋め込みから入力シーンの深度スケールに 関する事前知識を獲得することが重要 ▪ カメラモジュールの内部表現はfx, fy, cx, cy ▪
これらに対応するトークンはスカラー値Δfx, Δfy, Δcx, Δcy ▪ これらはカメラパラメータを直接表すわけではなく以下の式のように乗算誤 差とする ▪ これにより入力画像サイズに対する不変性を保つ ▪ 推定された内部パラメータに基づいて逆投影 -> rayの生成 -> 方位角と仰角 の抽出 -> 角度のテンソルを生成 ▪ 光線は正規化され単位球上のベクトルを表す ▪ 球面調和関数で角度のテンソルから埋め込みを作成 -> cross attensionで depth moduleの条件付け ▪ depthのdecoderはMLP カメラパラメータのための角度テンソル
AI ▪ 異なるカメラモデルからの同じシーンの特徴の一貫性を強制する ▪ 同じ3D位置から抽出された特徴に対して一貫性の強制をする ▪ augmentationを2つかけた特徴と、かけていない特徴が一致するようにloss を取る ▪ augmentationを2つかけると異なるカメラモデルになると仮定
▪ つまり異なるカメラモデルの同じ3d位置の特徴は一致するようにする ▪ augmentationはrescalingとx方向の平行移動 Geometric Invariant Loss
AI ▪ 擬似球面表現上の出力に対してlossを取る ▪ 予測: ▪ GT: ▪ 平均: ▪
分散: ▪ 重み:λ 球面表現に対するLoss
AI ▪ CVPR2024 workshopで開催された単眼深度推定のコンペ ▪ 評価データセットにはSYNS-Patchesを使用 ▪ 多様なシーン、環境を含んでいる ▪ 住宅地、工業地帯、農地、屋内など
▪ 高品質で密度の高いLiDARデータ (平均78.20%のカバー率) ▪ 評価指標は画像ベース (MAE, RMSE, absRel)、point cloudベース (Fスコア、IoU、 Chamfer距離)、エッジベースのものを混合して使用 78 The Third Monocular Depth Estimation Challenge (概要)
AI 79 The Third Monocular Depth Estimation Challenge (手法) 順位
network supervision training 1 DepthAnything (BEiT384-L) ・ステレオ画像を教師データとして使用 ・SILog loss、SSII loss, gradient loss RPNL lossを複合して使用 CityScapesでfinetune 3 DepthAnything + NAFNet image reconstruction loss (monodepth2 で使われていたもの ) + smoothness loss NAFNetだけ学習 4 DepthAnything (VIT-L) + ZoeDepth ・色々なデータセットを使用 ・SILogを使用 NYUv2、KITTI, virtual KITTI, DIODEを使用 6 2つのネットワークを使用 ・DepthAnything (ViT-L) + zoeDepth ・Metric3D (ConvNext-L) + LeRes 1つ目のネットワークは SILog lossを使用 2つ目のネットワークは公開されている重 みをそのまま使用 ・KITTIでfinetune ・2つのネットワークの平均を最 終結果として使用 他チームも含めて大体Depth Anything
AI 80 The Third Monocular Depth Estimation Challenge (結果) どの指標でも上位のチームは比較的良い結果が出ている
AI 研究の流れがかなり早い コンペ開始時点ではDepth Anythingが最新のモデルだった (arxivに出た日付順) ▪ MiDaS: 2019/07 ▪ zoeDepth:
2023/02 ▪ Metric3D: 2023/07 ▪ Depth Anything: 2024/01 ▪ Metric3D v2: 2024/03 ▪ uniDepth: 2024/03 ▪ Depth Anything v2: 2024/06 81 それぞれの研究とコンペの時期 3rd Monocular Depth Estimation Challenge Open 3rd Monocular Depth Estimation Challenge Close
AI 82 余談 絵画に対しても騙されずに深度推定できている https://x.com/ducha_aiki/status/1810594710454521874?s=46&t=4936zlnCzQXDpnt6p7PXMg
AI 83 03 まとめ
AI ▪ 最近のVisual Odometry ▪ RNNを用いた推論結果の反復更新 ▪ 最近のDepth Estimation ▪
以下の点を工夫して多様なデータセットで学習することでzero-shotで深 度推定 ▪ スケール・シフト不変な損失関数の設計 ▪ ラベルなし/合成データの活用 ▪ 絶対深度推定する場合は多様なカメラパラメータへの対応 84 まとめ
AI ▪ 櫻田健. “Visual SLAM入門〜発展の歴史と基礎の習得〜”. https://speakerdeck.com/ksakurada/visual-slamru-men-fa-zhan-falseli- shi-toji-chu-falsexi-de? 85 参考文献