NeRF:Representing Scene as Neural Radiance Fields for View Synthesis 筆記
摘要
實現了一個任意視角視圖生成算法:輸入稀疏的場景圖像,通過優化連續的Volumetric場景函數實現;用全連接深度網絡表達場景,輸入是一個連續的5維坐標,3D坐標+2D角度(航向、俯仰角),輸出Volume density和依賴于視圖的emitted radiance,查詢5維坐標并用經典的Volume Rendering把輸出的顏色與強度投影到圖像。
介紹
a. march camera rays,我理解為從焦點投射射線到場景,獲取3D坐標點。
b. 用3D點 x \bold{x} x與對應的2D角度(用單位向量 d \bold{d} d)輸入,輸出顏色 c \bold{c} c和強度 σ \sigma σ。
c. 合成圖像。
Neural Radiance Field場景表達
F θ : ( x , d ) → ( c , σ ) F_{\theta}:(\bold{x},\bold{d})\rarr(\bold{c},\sigma) Fθ?:(x,d)→(c,σ)
輸出 σ \sigma σ只與輸入位置坐標 x \bold{x} x有關, c \bold{c} c則與 x \bold{x} x、 d \bold{d} d有關。
網絡結構,輸入 x \bold{x} x的8層全連接層,均為256通道,各層帶ReLU激活,輸出 σ \sigma σ、256維特征,此特征再與 d \bold{d} d聚合,輸入一層帶ReLU的全連接層,輸出 x \bold{x} x。
Volume Rendering
位置坐標 x \bold{x} x表達為相機射線 r \bold{r} r, r ( t ) = o + t d \bold{r}(t)=\bold{o}+t\bold{d} r(t)=o+td,t是從焦點 o o o出發的長度,積分上下界是遠端、近端。
C ( r ) = ∫ t n t f T ( t ) σ ( r ( t ) ) c ( r , d ) d t T ( t ) = e x p ( ? ∫ t n t σ ( r ( s ) ) d s ) C(\bold{r})=\int_{t_{n}}^{t_{f}} T(t)\sigma(\bold{r}(t))\bold{c}(\bold{r},d)dt\\T(t)=exp(-\int_{t_{n}}^t\sigma(\bold{r}(s))ds) C(r)=∫tn?tf??T(t)σ(r(t))c(r,d)dtT(t)=exp(?∫tn?t?σ(r(s))ds)
T ( t ) T(t) T(t)的含義從 t n t_n tn?到 t t t累積的transmittance,“the accumulated transmittance along the ray”,是射線從 t n t_n tn?到 t t t未遇到其他粒子的概率。
求該積分的數值方法,Deterministic quadrature,筆者初步理解是一種數值計算方法,離散化近似:將區間分為N段,從每一段隨機取樣。
t i ~ U [ t n + i ? 1 N ( t f ? t n ) , t n + i N ( t f ? t n ) ] t_i\sim U[t_n+\frac{i-1}{N}(t_f-t_n),t_n+\frac{i}{N}(t_f-t_n)] ti?~U[tn?+Ni?1?(tf??tn?),tn?+Ni?(tf??tn?)]
參考Volume Rendering綜述,
C ^ ( r ) = ∑ i = 1 N T i ( 1 ? e x p ( ? σ i δ i ) ) c i T i = e x p ( ? ∑ j = 1 i ? 1 σ j δ j ) δ j = t j + 1 ? t j \hat C(\bold{r})=\sum_{i=1}^NT_i(1-exp(-\sigma_i\delta_i))\bold{c}_i\\ T_i=exp(-\sum_{j=1}^{i-1}\sigma_j\delta_j)\\ \delta_j=t_{j+1}-t_j C^(r)=i=1∑N?Ti?(1?exp(?σi?δi?))ci?Ti?=exp(?j=1∑i?1?σj?δj?)δj?=tj+1??tj?
兩項技術改進
只有上述設計不能達到SOTA,為此添加了兩項重要改進,其中第二項是為了高效地實現第一項。
-
位置編碼
直接輸入上述5維做渲染,在場景中顏色和幾何的高頻變化的條件下表現較差,有參考證明深度網絡偏向于學習低頻函數,并發現在輸入網絡前用高頻函數將數據映射到更高維,網絡能更好擬合含有高頻變化的數據。5維輸入的各個元素 p p p被映射為長為2L的向量
γ ( p ) = ( s i n ( 2 0 π p ) , c o s ( 2 0 π p ) , . . . , s i n ( 2 L ? 1 π p ) , c o s ( 2 L ? 1 π p ) ) \gamma(p)=(sin(2^0{\pi}p),cos(2^0{\pi}p),...,sin(2^{L-1}{\pi}p),cos(2^{L-1}{\pi}p)) γ(p)=(sin(20πp),cos(20πp),...,sin(2L?1πp),cos(2L?1πp))
其中,位置元素L=10,方向元素L=4;各維元素均歸一化到 [ ? 1 , 1 ] [-1,1] [?1,1]。
Transformer有相似處理,但它的目的是給序列提供位置標簽,因為Transformer結構不能標記順序;NERF中的位置編碼則是為了將輸入升維以使得它的MLP能擬合更高頻函數;從投影重建蛋白質3D結構的模型方法也使用了該思路。 -
多層采樣
采用兩個網絡,一個粗略,一個精細。首先用第一個網絡生成顏色,每條射線輸入 N c N_c Nc?個位置,然后用其結果引導重新采樣,使得采樣集中到體元附近,提高有效信息位置的樣本權重。