不妨从一千张游客拍摄的罗马照片开始想象。它们来自不同相机,焦距、曝光和分辨率各不相同,拍摄位置也没有预先标定:有人站在特莱维喷泉正面,有人从侧面取景,还有人只拍到了雕塑、石柱或水池的一角。要从这些零散视角恢复完整场景,传统的 Structure-from-Motion 通常先匹配局部特征,再逐步估计相机位姿与三维结构;近年的前馈式模型则希望省去这套多阶段管线,直接从整组图像预测相机参数、深度和稠密三维点。

问题在于,要让模型理解这些照片属于同一个场景,每张图像都必须与其他图像交换信息。VGGT 已经证明,Transformer 可以用全局注意力统一完成多视图几何预测,但它也暴露了规模上的瓶颈:图像越多,用来表示场景的 Key 和 Value 就越长,读取这份表示也越昂贵。当输入数量增加十倍时,注意力矩阵甚至可能扩大到原来的一百倍。

VGG-T³ 在 CVPR 2026 给出的答案,是不再长期保留不断增长的 KV,而是用少量梯度更新,把 Key 与 Value 之间的关系临时写进一个固定大小的 MLP。完成写入后,查询只需经过这个 MLP,便不必反复搜索全部 KV。方法全称为 Visual Geometry Grounded Test Time Training,其中 VGG-T 后面的三次方对应 Test、Time 和 Training,并不是“VGGT 第三版”。这个名字也提示了它最容易引起误解的地方:VGG-T³ 虽然被归入前馈式 3D 重建,推理时却仍会执行少量参数更新。

场景为何被存进 KV 空间

要理解 VGG-T³ 为什么选择“把场景写进 MLP”,需要先看 VGGT 如何保存场景。VGGT 会把每张输入图像切分并编码为视觉 token,然后交替执行图像内部注意力与跨图像的全局注意力:前者整理单张图像中的局部结构,后者聚合不同视角共同观察到的几何信息。经过多层变换,模型再从聚合后的 token 中预测相机内外参、深度,以及世界坐标系中的点图(point map)。

在一层标准全局注意力中,输入 token 被投影为 Query、Key 和 Value。对第 ii 个 Query,输出可以写为:

oi=jsoftmaxj(qikjd)vj.o_i = \sum_j \operatorname{softmax}_j \left( \frac{q_i^\top k_j}{\sqrt d} \right)v_j.

在这个过程中,Key 表示“哪些信息可供匹配”,Value 保存“匹配后能够取回什么”,Query 则表达当前 token 想从其他位置寻找什么。比如,一张照片里的窗框、雕塑边缘或石柱纹理,需要在其他视角中找到对应证据。全局注意力可以一次建立这些长距离联系,因此即使图像无序、没有标定,彼此重叠也有限,VGGT 仍能推断出较完整的整体几何。

这种能力的代价就藏在公式的求和中:每个 Query 都要与所有 Key 比较。当输入包含 nn 个 token 时,计算复杂度约为 O(n2)O(n^2);与此同时,KV 序列还会随输入规模线性增长,并在全局注意力期间持续占用显存。FastVGGT 通过合并 token 缩短序列,SparseVGGT 则只计算部分注意力关系,但它们没有改变场景表示本身。只要场景仍以可变长度的 KV 集合存在,输入继续增加,二次扩展问题就不会消失。

换个角度看,所有图像产生的 KV 共同构成了一座隐式的场景数据库,Query 通过内容寻址从中读取信息。VGG-T³ 的核心变化,就是把这座长度不断增长的数据库压缩成一个固定大小的函数。

用测试时训练把场景写入 MLP

具体来说,VGG-T³ 在 VGGT 的每个全局注意力层中放入一个固定大小的 SwiGLU MLP,记为 TθT_\theta。对于该层产生的 Key 和 Value,模型会在处理当前场景时求解:

θ=argminθiL(Tθ(ki),vi).\theta^* = \arg\min_\theta \sum_i \mathcal L\bigl(T_\theta(k_i),v_i\bigr).

这个目标要求 MLP 在接收 kik_i 后恢复对应的 viv_i。为了做到这一点,参数 θ\theta 会针对当前场景短暂更新,形成只属于这组图像的快速权重(fast weights)。写入完成后,原本依赖全局注意力的读取过程便可以改写为:

oi=Tθ(qi).o_i=T_{\theta^*}(q_i).

INTERACTIVE FIGURE

场景记忆如何随输入增长

对比可变长度 KV 与固定大小 MLP 的场景表示。

ON DEMAND

VGGT

可变长度 KV 场景状态

O(n²)
1000 views
KV 随输入增长
Query访问全部 KV
场景状态
1000 组视图特征
简化查询量
1M

VGG-T³

固定大小 MLP 场景状态

O(n)
1000 views
Fast-weight MLP
Query直接应用函数
场景状态
固定大小 MLP
简化扫描量
1K
论文实测 · 1000 viewsVGGT > 11 分钟VGG-T³ ≈ 58 秒

无论写入还是读取,都只需要线性扫描 token,整体复杂度因而从 O(n2)O(n^2) 降到 O(n)O(n)。这些快速权重不会永久并入模型检查点,它们更像一份临时的场景状态:任务结束后可以直接丢弃,也可以暂时冻结,继续用于定位新的查询图像。

因此,这里的“前馈式”并不等于完全静态的单次前向传播。NeRF 和 3D Gaussian Splatting 往往要为单个场景执行成千上万步显式优化;VGG-T³ 的更新次数少得多,几何结果也仍由预训练网络直接解码,但推理过程确实包含梯度计算和快速权重修改。更准确地说,它是一种带有轻量测试时适应的前馈式重建模型。

更新次数虽然很少,却决定了这个固定容量的 MLP 能否应对大场景。VGGT 的训练样本通常只有 2 到 24 个视图,而 VGG-T³ 面对的可能是数百乃至数千张图像。如果只更新一步,输入从 100 张增加到 1000 张时,误差会明显上升,因为同样大小的 MLP 必须压缩更多场景信息;把更新增加到两步后,误差随规模增长得更平稳。换言之,VGG-T³ 获得的是一种有限的测试时扩展能力:场景越大,写入记忆所需的计算也要适当增加。

一个平凡映射为何不足以记住三维结构

然而,直接让 MLP 学习 KVK\rightarrow V,并不保证它真的记住了三维场景。原因在于,Key 和 Value 都来自同一个输入 token xx

K=Wkx,V=Wvx.K=W_kx,\qquad V=W_vx.

如果暂时假设 WkW_k 可逆,二者之间可以写出线性关系:

V=WvWk1K.V=W_vW_k^{-1}K.

这意味着,MLP 可能只需拟合一个局部线性投影就能降低训练损失,却没有真正编码图像中的空间结构。为避免这个平凡解,VGG-T³ 在 Value 一侧加入 ShortConv2D:先把一维 Value 序列还原成每张图像的二维特征网格,再通过深度可分离的 3×33\times3 卷积混合局部邻域,最后重新展平为 token。于是,优化目标变为:

KV,K\rightarrow V',

VV' 不再只是当前位置的线性投影,还包含相邻图像块的上下文。这样一来,一个 Key 必须预测局部邻域的信息,MLP 就很难再靠简单的逐 token 映射蒙混过关。需要注意的是,ShortConv2D 只在单张图像内部执行卷积,并不负责建立跨图像联系;它的作用,是把更明确的二维空间结构注入学习目标,让后续的全局场景压缩有更多内容可记。

消融实验说明了这一步的价值。在相同的小规模设置中,从头训练 TTT 模型得到的 Chamfer Distance 为 0.262;从预训练 Softmax 模型开始做线性化后,数值降到 0.074;再加入 ShortConv2D,则进一步降到 0.066。作为参照,原始 Softmax Attention 的结果是 0.061。也就是说,局部卷积显著缩小了固定容量 MLP 与完整注意力之间的差距,但还没有完全追平后者。

效果提升同样离不开预训练初始化。作者以公开的 VGGT-1B 检查点为起点,保留模型已经学到的视觉与几何知识,只把全局注意力替换为 TTT 层,并冻结大部分原始参数,微调新加入的全局层。整个训练使用 8 张 80GB A100,运行 10 万步,成本约为从头训练 VGGT 的 12%。由于从零训练线性模型容易落入较差的局部最优,VGG-T³ 采用这种“后训练线性化”的方式,尽量继承原始 Softmax 模型的能力。

连归一化方式也必须随之改变。原始注意力使用 LayerNorm 稳定 QK 相似度,但其中的可学习变换会不断改变测试时 MLP 所要拟合的输入空间。VGG-T³ 因此移除相关 LayerNorm,转而对 Q 和 K 做 L2 归一化,使快速权重能在少量优化步骤内收敛。这个调整也揭示了一个更普遍的问题:适合 Softmax Attention 的组件,未必适合把场景信息直接写入参数。

线性扩展的收益与代价

把场景压缩成固定大小的 MLP,最直接的收益是计算可以被拆开。由于损失能够按图像或 token 小批次累加,设总损失为:

Ltotal=iLi,\mathcal L_{\mathrm{total}} = \sum_i \mathcal L_i,

其梯度可以按批次 ss 分解:

Ltotalθ=sisLiθ.\frac{\partial\mathcal L_{\mathrm{total}}}{\partial\theta} = \sum_s\sum_{i\in s} \frac{\partial\mathcal L_i}{\partial\theta}.

因此,在单 GPU 上,模型每次只需把一批图像 token 放进显存,计算局部梯度后便可将中间结果卸载到 CPU;在多 GPU 上,不同设备可以分别处理图像子集,彼此只同步体积较小的 MLP 梯度。相比之下,Softmax Attention 通常要求所有图像的 QKV 同时参加全局运算,序列一长就更容易耗尽显存。

这种差异最终反映在运行时间上。论文摘要与实验部分对 1000 张图像分别报告了约 54 秒和 58 秒,对应不同的硬件或推理配置。输入扩大到 2000 张图像时,VGG-T³ 在单 GPU 上约需 230.7 秒,使用 4 张 GPU 后可降至 48.5 秒;VGGT 无法在单 GPU 上完成同一任务,即使用 4 张 GPU,仍需要约 1590.2 秒。

不过,固定容量换来的速度并非没有代价。点图实验清楚地展示了它在精度上的损失:

数据集VGGT CD ↓TTT3R CD ↓VGG-T³ CD ↓
7Scenes-D0.0240.0350.030
DTU1.5375.7081.654
ETH3D0.2790.8850.480
NRGBD-D0.0140.0710.029

总体来看,VGG-T³ 明显优于同为线性复杂度、按顺序处理图像的 TTT3R,多数结果也接近原始 VGGT;但在 ETH3D、NRGBD-D 等数据集上,两者之间仍有清晰差距。视频深度估计也呈现相同趋势:在 KITTI 上两者表现接近,而在 Sintel 上,VGG-T³ 的绝对相对误差(Abs Rel)为 0.345,VGGT 为 0.300。

相比点图和深度,相机位姿受到的影响更明显:

数据集VGGT ATE ↓VGG-T³ ATE ↓
ScanNet0.0350.070
Sintel0.1720.234
TUM-RGBD0.0120.037

一种可能的原因,是 VGGT 除了图像 token,还使用了专门的相机 token。这两类 token 携带不同性质的信息,却要进入同一个全局层。作者推测,固定大小的 MLP 很难同时记住图像特征与相机状态之间的异构关系,面对宽基线视角时尤其如此。输入中的图像、物体和视角可以不断增加,承载它们的快速权重却始终保持相同大小,容量限制最终就会表现为几何细节丢失、长距离对应变弱,以及位姿估计退化。

所以,VGG-T³ 真正提供的并不是“免费”的线性扩展,而是一条新的精度与规模折中曲线。与按顺序处理图像的在线线性方法相比,离线的全局写入换来了更好的重建质量;与完整 Softmax Attention 相比,它牺牲部分精度,获得了处理无序大规模图像集合的能力。只有当输入达到数百乃至数千张图像时,这笔交换才真正划算。

当网络权重暂时成为地图

快速权重不仅可以用于重建,也可以临时充当地图。完成场景写入后,VGG-T³ 能冻结优化过的 MLP,再用一张新图像查询它。新图像不会参与快速权重更新,只把自身特征作为 Query 输入场景函数,模型随后便可预测它相对于已有重建的几何与相机位姿。用参数更新完成建图,再用参数查询完成定位,这两项任务因此被统一进同一个模型。

目前,这种定位能力更接近概念验证。在 7Scenes 上,VGG-T³ 的旋转误差为 6.71°,平移误差为 0.16 米;论文引用的专用视觉定位方法 Reloc3R 则可达到约 1.02° 和 0.04 米。VGG-T³ 在 Wayspots 等更困难的场景上优于 TTT3R,但绝对误差仍然较大,暂时无法取代传统特征匹配、PnP 或专用定位系统。

尽管精度有限,这项能力展示了一种很不一样的地图表示。传统显式地图通常由三维点、描述子、相机轨迹或高斯基元组成;VGGT 的隐式地图则是随输入增长的 KV 集合;到了 VGG-T³,地图又被临时编码进各层 MLP 的快速权重。同一个 Query 的输出既受通用模型参数影响,也取决于当前场景写入的状态,其中快速权重承担的正是短期、实例级记忆。

从这个角度看,VGG-T³ 与 DeepSDF 等方法有相通之处:预训练网络负责保存通用先验,针对具体实例优化的状态负责记录个体信息。区别在于,DeepSDF 优化的是描述单个物体表面的显式潜变量,而 VGG-T³ 优化的是全局层中的快速权重,用来保存多视图图像之间的场景关系。状态空间模型、线性注意力和长期记忆模型同样会用固定状态压缩上下文,只是它们采用的状态更新规则和训练目标并不相同。

当然,把权重当作地图也带来了明确的边界。VGG-T³ 是离线方法,必须先收集一组图像,再进行一次全局写入;它不能像在线 SLAM 那样持续接收观测、处理回环并实时修正地图。测试时结果还会受到优化器、更新步数和输入规模影响。论文在大规模场景中通常使用两步更新,而公开接口默认只更新一步,这个差异会直接影响复现时的速度与质量。官方目前已经发布模型、推理代码和训练框架,但训练数据实现与预处理代码尚不完整,代码和主要模型采用 NVIDIA OneWay Noncommercial License。

回到文章开头,VGG-T³ 所做的事情可以概括为:把前馈式三维模型的场景状态,从不断增长的 token 上下文转移到可优化的函数参数中。VGGT 用 Transformer 统一预测相机、深度和三维结构,VGG-T³ 则进一步把 token 之间的关系压缩进测试时形成的临时权重。预训练参数提供通用的视觉几何先验,快速权重记录当前场景,新图像再通过查询同一份状态完成定位。

这个方向仍留下不少关键问题:固定大小的 MLP 究竟能容纳多少独立视角?宽基线信息怎样才能在压缩中保留下来?相机 token 与图像 token 是否应该使用不同的记忆结构?当场景发生变化时,又该增量更新还是彻底重写?这些问题都指向同一个矛盾。完整注意力保留全部上下文,表达灵活,却要反复访问不断增长的 KV;固定状态读取便宜,却只能在有限容量中压缩场景。VGG-T³ 并没有消除计算与显存压力,而是把它们转化成了一个场景压缩问题。

因此,一千张罗马照片并没有被逐项塞进 MLP。模型真正保存的,是足以支持几何预测的函数关系;至于部分细节、长距离对应和复杂相机状态,则可能在压缩中丢失。这种有损的场景记忆,既解释了 VGG-T³ 为什么能在约一分钟内处理千张图像,也解释了它为什么仍在相机位姿和宽基线几何上落后于完整注意力。


参考资料

  1. Elflein, S. et al. VGG-T³: Offline Feed-Forward 3D Reconstruction at Scale. CVPR 2026.
  2. Wang, J. et al. VGGT: Visual Geometry Grounded Transformer. CVPR 2025.
  3. Sun, Y. et al. Learning to (Learn at Test Time): RNNs with Expressive Hidden States. 2024.
  4. Wang, Y. et al. TTT3R: 3D Reconstruction as Test-Time Training. 2025.
  5. Deng, K. et al. VGGT-Long: Chunk it, Loop it, Align it. 2025.
  6. Park, J. J. et al. DeepSDF: Learning Continuous Signed Distance Functions for Shape Representation. CVPR 2019.
  7. Dong, S. et al. Reloc3R: Large-Scale Training of Relative Camera Pose Regression for Generalizable, Fast, and Accurate Visual Localization. CVPR 2025.