前馈3D重建
前馈模型
前馈模型,或前馈神经网络(Feedforward Neural Network, FNN)是一类信息单向流动的神经网络结构,由输入层、若干隐藏层和输出层组成,常用于分类、回归及深度学习任务,是 MLP 的基础形式。
在 Transformer 架构中,作者便在 Transformer Block 中设置了 FFN 以传递注意力信息。在前馈神经网络中,通过神经网络的一次或少数几次前向计算可以直接得到推理结果,这主要带来了以下好处
传统3D重建的不足
传统的3D重建主要采用视觉几何方法,使用 Bundle Adjustment 等迭代优化技术。后来的 SfM, MVS 通过深度学习方法以实现点云图的稀疏重建或稠密重建。NeRF 和 3DGS 等神经网络辐射场方法也从隐式建模的角度提供了新的思路。
然而,这些模型都拥有一个直观的问题——对于每一个场景,我们需要单独对模型进行训练以得到 3D 重建结果,这往往带来了不必要的计算复杂度,并大幅降低了 3D 重建模型的场景推广效率。因此,人们开始探索前馈式 3D 重建模型。
这种新范式通过构造一个前馈模型,可直接从一个、几个甚至数百个场景视图中推断出场景的所有关键 3D 属性。具体来说,前馈式 3D 重建模型具有以下不同之处
- 基于大量带标注的 3D 训练数据进行训练
- 对于陌生场景,可通过若干次前馈计算直接得到 3D 重建结果
- 输出的 3D 重建表示覆盖相机参数、点云图、深度图和 3D 点轨迹等
DUSt3R/MASt3R
DUSt3R 发表于论文 DUSt3R: Geometric 3D Vision Made Easy 中,其通常被视为前馈式 3D 重建模型的开山之作。具体而言,DUSt3R 的主要创新在于直接从两张图像预测稠密三维点图,不要求事先提供相机内参、位姿等。
设输入图像 I1,I2 拍摄于两个不同相机,DUSt3R 通过前馈式网络输出两个视角关联的稠密点图
(I1,I2)→(P1,P2)
DUSt3R 的优势在于
- 无须预先知道相机标定参数。
- 将多视图几何问题转化为直接的神经网络回归问题。
- 同一套几何表示可以服务于多种三维视觉任务。
然而,DUSt3R 的基础推理方式主要针对图像对(两张图片)。当输入很多图像时,需要组合多个图像对的结果,再通过全局对齐等步骤将它们放进一致的参考坐标系。这就带来了多次前向计算,并放大了生成误差。
MASt3R 建立在 DUSt3R 的基础上,增加了用于稠密局部特征预测的匹配分支,并针对匹配任务设计了训练目标和高效的匹配策略。简单概括来说,MASt3R 注重于增强像素对应关系的精度。
VGGT
概述
VGGT(View Generalizable Geometry Transformer) 是一个纯前馈式 3D 重建神经网络,被评为 CVPR 2025 Best Paper。其突出性在于:VGGT 重建一个场景只需不到1秒,却在多个任务上都刷新了性能指标。无论是单张图像还是上百张图像,它都能完成从2D到3D的高质量几何理解。
[{"url":"/img/world/VGGT.png","alt":"VGGT","title":""}]
与 DUSt3R、MASt3R 等相比,VGGT 的关键变化不只是网络规模更大,而是将多视图之间的几何信息交互提升为整个模型的核心计算机制。VGGT 基于的大型 Transformer 架构,在大量带三维标注的公开数据集上训练。
VGGT 与 GPT、CLIP、DINO、Stable Diffusion 等自然语言处理和计算机视觉大型模型遵循相似的构建思路。这些模型都旨在通过海量规模的网络训练后,构造一个便于微调、能够广泛应用到不同下游任务的通用模型骨干。
接下来的讲解将基于论文进行。
问题描述
输入被定义为观测同一个三维场景的 N 张 RGB 图像构成的序列 {Ii}i=1N ,其中的照片 Ii∈R3×H×W。该序列被 VGGT 的 Transformer 函数 f 映射为一个包含重建信息的四元组序列
f({Ii}i=1N)={(gi,Di,Pi,Ti)}i=1N
- gi:拍摄相机的内外参数。利用 SfM 定义习惯记为 gi=[qi,ti,fi],这些参数分别对应旋转四元数、平移向量和二维视场角
- Di:深度图。把对应照片的每个像素 (ui,vi)∈Ii 映射为一个深度值 Di(ui,vi)
- Pi:全局三维点云。把每个像素 (ui,vi)∈Ii 映射到一个全局三维点 Pi(ui,vi),他们都定义在第一个相机 g1 的坐标系中,亦即世界坐标系。此时有 q1=(0,0,0,1)T,t1=(0,0,0)T
- Ti:用于点跟踪的 C 维特征网络。对于给定 Iq 的查询像素 xq,由该点在所有图像 Ii 中对应二维点 xi 可以确定一条轨迹,即该网络的特征输出 Ti(xq∈Iq)
由问题定义可知:输入序列中图像的顺序可以任意排列,但第一张图像被选作参考帧。即网络架构被设计为对第一帧以外的所有帧具有置换等变性。
特征处理
每张输入图片 Ii 经过DINO转换为 K 个 patches,得到对应的 tiI∈RK×C。将全部帧的图像 token 汇集在一起,就可以得到主网络的输入 tI 并做下一步处理。
在 Transformer 的注意力机制基础上,作者引入交叉注意力(Alternating-Attention, AA),使 Transformer 交替关注单帧内部和全部帧。这在融合不同图像的信息与规范各图像内部 token 激活之间取得平衡。
- 逐帧 self-attention 分别只关注各帧内部的 token
- 全局 self-attention 则联合关注所有帧的token
在基础架构中,VGGT 使用了 24 个 Transformer Block,每个包含 1 层逐帧注意力和 1 层全局注意力,总计 48 个注意力层。这里的 self-attention 沿用缩放点积注意力
Attention(Q,K,V)=softmax(dkQKT)V
现在关注 Transformer 函数 f 的具体工作机制。对于图像 Ii ,除了图像 token tiI 之外,我们引入可学习的相机 token tig∈R1×C′ 和注册 token tiR∈R4×C′。也就是说,此时的单图像输入被拼接为
Ii→(tiI,tig,tiR)
需要注意的是,由于该框架只对首帧相机有区分作用,因此在初始化时把除去第一帧之外的对应 token 初始化为同一组参数。这样一来,我们就把相机 token 和注册 token 划分为两组分别学习。在最后的输出,我们通常舍弃注册 token,而只关注输出的图像 token 和相机 token。
f(tiI,tig,tiR)=(t^iI,t^ig,t^iR)→(t^iI,t^ig)
更新后的相机 token 和注册 token 已各自包含所属帧的信息,这由 AA 机制中的逐帧 self-attention 将它们与同一图像的 token 联系起来。
输出处理
现在考虑如何使用 (t^iI,t^ig) 对四元组 (gi,Di,Pi,Ti) 进行预测。相机参数是最简单计算的,我们只需要把输出相机 token t^ig 经过四层额外的 self-attention 层和线性层就得到相机参数 gi。
输出图像 token tiI 则用于预测输出 Di,Pi,Ti。由于 token 是较低空间分辨率的向量网格,我们使用稠密预测 Transformer(DPT 模型),把不同深度的 Transformer 特征融合为高分辨率特征图,恢复逐像素输出。具体内容请参考DPT论文原文。
- 首先通过一个 DPT 架构将图像 token tiI 转换为稠密特征表示 Fi∈RC′′×H×W
- 接着通过一个 3×3 卷积层将稠密特征映射为深度图 Di 和点云 Pi
DPT 的输出头也会给出特征表示 Ti,我们将使用该特征表示实现一个轨迹跟踪模块 T。
T({xj}j=1M,{Ti}i=1N)={{x^j,i}i=1N}j=1M
其中的 {xj}j=1M 表示被查询点,{x^j,i}i=1N 表示 N 个相机照片中 xj 的预测轨迹。论文采用了 CoTracker2 架构,在训练时始终令查询点 xj∈I1,并且在查询点位置处使用双线性采样得到周围非整数像素位置的插值,以取得该点特征。
训练目标
VGGT 以多任务损失端到端训练主模型 f,一共四项分别对应四种生成表示
L=Lcamera+Ldepth+Lpmap+λLtrack,λ=0.05
现在逐项介绍:对于相机损失 Lcamera,我们使用 Huber 损失估计相机参数的误差
Lcamera=i=1∑N∥g^i−gi∥ε
深度损失 Ldepth 是 VGGT 的关键组成部分。它不仅监督预测深度与真实深度之间的差异,还考虑局部空间结构,并利用网络预测的逐像素权重调整不同区域的训练贡献。原文给出的形式为
Ldepth=i=1∑N[Σ^iD∘(Di^−Di)+Σ^iD∘(∇Di^−∇Di)−αlogΣ^iD]
其中的 Σ^iD 表示深度图对应的预测权重图,可以简单理解为一组可学习的置信度或误差权重。上述损失的三项分别衡量了深度回归项、深度梯度项和权重正则项。
点图损失 Lpmap 的形式与深度损失类似,即有
Lpmap=i=1∑N[Σ^iP∘(Pi^−Pi)+Σ^iP∘(∇Pi^−∇Pi)−αlogΣ^iP]
最后,追踪损失 Ltrack 衡量的是同一个三维点在不同二维图像中的定位误差。
Ltrack=j=1∑Mi=1∑N∥xj,i−x^j,i∥
如果把场景整体缩放,或改变其全局参考系,所产生的图像完全不受影响,因此这些变体都可视作合法的3D重建结果。作者通过归一化数据来消除这种歧义,即选择一种归一化范式,并要求 Transformer 学习输出这种形式。
VGGT 经过大量带标注的数据训练,实现了多个方向的 SOTA 表现,并具有显著的泛化应用潜力和下游微调能力。具体的指标评测可参考原论文。
MonST3R
概述
基于视频输入的运动 DUSt3R 重建模型(Motion DUSt3R, MonST3R)拓展了前馈式3D重建模型的能力边界。以 VGGT 为代表的照片重建模型主要围绕静态多视图几何预测展开,而 MonST3R 的研究重点是动态场景中的三维重建与相机运动估计。
经典 SfM、MVS 以及 DUSt3R 等方法,都需要从不同图像中寻找几何上相互一致的观测。然而在一个动态过程中,相机姿态和物体动态都会有所变化,因此需要寻找一种新的动态几何预测模型。MonST3R 的核心思路便是:先直接预测每个时刻的稠密三维几何,再利用视频中的时间关系将几何结果整合起来。
对DUSt3R的改进
设视频在时刻 t 时的点云图为 Pt∈R3×H×W,一个通常成立的事实是 Pt=Pt′,因此直接使用 DUSt3R 是不可行的。作者在论文中通过实验证明了 DUSt3R 的两个失效范式
- 前景运动物体主导的点图对齐,导致静止背景出现错位
- 运动前景的几何预测错误,深度预测不可信
[{"url":"https://kwanwaipang.github.io/ubuntu_md_blog/images/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20250322165433.png","alt":"DUSt3R的失效范式","title":""}]
因此,作者基于 DUSt3R 为基础框架,提出了一条相对简单的视频流重建方法:
- 使用神经网络预测每个图像对的点图
- 利用静态区域估计相机运动和可靠的几何对应关系
- 将多个图像对的结果组合起来,优化整段视频的相机轨迹和动态点云
MonST3R 仍然采用 DUSt3R 的双图像输入架构。首先把视频帧对 It 和 It′ 经过一个共享 ViT 编码器提取视觉特征,然后在 Transformer-Decoder 里通过 cross-attention 沟通二者的几何信息并通过 DPT 的两个预测头输出点云图 Pt,Pt′ 和置信特征表示 Ct,Ct′。以 t←t′ 表示世界系为 It 相机系(第一张输入为全局参考系),这样就得到了网络表示
f(It,It′)=(Pt;t←t′,Pt′;t←t′)
现在考虑如何对 DUSt3R 进行改进。一个很直觉的想法是直接把运动物体遮掉,作者也在前半段介绍了基线实验的结果:分别在图像层面使用改黑色像素替换动态区域,和 token 层面使用掩码遮盖动态区域,最后都会使得预测结果更差。作者将这种现象的原因归结于分布偏移(Distribution Shift),因此接下来的目标不再只改变输入,而是直接微调模型,使它学会预测动态场景的几何。
动态几何预测
传统方法通常通过显式法预测下一时刻的点云分布
Pt+1=Pt+ΔPt
这一过程要求我们给出增量 ΔPt,但这一步是很难得到的。MonST3R 改进了这一预测结果,不要求模型去给出增量,而是去给出更准确的 Pt,Pt+1,然后计算得到 ΔPt 并验证。这一步不难理解,只要各时刻的点图能正确描述当前场景,就可以从不同时间的点图中求出点云位移、相机位姿变化量、深度变化量等等,而这些变化量在某些约束下(如物理、几何约束等)可以反过来验算当前预测是否合理。
因此,MonST3R 基于此在 DUSt3R 上微调,每个训练样本至少需要提供
- RGB 图像:作为网络输入
- 深度真值:用于约束稠密几何
- 相机位姿真值:保证训练数据的几何坐标关系可靠
采用合适的数据集和时间间隔采样法,我们可以通过合适的损失函数训练网络,得到不同帧的预测点云图。需要注意的是,此时我们只对 Transformer-Decoder 和 DPT 输出头进行微调,冻结 ViT 编码器。原文默认使用了 DUSt3R 和 VGGT 点云图损失形式和的损失函数
Lgeometry∼It∑[Ct(P^t−Pt)−αlogCt]
下游任务应用
上述网络给出预测点图,接下来需要进一步完成两个紧密相关的下游任务
- 相机内参与相对位姿估计
- 可信静态区域估计
先来看相机的参数估计问题。对于相机内参 K,由于 DUSt3R 通常设置光心为图像中心,因此只需求解焦距 fx,fy 即可,这可以根据投影公式可以直接拟合得到。
再来看相机位姿的求解。在参考系 t←t′ 下,相机的相对位姿可以记为
Wt→t′=[Rt→t′∣tt→t′]
利用 PnP 的求解方法,对于给定的三维点 Xk 和对应二维坐标 xk,有优化目标
R∗,t∗=argR,tmink=1∑N∥xk−π(KRXt+Kt)∥2
其中的 π(⋅) 表示投影函数。动态的几何变化通常会阻碍上述静态 PnP 问题的求解,因此采用 RANSAC 抽样法,多次抽样特征点,最终选取支持度较高的抽样结果作为实际参与优化的样本。
现在考虑可信静态区域的估计问题:某个像素的运动是否能够由相机运动与静态场景几何解释。对于时刻 t 的某个像素 xT,若通过点云图 Pt;t←t′ 估计出深度 zc=Dt;t←t′(xt),那么可以通过反投影得到相机系的坐标
xct=Dt;t←t′(xt)(Kt)−1xt
使用相机的相对位姿和投影函数可以得到其在下一帧的像素位置
x^t′=π[Kt′(Rt→t′xct+tt→t′)]
这一运动由相机运动带来,尽管有时候物体也在运动,但我们总可以选取适当的参考系让相机始终处于运动状态。因此定义相机运动诱导的光流为
Fcamt→t′=x^t′−xt
现在考虑一个不依赖于相机参数和深度的光流计算模型 SEA-RAFT,其只通过两帧图片 It,It′ 计算某像素的实际光流变化,记为 Festt→t′。利用 smooth−L1 误差函数,可以定义可信静态区域掩码。
S=[α>Fcamt→t′−Festt→t′smooth−L1]
上述中括号 [⋅] 根据内部布尔值的真假性给出 0,1 掩码。当光流差小于某一阈值 α 时,将其令为可信静态区域。这一步的目的在于:后续全局优化需要使用静态区域的光流一致性来校正相机轨迹。如果把不可靠区域错误地当作静态背景,就会重新引入动态前景带来的问题。
全局优化
目前为止,MonST3R 已经可以预测两帧的点图,也能够估计相机内参、相对位姿和可信静态区域,但这些都是局部性结果。现在考虑对这些量进行全局优化,也就是将所有图像对的局部几何整合起来,同时优化每帧的深度、相机位姿和相机内参等,使整个视频具有一致的三维几何表示。
设视频包含 N+1 帧画面 V={It}t=0N,如果直接两两配对计算将带来 O(N2) 的配对复杂度。为了简化运算,考虑一个滑动窗口 w 和指定步幅 s,使得配对在滑动窗口 {It}t=kk+w 内执行,这样就实现了更低的配对复杂度,但也能保证重建的全局性。
第二个问题在于,如果直接显示的把图像 It 作为输入,将带来 O(3HW) 的复杂度。类似于 LoRA 的思想,我们把 It 用相机参数与深度图的形式表达出来,这样就可以把图像像素级优化变为相机参数优化。在原文的口径下,某个世界系的三维点可以记为
Xt=Pi,jt=(Wt)−1h(Kt)−1iDi,jtjDi,jtDi,jt
现在来看损失函数的形式,一共可以记为三项
L=Lalign+λ1Lsmooth+λ2Lflow
对于对齐项 Lalign,我们期望网络对图像对 (It,It′) 预测的局部点图,经过坐标变换和尺度调整后与全局点图一致。使用 e=(t←t′) 有向边表示一对参考对,滑动窗口包含参考对 Wt={(a←b)∣a,b∈{t,⋯,t+w}},计算对齐误差有
Lalign=Wt∑e∈Wt∑t∈e∑Ct;e⋅(Pt−σeWt;ePt;e)1
其中的 Ct;e 为先前输出头给出的置信特征表示,σe 表示尺度因子,防止局部预测尺度和全局尺度存在偏差。本质上,上式衡量了同一时刻的局部点图与该时刻的全局点图的差别。
接下来是相机轨迹平滑损失 Lsmooth。假设一段视频中的相机实际沿道路平稳向前移动,但某几帧的点图预测存在噪声,那么单纯依赖几何对齐,优化结果可能会出现突然的旋转或位移跳变。为此,作者引入相机轨迹平滑损失
Lsmooth=t=0∑N(∥(Rt)TRt+1−I∥F+∥(Rt)T(tt+1−tt)∥2)
上式两项分别衡量了旋转变化和平移变化量,该项损失通过约束这两项,从而限制相邻相机位姿出现过于剧烈的变化,以减少不合理的轨迹抖动。
目前为止,几何对齐损失 Lalign 可以让局部点图与全局点图一致,相机轨迹平滑损失 Lsmooth 可以减少位姿跳变,但它们还不能充分保证:全局几何和相机运动能够解释真实视频中静态背景的图像变化。如果某个区域属于静态背景,并且当前的深度与相机位姿估计准确,那么理论光流应该与实际光流接近。为此,考虑先前引用的可信静态区域掩码,构造光流损失项
Lflow=Wt∑(t→t′)∈Wt∑Sglobal;t→t′∘(Fcamglobal;t→t′−Festt→t′)1
其中的上标 global 表示根据当前全局几何实时更新的全局状态量。
总结
从方法设计的角度看,MonST3R 有三个值得特别关注的思想。
- 几何优先:它不要求先建立显式的三维物体运动模型,而是直接预测每个时刻的稠密三维几何
- 利用静态背景建立跨时间约束:即使视频中存在运动物体,静态背景仍然能够帮助估计相机运动
- 前馈预测与全局优化结合:神经网络提供高效的局部几何预测,全局优化负责协调各帧之间的几何、相机和光流信息
最后需要明确,MonST3R 输出的是动态几何与相机运动估计,而不是完整的未来世界状态生成模型。