DPV-SLAM

Lipson 2024 · 論文

一行要約 — DPVOを、効率的なループクロージングと大域補正機構を追加することで完全なSLAMシステム(ECCV 2024)に拡張し、単一GPUでのリアルタイム動作を維持した。

問題

深層ネットワークベースのSLAMバックボーンは優れた精度を発揮するが、「そのようなアプローチはしばしば実行コストが高く、あるいはゼロショットでの汎化性能が良くない。また、フロントエンドとバックエンドがGPUリソースへのアクセスを競い合うため、実行時間が大きく変動しうる」。具体的には、1台のデバイス上で2つのCUDAワークロードが逐次実行されるため、既存の深層SLAMシステムはバックエンドの反復処理が動く間、周期的に約30Hzから1Hz未満へ落ち込む——一貫したリアルタイム性には2台のGPUが必要になる——また、フローベースのバックエンドはすべてのフレームについて密な特徴マップを保持しなければならないため、メモリは映像の長さに比例して増大する。DPVOは効率の問題を解決したが、オドメトリのみであるためドリフトが無限に増大する。DPV-SLAMはこの設計を完成させる。すなわち、ループクロージングを備え、単一GPUで5-7GBのメモリで動作し、高い最低フレームレートを保つ単眼深層SLAMである。

手法とアーキテクチャ

DPVOベース。 フロントエンドはDPVOのパッチグラフを保持する。パッチPik\mathbf{P}_{ik}(画素座標+逆深度d\mathbf{d})はPikj=Π[Gj1GiΠ1(Pik)]\mathbf{P}'_{ikj} = \Pi[G_j^{-1} \cdot G_i \cdot \Pi^{-1}(\mathbf{P}_{ik})]によってフレームjjへ再投影される。再帰的演算子が残差Δikj\Delta_{ikj}と信頼度wikjw_{ikj}を予測し、バンドル調整は再投影を「理想的な」目標Iikj=Pikj+Δikj\mathcal{I}_{ikj} = \mathbf{P}'_{ikj} + \Delta_{ikj}へ整合させる。

arg minG,dikjΠ[Gj1GiΠ1(Pik)]IikjΣikj2,Σikj=diag(wikj)\operatorname*{arg\,min}_{G, \mathbf{d}} \sum_i \sum_{k} \sum_{j} \left\lVert \Pi[G_j^{-1} \cdot G_i \cdot \Pi^{-1}(\mathbf{P}_{ik})] - \mathcal{I}_{ikj} \right\rVert^2_{\Sigma_{ikj}}, \qquad \Sigma_{ikj} = \operatorname{diag}(w_{ikj})

近接ループクロージング(中期)。 重要な観察は次の点である。有向エッジそれぞれについて、相関演算子は目的地フレームの密な特徴のみを必要とするが、バンドル調整の因子はエッジの方向にかかわらず両方の姿勢を制約する——したがって、どのフレームがメモリコストを負担するかを制御するためにエッジを任意に反転できる。DPV-SLAMはこれにより、過去のフレームについてはパッチ特徴のみを永続的に保存する(1000フレームあたり約0.6GB)。そして、カメラが以前に訪れた姿勢の近くを通過するたびに、古いパッチから最近のフレームへの一方向エッジを挿入する。オドメトリとループクロージングの因子は一つの共有最適化に混在させ、疎かつ可変サイズのパッチグラフ向けに新設計されたCUDAブロック疎バンドル調整によって実行される。すべてが単一プロセス・単一GPUで動作する。EuRoCにおいて、近接大域バンドル調整1回は0.1-0.18秒であり、DROID-SLAMのバックエンドの0.5-5秒と比較される。

古典的ループクロージング(長期、「DPV-SLAM++」)。 補完的なCPUバックエンドがスケールドリフトを補正する。ORB特徴に対するdBoW2画像検索でループ候補を検出し、既製の検出器・マッチャーおよび構造のみのバンドル調整で、検索された各ペア周辺の3D特徴点を三角測量する。RANSAC + Umeyamaによる整合からドリフトΔSjkloopSim(3)\Delta S^{loop}_{jk} \in Sim(3)が得られる。キーフレームの類似度SiS_iは、平滑化項とループ残差を持つ姿勢グラフに対するLevenberg-Marquardt法で最適化される。

ri=logSim(3)(ΔS(i,i+1)1Si1Si+1),rjk=logSim(3)(ΔSjkloopSj1Sk)r_i = \log_{Sim(3)}\big(\Delta S_{(i,i+1)}^{-1} \cdot S_i^{-1} \cdot S_{i+1}\big), \qquad r_{jk} = \log_{Sim(3)}\big(\Delta S^{loop}_{jk} \cdot S_j^{-1} \cdot S_k\big)

その後、姿勢と深度が再スケールされる(didi/sid_i \leftarrow d_i / s_i)。検索とPGOは並列プロセスで実行され、実行時間への影響は実質ゼロである。

実験結果

5回実行の中央値、RTX-3090での計測、すべてで同一のTartanAir学習済み重みを使用(ゼロショット):

SLAMにおける意義

DPV-SLAMはDROID-SLAM→DPVOの流れを完成させる。すなわち、疎で高速化された微分可能バンドル調整ベースの視覚オドメトリに、ついにループクロージングが備わり、真のSLAMシステムとなった——そして、学習されたフロントエンドが古典的な大域処理機構(dBoW2検索、Sim(3)Sim(3)姿勢グラフ最適化)とどのように一つの計算予算内で組み合わさるかを示す明快な事例研究でもある。そのエッジ反転によるメモリの工夫と、単一GPU上でのフロントエンド・バックエンドの共存は、深層SLAMがロボットに搭載されることを妨げているシステム上の課題に対応している。

関連ノート