【技术综述】MVSNet系列演进:从2018到2022的有监督深度估计方法全景解析
1. 从一张照片到三维世界:深度估计与MVSNet的诞生
想象一下,你手里有一张普通的风景照片,如何让电脑理解照片里哪座山离你更近,哪棵树在更远的地方?这就是“深度估计”要解决的核心问题。简单说,就是让机器从二维的图片中,恢复出三维的空间信息,知道每个像素点离相机有多远。在计算机视觉领域,这不仅是三维重建、自动驾驶、机器人导航的基石,也是AR/VR应用能“理解”真实环境的关键一步。
在深度学习浪潮之前,传统方法(比如基于多视图几何的算法)已经能做得不错,但它们往往对光照、纹理、遮挡等条件非常敏感,计算复杂,而且结果常常是“支离破碎”的,不够完整。转折点发生在2018年,一篇名为 MVSNet 的论文横空出世,它首次将深度学习端到端地应用于多视图立体视觉(MVS)任务,开启了有监督深度估计的新纪元。你可以把它理解为一个“开山鼻祖”,它搭建了一个标准化的流水线(Pipeline):从多张不同角度拍摄的图片中提取特征,把这些特征“对齐”到同一个三维空间里,构建一个三维的“代价体”,最后通过神经网络从这个体数据中“猜”出每个点的深度。
这个框架虽然经典,但问题也很明显:那个三维的“代价体”太占内存了!一张稍高分辨率的图片,再乘上假设的深度采样数量,内存消耗瞬间爆炸,严重限制了模型的输入分辨率和实际应用。所以,从MVSNet诞生的那一刻起,后续几乎所有的工作都围绕着一个核心目标展开:如何在保证甚至提升重建精度的前提下,疯狂地“压榨”内存和计算开销。从2018年到2022年,这个系列就像一场精彩的接力赛,每一棒都在前人的基础上,解决新问题,引入新思路。今天,我就带你沿着时间线,把这趟技术演进之旅彻底捋清楚,看看研究者们是如何一步步“螺蛳壳里做道场”,把深度估计模型越做越强、越做越高效的。
2. 奠基与初探(2018-2019):经典框架的建立与内存优化的首次尝试
2.1 开山之作:MVSNet (ECCV 2018)
MVSNet的流程非常清晰,我把它拆解成几个步骤,你就能明白它到底在干什么。首先,输入是几张从不同视角拍摄的同一场景的照片,其中一张被指定为“参考视图”,其他的是“源视图”。第一步,用一个共享权重的2D卷积网络(比如一个简化的VGG)分别提取每张图片的特征。第二步,也是最关键的一步,叫做“单应性变换”。想象一下,对于参考视图上的一个像素点,我们假设它位于某个深度平面上,那么这个点在其他源视图上的投影位置是可以计算出来的。MVSNet会预设一系列离散的深度假设,把每个源视图的特征图都“扭曲”到参考视图的每一个假设深度平面上,这样,我们就得到了一个“特征体”。
接下来,把所有源视图的特征体,沿着视图维度,用方差运算聚合起来,形成一个“代价体”。这个代价体的每个“体素”,存储的是不同视图在该空间位置的特征差异程度,差异越小,说明该位置是真实表面的可能性越大。然后,这个粗糙的代价体会经过一个3D U-Net网络进行“正则化”,目的是平滑噪声,聚合上下文信息,输出一个更干净的概率体。最后,沿着深度方向对这个概率体进行加权求和,就能得到参考视图上每个像素的预测深度值了。
我实测下来,MVSNet在当时的DTU数据集上,整体指标(Overall,综合了精度和完整度)达到了0.462,在Tanks and Temples基准测试的均值(mean)为43.48。这个成绩意味着,基于学习的方法在“完整度”上首次大幅超越了传统方法,能把物体表面重建得更连续、更完整,虽然在边缘等细节的“精度”上还有差距。它为整个领域树立了一个可学习、可优化的强大基线。
2.2 时间换空间:RMVSNet (CVPR 2019)
MVSNet最大的瓶颈就是那个巨大的3D代价体。RMVSNet的作者Yao Yao(也是MVSNet的作者)想了个巧妙的办法:用时间换空间。既然一次性处理整个代价体太占内存,那就沿着深度方向,一层一层地处理。它用循环神经网络(RNN,具体是GRU单元)替代了原来的3D U-Net。你可以想象成,网络不是同时“看”整个三维数据,而是像扫描一样,从近到远,一层一层地“扫”过去,每一层处理时都会参考前面层的信息。
这样做的好处立竿见影,内存消耗大幅下降,因为同一时间只需要在内存中保留一层或几层的数据。但代价是训练和推理的时间变长了,因为RNN的序列处理是串行的。此外,RMVSNet还把深度预测从回归任务改成了分类任务,把连续的深度区间划分成多个离散的深度“档位”,网络的目标是预测每个像素属于哪个深度档位。为了避免分类带来的“阶梯状”深度图,它还引入了亚像素优化。最终,RMVSNet在DTU上的整体指标提升到了0.417,Tanks均值提升到48.40,证明了用序列模型优化内存这条路的可行性。
2.3 点云上的操作:PointMVSNet (ICCV 2019)
如果说RMVSNet是在三维体数据内部做文章,那PointMVSNet的思路就更“跳跃”了:它干脆跳过了构建稠密代价体这一步,直接在三维点云上进行操作。它的流程分阶段进行:先用一个轻量版的MVSNet生成一个粗糙的深度图,并反投影成初始的三维点云。然后,它以这些初始点为中心,沿着视线方向前后生成一些“假设点”,形成一个“点云特征”。
接下来是关键,它设计了一个叫做“PointFlow”的模块,这个模块直接在点云上操作,学习每个点的局部几何结构,并预测一个“深度残差”——也就是初始深度和真实深度之间的偏移量。用初始深度加上这个残差,就得到了更精确的深度,然后可以迭代这个过程。这个方法极大地减少了内存占用,因为处理的是稀疏的点云而非稠密的体素。它的DTU整体指标为0.391,Tanks均值为48.27,效果与RMVSNet相当,但开辟了“迭代优化”和“基于点云”这两条非常重要的技术路径。
2.4 卷积核的魔法:P-MVSNet (ICCV 2019)
P-MVSNet的优化点非常聚焦,就在正则化网络使用的卷积核上。它认为,标准的3D卷积核(比如3x3x3)是“各向同性”的,即在空间三个方向(宽、高、深)上同等对待。但在MVS任务中,图像平面(宽高)和深度方向的信息性质是不同的。图像平面更多是纹理、上下文信息,而深度方向更多是匹配、概率分布信息。
因此,P-MVSNet提出了使用“各向异性”的卷积核。具体来说,它用了两种特殊的卷积核:一种是在图像平面聚合信息的“Patch-wise”卷积(例如7x1x1或1x7x1),另一种是在深度方向聚合信息的“Depth-wise”卷积(例如1x1x7)。通过这种“分而治之”的策略,网络能更有效地分别学习空间上下文和深度关系,从而优化代价体。它在Tanks数据集上表现突出,达到了55.62,说明其重建的完整度非常好,虽然精度略有损失,但综合指标(0.420)依然有竞争力。
3. 迭代与精炼的浪潮(2020):多尺度与自适应成为主流
2020年是MVSNet系列方法大爆发的一年,大家不约而同地聚焦于几个核心思想:由粗到细的迭代优化、多尺度特征金字塔以及更精细的代价聚合策略。目标很明确:既要高精度,又要高效率。
3.1 级联优化:Cascade MVSNet (CVPR 2020) 与 UCSNet (CVPR 2020)
这两篇论文像是一对“孪生兄弟”,思路高度相似,都采用了级联(Cascade)结构,但在细节上各有千秋。它们的核心都是“逐步放大,逐步精确”。网络通常包含三个阶段(Stage)。在第一阶段,输入图像被下采样到很小的尺寸(比如原图的1/16),并在一个很宽的深度范围内进行稀疏的深度采样。这样构建的代价体非常小,可以快速推断出一个粗糙但覆盖范围广的深度图。
然后,进入第二阶段。此时,图像分辨率提高(例如1/4),最关键的是,深度采样区间不再是固定的全局范围,而是根据第一阶段预测的深度图,为每个像素自适应地确定一个更窄、更精确的局部深度区间。在这个区间内再进行密集采样。这个过程在第三阶段(全分辨率)再次重复。这样,网络就像用一个“低倍镜”快速找到目标,再用“高倍镜”进行精细对焦。
Cascade MVSNet 和 UCSNet 的主要区别在于如何确定这个“局部深度区间”。Cascade MVSNet采用了一种启发式的方法,简单地围绕上一阶段的预测深度,设置一个固定宽度的区间。而UCSNet则引入了“不确定性估计”这个更聪明的机制。它在每个阶段不仅预测深度,还预测一个“不确定性图”。对于不确定性低的区域(网络很自信),下一阶段的搜索区间就设得很窄;对于不确定性高的区域(比如遮挡边界),区间就保持较宽,给网络更多纠错空间。这个设计非常符合直觉,也让UCSNet在复杂区域的表现更鲁棒。从指标看,两者互有胜负,Cascade在DTU精度上稍好,UCSNet在完整度上更优,都代表了当时SOTA的水平。
3.2 基于图像金字塔的残差学习:CVP-MVSNet (CVPR 2020)
CVP-MVSNet同样采用级联结构,但它在代价体构建和深度预测方式上融合了PointMVSNet的思想。它不再像Cascade那样每一阶段都预测一个完整的深度图,而是预测一个“深度残差”。具体来说,在每一个阶段,它以上一阶段预测的深度点为中心,在深度方向前后采样一些偏移点,构建一个“局部代价体”。这个代价体只关注深度残差(Δd)的可能性。网络从这个局部代价体中学习,输出的是每个点需要调整的残差值,然后加到上一阶段的深度上,得到新的深度。
这种方法的好处是,网络每一阶段的学习目标更简单(只学偏移量),并且局部代价体比全局代价体小得多。同时,它也使用了图像特征金字塔来提供多尺度信息。CVP-MVSNet在速度和内存上取得了很好的平衡,是当时效率非常高的模型之一。
3.3 代价构建的革新:CIDER (AAAI 2020) 与 PVA-MVSNet (ECCV 2020)
当大家还在用方差法构建代价体时,这两篇论文从相似度计算和视图聚合的角度进行了革新。
CIDER 认为计算所有特征通道的方差效率不高。它提出将特征图按通道分成若干组,然后在每组内,计算参考视图特征与源视图特征的内积(或余弦相似度)作为匹配代价,最后再将所有组的代价拼接起来。内积计算比方差更轻量,同时分组策略也增强了特征的表达能力。这使得CIDER能够使用更复杂的正则化网络(如两个3D U-Net)而不会超内存,在Tanks数据集上取得了不错的成绩。
PVA-MVSNet 则关注了一个更本质的问题:在视图聚合时,对所有源视图“一视同仁”地取平均是否合理?显然不是。如果一个点在某个源视图中被遮挡了,那么该视图在这个点的特征就是无效的,甚至是有害的。PVA-MVSNet引入了“自适应视角聚合”模块。它会计算每个源视图的特征与参考视图特征的相似度,并以此生成一个权重图。相似度高(可见性好)的视图权重就大,相似度低(可能被遮挡或匹配差)的视图权重就小。在聚合代价时,使用这个权重进行加权平均,而不是简单平均。这个设计显著提升了在遮挡区域的重建质量。
4. 深化与融合(2021-2022):不确定性、搜索与非参数化
到了2021年之后,研究开始向更深处挖掘,关注概率建模的合理性、深度搜索的效率,以及处理更复杂分布的能力。
4.1 不确定性引导:Vis-MVSNet (BMVC 2020 / IJCV 2022)
Vis-MVSNet的核心贡献是显式地建模并利用了“不确定性”。它的流程分为两步:首先,它在每对“参考视图-源视图”之间构建一个成对的代价体,并从中初步推断出一个深度图和一个不确定性图。这里的不确定性是通过计算概率体沿深度方向的熵得到的,熵越大,说明概率分布越平缓(网络越不确定);熵越小,说明分布越尖锐(网络越确定)。
然后,它利用这些不确定性图,对所有源视图生成的深度图进行融合。不确定性低的深度估计在融合时权重更高。最后,再用融合后的深度图去指导构建最终的全局代价体。这种方法让网络能够知道自己哪里“没把握”,从而在融合时信任更可靠的视图,提升了整体鲁棒性。其思想与UCSNet有异曲同工之妙,但实现上更为系统和深入。
4.2 极线几何与高效卷积:EPP-MVSNet (CVPR 2021)
EPP-MVSNet做了三个有趣的改进。第一,在单应性变换时,它不再只是在极线上均匀采样特征点,而是设计了一个“极线装配”模块,自适应地在极线附近插值并聚合多个特征点,从而更充分地利用高分辨率图像信息。第二,它采用了基于熵的深度区间优化策略,与UCSNet的不确定性思想类似。第三,它指出标准的3D卷积在深度维度上聚合信息时,相邻深度层之间的特征关联性可能很弱,导致大量冗余计算。因此,它用“伪3D卷积”替代了标准3D卷积,即将一个3x3x3的卷积分解为3x3x1(空间卷积)和1x1x3(深度卷积)的两个步骤,大幅减少了参数量和计算量。
4.3 集大成者与二分搜索:PatchmatchNet (CVPR 2021) 与 GBi-Net (CVPR 2021)
PatchmatchNet 可以说是前期许多有效技巧的集大成者。它借鉴了传统PatchMatch算法的思想,引入了“传播”和“扰动”步骤。在传播阶段,一个点的深度假设会传播到其邻域点;在扰动阶段,会对当前深度假设进行随机微调。同时,它也集成了多尺度优化、分组相关性和可变形卷积等技术。PatchmatchNet在DTU数据集上取得了惊人的完整度指标(0.277),虽然精度有所牺牲,但它证明了将传统算法思想与深度学习结合的巨大潜力,并且在高级别数据集上表现稳健。
GBi-Net 则提供了一个全新的视角:将深度估计视为一个在有序深度区间内的二分搜索问题。网络不再回归具体的深度值,而是通过多个阶段,不断判断真实深度位于当前深度区间的左半部分还是右半部分,从而以对数级的速度缩小搜索范围。例如,第一阶段将整个深度范围分成两半,预测深度在哪一半;第二阶段在选中的那一半里再分成两半……如此迭代。为了容错,它还设计了“误差容忍区间”机制,防止早期阶段的错误选择导致后续无法挽回。这种方法极大地减少了需要构建代价体的深度假设数量,内存效率极高。
4.4 挑战单峰假设:NP-CVP-MVSNet (CVPR 2022)
之前的迭代方法大多隐含了一个假设:每个像素的深度概率分布是“单峰”的,即只有一个峰值。但在低分辨率阶段,一个像素对应高分辨率下的一个图像块,这个块内可能包含深度不连续的区域(比如物体边缘),其深度分布可能是“多峰”的。强行用单峰模型拟合,一旦初始峰值选错,误差会在迭代中不断放大。
NP-CVP-MVSNet(非参数化CVP-MVSNet)就是为了解决这个问题。它放弃单峰假设,采用一种非参数化的方法。在每一个阶段,它不只保留概率最高的那个深度假设,而是保留概率最高的前K个假设。在下一阶段,围绕这K个假设分别构建局部代价体进行细化。这就好比不仅相信“最可能的答案”,也给“次可能的答案”一个验证的机会。当然,这带来了新的挑战:不同像素的深度采样点不再对齐,无法使用标准的3D卷积。为此,论文提出了“稀疏代价体”和“稀疏3D U-Net”来进行高效处理。这个工作体现了研究从优化工程技巧,深入到思考概率模型本身合理性的趋势。
4.5 统一回归与分类:UniMVSNet (CVPR 2022)
UniMVSNet思考的是另一个基础问题:深度估计用回归好还是分类好?回归直接输出深度值,是连续的,理论上更精确,但容易过拟合;分类输出离散深度概率,更稳定,但结果是离散的,有量化误差。UniMVSNet提出了一个“统一”的框架,结合二者优点:先通过分类得到一个粗略的深度范围(离散深度平面),再在这个范围内进行回归,预测一个连续的“接近度”偏移量。此外,它还借鉴目标检测中的Focal Loss思想,设计了针对MVS任务的损失函数,让网络更关注那些难匹配的像素点。这个工作体现了对学习框架本质的深入思考。
5. 技术演进脉络与未来挑战
回顾从MVSNet到2022年这些代表性工作,我们可以清晰地看到几条核心的演进脉络:
- 内存与效率的极致优化:这是贯穿始终的驱动力。从RMVSNet的RNN序列处理、PointMVSNet的点云操作,到Cascade/UCSNet的级联优化、CIDER的轻量代价计算,再到GBi-Net的二分搜索,每一步都在想方设法降低对显存的恐怖需求。
- 从全局到局部,从粗糙到精细:迭代优化和由粗到细的策略成为主流范式。通过低分辨率快速定位,再在高分辨率局部精修,极大地提升了精度和效率的平衡。
- 概率建模与不确定性:早期工作隐含地学习概率分布,后期如UCSNet、Vis-MVSNet、EPP-MVSNet则显式地引入不确定性估计,让网络具备“自知之明”,从而做出更鲁棒的决策。
- 代价构建与聚合的精细化:从简单的方差平均,发展到内积相似度(CIDER)、自适应视图加权(PVA-MVSNet)、考虑遮挡与可见性,代价体的构建越来越贴合多视图几何的物理本质。
- 跳出网格与参数化假设:PointMVSNet直接操作点云,NP-CVP-MVSNet挑战单峰分布假设,这些工作都在尝试突破常规三维表示(规则体素网格)和简化概率模型的限制,追求更灵活、更通用的表达。
当然,挑战依然存在。有监督方法严重依赖大量带有精确深度真值的数据进行训练,而真实场景的高质量三维标注成本极高。这使得模型的泛化能力成为一个关键问题:在一个数据集上训练得很好的模型,换一个场景可能就表现不佳。未来,如何利用更易获取的弱监督、自监督信号,以及如何设计更具泛化能力的网络结构和预训练方法,将是重要的研究方向。此外,如何将这些算法真正部署到手机、机器人等资源受限的边缘设备上,实现实时的高质量重建,从实验室走向实际应用,还有大量的工程优化工作要做。从我个人的项目经验来看,选择模型时往往需要在精度、速度、内存和泛化性之间做权衡,没有“银弹”。理解这些经典工作的核心思想,能帮助我们在面对具体问题时,找到最适合的技术组合与优化方向。
更多推荐
所有评论(0)