MVSNeRF:融合多视图立体与神经辐射场,实现通用三维重建
今天要介绍的MVSNeRF,全称为“Fast Generalizable Radiance Field Reconstruction from Multi-View Stereo”。简单来说,它提出了一种全新的神经渲染方法,能够高效重建神经辐射场,用于新视角合成。先交代背景:以往的NeRF类方法,基本都需要在密集拍摄的图像上对每个场景进行单独优化,耗时且费力。而MVSNeRF走了一条完全不同的路线——它训练了一个通用的深度神经网络,仅需三个相邻输入视图,就能通过一次快速的网络推理,重建出辐射场。
具体如何实现?核心思路是将多视图立体中广泛使用的“平面扫描成本体积”引入,进行几何感知的场景推理,再结合基于物理的体积渲染,完成辐射场重建。网络在DTU数据集的真实物体上训练,随后在三个完全不同数据集上测试,效果相当惊人——不仅能跨场景泛化(即使测试的是室内场景,与训练用的物体场景差异显著),而且仅用三张输入图像,就能生成逼真的新视角合成结果,远超同期其他通用辐射场重建方法。更妙的是,如果后续有密集图像,这个估算出的辐射场表示还能快速微调,实现场景级别的快速优化,渲染质量更高,而优化时间远少于原始的NeRF。

主要工作与贡献
贡献体现在两个方面:一是将MVSNet架构引入神经辐射场,实现了基于深度网络的三维重建渲染;二是速度和质量的“双提升”——又快又好,这种组合在三维视觉领域实属难得。

算法流程

下面进入正题,讲解MVSNeRF的工作原理。与NeRF那种“每个场景用网络死记硬背”不同,MVSNeRF学习的是一个通用的辐射场重建网络。
给定真实场景的M个输入图像I_i(i=1,...,M)和已知的相机参数Φ_i,网络需要将这些信息转化为一个神经编码体——你可以将其理解为一个三维的“特征块”,其中每个体素都编码了场景的局部几何和外观信息。然后,对于任意一个空间位置,我们从这个神经编码体中插值出特征,再通过一个小型MLP回归出该位置的体密度和与视角相关的颜色值。这样,整个网络就相当于一个辐射场函数:

整个流程可以拆解为三步。第一步是构建Cost Volume:将二维图像特征扭曲到一组平面扫描上,形成一个成本体积(图a)。第二步是用三维CNN将这个成本体积转化为神经编码体,每个体素都携带高维神经特征(图b)。第三步则相对简单:对于任意空间点,从编码体中插值出特征,用MLP回归出密度和颜色,最终通过微分光线行进完成渲染(图c)。
Cost Volume重建
Cost Volume的求解逻辑与双目立体矫正类似。首先提取图像特征,然后构建成本量P——这个成本量由D个扫描面上的扭曲特征图堆叠而成。具体计算时,对于P中每个体素(u,v,z),其成本特征向量基于方差度量来计算,这一手段在MVSNet中已被广泛验证:

辐射场重建
有了成本量之后,下一步就是将其转化为辐射场。我们使用一个三维CNN(B)来处理成本量,重建出一个神经编码体S。这个S不仅包含几何信息——它编码了局部场景几何和外观的每体素特征。然后,利用一个MLP解码器(A)从这个编码体中回归出体积渲染所需的属性。
神经编码体。过去的MVS方法通常直接从成本体积中预测深度概率,仅表达了场景的几何信息。但做渲染还需要外观信息。因此,我们训练了一个深度三维CNN B,将构建好的图像特征成本体积,转化为一个新的C通道神经特征体积S。这里的特征空间并非人为设计,而是网络自己在训练中学习发现的,专门用于后续的体积属性回归。

这个三维CNN B是一个带有下采样、上采样卷积层和跳过连接的三维UNet结构。它能有效推断并传播场景外观信息,生成有意义的场景编码体积S。关键在于:这个编码体积以无监督方式预测——在端到端训练中隐式地学会编码场景几何和外观。由于二维特征提取中包含下采样,场景编码体积的分辨率会相对较低,仅从这些信息中回归高频外观有一定挑战性。因此,在接下来的体积回归阶段,我们也加入了原始图像像素数据来辅助。
端到端的体素渲染
这个光线行进渲染是完全可微的,意味着整个框架可以用三个输入视图,从输入到输出直接回归最终的像素颜色。我们采用L2渲染损失对整个框架进行监督,与基准像素颜色做对比。

得益于基于物理的体积渲染和端到端训练,渲染损失可以通过每个网络组件反向传播,将场景外观和对应信息层层传递,最终正则化到为视图合成服务的特征空间中。与NeRF的每场景训练不同,我们在DTU数据集的不同场景上进行跨场景训练。MVSNeRF借助成本体积处理中的几何感知场景推理,能够学会一个通用函数——面对新的测试场景,它可以将辐射场重建为神经编码体积,实现高质量的视图合成。
优化神经编码体
跨场景训练后的MVSNeRF,已经可以用三张输入图像快速重构出跨场景的辐射场。但由于输入图像有限,加上不同场景和数据集之间的差异较大,想在所有场景上都取得完美结果并不现实。而NeRF那边呢?通过对密集输入图像进行每场景优化,绕过了泛化难题,结果逼真但代价极高。
我们的做法是对神经编码体进行微调——网络可以先从少量图像中快速重建出一个初始的神经编码体,然后,当有密集图像时,就可以进行快速的场景优化。
添加颜色。在神经编码体发送给MLP解码器之前,我们需要将颜色信息加入其中。之前的设计是保留原始像素颜色作为微调输入,但这会导致重建始终依赖那三个输入视图。我们换了一个策略:将每个体素在每个视角下的颜色,作为额外的通道直接附加到编码体上。这样一来,神经重建就独立于输入视图了,而且这些颜色特征也可以在场景优化中一同训练。这种“附加”操作一开始会引入一些模糊性,但微调过程中很快就能消除。
优化过程。加入颜色之后,神经编码体加上MLP解码器,已经算是一个不错的初始辐射场,能合成合理的图像。当有密集图像可用时,我们建议进一步微调体素特征和MLP解码器,实现快速的场景优化。值得注意:我们只优化编码体和MLP,不优化整个网络。这赋予了神经优化更大的灵活性——可以独立调整每个体素的局部神经特征,比试图优化跨体素的共享卷积操作要容易得多。
实验结果




