社群計算機視覺課程文件

神經輻射場(NeRF)

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

神經輻射場(NeRF)

神經輻射場(Neural Radiance Fields, NeRFs)是一種在神經網路中儲存3D場景的方式。這種儲存和表示場景的方式通常被稱為隱式表示,因為場景引數完全由底層的多層感知機(MLP)表示。(相比之下,顯式表示將顏色或密度等場景引數明確儲存在體素網格中。)這種新穎的場景表示方法在新視角合成任務中展現了非常令人印象深刻的結果,即從訓練集中未包含的攝像機視角插值出新視角。此外,它允許我們以比顯式表示更小的記憶體佔用儲存大型場景,因為我們只需要儲存神經網路的權重,而體素網格的記憶體大小是立方增加的。

簡史 📖

NeRF領域相對年輕,Mildenhall等人於2020年首次發表論文。自那時起,大量論文發表,並取得了快速進展。自2020年以來,已有超過620篇預印本和出版物釋出,GitHub上有超過250個程式碼庫。(截至2023年12月,資料來自paperswithcode.com)。

由於最初的NeRFs配方需要很長的訓練時間(在強大的GPU上長達數天),因此在加快訓練和推理方面取得了許多進展。一個重要的飛躍是NVIDIA於2022年釋出的Instant-ngp。儘管該方法中使用的模型架構與現有架構相似,但作者引入了一種使用可訓練雜湊表的新型編碼方法。由於這種編碼方式,我們可以顯著縮小MLP的規模而不會損失重建質量。這種新方法在訓練和查詢方面更快,同時在質量上與當時的SOTA方法不相上下。同樣在2022年釋出的Mipnerf-360也值得一提。同樣,模型架構與大多數NeRFs相同,但作者引入了一種新穎的場景收縮,使我們能夠表示在所有方向上都無限的場景,這對於實際應用非常重要。Zip-NeRF於2023年釋出,結合了Instant-ngp的編碼和Mipnerf-360的場景收縮等最新進展,以處理真實世界的情況,同時將訓練時間縮短到一小時以內。(公平地說,這仍然是在強大的GPU上測量的)。

由於NeRF領域發展迅速,我們在文章末尾添加了一個部分,將介紹NeRF的最新研究和未來可能的發展方向。

但現在歷史講夠了,讓我們深入瞭解NeRF的內在機制吧!🚀🚀

基礎方法(Vanilla NeRF)📘🔍

NeRF的基本思想是將場景表示為一個連續函式,該函式將一個位置,xR3 \mathbf{x} \in \mathbb{R}^{3} 和一個觀察方向,θR2 \boldsymbol{\theta} \in \mathbb{R}^{2} 對映到一種顏色cR3 \mathbf{c} \in \mathbb{R}^{3} 和體積密度σR1 \sigma \in \mathbb{R}^{1}。由於神經網路可以作為通用函式逼近器,我們可以用一個簡單的多層感知機(MLP)來逼近這個表示場景的連續函式。FΘ:(x,θ)(c,σ) F_{\mathrm{\Theta}} : (\mathbf{x}, \boldsymbol{\theta}) \to (\mathbf{c},\sigma) .

一個簡單的NeRF流程可以用下圖概括:

nerf_pipeline

圖片來源:Mildenhall et al. (2020)

(a) 沿著攝像機射線取樣點和觀察方向,並將其透過網路。

(b) 網路輸出是每個樣本的顏色向量和密度值。

(c) 透過體積渲染將網路輸出組合起來,從3D空間中的離散樣本生成2D影像。

(d) 計算損失並透過反向傳播更新網路梯度以表示場景。

這只是一個非常高層次的概述,為了更好地理解,我們來詳細瞭解體積渲染和所使用的損失函式。

體積渲染

體積渲染過程背後的原理在經典的計算機圖形學流程中已經很成熟,並非源於NeRF。對於NeRFs的用例來說,重要的是這一步是可微分的,以便允許反向傳播。NeRFs中最簡單的體積渲染形式可以表示如下:C(r)=tntfT(t)σ(r(t))c(r