跳转至

MVSAnywhere: Zero-Shot Multi-View Stereo

会议: CVPR 2025
arXiv: 2503.22430
代码: https://github.com/nianticlabs/mvsanywhere
领域: 3D视觉/多视角立体
关键词: 多视角立体匹配, 零样本泛化, 自适应代价体, 单目深度先验, ViT, 深度估计

一句话总结

本文提出MVSAnywhere (MVSA),一个通用多视角立体匹配架构,通过Cost Volume Patchifier将代价体信息高效tokenize后与单目ViT特征融合(Mono/Multi Cue Combiner),结合视角数/尺度无关的元数据编码和级联自适应深度范围估计,在Robust MVS Benchmark上取得零样本SOTA,同时支持任意数量的源视角和任意深度范围。

研究背景与动机

领域现状:基于学习的多视角立体匹配(MVS)已取得很好效果,但现有方法(如MVSNet、SimpleRecon)通常只在特定域(室内/室外/驾驶)内泛化,且需要已知的深度范围和固定数量的源视角。单目深度估计模型(如Depth Anything V2、Depth Pro)泛化良好但缺乏多视角几何信号带来的精度。

现有痛点:(1) 不同场景的深度范围差异巨大(DTU: ~1m, KITTI: ~80m),固定深度bin无法跨域泛化;(2) SimpleRecon要求精确8个源帧,限制了灵活性;(3) CNN-based代价体处理器无法利用ViT的强表示能力;(4) 训练数据域有限导致零样本性能差。

核心矛盾:构建通用MVS系统需要同时解决四个维度的泛化——域泛化、深度范围泛化、源帧数量泛化和3D一致性保证,且这些目标可能在架构设计上相互冲突。

本文目标 设计一个单一MVS模型,可以零样本推广到任意域、任意深度范围、任意数量源帧,同时预测3D一致的深度图。

切入角度:(1) 用大规模多样性合成数据训练;(2) 将单目ViT先验注入MVS流程;(3) 设计视角数/尺度无关的元数据机制和自适应代价体深度范围。

核心 idea:通过Cost Volume Patchifier将代价体与单目ViT特征优雅融合,配合视角数无关的元数据聚合和级联自适应深度范围,实现真正通用的MVS。

方法详解

整体框架

输入参考图像\(I_r\)\(N\)个源帧\(I_i\)及其相对位姿和内参。特征提取器(ResNet18前两块)提取\(H/4 \times W/4\)的特征图用于构建代价体;参考图像编码器(Depth Anything V2的ViT-Base)提取\(H/16 \times W/16\)的单目特征。代价体通过Cost Volume Patchifier转化为token序列,在Mono/Multi Cue Combiner ViT中与单目特征融合,最后通过DPT风格的解码器逐步上采样输出全分辨率深度图。

关键设计

  1. 视角数/尺度无关的元数据编码

    • 功能:使代价体构建不依赖固定数量的源帧,且对场景尺度不敏感
    • 核心思路:对每个源帧独立运行MLP处理其元数据(特征匹配分数、射线方向、深度假设等),预测一个score和一个weight。N个源帧产生N组score和weight,weight经softmax归一化后加权求和score,作为代价体中每个\((u,v,k)\)位置的最终值。同时用最大值归一化相对位姿和深度假设,消除尺度依赖
    • 设计动机:SimpleRecon的固定8帧拼接MLP限制了灵活性。分帧处理+加权聚合让模型自动学习如何在不同数量和质量的源帧间分配注意力
  2. Cost Volume Patchifier + Mono/Multi Cue Combiner

    • 功能:将\(|D| \times H/4 \times W/4\)的代价体高效转化为ViT token,并与单目特征融合
    • 核心思路:不是简单的strided convolution下采样代价体,而是在两次strided conv前分别拼接参考图像编码器前两块的特征(转置投影到1/4和1/8分辨率),让单目上下文引导代价体的下采样。输出\(H/16 \times W/16\) token序列后,与单目ViT特征通过线性投影后逐元素相加,在ViT的block 2/5/9/11处重复注入多层次单目线索
    • 设计动机:naive patchification会丢失代价体的关键匹配信息;用单目特征引导下采样相当于让网络知道"哪些深度假设在视觉上更合理",再在后续ViT中多次融合确保两类信号充分交互
  3. 级联自适应深度范围

    • 功能:在推理时自动确定合适的深度范围,无需预知场景深度分布
    • 核心思路:利用已知内参和外参计算\(I_r\)与所有\(I_i\)之间可匹配的最大/最小深度。用对数均匀间隔在此粗范围内放置64个深度bin做初步预测,再取初步深度图的min/max值重建代价体做最终预测。训练时通过随机扰动GT深度范围增强鲁棒性
    • 设计动机:不同数据集的有效深度范围相差100倍以上(见Fig.2),固定范围必然在某些域失效。两步级联从粗到精逐步锁定正确范围

损失函数

  • log深度空间的L1损失 + 梯度损失 + 法线损失,应用在解码器的4个输出尺度上
  • 深度预测使用sigmoid映射到代价体深度范围:\(\hat{D}_r = \exp(\log(d_{\min}) + \log(d_{\max}/d_{\min}) \cdot \sigma(x))\)

实验关键数据

主实验表

Robust MVS Benchmark零样本评估(5个数据集平均)

方法 GT Poses GT Range Average rel↓ Average τ↑
DeMoN 16.0 18.3
MAST3R (raw output) 3.3 71.8
SimpleRecon 2.2 83.2
MVSA 1.8 87.0

MVSA在不需要GT深度范围的情况下超越了需要GT范围的SimpleRecon,证明自适应深度范围策略有效。

消融实验表

各组件贡献(KITTI + ScanNet + ETH3D平均)

配置 rel↓ τ↑
基线 (CNN cost volume) ~3.5 ~72
+ ViT Mono/Multi Combiner ~2.5 ~80
+ Adaptive depth range ~2.0 ~85
+ Scale-agnostic metadata ~1.8 ~87

关键发现

  • 在零样本设置下(未见过测试域),MVSA在5个不同数据集上全面超越专门训练的MVS方法和最新单目方法
  • 单目先验对处理源/参考帧重叠度低的情况至关重要——当多视角信号弱时自动退化为高质量单目估计
  • 训练仅在8个合成数据集上进行(纯RGB-D,无真实标注),却能泛化到真实数据
  • 视角数无关设计使模型在源帧数量从1到16变化时表现鲁棒
  • 生成的深度图3D一致性好,直接用于mesh重建的效果优于Depth Pro等单目方法

亮点与洞察

  1. Cost Volume Patchifier的设计非常巧妙:用单目特征来引导代价体的降采样,等于让token化过程本身就是"有语义意识"的,而不是盲目压缩
  2. 视角数无关的元数据聚合解决了一个长期的工程问题:不再需要为每个应用场景固定源帧数,使模型真正灵活
  3. 8个合成数据集覆盖室内/室外/航拍/驾驶等多种场景,数据策略是泛化能力的关键基础
  4. 用Depth Anything V2的预训练权重初始化ViT特征提取器,利用单目深度预训练知识来增强MVS,体现了"站在巨人肩膀上"

局限性

  • 仅在合成数据上训练,是否在大规模真实场景(如城市级SfM)中仍然鲁棒未充分验证
  • 级联自适应深度范围引入了两次前向推理,增加了计算开销
  • 对极端光照变化、动态物体遮挡等实际challenging场景的鲁棒性有待完善
  • ViT-Base参数量不小(~86M仅用于参考图像编码),移动端部署困难
  • 未探索与3D Gaussian Splatting等新型3D表示的结合

相关工作与启发

  • SimpleRecon [Sayed et al.]: 提出在代价体中融入几何元数据,本文扩展其设计使之视角数无关
  • Depth Anything V2 [Yang et al.]: 提供了强大的单目深度ViT预训练权重,被本文用作参考图像编码器
  • MAST3R [Leroy et al.]: 无需位姿的密集匹配方法,本文在有位姿时显著优于它
  • CasMVSNet [Gu et al.]: 级联代价体从粗到精的策略启发了本文的自适应深度范围设计
  • 启发:将单目先验作为"安全网"注入MVS框架是一个强大范式——当多视角信号不足时自动退化为单目,保证了下限

评分

⭐⭐⭐⭐ — 系统性地解决了通用MVS的四大泛化挑战(域/深度范围/视角数/3D一致性),架构设计优雅且实验全面。Robust MVS Benchmark上的零样本SOTA令人信服。代码开源加分。

相关论文