论文阅读笔记——VGGT: Visual Geometry Grounded Transformer

发布于:2025-07-04 ⋅ 阅读:(19) ⋅ 点赞:(0)

VGGT 论文
输入是 N 个 RGB 图像 I i ∈ R 3 × H × W I_i\in\mathbb{R}^{3×H×W} IiR3×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 gR9 (内参和外参)、深度图、点图和用于跟踪的 C 维特征网格。

  • 相机参数 g = [ q , t , f ] g=[q,t,f] g=[q,t,f] 采用旋转四元数( q ∈ R 4 q\in\mathbb{R}^4 qR4)、平移量( t ∈ R 3 t\in\mathbb{R}^3 tR3)和视场( f ∈ R 2 f\in\mathbb{R}^2 fR2)的串联。
  • 深度图将每个像素位置 y ∈ I ( I i ) y\in\mathcal{I}(I_i) yI(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'} tigR1×C和4个 register tokens t i R ∈ R 4 × C ′ t_i^R\in\mathbb{R}^{4×C'} tiRR4×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)∣∣αlogDi)
  • 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=1Mi=1N∣∣yj,iyj,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 内存和计算效率。

实验结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述