Kintinuous

Whelan 2012 · 論文

一行要約 — KinectFusionを無限に広がる環境へ拡張し、連続的にシフトする(循環バッファ式)TSDF体積によって、離脱していく表面スライスを段階的に構築される三角メッシュへストリーミングする手法。加えて、初期のループクロージング機構(DBoW+SURF、iSAM)を備え、これが後に変形ベースのマップ補正へと発展した。

問題

KinectFusionの固定サイズTSDF体積は、デスクや小さな部屋より大きな環境を表現できない——カメラが体積の境界を超えて移動すると、トラッキングが失敗する。そのICPオドメトリも、3次元幾何情報が乏しい領域(例えば直線的な通路)では失敗する。大規模な屋内・屋外マッピングには、再構成をリアルタイムで無限に拡張しながら、蓄積したドリフトを補正する経路を維持する必要がある。

手法とアーキテクチャ

ローリング(循環)TSDF体積。 TSDF(サイズvsv_sボクセル、寸法ddメートル、ボクセルサイズvm=d/vsv_m = d/v_s)は、もはや開始位置に固定されない。システムは、体積原点からのカメラ距離を継続的に確認し、それが移動閾値bbを超えると、体積を仮想的に平行移動してカメラを再中心化する。このシフトは整数ボクセル単位に量子化される。カメラの平行移動ti+1\mathbf{t}_{i+1}に対して、

u=ti+1vm,ti+1=ti+1vmu,gi+1=gi+u\mathbf{u} = \left\lfloor \frac{\mathbf{t}_{i+1}}{v_m} \right\rfloor, \qquad \mathbf{t}'_{i+1} = \mathbf{t}_{i+1} - v_m \mathbf{u}, \qquad \mathbf{g}_{i+1} = \mathbf{g}_i + \mathbf{u}

ここでti+1\mathbf{t}'_{i+1}は体積内の新しいカメラ位置であり、gi\mathbf{g}_iはボクセル単位での体積の大域位置を追跡する。ボクセルはメモリ上で移動しない。3次元配列は循環的に扱われ、参照はx=(x+gix)modvsx' = (x + g_i^x) \bmod v_s(y、zも同様)として再マップされるため、再中心化はベースインデックスのオフセットを更新するだけで済む。

スライス抽出とメッシュ化。 体積から離脱するボクセルのスライスは、各軸に沿って直交的にレイキャストされ、ゼロクロッシングの頂点が抽出される。これはボクセルグリッドフィルタ(リーフサイズvmv_m)によって重複除去され、再利用のためにゼロ化されてCPUへストリーミングされる。境界を越えるごとに、姿勢とそれに紐づく表面スライスMiM_iを格納するポーズグラフ要素Qn=(gi,ti,Ri,Mi)Q_n = (\mathbf{g}_i, \mathbf{t}'_i, R_i, M_i)が追加される。スライス(2ボクセルの重なりをもって抽出される)は貪欲な三角形分割アルゴリズムに供され、シームレスなメッシュを生成する。これはシステムメモリによってのみ制限される。

マルチスレッドアーキテクチャ。 階層的な設計により、GPUフロントエンドは常にブロックされない。TSDFトラッキング/統合スレッドがCloudSliceProcessorスレッド(変換とダウンサンプリング)に信号を送り、それがComponentThreadsのプール(メッシュ生成、場所認識など)に信号を送るため、マップの後処理が30 Hzトラッキングを停滞させることはない。

オドメトリの代替手法とループクロージング。 幾何学的に退化したシーンを乗り越えるため、ICPオドメトリを特徴ベースのFOVIS視覚オドメトリに置き換えることができる。局所的なメッシュの滑らかさをある程度犠牲にすることで通路での堅牢性を得るトレードオフである。ループクロージングについては、本論文はSURF記述子を用いたDBoWによる場所認識をComponentThreadとして統合し、検出された姿勢制約を保存されたt\mathbf{t}'ベクトルを介してTSDFの仮想フレームへ伝播させ、iSAMのポーズグラフ最適化を試みている——その結果、ポーズ更新に加えてメッシュ変形が必要であることが観察された。成熟したKintinuousの系譜は、まさにこれを埋め込み変形グラフによって実装しており、各メッシュ頂点を近傍のグラフノードとともに移動させる。v~i=Rk(vigk)+gk+tk\tilde{\mathbf{v}}_i = R_k(\mathbf{v}_i - \mathbf{g}_k) + \mathbf{g}_k + \mathbf{t}_k。これにより、密なマップは再構築されるのではなく整合性を持つように曲げられる。

実験結果

Intel i7-2600 (3.4 GHz)、8 GB RAM、GTX 560 Ti (2 GB)を搭載したデスクトップ上で、vs=512v_s = 512、15 FPSのハンドヘルド/車載Kinectキャプチャを用い、4つのデータセットがリアルタイムでマッピングされた: 研究室(LAB、姿勢間オドメトリ31.07 m、体積6 m)、アパートの2フロア(APT、42.31 m)、夜間に車から撮影された郊外の敷地(CAR、136.18 m、体積20 m、81.6 x 22.8 x 81.5 mの境界立方体)、そして直線の通路(CORR、56.08 m、FOVIS使用)。最終的なメッシュは150万〜310万三角形(63〜118 MB)に達する。TSDF更新時間は33.8〜41.3 msであり、フロントエンドがKinectのフル30 FPSを維持できることを示し、マップの成長には影響されない。CloudSliceProcessorはスライスあたり2.6〜4.7 msしか追加せず、メッシュ生成も平均的には追従する。FOVISオドメトリのコストは14.71 ± 4.39 msであり、CUDA ICPの10.54 ± 0.21 msに対して遅いがそれでもリアルタイムであり、通路でのドリフトが減少する代わりに局所的なメッシュの滑らかさが犠牲になる(フレーム対フレーム対フレーム対モデル)。

SLAMにおける意義

Kintinuousは、密な体積融合を単一の固定体積の外へ、通路やアパート、街路へと持ち出した最初のシステムであり、密なRGB-D SLAMがデスクトップスキャニングのデモではなく本物の大規模マッピングツールになり得ることを示した。その循環バッファによるローリング体積は、後発のシステムに採用・改良された(InfiniTAMのボクセルハッシングは同じスケーラビリティの問題を異なる方法で解決している)。また、そのループクロージングに関する検討——ポーズグラフとメッシュ変形——は、同じ主著者による直接の後継システムであるElasticFusionの中核機構となった。

関連ノート