NeRF 最早是在 ECCV2020 中提出的方法,还获得了 ECCV2020 Oral
- 论文:Representing Scenes as Neural Radiance Fields for View Synthesis
- 代码:https://github.com/bmild/nerf
- 官网:https://www.matthewtancik.com/nerf
Neural Radiance Fields (NeRF) 是一种用于3D场景重建的方法,其就是利用深度学习技术构建了一个可预测任意角度、任意位置观察情况下物体表面光照情况 (Radiance) 的模型,其工作流程大致可以分为以下几个步骤:
-
数据采集:首先,需要拍摄并收集一系列从不同视角看到的场景图片。这些图片将作为训练数据输入到NeRF模型中。
-
预处理:对收集到的图像进行必要的预处理操作,如裁剪、缩放等,并提取每个图像对应的相机参数(包括相机位置和视线方向)。这里的相机参数后续需要用于模型训练。
-
训练:使用收集到的图像和相应的相机参数来训练一个深度神经网络。这个网络的输入是 3D 空间中一个点的坐标以及一个观察方向,输出是该点在给定观察方向下应有的颜色和透明度。
- NERF(Neural Radiance Fields)模型并不需要预先知道深度信息。它是一个无监督学习方法,只需要一组从不同视角拍摄的2D图片作为输入就可以了。
- 在训练过程中,NERF会尝试学习一个函数来描述3D场景。这个函数接收一个3D空间中的位置和一个观察方向作为输入,输出那个位置朝那个方向看去时应该看到的颜色和透明度。
- 每个位置和一个方向的输入得到的输出实际上是一个颜色值和透明度。这个颜色值表示了从那个特定位置朝着特定方向看去,你将会看到什么颜色。而透明度则表示了该点是否被其他物体遮挡或者说该点处材质的透明情况。
-
采样与渲染:当我们想生成新图片时,会给出新相机参数(包括新位置和新视线方向)。然后沿着新视线 (ray) 在该 ray 经过的路线上的 3D 空间中选择多个采样点,并用训练好的网络计算出每个采样点处朝某个方向看去时应有颜色和透明度。最后通过将所有被采样点处得到颜色值进行混合(如加权平均),就能得到每一个像素所显示颜色值,从而生成最终渲染图像。
-
这里的"采样"主要指的是在3D空间中选择一些点来计算它们的颜色和透明度。对于一个像素位置,NERF 其实是沿着一条光线 ray 来进行采样的,采样点是沿着这个 ray 上采样的点,因为相机位置到每个像素位置其实都对应了一条 ray。
-
具体来说,当你想生成一张新图片时,你会给NERF一个相机参数,包括相机位置和视线方向。然后,NERF会沿着这个视线方向在3D空间中选择(或者说"采样")多个点。
-
对于每个被采样的点,NERF都会用训练好的函数计算出该点处朝某个方向看去时应有的颜色和透明度,最后通过将所有被采样点处得到的颜色值进行混合(比如加权平均),就能得到新视角下像素应有的颜色值。
-
在NERF(Neural Radiance Fields)模型中,采样率是一个可以根据实际需要进行调整的参数。具体的采样率取决于多种因素,包括场景的复杂性、计算资源和时间限制等。
-
在原始的NERF论文中,作者们提到在渲染过程中使用了64至128个采样点来估计每个像素值。这意味着沿着相机视线方向,他们在3D空间中选择了64至128个点来计算颜色和透明度。
-
-
优化与微调:根据生成图片与实际情况或期望结果之间是否匹配来优化或微调模型参数以改善性能。
什么是辐射场 Radiance Field:
-
在计算机图形学中,Radiance Field指的 是一个函数,它将一个点和一个方向映射到光线颜色上,可以预测在三维空间中的任何一个位置。换言之,如果你站在某个位置,并且看向某个特定方向,那么 Radiance Field 就决定了你看到的景象。
-
所以说,在NERF中,"辐射场"就是一个三维空间中所有点和方向与颜色之间关系的描述。换句话说, 辐射场给出了从每个点、沿每个方向观察时应该"看到"的颜色信息。
为什么叫神经辐射场呢:
- NERF中,用神经网络模拟这 个Radiance Field
- 输入为3D空间中的一个点及其视线方向,输出为该点处沿着该视线方向所观察到的颜色以及透明度
简单总结 NERF:
- 使用一系列2D图片作为输入数据集,这些图片显示了同一场景从不同角度和位置拍摄得到的结果
- 首先会估计出每张图片对应相机参数(如位置、焦距等)
- 然后利用这些参数以及深度信息将2D像素转换为3D空间坐标和视线方向,并通过神经网络对Radiance Field进行学习