<圖學玩家 第022篇 原創文>
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則是RGB值c與Volume Density σ。
有了3D Scene的表示法後只需再透過Raymarching-based的Volume Rendering,即可得到2D Rendered Image。此時再與Ground Truth Image計算Loss,去最佳化NeRF的網絡。整個流程如下圖所示:
這裡可以注意到,整個最佳化的過程都是針對單一場景。NeRF的技術並不具備多場景的可擴充性。
NeRF網絡架構如下:
- 數字代表維度
- 黑色箭頭表示有接Sigmoid Function作為Activation Function,橘色箭頭表示無Activation Function。
- 綠框為Input,紅框Output。
- +號表示將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.
如果喜歡筆者的文章分享,可以幫忙追蹤圖學玩家,你們的閱讀與追蹤是筆者繼續為大家分享的動力~