1. 程式人生 > 其它 >NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

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, 用於捕獲高頻資訊.

主要內容

假設\(\bm{x} = (x, y, z)\)表示一個3D圖的位置座標, \(\bm{d}=(\theta, \phi)\)為觀看(拍攝?)角度, 我們希望擬合一個MLP\(F_{\Theta}\)將這個5維的向量對映為該3D物體在\((x, y, z, \theta, \phi)\)處的顏色\(\bm{c}=(r, g, b)\)加上體密度\(\sigma\).
訓練的監督資訊是不同視角的2D圖片, 以及其拍攝的引數.
所以, 對於每一張2D圖片可以獲得:

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

注: 這些個\(C(r)\)

以及體密度之類概念不明白, 看這篇文章只是為了看看positional encoding 怎麼發揮作用的, 感興趣的請回看原文.
對於\(F_{\Theta}\)我們可以估計出:

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

通過下列損失來更新

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

positional encoding

\((\bm{x}, \bm{d})\)在被喂入\(F_{\Theta}\)之前, 對其進行一個預處理(entry-wise):

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

\(\gamma (p)^T \gamma(p')\)僅和\(p-p'\)有關? 所以編碼了相對資訊?

額外的細節

\(\bm{c}\)是視角依賴的, 但是\(\sigma\)不是. 即:

  1. \(\bm{x}\)首先通過一個子網路得到\(\sigma\)和特徵\(f\);
  2. 特徵\(f\)加上\(\bm{d}\)一起通過另一個子網路得到\(\bm{c}\).

本文還用到了類似重要性的技巧, 不多贅訴了.

程式碼

原文程式碼

pytorch3d