3D生成:NeRF

圖學玩家
7 min readMay 30, 2023

--

<圖學玩家 第022篇 原創文>

Synthetic Results of NeRF

NeRF算是早期網路上較多人討論的Paper了,曾獲得ECCV 2020 Oral的最佳論文提名。由於這篇滿常在Inverse Graphics的應用中被引用,因此筆者在這邊和大家介紹。

Introduction

NeRF主要被用於3D Scene的重建。如下圖所示,利用各種不同角度所拍攝的2D Image作為Input,透過Neural Network的訓練,還原出Radiance Field。

Neural Radiance Field Scene Representation

NeRF將3D Scene透過一Input為5D Vector的Function表示,該5D Vector包含了3D Location x = (x, y, z) 以及2D Viewing Direction d = (θ, Φ)。NeRF的Output則是RGBc與Volume Density σ

有了3D Scene的表示法後只需再透過Raymarching-based的Volume Rendering,即可得到2D Rendered Image。此時再與Ground Truth Image計算Loss,去最佳化NeRF的網絡。整個流程如下圖所示:

這裡可以注意到,整個最佳化的過程都是針對單一場景。NeRF的技術並不具備多場景的可擴充性。

NeRF網絡架構如下:

  1. 數字代表維度
  2. 黑色箭頭表示有接Sigmoid Function作為Activation Function,橘色箭頭表示無Activation Function。
  3. 綠框為Input,紅框Output。
  4. +號表示將Vector串接

至於γ(x)和γ(d)的維度之所以為60和24,在下方Positional encoding的章節會解釋。仔細看還可以發現,前面8個Layer的MLP就已經輸出Volume Density σ了,這麼做的目的是為了保持多視角的一致性。原話如下:

We encourage the representation to be multiview consistent by restricting the network to predict the volume density σ as a function of only the location x, while allowing the RGB color c to be predicted as a function of both location and viewing direction”

Volume Rendering with Radiance Fields

Raymarching-based的Volume Rendering對應的Rendering Equation如下:

C(r)指延著Ray r(t) = o + td所穿過的Pixel顏色值,該Ray行進距離t的遠近邊界分別為tf與tn。σc與前述相同,代表該位置的Volume Density與Color。T(t)代表在t這個時間點,所在位置是否需要進行積分。

關於T(t),讀者可以想像,當Ray已經打到某個Density較高的點(通常市集種物體表面)時,其實就不必再繼續向後積分。

下圖解釋了Volume Rendering的過程。Ray從相機中心o出發穿過某Pixel後,該Pixel的值C(r)即為Ray在場景中行進間所碰到的所有採樣點,透過底下Ref文章中的物理推導即得出上述Rendering Equation。

NeRF在求Rendering Equation解時透過Stratified Sampling的方式,先將Ray行徑路徑均分成 N 段,然後在每一段均匀地随機採樣以進行積分解的估測,公式如下:

該Rendering Equation即可表示為下 (詳細推導可以參考Ref文章)

其中 δi = t i+1 — ti,即兩個sample之間的距離。

Optimizing a Neural Radiance Field

Positional encoding

由於Deep Neural Network不善長處理高頻變量,NeRF針對3D Location x以及2D Viewing Direction d進行升維的編碼,編碼方式如下:

F directly operate on xyzθΦ input coordinates results in renderings that perform poorly at representing high-frequency variation in color and geometry.

NeRF將γ(x)和γ(d)的L分別設為10和4,也因此網路架構中γ(x)的維度為60,γ(d)則維24。

Hierarchical volume sampling

前面提到針對Rendering Equation的近似求解,會透過Discrete的採樣方法。但這樣做還是很容易採樣到對Pixel值沒有貢獻的點,例如Free Space和被遮蔽的部分。

為此,NeRF實際用了兩個NN來表示場景並進行優化,分別為Coarse和Fine版本。在Coarse的NN上,仍照原先採樣的方法採樣Nc個位置,Rendering Equation會變成下面式子:

這裡的Weight wi可以想像成Volume Density越高的地方,我們給的權重越高。接著如下式將wi進行Normalization,我們可以得到沿著Ray的機率密度函數PDF:

在該PDF中進行逆轉換抽樣取出Nf個位置,然後在Fine的NN上針對(Nc+Nf)所有採樣點去估測Rendering Equation,得出最終的Pixel Color Cˆf (r)。

This procedure allocates more samples to regions we expect to contain visible content. This addresses a similar goal as importance sampling

Implementation details

最後對於論文實作的細節,讀者可以參考原文:

Ben Mildenhall, Pratul P Srinivasan, Matthew Tancik, Jonathan T Barron, Ravi Ramamoorthi, and Ren Ng. NeRF: Representing scenes as neural radiance fields for view synthesis. In European Conference on Computer Vision (ECCV), 2020.

如果喜歡筆者的文章分享,可以幫忙追蹤圖學玩家,你們的閱讀與追蹤是筆者繼續為大家分享的動力~

Ref

  1. “图形学小白”友好的NeRF原理透彻讲解 — 知乎 (zhihu.com)

2. [NeRF]NeRFの入门教程(原理向) — 知乎 (zhihu.com)

--

--