Revisiting Multi-View Stereo: A Sequence-to-Sequence Formulation
Aoxiang Fan, Corentin Dumery, Nicolas Talabot, Pascal Fua
cs.CV
2026-09-22
把已知相机的多视图立体改成一次预测全部视角,射线图加全局代价体,RMVDB上超过MVS与前馈模型,比专用管线快约7倍。
学习式多视图立体(MVS)长期做成「多图进、一张深度出」:相机已经标定,网络仍只为参考视角建代价体。代价体沿每条像素射线撒一串三维假设点,记下各视角是否看见同一处,然后只预测这一张深度图。视角一多,同一套代价体按参考视角重复建,全局对齐做不好。
前馈重建是一次神经网络前向直接吐出几何。VGGT、DepthAnything3一次给出所有视角的深度和点图,常常连相机一起估。相机和几何绑在一起估,场景容易被尺度和形状歧义拉歪。即便喂进真值相机,模型仍会去估、去改,畸变还在。
EPFL CVLab盯住中间地带:相机已由SfM(从多图估计相机和稀疏点)给好,还要不要一次出全视角。S2S-MVS走这条路,并把相机先验显式灌进网络。
输入是一组RGB图加已知内外参,输出每个视角的深度图和点图。点图统一写在第一帧相机坐标系,外加一张逐像素不确定性图给回归损失降权。
图像编码器是DepthAnything2的ViT-Base,用DINOv3权重初始化。patch token交替做帧内自注意力和跨视角全局自注意力,循环结构跟DVLT一样,5层反复跑以压参数量。解码先卷积上采样,1/4分辨率以上换成MLP加pixel-shuffle,直接出全分辨率。
射线图把每个像素写成一条6维相机射线,原点加方向。方向不做单位化,模长里留着投影尺度;有了深度,三维点就是原点加深度乘方向。整张射线图切成token,和图像token拼接后过MLP,Transformer从第一层就知道这张图从哪朝哪看。不用VGGT那种单独的相机token,逐patch注入训练更稳。
全局代价体不再指定参考视角。一个三维点投到所有视角,取投影特征均值,再跟各视角特征做相关,得到与视角无关的代价值。采样按相机原点间距做对数深度假设,T=128;各视角反投之后,用一个包住全部采样点的全局视锥,xy均匀、z对数打网格。相关只在这一份网格上算一次,各视角代价体靠插值拿,再拼进token。代价体特征来自ResNet18第一块。
训练损失是深度、点图、法向三项。深度经sigmoid再按代价体深度上下界做对数缩放。不确定性按aleatoric公式降权,α=0.2。数据沿用MVSA的8个数据集,分辨率480×640,每批8帧,16万步,4张A100两天。对照前馈模型的训练数据大约是他们的2到3倍,多数还在评测用的ScanNet上训过。
评测用RMVDB,五个训练未见过的数据集,统一8帧组。点图先按到原点的平均距离做尺度归一,再报相对逐点误差的[email protected]和[email protected]。
| 方法 | ETH3D | KITTI | DTU | T&T | 秒 |
| DepthAnything3-w/c | 0.24/0.51 | 0.08/0.31 | 0.72/0.83 | 0.03/0.15 | 0.521 |
| MVSAnywhere | 0.33/0.50 | 0.42/0.62 | 0.81/0.84 | 0.25/0.43 | 2.155 |
| S2S-MVS | 0.35/0.53 | 0.44/0.64 | 0.76/0.85 | 0.26/0.42 | 0.292 |
表中为[email protected]/[email protected]。ETH3D和KITTI上两项都最高。DTU细阈值0.76低于MVSAnywhere的0.81,粗阈值0.85反超。Tanks&Temples细阈值0.26最高,粗阈值0.42略低于MVSAnywhere的0.43。给了真值相机的前馈模型在室外掉得厉害:KITTI上DepthAnything3-w/c只有0.08/0.31,Tanks&Temples只有0.03/0.15。
ScanNet上不少前馈模型训过,数字不可比。同样没在该集训练的MVS里,S2S-MVS是0.37/0.56,高于MVSAnywhere的0.35/0.53和MVSFormer++的0.16/0.25。0.292秒和VGGT-Ω(0.296秒)、DVLT(0.277秒)同一档,大约是MVSFormer++(2.236秒)和MVSAnywhere(2.155秒)的七分之一。
消融干净。去掉射线图,ETH3D [email protected]从0.35掉到0.33,ScanNet从0.37掉到0.30。去掉全局代价体跌得更重:ETH3D到0.23,DTU从0.76到0.50。全局代价体是这块精度的主心骨。
定性上,DepthAnything3即使用真相机,在Tanks&Temples上仍出现各向异性尺度畸变,场景长宽比不对。和逐视角重建的MVSA比,跨视角错位被收掉。循环从第0次到第5次,点图从粗糙变完整。接到VidMap估出的相机上做视频稠密重建,点云也比DepthAnything3齐。
相机已经有了,COLMAP、Pix4D、VidMap都行,就不必再让网络猜相机。前馈模型把相机和几何绑在一起估,即使用真值当输入,畸变还在;专用MVS精度够,8帧组要两秒出头。S2S-MVS一次前向出全部视角,精度跟最强sequence-to-one MVS打平或略超,速度快约7倍。
已经跑过SfM的流程,这套比直接拿VGGT或DepthAnything3填深度更对口。训练数据比对手少一半以上,ETH3D、KITTI仍是表里第一,射线图加全局代价体这条归纳偏置值钱。架构件都来自现成模块,拼法是新的,属于渐进改进。
论文自己写了:训练数据小于其他前馈模型,某些场景泛化不好。表1对得上,DTU细阈值输给MVSAnywhere,ScanNet也低于在该集训过的Pi3(0.50/0.72)。
几个没钉死的点。「即使给真值相机,前馈模型仍会更新相机」是开篇动机,带相机输入的数字参差:DepthAnything3加上真相机后ETH3D从0.17/0.44升到0.24/0.51,MapAnything则从0.04/0.18掉到0.02/0.07,没有实验把相机是否仍被更新单独拆开。全局注意力对视角数仍是二次复杂度,评测锁死8帧,更长序列没报。点图钉在第一帧坐标系,第一帧选得差会不会把误差传给所有视角,没有敏感性实验。代价体特征只用ResNet18第一块、分辨率四分之一,和图像主干是两套特征,融合是否最优没有对比。