論文閱讀:VGGT: Visual Geometry Grounded Transformer
今天介紹一篇 CVPR 2025 的 best paper,這篇文章是牛津大學的 VGG 團隊的工作,主要圍繞著 3D 視覺中的各種任務,這篇文章提出了一種多任務統一的架構,實現一次輸入,同時預測多個任務,包括相機參數,點圖,深度圖以及相機軌跡。
Abstract
我們提出了 VGGT,這是一種前饋神經網絡,能夠從一個、幾個或數百個場景視圖中直接推斷出場景的所有關鍵 3D 屬性,包括相機參數、點圖、深度圖和 3D 點軌跡。在 3D 計算機視覺領域,模型通常受限于單一任務并針對其進行專門優化,而該方法則是這一領域的一項進步。它還具備簡單高效的特點,重建圖像的時間不到一秒,且性能仍優于那些需要借助視覺幾何優化技術進行后處理的替代方案。該網絡在多項 3D 任務中均取得了最先進的成果,包括相機參數估計、多視圖深度估計、密集點云重建以及 3D 點跟蹤。我們還表明,將預訓練的 VGGT 用作特征骨干網絡,能顯著提升下游任務的性能,例如非剛性點跟蹤和前饋新視圖合成。
- 圖 1 VGGT 是一個大型前饋 Transformer,其 3D 歸納偏差極少,訓練所用數據為大量帶 3D 標注的數據集。該模型可接收多達數百張圖像,能在不到一秒的時間內一次性為所有圖像預測出相機參數、點圖、深度圖和點軌跡,且在無需進一步處理的情況下,性能往往優于基于優化的同類方法。
Introduction
我們研究的問題是:利用前饋神經網絡對一組圖像所捕捉場景的 3D 屬性進行估計。傳統上,3D 重建采用視覺幾何方法,借助如光束平差法(Bundle Adjustment, BA)[33] 等迭代優化技術。機器學習在其中常發揮重要的補充作用,用于解決僅靠幾何無法完成的任務,例如特征匹配和單目深度預測。兩者的融合日益緊密,如今像 VGGSfM [83] 這類最先進的運動恢復結構(Structure-from-Motion, SfM)方法,通過可微分 BA 將機器學習與視覺幾何進行端到端結合。即便如此,視覺幾何在 3D 重建中仍占據主導地位,這無疑增加了重建過程的復雜性與計算成本。
隨著神經網絡的性能愈發強大,我們不禁提出疑問:3D 任務是否終于可以由神經網絡直接完成,從而幾乎完全避開幾何后處理步驟?諸如 DUSt3R [87] 及其改進版本 MASt3R [43] 等近期研究成果已在這一方向上展現出了良好前景,但這些網絡一次僅能處理兩張圖像,且若要重建更多圖像,仍需依賴后處理步驟對成對重建結果進行融合。
在本文中,我們朝著進一步邁向消除 3D 幾何后處理優化需求的目標。為此,我們提出了視覺幾何基礎 Transformer(VGGT)—— 一種前饋神經網絡,能夠從一個、幾個乃至數百個場景輸入視圖中完成 3D 重建。VGGT 可預測全套 3D 屬性,包括相機參數、深度圖、點圖和 3D 點軌跡。它通過單次前向傳播在數秒內即可完成這一過程。值得注意的是,即便不進行進一步處理,其性能也常常優于基于優化的替代方案。這與 DUSt3R、MASt3R 或 VGGSfM 形成了顯著差異,后三者仍需要代價高昂的迭代后優化才能獲得可用結果。
我們還表明,無需為 3D 重建專門設計特定網絡。相反,VGGT 基于一個相當標準的大型 Transformer [79] 構建,除了在逐幀注意力與全局注意力之間交替進行外,不存在特定的 3D 或其他歸納偏差,但其在大量帶有 3D 標注的公開數據集上完成了訓練。因此,VGGT 的構建模式與自然語言處理和計算機視覺領域的大型模型一致,例如 GPT 系列 [1, 18, 101]、CLIP [56]、DINO [6, 53] 以及 Stable Diffusion [22]。這些模型已成為通用的骨干網絡,通過微調便能解決新的特定任務。同樣,我們發現 VGGT 計算得到的特征能顯著提升下游任務的性能,如動態視頻中的點跟蹤以及新視圖合成。
近期已有不少大型 3D 神經網絡的實例,包括 DepthAnything [97]、MoGe [86] 以及 LRM [34] 等。但這些模型僅聚焦于單一 3D 任務,例如單目深度估計或新視圖合成。與之不同的是,VGGT 采用共享骨干網絡,同步預測所有目標 3D 量。我們證明,盡管可能存在冗余信息,但通過學習預測這些相互關聯的 3D 屬性,整體精度反而得到了提升。同時我們發現,在推理階段,可通過單獨預測的深度圖和相機參數推導得到點圖,相較于直接使用專門的點圖頭,這種方式能獲得更高的精度。
綜上,我們的貢獻如下:
- 提出了 VGGT—— 一種大型前饋 Transformer。給定一個、幾個乃至數百張場景圖像,它能在數秒內預測出場景的所有關鍵 3D 屬性,包括相機內參和外參、點圖、深度圖以及 3D 點軌跡。
- 證實了 VGGT 的預測結果可直接使用,其性能極具競爭力,且通常優于采用慢速后處理優化技術的最先進方法。
- 研究實驗發現,當進一步與 BA 后處理相結合時,VGGT 在各方面均能取得最先進的結果 —— 即便與專注于部分 3D 任務的方法相比亦是如此,且往往能顯著提升結果質量。
Method
- 圖 2 架構概述:我們的模型首先通過 DINO 將輸入圖像分割為tokens,并附加相機tokens以用于相機參數預測。隨后,模型交替使用逐幀自注意力層和全局自注意力層。相機頭負責最終預測相機外參和內參,而 DPT 頭 [87] 則用于生成各類密集輸出。
Problem definition and notation
輸入為觀測同一 3D 場景的 N 張 RGB 圖像序列(Ii)i=1N(I_i)_{i=1}^N(Ii?)i=1N?,其中每張圖像Ii∈R3×H×WI_i \in \mathbb{R}^{3 \times H \times W}Ii?∈R3×H×W。VGGT 的 Transformer 是一個函數,它將該序列映射到對應的 3D 標注集,每幀對應一組標注:
f((Ii)i=1N)=(gi,Di,Pi,Ti)i=1N(1) f\left((I_i)_{i=1}^N\right) = (g_i, D_i, P_i, T_i)_{i=1}^N \tag{1} f((Ii?)i=1N?)=(gi?,Di?,Pi?,Ti?)i=1N?(1)
因此,該 Transformer 將每張圖像IiI_iIi?映射至其相機參數gi∈R9g_i \in \mathbb{R}^9gi?∈R9(內參和外參)、深度圖Di∈RH×WD_i \in \mathbb{R}^{H \times W}Di?∈RH×W、點圖Pi∈R3×H×WP_i \in \mathbb{R}^{3 \times H \times W}Pi?∈R3×H×W,以及一個C維特征網格 Ti∈RC×H×WT_i \in \mathbb{R}^{C \times H \times W}Ti?∈RC×H×W 用于表示點的軌跡。
對于 相機參數 gig_igi?,我們采用文獻 [83] 中的參數化方式,令g=[q,t,f]g = [q, t, f]g=[q,t,f],其中包含旋轉四元數q∈R4q \in \mathbb{R}^4q∈R4、平移向量t∈R3t \in \mathbb{R}^3t∈R3以及視場角f∈R2f \in \mathbb{R}^2f∈R2,三者依次拼接構成 ggg。我們假設相機的主點位于圖像中心,這在運動恢復結構(SfM)框架中是常見設定 [63, 83]。
我們將圖像 IiI_iIi? 的定義域記為 I(Ii)={1,…,H}×{1,…,W}I(I_i) = \{1, \ldots, H\} \times \{1, \ldots, W\}I(Ii?)={1,…,H}×{1,…,W},即像素位置的集合。深度圖 DiD_iDi? 將每個像素位置 y∈I(Ii)y \in I(I_i)y∈I(Ii?) 與從第 iii 個相機觀測到的對應深度值 Di(y)∈R+D_i(y) \in \mathbb{R}^+Di?(y)∈R+ 相關聯。同樣地,點圖 PiP_iPi? 將每個像素與對應的 3D 場景點 Pi(y)∈R3P_i(y) \in \mathbb{R}^3Pi?(y)∈R3 相關聯。重要的是,與 DUSt3R [87] 中類似,點圖具有視點不變性,即 3D 點 Pi(y)P_i(y)Pi?(y) 是在第一個相機 g1g_1g1? 的坐標系中定義的,我們將該坐標系作為世界參考坐標系。
最后,針對關鍵點跟蹤任務,我們采用 “跟蹤任意點” 的方法(如 [15, 39] 所述)。具體而言,給定查詢圖像 IqI_qIq? 中的一個固定查詢圖像點 yqy_qyq?,網絡會輸出一條軌跡 T?(yq)=(yi)i=1NT^\star(y_q) = (y_i)_{i=1}^NT?(yq?)=(yi?)i=1N?,該軌跡由所有圖像 IiI_iIi? 中對應的 2D 點 yi∈R2y_i \in \mathbb{R}^2yi?∈R2 構成。
需要注意的是,上述 Transformer 函數 fff 并不直接輸出軌跡,而是輸出用于跟蹤的特征 Ti∈RC×H×WT_i \in \mathbb{R}^{C \times H \times W}Ti?∈RC×H×W。跟蹤任務由一個獨立模塊完成(詳見第 3.3 節),該模塊實現函數T((yj)j=1M,(Ti)i=1N)=((y^j,i)i=1N)j=1MT\left((y_j)_{j=1}^M, (T_i)_{i=1}^N\right) = \left((\hat{y}_{j,i})_{i=1}^N\right)_{j=1}^MT((yj?)j=1M?,(Ti?)i=1N?)=((y^?j,i?)i=1N?)j=1M?。它接收查詢點 yqy_qyq? 以及 Transformer 函數 fff 輸出的密集跟蹤特征 TiT_iTi?,進而計算出軌跡。Transformer 網絡 fff 與跟蹤模塊 TTT 通過端到端的方式聯合訓練。
預測順序:輸入序列中圖像的順序是任意的,但需將第一張圖像選定為參考幀。網絡架構在設計上,除第一幀外,對其余所有幀均具有排列等變性。
過度完整預測:值得注意的是,VGGT 所預測的所有量并非都是獨立的。例如,正如 DUSt3R [87] 所展示的那樣,相機參數 ggg 可從具有不變性的點圖 PPP 中推斷得出 —— 比如通過求解 nnn 點透視(Perspective-n-Point, PnP)問題 [23, 42]。此外,深度圖也可由點圖和相機參數推導得出。然而,正如我們在第 4.5 節中所展示的,即便這些量之間存在閉式關系,在訓練階段讓 VGGT 明確預測上述所有量,仍能帶來顯著的性能提升。同時,在推理階段觀察到,將獨立估計的深度圖與相機參數相結合,相較于直接使用專門的點圖分支,能生成更精確的 3D 點。
Feature Backbone
借鑒 3D 深度學習領域的近期研究成果 [36, 87, 90],我們設計了一種架構簡潔且 3D 歸納偏差極少的模型,讓模型從大量帶 3D 標注的數據中自主學習。具體而言,我們將模型 fff 實現為一個大型 Transformer [79]。為此,首先通過 DINO [53] 將每張輸入圖像 III 分割為一組包含 KKK 個 tokens 的集合 tI∈RK×Ct_I \in \mathbb{R}^{K \times C}tI?∈RK×C。隨后,來自所有幀的圖像tokens組合集(即tI=∪i=1N{tIi}t_I = \cup_{i=1}^N \{t_{I_i}\}tI?=∪i=1N?{tIi??})將通過主網絡結構進行處理,該過程會交替使用逐幀自注意力層和全局自注意力層。
交替注意力機制:我們對標準 Transformer 設計稍作調整,引入了交替注意力(Alternating-Attention, AA)機制,使 Transformer 能夠以交替方式聚焦于單幀內部和全局范圍。具體而言,逐幀自注意力單獨關注每個幀內的 tokens tIkt_{I_k}tIk??,而全局自注意力則聯合關注所有幀的 tokens tIt_ItI?。這在整合不同圖像信息與標準化單張圖像內 tokens 激活值之間取得了平衡。默認情況下,我們采用 24 層(L=24L=24L=24)全局和逐幀注意力層。我們的實驗證明這種交替注意力架構能帶來顯著的性能提升。需要注意的是,我們的架構未使用任何交叉注意力層。
Prediction heads
下面我們將闡述函數 fff 如何預測相機參數、深度圖、點圖和點軌跡。首先,對于每張輸入圖像IiI_iIi?,我們在其對應的圖像 tokens tIit_{I_i}tIi??基礎上,增加一個額外的相機tokens tig∈R1×C′t_{i}^{g} \in \mathbb{R}^{1 \times C'}tig?∈R1×C′ 和四個配準tokens [10] tiR∈R4×C′t_{i}^{R} \in \mathbb{R}^{4 \times C'}tiR?∈R4×C′。隨后,將 (tiI,tig,tiR)i=1N(t_{i}^{I}, t_{i}^{g}, t_{i}^{R})_{i=1}^N(tiI?,tig?,tiR?)i=1N?的拼接結果輸入交替注意力(AA)Transformer,得到輸出tokens (t^Ii,t^gi,t^Ri)i=1N(\hat{t}_{I_i}, \hat{t}_{g_i}, \hat{t}_{R_i})_{i=1}^N(t^Ii??,t^gi??,t^Ri??)i=1N?。這里,第一幀的相機 tokens 和配準 tokens(t1g:=tˉgt_{1}^{g} := \bar{t}^{g}t1g?:=tˉg,t1R:=tˉRt_{1}^{R} := \bar{t}^{R}t1R?:=tˉR)被設置為一組獨特的可學習tokens tˉg\bar{t}^{g}tˉg、tˉR\bar{t}^{R}tˉR,而其他所有幀的相機 tokens 和配準 tokens 則為另一組可學習tokens,二者并不相同。這一設計使模型能夠區分第一幀與其他幀,并在第一個相機的坐標系中表示 3D 預測結果。需要注意的是,經過優化的相機 tokens 和配準 tokens 現在具有幀特異性,這是因為我們的交替注意力 Transformer 包含逐幀自注意力層,使得 Transformer 能夠將相機 tokens 和配準 tokens 與同一圖像的對應tokens進行匹配。按照常規做法,輸出的配準 tokens t^iR\hat{t}_{i}^{R}t^iR? 會被丟棄,而 t^iI\hat{t}_{i}^{I}t^iI? 和 t^ig\hat{t}_{i}^{g}t^ig? 則用于預測任務。
坐標系:如上所述,我們在第一個相機 g1g_1g1? 的坐標系中預測相機參數、點圖和深度圖。因此,為第一個相機輸出的相機外參被設為單位矩陣,即第一個旋轉四元數 q1=[0,0,0,1]q_1 = [0, 0, 0, 1]q1?=[0,0,0,1],第一個平移向量 t1=[0,0,0]t_1 = [0, 0, 0]t1?=[0,0,0]。需注意的是,特殊的相機 tokens 和配準 tokens t1g:=tˉgt_{1}^{g} := \bar{t}^gt1g?:=tˉg、t1R:=tˉRt_{1}^{R} := \bar{t}^Rt1R?:=tˉR 使 Transformer 能夠識別出第一個相機。
相機參數預測:相機參數(g^i)i=1N(\hat{g}_i)_{i=1}^N(g^?i?)i=1N? 是通過四個額外的自注意力層處理輸出的相機 tokens (t^gi)i=1N(\hat{t}_{g_i})_{i=1}^N(t^gi??)i=1N?,再經由一個線性層得到的。這構成了用于預測相機內參和外參的相機頭。
密集預測:輸出的圖像 tokens t^Ii\hat{t}_{I_i}t^Ii?? 用于預測密集輸出,即深度圖DiD_iDi?、點圖 PiP_iPi? 和跟蹤特征 TiT_iTi?。更具體地說,首先通過 DPT 層 [57] 將 t^Ii\hat{t}_{I_i}t^Ii?? 轉換為密集特征圖 Fi∈RC×H×WF_i \in \mathbb{R}^{C \times H \times W}Fi?∈RC×H×W。然后,通過一個 3×3 卷積層將每個 FiF_iFi? 映射到對應的深度圖 DiD_iDi? 和點圖 PiP_iPi?。此外,DPT 頭還輸出密集特征 Ti∈RC×H×WT_i \in \mathbb{R}^{C \times H \times W}Ti?∈RC×H×W,作為跟蹤頭的輸入。我們還分別為每個深度圖和點圖預測了隨機不確定性 [40, 51] ΣiD∈R+H×W\Sigma_i^{D} \in \mathbb{R}^{H \times W}_+ΣiD?∈R+H×W? 和 ΣiP∈R+H×W\Sigma_i^{P} \in \mathbb{R}^{H \times W}_+ΣiP?∈R+H×W?。這些不確定性圖用于損失函數中,并且在訓練后,與模型對預測結果的置信度成比例。
跟蹤任務:為實現跟蹤模塊 TTT,我們采用了 CoTracker2 架構 [39],該架構以密集跟蹤特征 TiT_iTi? 作為輸入。具體而言,給定查詢圖像 IqI_qIq? 中的查詢點 yjy_jyj?(訓練期間,我們始終設 q=1q=1q=1,但理論上任何其他圖像都可作為查詢圖像),跟蹤頭 TTT 會預測所有圖像 IiI_iIi? 中與 yjy_jyj? 對應同一 3D 點的 2D 點集 T((yj)j=1M,(Ti)i=1N)=((y^j,i)i=1N)j=1MT\left((y_j)_{j=1}^M, (T_i)_{i=1}^N\right) = \left((\hat{y}_{j,i})_{i=1}^N\right)_{j=1}^MT((yj?)j=1M?,(Ti?)i=1N?)=((y^?j,i?)i=1N?)j=1M?。為實現這一目標,首先在查詢點 yjy_jyj? 處對查詢圖像的特征圖TqT_qTq? 進行雙線性采樣,以獲取該點的特征。隨后,將此特征與所有其他特征圖 TiT_iTi?(i≠qi \neq qi=q)進行關聯,得到一組關聯圖。這些關聯圖經自注意力層處理后,即可預測出與 yjy_jyj? 對應的最終 2D 點 y^i\hat{y}_{i}y^?i?。需要注意的是,與 VGGSfM [83] 類似,我們的跟蹤器不依賴輸入幀的時間順序,因此可應用于任意輸入圖像集,而非僅局限于視頻。
Training
訓練損失:我們使用多任務損失對 VGGT 模型 fff 進行端到端訓練:
L=Lcamera+Ldepth+Lpmap+λLtrack(2) \mathcal{L} = \mathcal{L}_{\text{camera}} + \mathcal{L}_{\text{depth}} + \mathcal{L}_{\text{pmap}} + \lambda\mathcal{L}_{\text{track}} \tag{2} L=Lcamera?+Ldepth?+Lpmap?+λLtrack?(2)
我們發現相機損失(Lcamera\mathcal{L}_{\text{camera}}Lcamera?)、深度損失(Ldepth\mathcal{L}_{\text{depth}}Ldepth?)和點圖損失(Lpmap\mathcal{L}_{\text{pmap}}Lpmap?)的數值范圍相近,無需相互加權。跟蹤損失 Ltrack\mathcal{L}_{\text{track}}Ltrack? 通過系數 λ=0.05\lambda = 0.05λ=0.05 進行權重下調。下面依次介紹每個損失項:
-
相機損失 Lcamera\mathcal{L}_{\text{camera}}Lcamera? 用于監督相機參數 g^\hat{g}g^?:
Lcamera=∑i=1N∥g^i?gi∥?\mathcal{L}_{\text{camera}} = \sum_{i=1}^N \|\hat{g}_i - g_i\|_\epsilonLcamera?=i=1∑N?∥g^?i??gi?∥??
其中使用 Huber 損失∣?∣?|\cdot|_\epsilon∣?∣?? 來衡量預測相機參數 g^i\hat{g}_ig^?i?與真值gig_igi?之間的差異。
-
深度損失 Ldepth\mathcal{L}_{\text{depth}}Ldepth? 借鑒了 DUSt3R [129] 的做法,采用隨機不確定性損失 [59, 75],通過預測的不確定性圖 Σ^iD\hat{\Sigma}_i^{D}Σ^iD? 對預測深度 D^i\hat{D}_iD^i? 與真值深度 DiD_iDi? 之間的差異進行加權。與 DUSt3R 不同的是,我們還加入了一個基于梯度的項(在單目深度估計中被廣泛使用)。因此,深度損失為:
Ldepth=∑i=1N∥Σ^iD⊙(D^i?Di)∥+∥Σ^iD⊙(?D^i??Di)∥?αlog?Σ^iD\mathcal{L}_{\text{depth}} = \sum_{i=1}^N \|\hat{\Sigma}_i^{D} \odot (\hat{D}_i - D_i)\| + \|\hat{\Sigma}_i^{D} \odot (\nabla\hat{D}_i - \nabla D_i)\| - \alpha\log\hat{\Sigma}_i^{D}Ldepth?=i=1∑N?∥Σ^iD?⊙(D^i??Di?)∥+∥Σ^iD?⊙(?D^i???Di?)∥?αlogΣ^iD?
其中 ⊙\odot⊙ 表示通道廣播的元素級乘積。 -
點圖損失的定義與之類似,但使用點圖不確定性 Σ^iP\hat{\Sigma}_i^{P}Σ^iP?:
Lpmap=∑i=1N∥Σ^iP⊙(P^i?Pi)∥+∥Σ^iP⊙(?P^i??Pi)∥?αlog?Σ^iP\mathcal{L}_{\text{pmap}} = \sum_{i=1}^N \|\hat{\Sigma}_i^{P} \odot (\hat{P}_i - P_i)\| + \|\hat{\Sigma}_i^{P} \odot (\nabla\hat{P}_i - \nabla P_i)\| - \alpha\log\hat{\Sigma}_i^{P}Lpmap?=i=1∑N?∥Σ^iP?⊙(P^i??Pi?)∥+∥Σ^iP?⊙(?P^i???Pi?)∥?αlogΣ^iP?
-
最后,跟蹤損失定義為
Ltrack=∑j=1M∑i=1N∥y^j,i?yj,i∥\mathcal{L}_{\text{track}} = \sum_{j=1}^M \sum_{i=1}^N \|\hat{y}_{j,i} - y_{j,i}\| Ltrack?=j=1∑M?i=1∑N?∥y^?j,i??yj,i?∥
其中,外層求和遍歷查詢圖像 IqI_qIq? 中所有真值查詢點 yjy_jyj?,yj,iy_{j,i}yj,i? 是 yjy_jyj? 在圖像 IiI_iIi? 中的真值對應點,y^j,i\hat{y}_{j,i}y^?j,i? 是通過跟蹤模塊 T((yj)j=1M,(Ti)i=1N)T\left((y_j)_{j=1}^M, (T_i)_{i=1}^N\right)T((yj?)j=1M?,(Ti?)i=1N?) 得到的對應預測點。此外,借鑒 CoTracker2 [57] 的做法,我們還應用了可見性損失(二元交叉熵),用于估計一個點在給定幀中是否可見。
真值坐標歸一化:若對場景進行縮放或更改其全局參考系,場景的圖像并不會受到任何影響,這意味著此類變換后的結果均屬于 3D 重建的合理結果。為消除這種歧義,我們通過對數據進行歸一化來確定一個標準形式,并讓 Transformer 輸出這一特定形式的結果。我們借鑒了 [129] 的做法:首先,將所有量都轉換到第一個相機 g1g_1g1? 的坐標系下進行表示;然后,計算點圖 PPP 中所有 3D 點到原點的平均歐氏距離,并以此縮放尺度對相機平移向量 ttt、點圖 PPP 和深度圖 DDD 進行歸一化。重要的是,與 [129] 不同的是,我們不對 Transformer 輸出的預測結果進行此類歸一化操作;相反,我們讓模型從訓練數據中自主學習我們所設定的歸一化規則。
實現細節:默認情況下,我們分別采用 24 層(L=24L=24L=24)全局注意力層和逐幀注意力層。該模型總計包含約 12 億個參數。我們通過 AdamW 優化器對訓練損失(公式 2)進行優化,以訓練模型,共訓練 16 萬次迭代。學習率調度采用余弦調度策略,峰值學習率設為 0.0002,熱身迭代次數為 8000 次。對于每個批次,我們從隨機選取的訓練場景中隨機采樣 2-24 幀。輸入幀、深度圖和點圖均調整為最大維度為 518 像素的尺寸,寬高比隨機設定在 0.33 到 1.0 之間。我們還會對幀隨機應用顏色抖動、高斯模糊和灰度增強處理。訓練在 64 塊 A100 GPU 上進行,耗時 9 天。為保證訓練穩定性,我們采用梯度范數裁剪策略,閾值設為 1.0。同時,我們借助 bfloat16 精度和梯度檢查點技術,以提升 GPU 內存利用率和計算效率。
訓練數據:該模型的訓練采用了大量且多樣的數據集集合,包括:Co3Dv2 [88]、BlendMVS [146]、DL3DV [69]、MegaDepth [64]、Kubric [41]、WildRGB [135]、ScanNet [18]、HyperSim [89]、Mapillary [71]、Habitat [107]、Replica [104]、MVS-Synth [50]、PointOdyssey [159]、Virtual KITTI [7]、Aria Synthetic Environments [82]、Aria Digital Twin [82],以及一個與 Objaverse [20] 類似的、由藝術家創作資產構成的合成數據集。這些數據集涵蓋多種領域,包括室內和室外環境,且包含合成場景與真實世界場景。這些數據集的 3D 標注來源于多個渠道,例如直接的傳感器采集、合成引擎或運動恢復結構(SfM)技術 [95]。我們所采用的數據集組合在規模和多樣性上與 MASt3R [30] 所使用的數據集大致相當。
Formal Definitions
相機外參是相對于世界參考系定義的,而我們將世界參考系設定為第一個相機的坐標系。為此,我們引入兩個函數:第一個函數 γ(g,p)=p′\gamma(g,p) = p'γ(g,p)=p′,其作用是將 ggg 所編碼的剛性變換應用于世界參考系中的點 ppp,從而得到相機參考系中對應的點 p′p'p′;第二個函數 π(g,p)=y\pi(g,p) = yπ(g,p)=y 則進一步執行透視投影,將 3D 點 ppp 映射為 2D 圖像點 yyy。我們還通過 πD(g,p)=d∈R+\pi_D(g,p) = d \in \mathbb{R}^+πD?(g,p)=d∈R+ 來表示從相機 ggg 觀測到的點的深度。我們將場景建模為一組正則曲面 Si?R3S_i \subset \mathbb{R}^3Si??R3 的集合。由于場景可能隨時間變化 [151],我們將其設定為第 iii 張輸入圖像的函數。像素位置 y∈I(Ii)y \in I(I_i)y∈I(Ii?) 處的深度定義為場景中所有投影到 yyy 的 3D 點 ppp 的最小深度,即 Di(y)=min?{πD(gi,p):p∈Si∧π(gi,p)=y}D_i(y) = \min\{\pi_D(g_i,p) : p \in S_i \land \pi(g_i,p) = y\}Di?(y)=min{πD?(gi?,p):p∈Si?∧π(gi?,p)=y}。像素位置 yyy 處的點則由 Pi(y)=γ(g,p)P_i(y) = \gamma(g,p)Pi?(y)=γ(g,p) 給出,其中 p∈Sip \in S_ip∈Si? 是滿足上述最小化條件的 3D 點,即 p∈Si∧π(gi,p)=y∧πD(gi,p)=Di(y)p \in S_i \land \pi(g_i,p) = y \land \pi_D(g_i,p) = D_i(y)p∈Si?∧π(gi?,p)=y∧πD?(gi?,p)=Di?(y)。
Implementation Details
架構:如主論文所述,VGGT 由 24 個注意力塊組成,每個塊配備一個逐幀自注意力層和一個全局自注意力層。借鑒 DINOv2 [78] 中使用的 ViT-L 模型,每個注意力層的特征維度設為 1024,并采用 16 個注意力頭。我們使用 PyTorch 的官方注意力層實現(即 torch.nn.MultiheadAttention),并啟用閃現注意力(flash attention)。為穩定訓練,每個注意力層還采用了 QKNorm [48] 和 LayerScale [115],其中 LayerScale 的初始值設為 0.01。在圖像 tokenization 方面,我們使用 DINOv2 [78] 并添加位置嵌入。與 [143] 相同,我們將第 4、11、17 和 23 個塊的 token 輸入到 DPT [87] 中進行上采樣。
訓練過程:構建訓練批次時,我們首先隨機選擇一個訓練數據集(每個數據集的權重不同但大致相近,如 [129] 所述),然后從該數據集中隨機采樣一個場景(均勻采樣)。訓練階段,每個場景選擇 2 至 24 幀,同時保證每個批次內的總幀數恒定為 48 幀。訓練使用各數據集各自的訓練集,排除幀數量少于 24 幀的訓練序列。RGB 幀、深度圖和點圖首先進行等比縮放,使較長邊為 518 像素。然后,對較短邊(圍繞主點)進行裁剪,裁剪后尺寸在 168 至 518 像素之間,且為 14 像素 patch 大小的倍數。值得一提的是,我們對同一場景內的每幀獨立應用強色彩增強,以提升模型對不同光照條件的魯棒性。真值軌跡的構建遵循 [33, 105, 125] 的方法:將深度圖反投影為 3D 點,再將點重投影到目標幀,保留重投影深度與目標深度圖匹配的對應關系。批次采樣時,排除與查詢幀相似度低的幀。在極少數無有效對應關系的情況下,會忽略跟蹤損失。