NeRF_Representing-Scenes-as-Neural-Radiance-Fields-for-View-Synthesis
NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
论文链接:NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis | Abstract (arxiv.org)
仓库链接:bmild/nerf: Code release for NeRF (Neural Radiance Fields) (github.com)
Abstract
我们将展示一种方法,可以通过稀疏的输入图片,合成复杂场景。我们的算法通过全连接的深度网络表现场景,其输入是连续的5D坐标(空间的(, , )以及观察方向(, )),输出是体密度(volumn density)以及该点在该视角下(view-dependent)的颜色估计值。我们合成视线的方法是通过查询从相机发出的光所经过的5D坐标,并用经典体渲染(volumn rendering)技术将输出的颜色和密度投影至2D照片。因为体渲染是可微分的,因此仅需要将带有相机位置的一系列图片作为输入。我们介绍了如何优化神经辐射场,并证明其结果优于先前的neural rendering和view synthesis方法。建议查看视频以对比。
Introduction
函数会输出发出的辐射和密度(density),密度是作为一个可微分的不透明度控制一道穿过(, , )的光线(ray)已经累积(accumulate)了多少辐射(radience)。我们的方法优化了一个全连接的深度网络,其不具有任何卷积层(通常被称为多层感知机MLP)。该网络代表了一个函数,从5D坐标回归(regress)至体密度和view-dependent的RGB值。
从该NeRF中渲染,我们需要:
- 将相机光线穿过场景,它会经过一些3D点
- 将这些点以及它们的2D观察方向(viewing direction)作为神经网络的输入,生成颜色和密度
- 用经典体渲染技术累积这些值,生成2D图片
这一过程是可微的,因此可通过梯度下降来减少误差(真实观察到的图片和我们生成的图片)。
我们发现基本的优化实现方式无法在高分辨率场景下收敛,并且出于其对于某具体光线要求的样本数量,十分低效。因此将5G坐标转换为坐标编码(positional encoding)以使MLP可以表示更高频的函数,并且我们提出了一种层级采样方法(hierarchical sampling procedure)用于减少所需的样本数。
我们的实现继承了volumetric representation的优点,都能表现复杂的真实场景,并且都适合梯度下降优化。重要的是,我们的办法克服了离散体素网格(discretized voxel grid)的高成本。
Related Work
计算机视觉领域中一种颇具前景的研究方向是将3D空间坐标直接映射到形状的隐式(implicit)表示,比如带符号的距离函数(signed distance function)。但在重现有复杂的高保真(fidelity)的几何图形的真实场景时,这些办法不如像三角网格(triangle mesh)或者体素网格(voxel grid)那些用离散表示的方法。
-
Neural 3D shape reprensentation
通过隐式方法表示连续的3D形状,比如带符号的距离函数。这些模型被ground truth 3D geometry所限制。之后的工作将限制放宽至用2D图片进行优化。
虽然这些技术也能表示复杂的高分辨率的几何图形,但它们仍仅限于简单形状的使用
-
View synthesis and image-based rendering
一种方式是用基于网格的(mesh-based)表示方法。Differentiable rasterizer或者pathtracer可以通过梯度下降的方法直接优化网格表示法(mesh representation). 但是基于梯度的优化很难做到,并且这种策略需要模板网格,这在无限制的真实世界是无法实现的。
另一种方法是volumetric representation. 该方法可以表现复杂形状,并且很适合基于梯度优化,并且比基于网格的方式产生更少的artifact. 缺点是糟糕的时间和空间复杂度。而我们通过对连续的体积(continuous volumn)进行编码,不仅能有更高质量的渲染,还只需要之前的一部分存储开销。
Neural Radiance Field Scene Representation
为使representation具有多视角一致性(multiview consistent),对网络进行限制,使得密度仅是坐标的函数,而RGB color则是坐标和观察方向的函数。
Volume Rendering with Radiance Fields
可以被理解为光线停止在x处的无穷小粒子的可微分概率,则光线产生的颜色是:
其中,代表光线不碰到从tn到t上的粒子的概率。
我们通过quadrature的方法估算该积分。Deterministic quadrature会限制该representation的分辨率,因为MLP只需要一个固定的离散坐标列。因此采用分层采样法(stratified sampling approch),将分成N段,每段采一个点:
用这些采样点估算积分:
其中,
Optimizing a Neural Radiance Field
两种优化方法,一种是对输入坐标进行positional encoding以协助MLP产生高频函数,另一种是hierarchical sampling procedure来有效采样高频的representation.
Positional encoding
尽管神经网络是通用函数模拟器(universal function approximator),但实际上在高频部分表现不好。最近的研究表明更倾向于学习低频函数,此外,如果在传给网络前将输入先通过高频函数映射到更高维空间,则可以更好地拟合含有高频的数据。形式上,我们采用的encoding function:
该函数将分别作用于的三个坐标分量以及观察方向单位向量的三个分量。
Hierarchical volome sampling
与其只用一个网络表示场景,我们同时使用粗粒度(coarse)和细粒度(fine)两个网络。
用之前的stratified sampling先采个点,初步估算颜色:
,
之后再通过获得piecewise-constant PDF(probability distribution function),并通过该概率密度函数用inverse transform sampling再次采样个点。最后用这个采样点一起输入到fine网络用于计算最终的颜色。这种方法的特点是非均匀地离散采样整个积分域。
Implementation details
我们想要为每一个场景优化一个独立的神经连续volume representation网络。这需要捕获的RGB照片数据集,相对应的相机方位(pose),内部参数(intrinsic parameters),以及scene bound. 每一轮优化迭代中,从数据集的所有像素点随机采样一批(a batch of)相机光线,然后按照之前的hierarchical sampling,从coarse网络查询个点,从fine网络查询个点,定义损失函数为:
这样既优化了最终fine网络的渲染结果,也减少了coarse网络的误差,这有助于后面在fine网络中采样。
Results
采用RSNR/SSIM(越高越好),和LPIPS(越低越好)跟Neural Volumes, Scene Representation Networks, Local Light Field Fusion比较。
消融实验表明:
- positional encoding和view-dependence比hierarchical sampling提供了更多的好处。
- 就算为NeRF模型提供更少的照片也能比提供更多照片的NV, SRN, LLFF效果更好。
- 关于positional encoding所用到的最大频率,只用5个频率会降低性能,但用10到15个频率也不会增加性能。我们相信增加带来的好处在超过某范围时会受限。
Conclusion
我们的工作通过MLP用连续函数表示物体和场景,解决了之前工作的一些缺陷。证明了将场景表示为5D神经辐射场比先前占支配地位的用深层卷积网络输出离散体素表示(discretized voxel representation)更加优秀。
尽管我们提出了层级采样策略,还有很多工作可以做。未来工作的一种方向是可解释性(interpretability):sampled representation允许对渲染试图和故障模式的预期质量进行推理。
其他参考资料:
都2022年了,我不允许你还不懂NeRF - 知乎 (zhihu.com)
Neural Radiance Fields (NeRF) - 知乎 (zhihu.com)