MVSNet (2018):非结构化多视角立体视觉的深度推断,第一个端到端 MVS深度估计模型

MVSNet (2018):非结构化多视角立体视觉的深度推断,第一个端到端 MVS深度估计模型

导出时间:2025/11/24 08:50:52

1、背景:为什么要研究 MVS(多视角立体视觉)?

想象一下:你去旅游,拍了一堆照片。你能从这些二维照片中重建出一个三维的场景吗? 这就是 多视角立体视觉(Multi-View Stereo, MVS) 要解决的问题 —— 用多张重叠的照片,推算出场景里每个点的深度,得到 3D 模型。

传统方法的问题

传统 MVS 方法依赖两类关键步骤:
  1. 人工设计的匹配规则
  • 要解决的问题:两张(或多张)照片里,哪个像素点对应同一个真实世界的点?
  • 传统做法
    • 人为规定一个“相似度公式”。
    • 比如:拿一小块区域(像素块),去另一张图里滑动比对,看哪块最像。
    • 常用的“像不像”度量方式有:
      • 相关性 (correlation):像比较两段音乐的波形,看节奏是不是一致。
      • 互信息 (mutual information):更高级的统计度量,看两个信号共享多少信息。
👉 比喻: 想象你手里有两张班级合照,你要找到“这张照片里的小明,对应另一张照片里的哪个人”。 传统方法就是:
  • 看小明的头发、衣服、脸型,算个相似度分数;
  • 再在另一张照片里逐个比对,找到最像的。

  1. 工程化的后处理(以 SGM 为例)
  • 要解决的问题:前一步得到的匹配结果常常会“乱糟糟”,比如有噪声、局部错误。
  • 传统做法:用一些工程规则,让结果更平滑、连续。
    • 半全局匹配 (Semi-Global Matching, SGM)
      • 沿着不同方向(水平、垂直、对角线)检查深度结果,强迫它们不要跳来跳去,尽量保持平滑。
      • 但也允许在边缘处(比如物体边界)出现明显变化。

但是传统方法有一些明显缺点:
  • 低纹理区域:比如一面白墙,像素太相似,很难知道哪个点对应哪个点。
  • 反光/透明区域:比如玻璃、水面,光线不规则反射,导致匹配失败。
  • 不完整重建:结果往往有“缺口”,尤其在复杂场景里。
结论:传统方法在“理想条件下”可以用,但在真实世界的场景中,常常不够稳健。

2、动机:为什么引入深度学习?


2.1、什么是语义信息

深度学习的 CNN 在图像识别、目标检测上已经表现惊人。那是不是也可以用在三维重建上?
  • 优势:神经网络能学习“语义信息”,可以弥补传统方法在反光/低纹理区域的缺陷。

理解“语义信息”,是从“低级图像特征”到“高级理解”的跨越。

  1. 什么是“低级特征”?

计算机一开始看到图像,只能看像素值(RGB),或者像素的简单变化:

  • 边缘(亮暗变化)
  • 纹理(重复花纹)
  • 颜色块

这些叫 低级特征,没有真正的“意义”。 👉 举例:一面白墙,对计算机来说全是相似的像素,没有什么区别。


  1. 什么是“语义信息”?

“语义” = 含义、理解。 当神经网络训练后,它不只是看“像素长得像不像”,而是学会了一些场景规律物体常识

  • 墙壁 → 通常是大平面,即使没有纹理,也能推测出深度连续。
  • 地面 → 一般在图像下方,深度逐渐增加。
  • 天空 → 通常在最远处,应该有“无限远”深度。
  • 物体边界 → 桌子和背景之间,深度会突然变化。

这些规律就是 语义信息:和“物体类别”、“场景结构”相关的高层理解。

👉 比喻:

  • 低级特征:看见“几根黑线、一些灰块”。
  • 语义信息:能认出来“这是人的眼睛”,“这是墙壁”。

  1. 为什么语义信息重要?

在深度估计里,很多地方仅靠像素匹配是没法解开的

  • 白墙:像素都一样,传统方法不知道墙有多远。
  • 玻璃:像素花哨,但其实背后有个简单平面。
  • 光照变化:同一个物体在不同照片中亮度不同,低级特征会被迷惑。

但如果网络学到了语义先验:

  • 知道“这是墙 → 应该是个平面”
  • 知道“这是地面 → 深度要逐渐变化”
  • 知道“这是天空 → 应该非常远”

就能补足低级信息的不足。


2.2、从双目到多视角,MVSNet 要解决什么?

  • 双目立体视觉(两张图)里,深度学习已经超过传统方法,做出了像 GCNet 这样的强基线。
  • 但是,从“双目”推广到“多视角”就更困难:
    • 双目时,图像都被校正了,问题只剩下“一维视差”;
    • 多视角时,相机位置任意,几何关系复杂,没法直接套用双目的方法。

在 MVS 出现深度学习之前,也有尝试:
  • SurfaceNet (2017):把所有图像颜色和相机信息放到三维体素格子里,用 CNN 学习 → 但内存太大,只能处理很小的场景。
  • LSM (2017):用可微投影生成体积,也受限于 3D 网格,难以扩展到大场景。
于是,研究者提出: 👉 能不能设计一个方法,既能 利用深度学习的强大特征提取能力,又能 高效适配多视角的复杂几何,而且还能 大规模扩展
这就是 MVSNet (ECCV 2018) 的出发点。


记住一句话:MVSNet 是第一个真正把「多视角几何」和「深度学习」结合在一起,做到端到端预测深度图的网络

3、MVSNet 的三大核心创新

可微单应性(Differentiable Homography)

  • 问题:多视角几何里,我们需要把不同相机拍摄的图像对齐到同一个“参考相机视角”,才能比较像素是否一致。
  • 传统方法:这是一个几何投影过程,不能直接放进神经网络里学习。
  • MVSNet 创新:提出了可微单应性变换,把几何投影写成一个可以反向传播的操作。
    • 这样网络能自动学会“如何在不同相机之间对齐”。
👉 可微单应性 = 把“相机视角变换”写进网络里,变成一个能学习、能调优的模块。

构造 3D 代价体(Cost Volume)


  • 双目相机:两台相机是并排放的(有一个固定基线),只需要在一条水平线上“左移右移”找匹配(就是一维搜索)。
  • 多视角相机:相机不一定是并排的,可以随便拍(正面、侧面、斜着…),这时,同一个物体在不同相机里的投影位置,并不会只是在水平线上移动,而是会在 整张图上乱跑
所以:
  • 你不能再只在“一维的水平线”上找匹配;
  • 必须考虑 连续的三维深度空间:物体可能在任意深度位置。
  • 通俗说:你要在 很多个深度假设 上尝试,把别的相机的图像投影到这个深度,再去比较是否对齐。
✅ 总结:MVS匹配问题是连续的,需要在三维空间(深度假设)中搜索

🧩 MVSNet 的思路

MVSNet 说:既然不知道物体到底多远,就干脆 把可能的深度都试一遍
  • 假设我们把场景划分成 D 个深度层(比如从 1 米到 10 米,每隔 1cm 一层)。
  • 对于每个深度层,把所有相机的图像都“投影”到参考相机的视角。
  • 如果这个深度是假设正确的 → 投影后的图像应该高度对齐;
  • 如果深度是假设错的 → 投影后会模糊/错位。
这样,就能在每个深度层收集一组“匹配分数”。 所有这些层堆起来,就得到一个 3D 代价体 (Cost Volume)

👓 通俗比喻

想象你戴上了一副神奇的 虚拟眼镜
  • 这副眼镜有一个“深度旋钮”。
  • 每转动一次旋钮,相当于假设场景里所有东西都在这个深度。
  • 系统就会把多张相机拍的图像在这个深度下对齐,给你看效果。
👉 结果:
  • 如果对齐后,多个相机的图像都非常一致 → 那说明这个深度可能就是正确的。
  • 如果看上去东倒西歪 → 那个深度假设就是错的。
把所有可能的深度都试一遍,相当于你就得到了一本“厚厚的对齐相册” 📖。 这本相册里,每一页就是一个深度层,翻到哪一页图像最清晰,就是正确深度。 这本厚相册 = 3D 代价体

一句话总结: 3D 代价体就是“把所有可能的深度都试一遍,把结果堆成一大本厚相册/仓库”,网络后面会从里面挑出哪一层最对,从而得到正确的深度图。


3D 卷积正则化(3D CNN Regularization)

  • 问题:代价体往往很嘈杂(有错误匹配、遮挡干扰)。
  • MVSNet 创新:用 3D CNN 在 (Depth × Height × Width) 空间中进行特征聚合和正则化,学习到“哪些匹配是可靠的”。
  • 最终输出一个概率分布 (probability volume),再通过“期望值”方式得到深度图。
👉 比喻:
就像你收集了一堆同学的意见(代价体),里面有噪声;然后请一个有经验的老师(3D CNN)来综合判断,过滤掉不靠谱的回答,给出最合理的结论。

✅ 总结一句话

MVSNet 的创新点 = 「可微几何投影」+「深度假设代价体」+「3D CNN 正则化」, 这使得它成为第一个端到端的多视角深度学习框架,也奠定了后续 CasMVSNet、PatchmatchNet 等改进的基础。




4、MVSNet 的模型网络结构

image.png

🖼️ 总览

从左到右,可以分成 4 大步骤:
  1. 特征提取 (Feature Extraction)
  2. 可微单应性 (Differentiable Homography)
  3. 代价体构建 & 正则化 (Cost Volume Regularization)
  4. 深度图预测与优化 (Depth Map Inference & Refinement)

1️⃣ 特征提取 (Feature Extraction)

  • 左边是多张图像:一张 参考图像(Reference Image),几张 源图像(Source Images)。
  • 每张图都经过同一个 CNN(共享权重 Shared Weights),提取出特征图。
  • 这些特征比原始像素更鲁棒,可以包含纹理、边缘、语义信息。
👉 可以理解为:
图像 → “高维描述子”,网络学会“什么特征点更容易匹配”。

2️⃣ 可微单应性 (Differentiable Homography)

  • 把源图像的特征,通过相机参数 + 不同深度假设,投影到参考相机坐标系
  • 每个深度假设都会得到一组对齐后的特征图。
  • 这样,在参考图像的视角下,我们能比较“在某个深度下,不同相机看到的东西是否一致”。
👉 就好比:
“假设桌子在 3 米远,把所有相机的画面对齐到 3 米层;再假设桌子在 5 米远,对齐到 5 米层……一层层试。”

3️⃣ 代价体构建 & 正则化 (Cost Volume Regularization)

  • 上一步得到的对齐特征,按深度堆叠起来 → 代价体 (Cost Volume)
  • 每个 voxel(体素单元)表示在某个深度下的匹配一致性。
  • 然后用 3D CNN 在这个三维体 (D×H×W) 上卷积,进行“正则化”:
    • 消除噪声
    • 聚合上下文信息
    • 学习哪些深度假设更可信
👉 类比:
“建了一本厚厚的相册,每一页是一个深度假设。3D CNN 就像老师,翻整本相册,挑出最合理的深度层。”

4️⃣ 深度图预测与优化 (Depth Map Inference & Refinement)

  • Soft Argmin
    • 3D CNN 输出一个 概率分布(每个像素在各个深度的概率)。
    • 用“加权平均”得到初步深度图(Initial Depth Map)。
  • Depth Refinement
    • 把初步深度图和原始图像特征结合,再用 2D CNN 做细化 → 得到更平滑、边缘更清晰的最终深度图。
👉 训练时:
  • Loss0:监督初步深度图。
  • Loss1:监督优化后的深度图。
  • GT:Ground Truth 深度。

✅ 一句话总结

MVSNet 整个 pipeline 就是: 图像 → CNN 特征 → 可微投影到不同深度 → 堆成代价体 → 3D CNN 选最可能的深度 → Soft Argmin 得初步深度 → Refinement 得更清晰的深度图。

5、MVSNet 的重大缺点

虽然 MVSNet 开创了端到端学习的 MVS,但也有不少硬伤:
  1. 显存/计算开销巨大
    • 代价体 (D × H × W) 非常庞大,D = 深度层数,H/W = 图像分辨率。
    • 如果图像大、深度范围大,代价体就会爆炸(几百 MB~几 GB 显存)。
    • 限制了 MVSNet 只能在较小分辨率下工作,无法大规模工程应用。
  2. 深度采样固定、不灵活
    • 它用均匀采样来假设深度范围。
    • 但是:
      • 如果场景很大,需要很多层(D),才能覆盖所有深度 → 内存更爆炸。
      • 如果场景很小,采样又浪费。
    • 所以在大场景(室外/城市级别)效果不佳。
  3. 推理速度慢
    • 3D CNN 在整个代价体上卷积,计算代价非常大。
    • 不适合实时应用(如 AR/VR、机器人导航)。
  4. 对输入相机姿态敏感
    • 假设相机位姿很准,但在实际 SfM/SLAM 提供的姿态有误差时,鲁棒性不足。

6、后续基于 MVSNet 的改进模型

研究者们针对这些缺点,提出了很多改进:

🏗️ 内存 & 分辨率问题

  • R-MVSNet (2019):用递归方式逐层更新代价体,不用一次存下全部。
  • CasMVSNet (2019):提出级联金字塔,先粗采样再细采样,大幅减少 D(内存显著下降)。
  • UCSNet (2020):用可变采样策略,自适应深度范围,避免浪费。

⚡ 推理效率问题

  • PatchmatchNet (2021):把传统 PatchMatch 算法“学习化”,不需要构造完整代价体,速度和显存占用大幅优化。
  • NeuralRecon (2021):面向实时重建,适配视频流。

🤖 模型表达力问题

  • TransMVSNet (2022):引入 Transformer,全局上下文建模,提升遮挡/纹理不足区域的效果。
  • AA-RMVSNet (2020):引入注意力机制,改进 3D 卷积的正则化。

🌍 泛化 & 大模型方向

  • DUSt3R (2024):不再依赖已知相机姿态,直接预测点云/pointmap,鲁棒性极强。
  • MVSAnywhere (2025):把单目大模型先验(如 MiDaS/ZoeDepth)和 MVS 几何结合,真正实现“零样本跨场景”泛化。

7、未来趋势

  1. 高效化 & 轻量化
    • 用 PatchMatch/稀疏采样/级联方式,进一步减少显存和计算,让 MVS 可以实时跑在移动设备上。
  2. 融合大模型先验
    • 单目大模型(MiDaS、ZoeDepth)有强大的跨场景能力。
    • MVS 未来趋势是“几何 + 语义大模型”结合(MVSAnywhere 就是开端)。
  3. 摆脱严格相机姿态依赖
    • 未来 MVS 会越来越鲁棒,即使位姿估计不准,也能通过学习补偿(DUSt3R 代表)。
  4. 与 3D 表达形式结合
    • 结合 Gaussian Splatting、NeRF、3DGS 等新型表示,让深度估计直接服务于可渲染、可编辑的 3D 表达。