跳过正文
  1. Notes/

简单理解 VGGT(Visual Geometry Grounded Transformer)

· loading · loading · ·
AI Embodied AI
目录
简单理解 VGGT(Visual Geometry Grounded Transformer)

0. 前言
#

Visual Geometry Grounded Transformer(VGGT)是 CVPR 2025 收录的一篇论文,论文链接如下:《VGGT: Visual Geometry Grounded Transformer

传统的 3D 场景重建依赖于经典的视觉几何方法(Visual Geometry),如:光束法平差(Bundle Adjustment,BA)和运动恢复结构(Structure from Motion,SfM)。这些方法通常存在以下问题:涉及复杂的迭代优化过程,计算量大且耗时;依赖后处理步骤,限制了整体效率。

而 VGGT 旨在彻底放弃对几何后处理的依赖,实现真正的端到端重建,实现高效、简便且准确的 3D 重建网络架构。已经有一些研究在这个方向做出尝试,例如:DUSt3R 和 MASt3R,但它们局限于处理两帧图像,且仍需要一定的后处理融合操作来完成更多图像的重建。

VGGT 是一个大型前馈式神经网络,仅需一次前向传播,就能在数秒内将输入的单张或多张图像一次性预测出场景的全部 3D 关键属性(例如相机内外参数、深度图、点图、3D点轨迹等)。

与此同时,VGGT 架构十分简洁,它基于一个 Transformer 模型,没有引入特别的 3D 或几何先验,而是借助大规模带有 3D 标注的公开数据集进行训练。它使用一个共享的骨干网络同时预测相关的 3D 属性,这些属性相互关联,增强了网络对几何的整体理解,从而提升了预测的准确性。但在推理时,模型又可以从独立预测的深度图和相机参数中推导出点图,这样得到的点图比直接预测的点图更加准确,这又体现其架构的灵活性。

VGGT 不仅可以完成从 2D 到 3D 的高质量几何理解,在作为特征骨干网络时,也可能大幅提升点跟踪和新视角合成等下游任务的表现。

1. 整体架构
#

VGGT 的整体架构如图所示:

1. 输入
#

最左侧是模型的输入,图中显示的是从不同视角拍摄的同一场景的一组图像序列(RGB即可),每张图像首先被分割为若干图像 patch,再使用 DINO(a form of self-DIstillation with NO labels) 提取其 token。

DINO 是一个自监督学习模型,这里的作用是将输入图像分块(patchify),转化为一系列的 token,每个 token 可以理解为是每一个小 patch 的特征表述。经过处理后,每张图片都变成了一组特征向量。

接下来需要拼接相机 token,这个相机 token(camera token)是一个可学习的参数,它的作用是在模型训练过程中不断学习该图像对应的相机位姿信息。

在图中没有显示的是,输入时还额外加入了 4 个寄存器 token(register token),目的是捕捉图像中未被充分利用的信息,更好处理信息稀疏的区域,提升特征提取效果。在结束训练后丢弃即可,使用原 token 进行预测。

2. 网络与交替注意力机制(Alternating Attention)
#

交替注意力是该网络的核心创新之一:交替注意力包括帧内注意力(Frame Attention)和全局注意力(Global Attention),并使得两个交替进行。

帧内注意力关注各帧内部的 token,而全局注意力联合关注所有帧的 token,这种设计既保留了局部图像结构,又能统一理解跨视角几何关系。网络总计采用了 24 层注意力模块,但并未采用交叉注意力层,而是全部为自注意力层。

具体过程中,首先所有的 token 会被全局注意力一起处理,模型会计算所有特征之间的关联性。这使得模型能够建立跨图像的全局理解,由于图像是来自不同视角的同一场景,因此模型会学习场景的三维空间关系。接着,模型进行帧内注意力计算,模型专注于理解单张图像内部的细节和结构。通过进行若干次交替循环,图像 token 和相机 token 都能包含丰富的场景几何信息。

3. 输出预测
#

经过主体网络后,相机 token 会被分离出来,送入专门的相机头网络(camera head),这个网络负责预测并输出每张输入图像对应的相机内参(intrinsic)和外参(extrinsic),如相机的焦距、畸变参数、位置姿态等。

剩下的图像 token 被送入 DPT(Dense Prediction Transformer)模块中,DPT 是一个用于进行密集预测的 Transformer 模型,图像 token 经过 DPT 层后转变为密集特征图。将该密集特征图通过一个 3×3 的卷积层映射到对应的深度图(Depth maps)和点云图(Point maps);同时,将密集特征图序列输入到跟踪头中,即可进行点跟踪(Point track):给定某图像的一个查询点,则可以预测所有图像中与之对应的点的集合。

这种设计思想是十分巧妙的:模型的多个输出(相机参数、深度图、点云图等)在几何上是相关的,例如:理论上可以通过点图反向求解出相机参数,也可以通过点图和相机参数推导出深度图。这种预测的冗余称为过完备预测(Over-complete Predictions),但是在训练时显式地让模型同时预测可以显著提升性能,推理时也能得到更好的结果(因为预测结果之间相互辅助)。

2. 训练过程
#

1. 损失函数设计
#

整个网络采用多任务损失联合训练: $$ L=L_ {camera}+L_ {depth}+L_ {pmap}+\lambda L_ {track} $$

  • 相机损失:使用 Huber Loss 衡量预测相机参数与真实值差异
  • 深度图损失与点图损失:引入 aleatoric 不确定性权重,并加入梯度损失
  • 点追踪损失:计算预测点与真实点在每帧图像上的欧式距离
  • 可见性损失(公式中未显式表达):是否出现在某帧图像中

2. 数据集与网络架构
#

数据集包括:Co3Dv2、BlendMVS、DL3DV、MegaDepth、Kubric、WildRGB、ScanNet、HyperSim、Mapillary、Habitat、Replica、MVS-Synth、PointOdyssey、Virtual KITTI、Aria Synthetic Environments、Aria Digital Twin 以及一个类似于 Objaverse 的艺术家创建的合成数据集。这些数据集涵盖了各种领域,包括室内和室外环境,并包含合成和真实场景。这些数据集的 3D 注释来自多种来源,例如直接传感器捕获、合成引擎或 SfM 技术。

网络架构:使用 24 层全局注意力和帧内注意力。模型总共包含约 12 亿参数。

输入帧、深度图和点云图的最大尺寸调整为 518 像素;训练在 64 个 A100 GPU 上运行,耗时 9 天;总共训练 16 万步,采用 AdamW 优化器;利用 bfloat16 精度和梯度检查点来提高 GPU 内存和计算效率。

3. 实验部分
#

这里暂时没有进行复现,如要复现可以参考此文章:论文学习及实验笔记之——《VGGT: Visual Geometry Grounded Transformer》 – Kwan Wai-Pang – Personal Blog

原论文的代码和模型在此:FacebookResearch/VGGT

4. 参考文献
#

1.论文解读:【CVPR2025最佳论文】VGGT: Visual Geometry Grounded Transformer-CSDN博客

2.CVPR 2025最佳论文详解|VGGT:纯前馈Transformer架构,3D几何感知「大一统」模型来了! - 知乎

3.【论文笔记】VGGT-从2D感知3D:pose估计+稠密重建+点跟踪-CSDN博客