article: Michael Niemeyer等, 《RegNeRF: Regularizing Neural Radiance Fields for View Synthesis from Sparse Inputs》 (CVPR 2022), https://doi.org/10.48550/arXiv.2112.00724.
code:https://github.com/google-research/google-research/tree/master/regnerf
author units: Max Planck Institute for Intelligent Systems, Google research
摘要
nerf因其简单性和SOTA的表现已成为新视图合成任务的有力代表。
NeRF的输入为多个视图的图片时,能够生成新的相机视角的照片级真实感的渲染图片,但当输入视图变少时,性能会显著下降。在现实世界的应用场景,比如AR/VR、自动驾驶、机器人等,这些场景下能获取到的输入通常是稀疏的,每个场景只有很少的视图(关于特定对象或部分区域的视图),在这些场景下,NeRF渲染得到的新视图的质量显著下降,如下图。
RegNerf的作者分析认为,在稀疏输入场景中出现的大部分伪影主要是由两个原因导致的:
- 场景几何估计错误
- 训练开始时的发散行为
针对上述问题,RegNerf提出以下改进措施:
- 对从未观察到的viewpoint渲染的patches的几何形状和外观进行正则化(regularizing)
- 在训练过程中对射线采样空间进行退火(annealing)
- 使用归一化流模型(normalizing flow model)来正则化未观察到的viewpoint的颜色
1 Introduction
针对NeRF在稀疏场景下性能显著下降的问题,一些工作 [如MVSNeRF,SRF,pixelNeRF]提出了条件模型来克服这些限制。这些模型需要在具有多视图图像和相机姿势注释的许多场景的大规模数据集上训练模型,而不是针对给定测试场景从头开始进行测试时间优化,这样的预训练代价也是比较昂贵的。
上述这些模型在大数据集上完成预训练后,在泛化或者测试新场景时,就无需重新训练,而是可以通过摊销推理(amortized inference)仅从少量输入图像生成新颖的视图,结合每个场景进行短时间的微调,就可以得到比那些对这个场景重新进行训练的模型更为锐利,更有细节的效果。虽然这些改进的模型取得了一定的效果,但要先在包含多场景的大数据集进行预训练的代价是昂贵的,而且这些模型可能不能很好地泛化到新视图上,同时由于稀疏输入数据固有的模糊性,这些模型渲染得到的新视图也会出现模糊。
:::info
包含不同场景的多视图图像数据集并不总是现成的,而且获取成本可能很高;除此之外,尽管预训练时间比较长,但大多数方法在测试时都要经过一段时间的微调,且当测试数据域发生变化(可能类别和训练时的不一致),生成的新视图的质量容易下降。
:::
RegNerf这篇文章提出了一种用于正则化稀疏输入场景的NeRF模型的新方法。主要贡献有以下几点:
- 使用一个patch-based的正则化器,用于正则化从未观察到的视点渲染的patches的几何和外观,以此避免了昂贵的预训练过程
:::info
此前在正则化这个方向上的工作有DS-NeRF和Diet-NeRF。
DS-NeRF通过增加额外的深度监督来提高重建精度。相比之下,RegNeRF只使用RGB图像,不需要深度输入。
DietNeRF 比较了以低分辨率呈现的未观察到的viewpoint的CLIP嵌入。这种语义一致性损失只能提供高级信息,而不能改善稀疏输入的场景几何形状。相反,RegNeRF正则化渲染的patch的场景几何和外观,并应用场景空间退火策略。
经过实验,作者发现RegNerf可以获得更逼真的场景几何和更准确的新视图。
:::
- 使用了一个归一化流(normalizing flow model)模型,通过最大化渲染patches的对数似然,从而避免不同视图之间的颜色转移,来规范化在未见视点预测的颜色。
- 沿着射线采样点的退火策略,在扩展到整个场景边界之前,首先在小范围内对场景内容进行采样,这有效地防止了训练期间早期的发散。
3 整体模块设计
整体思路:基于已观察到的相机的viewpoint(蓝色相机),给出所有相机可能位置的边界框,然后定义未观察到的viewpoint(红色相机)(这些视图是输入图像中没有的,但是可以根据相机位置集合采样得到),从未观察到的视图投射光线,并采样(红色射线)这些射线上的点,把射线上采样得到的点喂入神经辐射场 f θ f_{\theta} fθ,渲染得到 颜色和密度,采样了一条射线上的多个点,对这些所有的点再做一个 alpha-composting (alpha 叠加),得到一个pixel对应的颜色和密度,因为对未观测的视图采样的是一个patch,对patch中的每一个像素重复上述操作,得到一个预测的RGB 颜色的patch P ^ \hat{P} P^和一个depth patch d ^ θ \hat{d}_\theta d^θ,然后对rgb patch进行外观正则化,depth patch进行场景几何正则化。外观正则化的思想是估计渲染得到的patch的颜色的可能性(本来是最大化对数似然,这里取负之后就变成了最小化负对数似然), ϕ \phi ϕ是在JFT-300M数据集的patches上训练的RealNVP归一化流模型,这个数据集是一个非结构化的2D数据集,这样 ϕ \phi ϕ就能被用在任意形式的场景下。场景几何正则化的做法是强行给渲染的depth patches加上一个深度平滑先验,作者说这样有助于减少 float artifacts (这个的意思可能是减少伪影?)且使得即使是稀疏的输入视图也能获得更真实的场景几何。
RegNerf是基于mip-nerf的基础上进行的改进,先简单介绍下nerf和mip-nerf的知识。
3.1 nerf 和 mip-nerf
3.1.1 nerf
nerf通俗来讲就是构造一个隐式的渲染流程,其输入是某个视角下发射的光线的位置o,方向d以及对应的坐标(x,y,z),送入神经辐射场Fθ得到体密度和颜色,最后再通过体渲染得到最终的图像。
Neural radiance fields
Volume Rendering
在有了3D空间的模型以后(即神经辐射场 f θ f_{\theta} fθ),需要以神经辐射场为中间载体合成图像,这个过程就是渲染。Nerf使用Volume Rendering的方法来做渲染。具体过程为,假设当前相机光心的位置为 o ∈ R 3 o\in R^3 o∈R3,将图像上任意像素与光心连线,可得到视角方向 d ∈ R 3 d \in R^3 d∈R3,根据光心及视角方向可得到一条光线 r ( t ) = o + t d r(t)=o+td r(t)=o+td,根据体渲染公式,按照如下流程,得到该像素上观测到的颜色
对上述公式进行离散近似,即可完成体渲染的过程。到此为止,用已观测到的图像作为监督,选择一个 MSE loss function,就可以开始训练了。
3.1.2 Mip-nerf
:::info
Mip-NeRF提出的背景:nerf在NeRF在每个pixel用single ray来sample场景,这种方法在渲染过程中,只对相机位置固定、改变观察方向的视角生成上表现较好,如果拉近或者拉远图像,(NeRF在做渲染时)会出现模糊(blurred)和锯齿(aliased)的情况。这种情况通常由于输入的同一个场景对应的多个图片清晰度(resolution)不一致而导致的。
补充:锯齿产生的本质是采样频率低于真实原始信号的频率,即信号处理中的“混叠”现象(可参考:)。解决锯齿有两种方法:一是尽可能提高采样率,如图形学中抗锯齿用到的SSAA/MSAA;二是尽可能去除高频分量,如使用低通滤波