Skip to main content

VGGT Outputs

VGGT は一度の forward で複数種類の geometric attribute を返します。それぞれの出力が何を表し、互いにどう関係するかを整理します。

Camera parameters

各 view に対する camera parameter として、intrinsics と extrinsics を出力します。

  • Intrinsics: 焦点距離、principal point など、camera 内部の特性です。
  • Extrinsics: World 座標系から camera 座標系への rotation と translation です。

通常の SfM では、これらを feature matching と bundle adjustment から推定しますが、VGGT は image から直接推論します。これは特に、SfM が失敗しやすい sparse view や弱 texture の scene で価値があります。

Depth maps

各 view に対する dense depth map を出力します。すべての pixel に depth が割り当てられ、scene 表面の camera からの距離を表します。

VGGT の depth は、view 間で一貫することが期待されます。つまり、view A の depth から復元した 3D point は、view B の depth と整合する位置にあるはずです。これが multi-view consistency です。

Point maps

Point map は、各 pixel に対応する 3D 座標を直接出力したものです。Depth map と camera parameter があれば 3D point は計算できますが、point map ではそれを一つの map として直接予測します。

point_map[u, v] = (X, Y, Z) in some coordinate

Point map の利点は、camera と depth の整合性を陽に持つ表現になっていることです。Reconstruction pipeline では、point map を結合するだけで multi-view point cloud が得られます。

3D point tracks

3D point track は、複数 view にわたる同じ scene point の対応を、3D 空間内で表したものです。これは feature matching と triangulation の結果に相当しますが、VGGT では transformer の attention によって直接学習されます。

出力image plane の motion3D 空間の位置
2D point trackありなし
3D point trackありあり

3D point track は、tracking、dense matching、scene flow、SLAM の loop closure などに使えます。

出力同士の整合性

VGGT の重要な特徴は、これらの出力が同じ shared representation から派生することです。そのため、

  • depth と point map は基本的に整合する
  • camera と point map から再投影しても、image 上の点に近い場所に落ちる
  • 3D point track と point map は、scene 上の同じ点を指す

という性質が(学習がうまく行っていれば)成り立ちます。これは、別々の network で推定した attribute を後から組み合わせる場合との大きな違いです。

数式で見る出力同士の整合性

VGGT は、camera、depth、point track を同時に出すため、それらの出力同士は幾何的に整合しているべきです。Camera ii の predicted pose を (R^i,t^i)(\hat{\mathbf{R}}_i,\hat{\mathbf{t}}_i)、depth を D^i\hat{D}_i、3D track の点を X^j\hat{\mathbf{X}}_j とすると、整合性は次の reprojection で評価できます。

u^ij=π(K^i(R^iX^j+t^i))\hat{\mathbf{u}}_{ij}=\pi\left(\hat{\mathbf{K}}_i(\hat{\mathbf{R}}_i\hat{\mathbf{X}}_j+\hat{\mathbf{t}}_i)\right)

また、depth と 3D track の関係も使えます。

X^jR^i(D^i(u^ij)K^i1u^~ijt^i)\hat{\mathbf{X}}_j\approx\hat{\mathbf{R}}_i^\top \left(\hat{D}_i(\hat{\mathbf{u}}_{ij})\hat{\mathbf{K}}_i^{-1}\tilde{\hat{\mathbf{u}}}_{ij}-\hat{\mathbf{t}}_i\right)

この式の気持ちは、「同じ 3D 点を、camera と depth と track の三つの経路から作り出したとき、それらが一致するべきだ」ということです。学習中にこの整合性が崩れていれば、何らかの head の予測が信頼できないと判断できます。実運用では、この再投影誤差を per-track confidence に使うと、後段 BA の重み設計に役立ちます。

関連ページ

主なソース