NeRF 在2020年ECCV上名聲大噪,作為best paper展示作者在網(wǎng)上收羅了NeRF的相關(guān)評說,匯總?cè)缦?,?nèi)容可能雜亂,可作為對NeRF初步認識的資料。
Vanilla NeRF
什么是NeRF?
NeRF所要做的 task 是 Novel View Synthesis,一般翻譯為新視角合成任務(wù)
在已知視角下對場景進行一系列的捕獲 (包括拍攝到的圖像,以及每張圖像對應(yīng)的內(nèi)外參),合成新視角下的圖像
NeRF 不需要中間三維重建的過程,僅根據(jù)位姿內(nèi)參和圖像,直接合成新視角下的圖像。
NeRF 引入了輻射場的概念,這在圖形學(xué)中是非常重要的概念。
渲染方程式的定義:
方程表示了空間點$ xin R^3 $在方向 $d in R^3$ 上的輻射$L_o$.
等式右邊第一項 表示 x 為光源點時,自身在d方向釋放的輻射。
等式右邊第二項 表示該點折射在方向d 上的輻射,其中 $Omega$ 為入射方向 $omega_i$的半球集合。
$fr(cdot)$為散射函數(shù),$Li$為從 $omega_i$方向接收到的輻射
輻射和顏色的關(guān)系:
光就是電磁輻射, 或振蕩的電磁場
光又有波長和頻率,二者乘積為光速
光的顏色是由頻率決定的
大多數(shù)光是不可見的,人眼可見的光譜稱為可見光譜,對應(yīng)的頻率就是我們認為的顏色
*NeRF表示3D場為可學(xué)習(xí)的,連續(xù)的輻射場 $F_{ heta}$ *
Positional Encoding
deep networks 更傾向于學(xué)習(xí)低頻的函數(shù),實際場景的神經(jīng)輻射場基本上都是高頻的
作者提出了 Positional Encoding (注意這里的 Positional Encoding 和 Transformer 中的 Positional Encoding 很像,但是解決問題是不一樣的
Hierarchical volume sampling
使用體渲染積分遇到的問題:
雖然可以離散的近似計算積分,采樣點過多開銷過大,采樣點過少近似誤差有太大。
解決辦法:最好盡可能的避免在空缺部分以及被遮擋了的部分進行過多的采樣,因為這些部分對最好的顏色貢獻是很少的
NeRF 提出分層采樣訓(xùn)練的方式,如下圖所示:
使用兩個網(wǎng)絡(luò)同時進行訓(xùn)練 (后稱 coarse 和 fine 網(wǎng)絡(luò))
coarse 網(wǎng)絡(luò)輸入的點是通過對光線均勻采樣得到的
根據(jù) coarse 網(wǎng)絡(luò)預(yù)測的體密度值,對光線的分布進行估計,然后根據(jù)估計出的分布進行第二次重要性采樣
然后再把所有的采樣點 [公式] 一起輸入到 fine 網(wǎng)絡(luò)進行預(yù)測。
NeRF 存在的問題:
實時性不好
泛化性不強
不能處理動態(tài)場景
拍攝方式有限制
參考鏈接2:https://zhuanlan.zhihu.com/p/466217848
NeRF原理
NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
NeRF主要功能:使用靜態(tài)場景下的多個視角的照片(大約幾十至上百張),合成出任意新視角的圖片。NeRF的算法思路:
Step1 :
使用MLP學(xué)習(xí)該場景的隱式3D模型表達
MLP模型示意圖。輸入一個3d點x和觀測方向d的高頻編碼向量,網(wǎng)絡(luò)預(yù)測該點的密度sigma和顏色c
Step 2:使用體渲染方程將3D場景渲染成圖片
圖形上的點 P(u,v,1) , 他的像素值 rgb 可以通過對該點P發(fā)出的射線上的所有的點 的 c 和體密度 進行積分得到。
-
Step 3:訓(xùn)練
從該點發(fā)出的射線在世界坐標系中的表示為
起始點 [公式] 的世界坐標也同樣可以由相機的內(nèi)外參求得
然后在該射線上采樣n個采樣點。
使用MLP預(yù)測這n個點的體密度,和c ,然后使用體渲染方程的離散公式算出該像素點的預(yù)測值 rgb。
然后計算預(yù)測的顏色值和真實顏色值的L2距離作為loss進行監(jiān)督訓(xùn)練。
訓(xùn)練集是幾十張或者幾百張該場景不同相機位姿拍攝的圖片
首先使用SFM算法求出所有圖片的相機相對世界坐標系的位姿 (R,t)
每張圖片的每個像素點都是一個訓(xùn)練樣本(u,v) → rgb
以像素點(u,v)為例:
Step 4:觀測方向d的作用
一個點的密度密度只能是該點位置x的函數(shù)。
但該點的顏色還取決于觀測方向(我們觀看空間中一個物體的某個點,從光源照射方向觀看和從陰影方向觀看,它的亮度是不一樣的。)
Step 5:Positional encoding
直接讓MLP學(xué)習(xí)映射很難,將x,d 編碼為高維向量后學(xué)習(xí)會更加容易。
因此使用如下高頻函數(shù)進行編碼。
step 6:多層級采樣策略
均勻采樣方式采樣射線上64個點
這64點的密度值估計出密度分布函數(shù)。
再使用逆采樣算法集中對高密度的區(qū)域采樣128點。
使用該策略可以提高采樣的效率,不需要對射線上所有區(qū)域都進行密集的采樣
NeRF加速
FastNeRF: High-Fidelity Neural Rendering at 200FPS
相關(guān)資料:https://microsoft.github.io/FastNeRF/https://ieeexplore-ieee-org-s.nudtproxy.yitlink.com/document/9710021
Instant Neural Graphics Primitives with a Multiresolution Hash Encoding
相關(guān)資料:https://nvlabs.github.io/instant-ngp/https://nvlabs.github.io/instant-ngp/assets/mueller2022instant.pdf
NeRF動態(tài)場景(人體)的拓展
HumanNeRF: Free-viewpoint Rendering of Moving People from Monocular Video
相關(guān)資料:https://www.semanticscholar.org/paper/HumanNeRF%3A-Free-viewpoint-Rendering-of-Moving-from-Weng-Curless/bd706601b75533a66a782f6229419f85b1cc5135
參考鏈接3:https://www.analyticsvidhya.com/blog/2021/04/introduction-to-neural-radiance-field-or-nerf/
神經(jīng)輻射場(Neural Radiance Field, NeRF)是一種生成復(fù)雜場景新視圖的方法。NeRF獲取一組場景的輸入圖像,并通過在場景之間插入來渲染完整的場景。
NeRF 的輸出是一個體積,其顏色和密度取決于視圖的方向和在該點發(fā)射的光亮度。
對于每條光線,我們都得到一個輸出體積,所有這些體積構(gòu)成了復(fù)雜的場景。
靜態(tài)場景被表示為如上定義的連續(xù)5D函數(shù)。
該方法使用一個全連接的神經(jīng)網(wǎng)絡(luò)-多層感知器(MLP)來表示該函數(shù),從單個5D坐標(x, y, z, θ, φ)向后移動,輸出一個體積密度(RGB顏色受視圖影響)。
要渲染這個NeRF,有3個步驟:
相機光線通過場景來采樣3D點
利用step1中的點及其對應(yīng)的2D觀察方向(θ, φ)作為輸入到MLP,得到顏色(c = (r, g, b))和密度σ的輸出集,
使用體繪制技術(shù)將這些顏色和密度累積到一個2D圖像中[注:體繪制是指從采樣的3D點創(chuàng)建一個2D投影]
審核編輯:黃飛
-
電磁輻射
+關(guān)注
關(guān)注
5文章
352瀏覽量
43524 -
光譜
+關(guān)注
關(guān)注
4文章
775瀏覽量
35037 -
電磁場
+關(guān)注
關(guān)注
0文章
785瀏覽量
47198
原文標題:NeRF入門知識匯總
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論