Skip to main content

VGGT vs Classical SfM and MVS

VGGT を「ただ強い depth model」と見ると、本質を取り違えます。重要なのは、従来の SfM / MVS pipeline が担っていた処理の大部分を、一つの learned function に置き換える点です。

従来 SfM / MVS の処理段階

Structure from MotionMulti-View Stereo は、典型的には次のような多段 pipeline です。

各段階で異なるアルゴリズムが使われ、失敗するとその後の段階にも誤りが伝播します。

VGGT の処理

VGGT では、これが次のように圧縮されます。

つまり、feature matching、verification、camera registration、triangulation の多くを transformer の attention に内部化しています。

どう違うのか

観点Classical SfM / MVSVGGT
処理段階多段 pipeline一回の feed-forward
失敗の伝播各段階で起こりうる学習された分布の外で発生
計算時間大規模 scene で長い推論は高速、view 数に依存
精度 (良条件)非常に高い競争的だが、最終 BA に劣ることも
精度 (弱 texture / sparse)失敗しやすいprior に基づき頑健
Metric scaleStereo / sensor で確保Single view では原理的に困難
解釈性各段階を分解できるBlack-box になりやすい
Fine-tuningパラメータ調整Domain shift に再学習が必要

どちらを使うべきか

両者は対立するものではなく、状況に応じて使い分け、または組み合わせます。

  • 撮影条件が良く、精度を最大化したい → 古典 SfM + MVS + BA
  • View が少ない、textureless、初期化が難しい → VGGT
  • VGGT の出力を初期値にして、後段で BA や dense MVS を回す → ハイブリッド

実際、近年の neural reconstruction pipeline では、**「VGGT で粗く取り、古典最適化で締める」**という構成が現実的な選択肢になりつつあります。

数式で見る古典 pipeline と feed-forward 推論の対比

古典 SfM / MVS では、observation を順番に幾何的に処理して中間量を得ます。

{Ii}{(u,u)}{(Ri,ti)}{Xj}{Di}\{I_i\}\to\{(\mathbf{u},\mathbf{u}')\}\to\{(\mathbf{R}_i,\mathbf{t}_i)\}\to\{\mathbf{X}_j\}\to\{D_i\}

各段階の objective は明示的に書けます。たとえば BA は次の通りです。

min{Ri,ti},{Xj}i,jρuijπ(Ki(RiXj+ti))2\min_{\{\mathbf{R}_i,\mathbf{t}_i\},\{\mathbf{X}_j\}}\sum_{i,j}\rho\left\|\mathbf{u}_{ij}-\pi(\mathbf{K}_i(\mathbf{R}_i\mathbf{X}_j+\mathbf{t}_i))\right\|^2

VGGT などの feed-forward 系は、これらの中間量を学習された写像 FθF_\theta に置き換えます。

({Ri,ti},{Di},P^)=Fθ({Ii})(\{\mathbf{R}_i,\mathbf{t}_i\},\{D_i\},\hat{\mathcal{P}})=F_\theta(\{I_i\})

この式の気持ちは、「明示的な最適化の積み重ねを、ひとつの学習された関数に圧縮する」というものです。利点は、初期化失敗が起きにくく、計算が一定時間で済むことです。一方で、ill-conditioned な scene や training 分布から外れる scene では、出力が信頼できないことがあります。そのため、VGGT 系の出力は古典 BA や MVS の初期値として使う hybrid 構成がよく取られます。

関連ページ

主なソース