Skip to main content

VGGT Overview

VGGT、つまり Visual Geometry Grounded Transformer は、一枚から多数枚までの image を入力として、camera、depth、point map、3D point track などの geometric attribute を一度の feed-forward inference で同時に出力する visual geometry foundation model です。

従来の Structure from MotionMulti-View Stereo では、feature matching、geometric verification、camera registration、triangulation、bundle adjustment、dense matching といった多段 pipeline が必要でした。VGGT は、これらの多くを一つの neural network forward pass に圧縮することを目指しています。

VGGT concept

自作概念図。VGGT は複数 view を transformer に通し、camera、depth、point map、point track をまとめて出力します。

何が新しいのか

VGGT 以前にも、neural network で depth、camera、matching などを推定する model はたくさんありました。VGGT が特に注目される理由は、次の三点です。

  • 一つの shared transformer から、複数の geometric attribute を同時に出力する。
  • Per-scene optimization なしに、feed-forward で動作する。
  • One view、few views、hundreds of views を同じ model で扱える

これは、「task ごとに専用の network を作る」から「一つの geometry foundation model がさまざまな geometry task を扱う」へという、generative model の世界でも見られた流れに対応します。

どこに位置するのか

3D Reconstruction の中で、VGGT は次のような場所に位置します。

つまり VGGT は、SfM や SLAM、neural reconstruction の置き換えとして使うこともできますし、それらの初期値や prior を提供する component として使うこともできます。

全体像のまとめ

VGGT を理解するうえで、次のページに分けて整理します。

ページ内容
VGGT ArchitectureShared transformer backbone と multi-view tokenization
VGGT OutputsCamera、depth、point map、3D point track の意味
VGGT vs Classical SfM and MVS従来の多段 pipeline との違い
VGGT in 3D Reconstruction PipelinesNeRF / 3DGS / SLAM との組み合わせ
VGGT Limitations and Open Issues失敗モード、metric scale、prior 依存

数式で見る統一予測

VGGT は、複数 view {Ii}i=1N\{I_i\}_{i=1}^{N} から、camera parameter、depth map、3D point track などを一回の forward pass で同時に予測します。

({K^i,R^i,t^i},{D^i},P^)=Fθ(I1:N)\left(\{\hat{\mathbf{K}}_i,\hat{\mathbf{R}}_i,\hat{\mathbf{t}}_i\},\{\hat{D}_i\},\hat{\mathcal{P}}\right) =F_\theta(I_{1:N})

学習では、各出力に対して個別の loss を組み合わせます。

L=λcLcam+λdLdepth+λpLpoint\mathcal{L}=\lambda_c\mathcal{L}_{\mathrm{cam}} +\lambda_d\mathcal{L}_{\mathrm{depth}} +\lambda_p\mathcal{L}_{\mathrm{point}}

各項の意味は次の通りです。

  • Lcam\mathcal{L}_{\mathrm{cam}} は intrinsics と extrinsics の誤差で、SE(3) 距離や reprojection 誤差として書きます。
  • Ldepth\mathcal{L}_{\mathrm{depth}} は scale 不変の depth 誤差で、Depth Anything と同様の形が使われます。
  • Lpoint\mathcal{L}_{\mathrm{point}} は 3D point track の幾何誤差で、view 間の対応が同じ 3D 点を指すように学習します。

この式の気持ちは、「SfM、MVS、tracking を別々に解く代わりに、共有 backbone から一括で出し、各 task に対する supervision を同時に与える」というものです。

関連ページ

主なソース