NeRF - 神经辐射场 原理分析与解释

标题:NeRF:Representing Scenes as Neural Radiance Fields for View Synthesis

顾名思义:通过NeRF 神经辐射场合成新视角来表达场景

这是一篇来源于伯克利大学的论文研究

摘要

论文提出了一种方法,可以通过优化一个连续体积场景函数来合成复杂场景的新视角,这个函数使用了一组稀疏的输入视图。算法用一个全连接的(非卷积)深度网络来表示场景,输入是一个连续的5D坐标(空间位置\left ( x,y,z \right )和观看方向\left ( \theta, \phi \right )

输出是体积密度和在该空间位置依赖视角的发射辐射度

通过查询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网络 F_{\theta }​ 使用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颜色与真实像素颜色之间总平方差的简单总和。即使最终的渲染图像来自精细体积,通过权重分布的策略,粗糙网络的损失也可以用于在精细网络中分配样本。

nerf-simple是基于PyTorch框架实现的NERF神经辐射)模型的简单版本。NERF是一种用于生成高质量逼真图像的深度学习模型,它通过对景中各个点的辐射值进行建模,从而实现精确的三维重建和渲染。 在NERF模型中,神经辐射是核心概念之一。它是一个由多个隐藏层组成的神经网络,用于估计景中每个点的辐射值。这里的辐射值通常表示像素的RGB颜色值或光强度。 nerf-simple通过使用PyTorch框架的张量操作和自动微分功能来实现NERF模型。首先,我们需要定义一个神经网络模型,包括隐藏层的数量和大小。这个模型可以基于现有的PyTorch模块,如nn.Linear和nn.ReLU,以便构建非线性变换和特征提取。 然后,我们需要定义训练过程,实现数据加载、优化器设置和损失函数计算等步骤。训练数据通常包括一系列景中的图像及其对应的相机和深度信息。 在模型训练完成后,我们可以使用训练好的神经网络来生成逼真的图像。通过对景中每个像素点的辐射值进行预测,我们可以还原出景的三维形状和纹理信息,并最终渲染出高质量的图像。 总结来说,nerf-simple是一个使用PyTorch实现的简单版本NERF模型,它通过神经辐射来估计景中每个像素点的辐射值,从而实现精确的三维重建和渲染。通过定义神经网络模型、训练过程和图像生成过程,我们可以利用这个模型生成逼真的图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值