NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

神经辐射场(Neural Radiance Fields)nerf

github:https://github.com/yenchenlin/nerf-pytorch

0、nerf能做的是什么?

其核心点在于非显式地将一个复杂的静态场景用一个神经网络来建模。在网络训练完成后,可以从任意角度渲染出清晰的场景图片。

1、nerf 有什么特色?

  An approach for representing continuous scenes with complex geometry and
materials as 5D neural radiance elds, parameterized as basic MLP networks.
 

A differentiable rendering procedure based on classical volume rendering tech-
niques, which we use to optimize these representations from standard RGB
images. This includes a hierarchical sampling strategy to allocate the MLP's
capacity towards space with visible scene content.

A positional encoding to map each input 5D coordinate into a higher dimen-
sional space, which enables us to successfully optimize neural radiance elds
to represent high-frequency scene content

简而言之:1、采用一个网络来表示一个3D模型  2、一个可微的渲染过程 3、一个位置编码技术 将其输入到网络中

2、算法概览

NeRF可以简要概括为用一个MLP神经网络去隐式地学习一个静态3D场景。为了训练网络,针对一个静态场景,需要提供大量相机参数已知的图片。基于这些图片训练好的神经网络,即可以从任意角度渲染出图片结果了。

需要理解:1、如何用网络表示一个3D场景 2、如何将3D场景渲染到某个视角下的照片  

3、算法细节

3.1 nerf 如何表示一个3D场景

 用神经辐射场来表示场景

Our algorithm represents a scene using a fully-connected (non-convolutional) deep network, whose input is a single continuous 5D coordinate (spatial location (x, y, z) and viewing direction (θ, φ)) and whose output is the volume density and view-dependent emitted radiance at that spatial location.

在具体的实现中,  网络是下图

3.2 如何从NeRF渲染出图片?基于辐射场的体素渲染算法

NeRF 函数得到的是一个3D空间点的颜色和密度信息,但当用一个相机去对这个场景成像时,所得到的2D 图像上的一个像素实际上对应了一条从相机出发的射线上的所有连续空间点。我们需要通过渲染算法从这条射线上的所有点得到这条射线的最终渲染颜色。同时,为了保证网络可以训练,NeRF中需要采用可微的渲染方法。

4、NeRF中的两个重要Trick

作者的话先用粗略的uniform采样, 得到被积函数的大致曲线, 然后在更精细的基于刚刚得出的大致曲线进行重要性采样. 这样最终得出rgb的值.

转自:https://zhuanlan.zhihu.com/p/360365941

体素渲染  https://www.youtube.com/watch?v=1PqvwOjnKJw   

猜你喜欢

转载自blog.csdn.net/Vpn_zc/article/details/115729297