NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

Mildenhall B., Srinivasan P. P., Tancik M., Barron J. T., Ramamoorthi R. and Ng R. NeRF: representing scenes as neural radiance fields for view synthesis. In European Conference on Computer Vision (ECCV), 2020.

通过MLP和不同视角的2D图像拟合3Dshape: 引入了positional encoding, 用于捕获高频信息.

主要内容

假设(m{x} = (x, y, z))表示一个3D图的位置坐标, (m{d}=( heta, phi))为观看(拍摄?)角度, 我们希望拟合一个MLP(F_{Theta})将这个5维的向量映射为该3D物体在((x, y, z, heta, phi))处的颜色(m{c}=(r, g, b))加上体密度(sigma).
训练的监督信息是不同视角的2D图片, 以及其拍摄的参数.
所以, 对于每一张2D图片可以获得:

[C(r) = int_{t_n}^{t_f} T(t) sigma(m{r}(t)) m{c}(m{r}(t), m{d}) mathrm{d}t, ]

注: 这些个(C(r))以及体密度之类概念不明白, 看这篇文章只是为了看看positional encoding 怎么发挥作用的, 感兴趣的请回看原文.
对于(F_{Theta})我们可以估计出:

[hat{C}(m{r}) = sum_{i=1}^N T_i (1 - exp(-sigma_i delta_i)) m{c}_i, ]

通过下列损失来更新

[mathcal{L} = sum_{m{r}} [|hat{C}_c (m{r}) - C(m{r})|_2^2 + |hat{C}_f (m{r}) - C(m{r})|_2^2]. ]

positional encoding

((m{x}, m{d}))在被喂入(F_{Theta})之前, 对其进行一个预处理(entry-wise):

[gamma(p) = (sin (2^0 pi p), cos (2^0pi p), cdots, sin (2^{L-1}pi p), cos(2^{L-1}pi p)). ]

(gamma (p)^T gamma(p'))仅和(p-p')有关? 所以编码了相对信息?

额外的细节

(m{c})是视角依赖的, 但是(sigma)不是. 即:

  1. (m{x})首先通过一个子网络得到(sigma)和特征(f);
  2. 特征(f)加上(m{d})一起通过另一个子网络得到(m{c}).

本文还用到了类似重要性的技巧, 不多赘诉了.

代码

原文代码

pytorch3d

原文地址:https://www.cnblogs.com/MTandHJ/p/15389642.html