VGGT (CVPR 2025) Dissection (VGGT 解构 — CVPR 2025 best paper)
发布时间: 2025-03 (arXiv) / CVPR 2025 论文 / 模型: VGGT — Wang et al. 团队: Meta + Oxford VGG 核心定位: 一次 transformer 前向完成 N 视图 3D 重建 —— 将 MVS + pose + depth + tracking 合并为单一学得函数。Status: v1.1 — opinionated draft. Backfilled to AGENTS.md 14-item dissection template 2026-05-21. Hyperparam claims marked UNVERIFIED need rig-side validation. Wedge tier: W1 (one of 5 launch docs) TL;DR: VGGT 以单次前向同时输出 pose、depth、point maps 与 tracks,替代 per-scene 优化。它并非对 DUSt3R 的提速,而是一次范式跨越——将 3D 从离线拟合(NeRF、3DGS、COLMAP)拽进 foundation-model 范式:3D 成为推理输出。
X-Ray (non-expert friendly)
(a) VGGT 之前,multi-view 3D 需要 pair-wise 前向(DUSt3R)再叠一个独立的全局对齐步。(b) VGGT 让 N 张视图在一个共享 transformer trunk 内一次完成 —— 同时输出 pose、depth、point map、tracks。(c) 对空间 AI 工程师:3D 从离线拟合步骤变为可组合层(梯度可流、特征可复用)。📍 Research Landscape Timeline
Thesis
VGGT 将 multi-view stereo、dense 重建与 pose 估计合并到一个 transformer —— 价值不在速度,而在3D 从此与深度学习栈可组合(梯度可穿过、特征可复用下游、无 per-scene state)。1 · Setup — what VGGT is being measured against
到 2024 年底,三条血统各自占据问题的一块:- COLMAP + 3DGS / NeRF (Kerbl et al. SIGGRAPH 2023, arXiv:2308.04079) —— per-scene 优化。拟合按小时,无迁移。
- DUSt3R / MASt3R (Naver Labs Europe 2024, arXiv:2312.14132, arXiv:2406.09756) —— 前向,但pair-wise。Multi-view 需独立的全局对齐步。
- Depth Anything v2 (Yang et al. 2024, arXiv:2406.09414) —— 前向 monocular depth。无几何、无 pose、无 multi-view 一致性。
2 · Architecture walk — four heads, one trunk
📌 Napkin Formula: 3D ≈ Transformer(N RGB views) → {poses, depths, points, tracks} —— 四个输出来自单次前向,而非四个级联系统。
一个 ViT 风格 transformer 把 N 个 RGB view 当成一段 token 序列吃进去。Cross-view attention 不被 factorize —— 每个 patch 跨所有视图与所有其它 patch attend。这使 N-view 推理在单次前向中可行,并限制实用的 N(memory 随 N² 增)。甜点:N=2 到约 30 帧 UNVERIFIED。
四个 head 共享 trunk:
- Camera pose —— per-view extrinsics + intrinsics。替代 COLMAP。
- Depth —— per-view dense depth。替代 MVS / Depth Anything。
- Point map —— per-view 3D points 在共享世界坐标系下。DUSt3R 遗产。
- Tracking —— 跨视图 2D 点轨迹。替代 CoTracker。
⚡ Eureka Moment: 四个 head(pose / depth / pointmap / tracking)的联合训练相互 regularize —— depth 无 pose 时 metric 不定,pose 无 depth 时欠约束。约束栈本身就是架构;trunk 只是让约束彼此耦合的基底。形状校验:N RGB views → N depth maps + N camera params + 全局对齐的 point cloud + 2D tracks。一次前向。无优化循环。无 scene state。
2.5 · Worked example — N=4 desktop views
桌面(mug、laptop、keyboard)四张 518×518 RGB,相机间隔约 30°,手持手机。- 输入:
4 × 3 × 518 × 518RGB - Tokens:14×14 patches →
4 × 1369 ≈ 5476patch tokens(+ camera / register token UNVERIFIED) - Attention:跨视图 all-to-all —— N-view 融合发生在这里
- 输出:4 个 pose(R, t, intrinsics;首视为世界系)+ 4 张 dense depth map + 共享世界系下 per-view pointmap
4 × 518 × 518 × 3+ K 条可选 2D track 轨迹
model(images) 调用——点云立即可被下游消费。合理性检验:测一段已知长度物体与参考边的比,比例不对 = scale ambiguity 咬到你了(monocular up-to-scale)。
3 · Training data — the unglamorous half
论文里讨论最少、但决定模型能否泛化到你的 rig 的部分。Mix UNVERIFIED:- 合成 3D(MegaSynth 类、Hypersim、BlendedMVS)—— 干净的几何真值。
- 多视图真实 + SfM 伪标签(ScanNet、ARKitScenes、Co3D、MegaDepth)—— 照相级。
- DINOv2 风格 backbone 预训练 —— 特征质量。
4 · Where it breaks (deployment-ordered)
- Unbounded outdoor depth —— 天空、远处建筑、超过约 30 m 的任何东西。depth head 没在这些分布上训过,会编。这是 VGGT 不能直接拿去做 drone 户外的最大原因——见
crossing/slam-vio-migration/vggt_vs_drone_vio.md。 - 纹理稀疏场景 —— 白墙、抛光地板、雾。对应无处可锁;point map head 发出貌似合理但不可靠的几何。
- 运动模糊、卷帘 —— ViT encoder 无时序模型;高速采集 aliasing。
- 动态物体 —— 假定场景静态,静默把动态几何平均进静态估计。
- Metric scale —— monocular up-to-scale。要米制需外部 scale(stereo、IMU、已知尺寸物体)。
- 大 N —— 单 GPU 大约 30 帧封顶 UNVERIFIED;更长视频需流式变体(π³ 血统)。
4.y · GitHub-validated 失败模式(atlas 联动,2026-05)
社区在 facebookresearch/vggt issue 上反复压测同一组边界,与上面六条几乎一一对应:- GitHub-validated:demo_colmap 触发 OOM,与 resize 维度耦合 —— 对应 issue #470,部署侧建议绕开该 path 自己写 inference loop + 控制 N;详见
github_failure_atlas.md。 - GitHub-validated:depth scale ambiguity 用户反复问”是 metric 还是 relative” —— 对应 issue #471,即 §4 #5 monocular up-to-scale 限制;文档仍需补。
- GitHub-validated:长视频超过 batch 上限请求 factor-graph stitching —— 对应 issue #474,印证 §4 #6 “大 N” 边界被普遍撞到,详见
github_failure_atlas.md。
4.x · Hidden Assumptions
上游假设被违反时会产生上述失败:- 静态场景 —— 移动物体被平均进静态几何;无运动模型。
- 足够视图重叠 —— 需 ≥30% 共享内容 UNVERIFIED;否则塌为 per-view monocular depth。
- Monocular up-to-scale —— 无 metric scale;需外锚(stereo / IMU / 已知物体)。
- 近 Lambertian 表面 —— specular / 透明 / 镜面破坏对应。
- 分布内运动模糊 —— ViT encoder 无时序去噪。
- 每次前向 ≤30 视图 UNVERIFIED —— O(N²) attention;更长需流式。
- 相机内参隐式可学 —— 手机 / 网络摄像头 FOV 可,鱼眼 / 大广角退化。
5 · Deployment notes (Jetson-class targets)
参考 checkpoint 对 edge 太大。锚定数 UNVERIFIED:
Jetson 数字取决于 token reduction(drop patch、缩小 N、FP16 attention)。结论:VGGT 是工作站模型,可蒸馏到 edge;不是原生 edge。
Batch-2 技巧:每秒在 N 帧滑窗上跑一次 VGGT,缓存全局 point map,让更快前端(CNN depth net、经典 VIO)做插值。这让 VGGT 参与实时闭环,但不主导。
6 · Cross-embodiment implications (pointers, not analysis)
跨具身体故事住在crossing/:
- Aerial ——
crossing/slam-vio-migration/vggt_vs_drone_vio.md。对任何有正经控制环的飞行器而言,无替代、只能混合。 - 3DGS displacement ——
crossing/representation-migration/。VGGT 的 point map 不是 Gaussian splat;前向 point map 是否能替代 per-scene 3DGS 用于仿真、sim-to-real 与编辑,是另一个未解争论。 - 特征到策略的传递 ——
bridge-to-vla/feature-cloud-to-action.md。对 VLA 策略而言,问题是 VGGT 的中间特征是否比其显式点云更有用——多半是的,这会改写集成故事。
7 · Comparison + Interview Tip
Interview Tip:恰好两视、最小模型 → DUSt3R;N>2 或想一次拿到 pose / depth / tracks 而不粘合系统 → VGGT。“为什么不用 COLMAP?”—— 梯度穿不过它,且推理离线。
References
- VGGT — Wang et al. CVPR 2025. arXiv:2503.11651
- DUSt3R — CVPR 2024, Naver Labs Europe. arXiv:2312.14132
- MASt3R — Leroy et al. ECCV 2024. arXiv:2406.09756
- Depth Anything v2 — Yang et al. 2024. arXiv:2406.09414
- 3D Gaussian Splatting — Kerbl et al. SIGGRAPH 2023. arXiv:2308.04079
- COLMAP — Schönberger & Frahm CVPR 2016. [arXiv link TBD]
- π³ streaming variant — [arXiv link TBD]
Boundary
本文专门把 VGGT 解构为一个模型:架构、训练、失败模式、部署。跨具身体对比(替代 VIO?取代 3DGS?桥到 VLA?)住crossing/。架构层面引用此处;具身体重要时引用 crossing/ 处。
Last opinion update: 2026-05-21. UNVERIFIED markers retire as rig-side numbers land.