VGGT 論文
輸入是 N 個 RGB 圖像 I i ∈ R 3 × H × W I_i\in\mathbb{R}^{3×H×W} Ii?∈R3×H×W 的序列 ( I i ) i = 1 N (I_i)^N_{i=1} (Ii?)i=1N?,觀察相同 3D 場景。
VGGT 的 Transformer 是一個映射函數,將此序列映射為一組對應的 3D 標注, f ( ( I i ) i = 1 N ) = ( g i , D i , P i , T i ) i = 1 N f\left((I_i)^N_{i=1}\right)=(g_i,D_i,P_i,T_i)^N_{i=1} f((Ii?)i=1N?)=(gi?,Di?,Pi?,Ti?)i=1N? 。將每個圖像 I i I_i Ii? 映射到其相機參數 g ∈ R 9 g\in\mathbb{R}^9 g∈R9 (內參和外參)、深度圖、點圖和用于跟蹤的 C 維特征網格。
- 相機參數 g = [ q , t , f ] g=[q,t,f] g=[q,t,f] 采用旋轉四元數( q ∈ R 4 q\in\mathbb{R}^4 q∈R4)、平移量( t ∈ R 3 t\in\mathbb{R}^3 t∈R3)和視場( f ∈ R 2 f\in\mathbb{R}^2 f∈R2)的串聯。
- 深度圖將每個像素位置 y ∈ I ( I i ) y\in\mathcal{I}(I_i) y∈I(Ii?) 與其對應深度值 D i ( y ) ∈ R + D_i(y)\in\mathbb{R}^+ Di?(y)∈R+ 相關聯;
- 點圖將每個像素與其對應的 3D 場景點相關聯;
- 關鍵點跟蹤遵循 track-any-point,給定查詢圖像 I q I_q Iq? 中一個固定的查詢像素點 y q y_q yq?,網格輸出一個由所有圖像 I i I_i Ii? 中對應的二維點形成的軌跡 T ( y q ) = ( y i ) i = 1 N \mathcal{T}(y_q)=(y_i)^N_{i=1} T(yq?)=(yi?)i=1N?。(此處指軌跡特征)
預測順序:圖像在輸入序列中的順序是任意的,除了選擇第一個圖像作為參考幀。網絡架構設計為除第一幀之外的所有幀都是置換不變(permutation equivariant) 的。
交替注意力:逐幀自注意力分別關注每幀中的 token t k I t_k^I tkI? ,全局自注意力共同關注所有幀中的 token t I t^I tI 。這在集成不同圖像中的信息與規范化每個圖像中token的激活之間取得了平衡。默認情況下,采用 L = 24 層全局和框架級注意力。
對每張輸入圖像進行token增強,添加相機 token t i g ∈ R 1 × C ′ t_i^g\in\mathbb{R}^{1×C'} tig?∈R1×C′和4個 register tokens t i R ∈ R 4 × C ′ t_i^R\in\mathbb{R}^{4×C'} tiR?∈R4×C′ 來增強對應的圖像標記 t i I t_i^I tiI?。第一幀的相機 token 和寄存器 token 被設置與所有其他幀的不同的可學習的 token。(即第一幀獨立學習,其他幀共享可學習參數——讓模型知道第一幀作為基準,其他為相對于第一幀的變換)然后通過兩個預測頭分別輸出相機參數和密集預測結果(包括深度圖、點云圖和跟蹤特征)。相機預測頭通過4層自注意力網絡估計相機內參和外參,而密集預測頭則采用DPT層和3×3卷積生成深度圖、點云圖及其不確定性。跟蹤模塊基于CoTracker2架構,通過特征相關和自注意力機制實現跨視圖的點對應追蹤,且不依賴于時序信息,可處理任意圖像集合。 L = L c a m e r a ? + L d e p t h ? + L p m a p ? + λ L t r a c k ? ( λ = 0.05 ) L=L_{camera}?+L_{depth}?+L_{pmap?}+λL_{track}?(λ=0.05) L=Lcamera??+Ldepth??+Lpmap??+λLtrack??(λ=0.05) 其中 L c a m e r a ? , L d e p t h ? , L p m a p ? L_{camera}?,L_{depth}?,L_{pmap?} Lcamera??,Ldepth??,Lpmap?? 的系數根據實驗量級相近,認為無需加權。 - L c a m e r a L_{camera} Lcamera? 采用 Huber 損失: L c a m e r a = ∑ i = 1 N ∣ ∣ g i ^ ? g i ∣ ∣ L_{camera}=\sum_{i=1}^N||\hat{g_i}-g_i|| Lcamera?=∑i=1N?∣∣gi?^??gi?∣∣;
- L d e p t h L_{depth} Ldepth? 是基于 DUSt3R 的不確定加權深度回歸,并額外引入梯度約束: L d e p t h = ∑ i = 1 N ( ∣ ∣ ∑ D i ⊙ ( D i ^ ? D i ) ∣ ∣ + ∣ ∣ ∑ D i ⊙ ( ? D i ^ ? ? D i ) ∣ ∣ ? α log ? ∑ D i ) L_{depth}=\sum_{i=1}^N(||\sum_D^i\odot(\hat{D_i}-D_i)||+||\sum_D^i\odot(\nabla\hat{D_i}-\nabla D_i)||-\alpha\log\sum_D^i) Ldepth?=∑i=1N?(∣∣∑Di?⊙(Di?^??Di?)∣∣+∣∣∑Di?⊙(?Di?^???Di?)∣∣?αlog∑Di?);
- L t r a c k = ∑ j = 1 M ∑ i = 1 N ∣ ∣ y j , i ? y j , i ^ ∣ ∣ L_{track}=\sum_{j=1}^M\sum_{i=1}^N||y_{j,i}-\hat{y_{j,i}}|| Ltrack?=∑j=1M?∑i=1N?∣∣yj,i??yj,i?^?∣∣
真值坐標歸一化:如果我們縮放場景或更改其全局參考系,場景的圖像完全不會受到影響,這意味著任何此類變體都是 3D 重建的合法結果。我們通過對數據進行歸一化來消除這種歧義,從而做出規范的選擇并讓 transformer 輸出這個特定的變體。首先在第一臺相機 g1 的坐標系中表示所有量。然后,我們計算點圖 P 中所有 3D 點到原點的平均歐幾里得距離,并使用此比例對相機平移 t 、點圖 P 和深度圖 D 進行歸一化。重要的是,不會將這種歸一化應用于 transformer 輸出的預測;相反,我們強制它學習我們從訓練數據中選擇的歸一化。
實現細節:默認情況下,我們分別采用 L = 24 層全局和框架注意力。該模型總共包含大約 12 億個參數。我們通過使用 AdamW 優化器優化 160K 迭代的訓練損失 (2) 來訓練模型。我們使用一個余弦學習率調度器,峰值學習率為 0.0002,預熱為 8K 次迭代。對于每個批次,從隨機訓練場景中隨機采樣 2-24 幀。輸入幀、深度圖和點圖的大小將調整為最大尺寸為 518 像素。縱橫比在 0.33 和 1.0 之間隨機化。我們還對幀隨機應用顏色抖動、高斯模糊和灰度增強。訓練在 64 個 A100 GPU 上運行,為期 9 天。我們采用閾值為 1.0 的梯度范數裁剪來確保訓練穩定性。利用 bfloat16 精度和梯度檢查點來提高 GPU 內存和計算效率。
實驗結果