NeRF - 神经辐射场 技术原理总结
标题:NeRF:Representing Scenes as Neural Radiance Fields for View Synthesis
顾名思义:通过NeRF 神经辐射场合成新视角来表达场景
这是一篇来源于伯克利大学的论文研究
摘要
论文提出了一种方法,可以通过优化一个连续体积场景函数来合成复杂场景的新视角,这个函数使用了一组稀疏的输入视图。算法用一个全连接的(非卷积)深度网络来表示场景,输入是一个连续的5D坐标(空间位置和观看方向)
输出是体积密度和在该空间位置依赖视角的发射辐射度。
通过查询5D坐标沿相机光线并使用经典体积渲染技术,将输出颜色和密度投影到图像中来合成视图。
由于体积渲染自然是可微分的,优化表示只需要一组有已知相机姿态的图像。
论文描述了如何有效优化神经辐射场以渲染具有复杂几何和外观的场景的新视角,并演示了结果优于以往的神经渲染和视角合成方法。
引言
讨论了视角合成的长期问题,并提出了通过直接优化一个连续的5D场景表示参数的方法来解决这个问题,以最小化一组捕获图像的渲染误差。
采用了一个深度全连接神经网络,没有卷积层,经常被称为多层感知器或MLP,来表示这个函数,通过从单个5D坐标回归到一个体积密度和视角依赖的RGB颜色。为了渲染这个所谓的神经辐射场(NeRF),方法涉及到从静态场景的连续5D函数中累积辐射度。
这种优化连续5D神经辐射场表示的方法,能够从一组输入图像生成任意连续位置场景的体积密度和视角依赖色彩。这个过程使用体积渲染技术沿着光线累积场景表示的样本,并将这些颜色和密度累积成2D图像。
由于这个过程是自然可微的,可以使用梯度下降来优化这个模型,以最小化观察到的每个图像与对应视角渲染结果之间的误差。
这种优化鼓励网络预测一个连贯的场景模型,通过配高体积密度和精确颜色来反映场分景的真实内容。
- 困难一及解决
尽管NeRF的基本实现在优化神经辐射场表示时面临着挑战,特别是在高分辨率表示和在不足的摄像机视角下重构复杂场景时。
为了解决这些问题,提出了使用位置编码来变换输入的5D坐标,这允许MLP表示更高频率的函数,并且减少了对高频场景表示进行采样的需求。
论文强调了其方法继承了体积表示的优势,能够表示复杂的真实世界几何形状和外观,同时非常适合基于梯度优化的投影图像。此外,与离散体素网格相比,该方法在建模复杂场景时避免了存储成本过高的问题。
技术贡献:
- 一个用于高分辨率连续场景的渲染输入的解决方案,使用5D神经辐射场,并以基本的MLP网络参数化。
- 一种基于经典体积渲染技术的可微渲染程序,可以从标准的RGB图像中优化这些表示。
- 一种优化MLP处理能力的策略,使其更适用于有可见场景内容的空间。
关键词
场景表示、视角合成、基于图像的渲染、体积渲染、3D深度学习
Related Work
通过制定可微分的渲染函数,允许从仅使用2D图像生成新的隐式形状表示。
尽管这些技术有潜力表示复杂和高分辨率的几何形状,但它们可能会因为对几何复杂性的过度平滑而导致渲染结果不够精确。
通过密集采样的视图,可以使用简单的光场采样或插值技术重建出真实感的新视角图像。
对于采样较少的新视角合成,则需要更多进步的技术来从观测图像中提取出额外的几何和外观表示。
一种流行的方法是使用基于网格的场景表示,结合漫反射或视角依赖外观。差分渲染器或路径追踪可以直接优化网格表示来重现输入图像集。
但,基于图像的网格优化通常很困难,因为可能会陷入局部最小值或由于损失景观的条件不良而变得复杂。
在此之外:此外,一些体积方法使用观察到的图像直接对体素网格进行上色。
近期的方法则采用了大量的结果样本,来构建能够从输入图像集合中学习体积表示的神经网络。
尽管这些体积合成技术可以用于新视角合成,但由于其离散采样的时间和空间复杂度,它们在扩展到更高分辨率图像时存在局限性。
为了解决这一问题,作者提出了一种新方法,使用全连接神经网络对3D空间进行细致采样,不仅能够生成更高质量的渲染图像,而且相比以往的体积方法,存储需求也大大减少。
神经辐射场景景表示 - Neural Radiance Field Scene Representation
关于神经辐射场(NeRF)的场景表示方法。
NeRF将连续场景建模为一个5D向量值函数,其输入为3D空间位置 (x,y,z) 和2D观察方向 (θ,?),输出为颜色 c=(r,g,b) 和体积密度 σ。通过沿着相机光线采样5D坐标(位置和观察方向),输入到一个多层感知器(MLP)网络中,产生颜色和体积密度,然后使用体积渲染技术将这些值合成新的图像。由于这个渲染函数是可微分的,可以通过最小化合成图像和实际观察图像之间的残差来优化场景表示。
?
该MLP网络 ? 使用8层全连接层(使用ReLU激活函数和每层256个通道),输出颜色 c 和密度 σ 以及一个256维的特征向量。然后,这个特征向量与相机光线的观察方向结合,传递到另一个全连接层(使用ReLU激活和128个通道)来输出视角依赖的RGB颜色。
ReLU函数定义为 f(x)=max(0,x)
通过使网络预测体积密度 σ 作为位置 x 的函数,并允许RGB颜色 c 被预测为位置和观察方向的函数,促进了多视角一致性的场景表示。这种方法允许模型能够表示非朗伯效应,而对于在训练时仅将观察方向作为输入的模型是困难的,因为它难以表示高光等特性。
辐射场的体积渲染 - Volume Rendering with Radiance Fields
?在NeRF中,场景是通过5D神经辐射场来表示的,这里的5D指的是3D空间位置和2D视角方向。
体积渲染技术用于计算从场景中任何一点发出的辐射光的颜色,这个过程涉及对沿着相机射线的积分计算。
积分计算通常使用数值积分法(quadrature),但是确定性的数值积分,比如使用离散体素网格,会限制表示的分辨率,因为多层感知器(MLP)只能在固定的离散位置进行查询。
为了解决这一问题,文中提出了使用分层抽样(stratified sampling)方法,这种方法将 每一个 分区间隔为 N 个等间距的区间,并在每个区间内均匀地随机抽取一个样本。
抽样得到的离散样本集用于估计光线颜色 C(r),这通过用积分规则(quadrature rule)累计沿光线的透射率 T 和体积密度 σ 来实现。这个过程可以简化为传统的alpha合成,使得透射率的累积可以通过一个简单的指数函数来计算。
在神经辐射场(NeRF)中,尽管采用了离散样本集来进行积分估计,但所采用的分层采样方法使得模型能够表现出场景的连续性。这是因为在优化过程中,多层感知机(MLP)是在连续的空间位置上进行评估的。相较于传统的体积渲染技术,这种方法能够生成更高质量的渲染图像,并且在存储需求上也更加经济,只需要传统方法的一小部分存储空间。
简而言之,NeRF通过智能的采样策略,实现了对连续场景的有效表示,同时提高了渲染质量并降低了存储成本。
神经辐射场的优化
Positional encoding - 位置编码
虽然神经网络是通用函数逼近器,但直接在空间位置和观测方向的输入上操作的网络在表现高频变化(如颜色和几何变化)方面不佳。
为了解决这个问题,文章引入了位置编码来辅助多层感知器(MLP)表示高频函数。
位置编码是一种将连续输入坐标映射到更高维空间的函数,以便MLP能够更容易地逼近高频率函数。这种方法显著提高了模型的性能。
位置编码函数 γ(p) 以正弦和余弦的形式应用于每个坐标值,并且这些值被规范化到 [?1,1] 的范围内。这个过程被分别应用于3D坐标 x 的每个分量,以及视线方向 d 的每个分量。通过这种编码方式,MLP能够捕捉输入数据的细微变化,从而生成更加细腻和真实的渲染图像。此外,这种方法与流行的Transformer架构中使用的位置编码相似,尽管Transformer是为了不同的目的,即为序列中的标记提供离散位置。而NeRF使用这些函数来将连续输入坐标映射到一个更高维空间,这有助于MLP更精确地近似复杂的频率函数。同时,这种位置编码的方式也被用于模拟3D蛋白质结构的相关工作中。
Hierachical volume sampling -?分层体积采样
分层体积采样方法,这是一种用于优化神经辐射场(NeRF)渲染策略的技术。在NeRF中,传统的渲染策略沿着每个相机光线密集评估网络在许多查询点上的效果,是低效的,因为自由空间和遮挡区域并不会为最终渲染图像的生成做贡献,但仍被重复采样。
为了提高渲染效率,论文提出了一种分层采样策略,灵感来自体积渲染的早期工作。这种策略通过分配样本,根据它们对最终渲染的预期效果,从而提高采样效率。具体来说,系统不是只使用一个网络来表示场景,而是同时优化两个网络:一个“粗糙”网络和一个“精细”网络。
在神经辐射场(NeRF)模型的优化过程中,先对场景中的一组预先选择的位置进行样本采样,这一步使用了一个称为“粗糙”网络的模型进行初步评估。基于“粗糙”网络输出的信息,再对每条光线路径上的点进行更精细的采样,这次采样更加关注场景中的关键部分,即那些对最终图像影响较大的区域。简而言之,就是先用一个粗略的模型评估整个场景,确定哪些部分是重要的,然后在这些重要部分进行更密集的采样,以便在后续的“精细”网络处理中获得更高质量的渲染结果。这种方法提高了渲染效率,因为它避免了对不重要区域的过度采样。
Implementation details - 实现细节
为了优化每个场景,研究者为每个场景独立地优化了一个连续体积表示网络。这个过程仅需要捕获的RGB图像数据集,以及对应的相机姿势、内在参数和场景边界。优化过程利用COLMAP结构从运动软件包估计这些参数。
在每次优化迭代中,首先从数据集中所有像素的集合中随机抽取一批相机光线,然后按照分层采样方法从粗糙网络中查询 NC? 个样本,并从精细网络中查询 NC?+NF? 个样本。接着,使用体积渲染过程来渲染每条光线的颜色。
损失函数是预测的粗糙和精细体积的RGB颜色与真实像素颜色之间总平方差的简单总和。即使最终的渲染图像来自精细体积,通过权重分布的策略,粗糙网络的损失也可以用于在精细网络中分配样本。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!