神經(jīng)體繪制:NeRF及其以外方法
參考論文總結(jié)“NEURAL VOLUME RENDERING: NERF AND BEYOND“,2021年1月,喬治亞理工和麻省理工的合著。
神經(jīng)渲染定義為:
“一種深度圖像或視頻生成方法,可顯式或隱式控制場景屬性,如照明、攝像機(jī)參數(shù)、姿勢、幾何、外觀和語義結(jié)構(gòu)”。
它是一種新數(shù)據(jù)驅(qū)動解決方案,解決了計(jì)算機(jī)圖形學(xué)中長期存在的虛擬世界真實(shí)感渲染問題。
神經(jīng)體渲染,是指通過跟蹤光線進(jìn)入場景并沿光線長度進(jìn)行某種積分生成圖像或視頻的方法。通常,像多層感知器一樣的神經(jīng)網(wǎng)絡(luò)將從光線的3D坐標(biāo)到密度和顏色等的函數(shù)進(jìn)行編碼,并集成生成圖像。
神經(jīng)體渲染的直接先驅(qū)工作是用神經(jīng)網(wǎng)絡(luò)定義隱式曲面表示的方法。許多3D感知圖像生成方法使用體素、網(wǎng)格、點(diǎn)云或其他表示,通?;诰矸e架構(gòu)。但在2019年CVPR上,至少有三篇論文介紹了用神經(jīng)網(wǎng)絡(luò)作為標(biāo)量函數(shù)近似來定義占有率(occupancy)和/或符號距離函數(shù)(SDF)。
- Occupancy networks引入基于坐標(biāo)的隱式占有學(xué)習(xí)。由5個(gè)ResNet塊組成的網(wǎng)絡(luò),輸入采用特征向量和3D點(diǎn),預(yù)測二值占用。
- IM-NET用6層MLP解碼器,在給定特征向量和3D坐標(biāo)的情況下預(yù)測二值占有。可用于自動編碼、形狀生成(GAN-樣式)和單視圖重建。
- DeepSDF直接從一個(gè)3D坐標(biāo)和一個(gè)潛代碼中提取符號距離函數(shù)。它使用了一個(gè)8層MPL,其中到第4層有跳連接。
- PIFu表明,將3D點(diǎn)重新投影到像素對齊的特征表示中,可以學(xué)習(xí)特別詳細(xì)的隱式模型。這個(gè)在PixelNeRF中會重演,效果非常好。
其他采用隱函數(shù)的方法有:
- Structured Implicit Functions(2019)表明,可以組合這些隱式表示,例如,簡單地求和。
- CvxNet(2020)通過采用逐點(diǎn)Max(3D)組合符號距離函數(shù)。
- BSP網(wǎng)絡(luò)(2020)在許多方面類似于CvxNet,但在其核心使用二值空間劃分,產(chǎn)生了一種局部輸出多邊形網(wǎng)格的方法,而不是通過昂貴的網(wǎng)格劃分方法。
- Deep Local Shapes(2020)將深度SDF潛代碼存儲在體素網(wǎng)格中,表示更大的擴(kuò)展場景。
- Scene Representation Networks(2019)或SRN,在架構(gòu)上與DeepSDF非常相似,但添加可微分光線行進(jìn)算法找到學(xué)習(xí)的隱式曲面最近交點(diǎn),并添加MLP回歸顏色,能夠從多個(gè)姿態(tài)的圖像中學(xué)習(xí)。
- Differentiable Volumetric Rendering(2019)表明,隱式場景表示可以與可微分渲染器相結(jié)合,從圖像中可以進(jìn)行訓(xùn)練,類似于SRN。用“體渲染器”一詞,但真正的主要貢獻(xiàn)是一個(gè)巧妙的技巧,使隱式曲面的深度計(jì)算可微分:不在體上積分。
- Implicit Differentiable Renderer(2020)提供了類似的技術(shù),但具有更復(fù)雜的表面光場表示,表明它可以在訓(xùn)練期間優(yōu)化攝像頭姿態(tài)。
- Neural Articulated Shape Approximation(2020)或NASA,組成隱式函數(shù)來表示關(guān)節(jié)目標(biāo),如人體。
并非完全無中生有,盡管仍然是基于(warped)體素的表示,神經(jīng)體(Neural Volumes)論文引入了用于視圖合成的體渲染,回歸了密度和顏色的3D體。潛代碼被解碼成3D體,然后通過體渲染獲得新圖像。
其提出在3D空間中的每個(gè)位置使用不透明度和顏色組成的體表示,其中通過積分投影實(shí)現(xiàn)渲染。在優(yōu)化過程中,這種半透明的幾何表示沿積分射線分散梯度信息,有效地?cái)U(kuò)大了收斂范圍,從而能夠發(fā)現(xiàn)良好的解決方案。
引起大家討論的論文是神經(jīng)輻射場NeRF論文(2020年)。本質(zhì)上,用深度SDF架構(gòu),但回歸的不是有符號距離函數(shù)(SDF),而是密度和顏色。然后,用(容易微分的)數(shù)值積分方法來近似真實(shí)的體渲染步驟。
NeRF模型將體場景表示存儲為MLP的權(quán)重,并在許多有已知姿態(tài)的圖像上進(jìn)行訓(xùn)練。通過沿每條查看光線以規(guī)則間隔集成密度和顏色來渲染新視圖。
NeRF非常詳細(xì)渲染的原因之一是,使用周期性激活函數(shù)(periodic activation functions),即傅立葉特征,對光線上的3D點(diǎn)和相關(guān)視圖方向進(jìn)行編碼。這一創(chuàng)新后來被推廣到周期性激活函數(shù)的多層網(wǎng)絡(luò),即SIREN(SInusoidal- REpresentation Networks)。這兩篇文章都發(fā)表在NeurIPS 2020上。
可以說,NeRF論文的影響在于其殘酷的簡單性:只需一個(gè)MLP在5D坐標(biāo)下輸出密度和顏色。有一些華麗點(diǎn)綴(bells and whistles),特別是位置編碼和分層抽樣方案,但驚訝于如此簡單的架構(gòu)可以產(chǎn)生如此令人印象深刻的結(jié)果。盡管如此,原始NeRF留下了許多改進(jìn)的機(jī)會:
- 訓(xùn)練和渲染速度都很慢。
- 只能表示靜態(tài)場景。
- 固定照明。
- 經(jīng)過訓(xùn)練的NeRF表示不會推廣到其他場景/目標(biāo)。
一些項(xiàng)目/論文旨在改善原始NeRF論文的相當(dāng)慢的訓(xùn)練和渲染時(shí)間。
- JaxNeRF(2020)用JAX支持(https://github.com/google/jax?)多設(shè)備訓(xùn)練,從幾天變成幾小時(shí),大大加快速度。
- AutoInt(2020)直接學(xué)習(xí)體積分,大大加快了渲染速度。
- Learned Initialization(2020)使用元學(xué)習(xí)來尋找良好的權(quán)重初始化,加快訓(xùn)練速度。
- DeRF(2020)將場景分解為“軟 Voronoi圖”,利用加速器內(nèi)存架構(gòu)。
- NERF++(2020)建議用單獨(dú)的NERF對背景建模,處理無限場景。
- Neural Sparse Voxel Fields(2020)將場景組織為稀疏體素八叉樹,將渲染速度提高10倍。
至少有四項(xiàng)工作側(cè)重于動態(tài)場景:
- Nerfies(2020)及其底層D-NeRF對可變形視頻建模,使用第二個(gè)MLP對視頻的每一幀應(yīng)用變形。
- D-NeRF(2020)與Nerfies論文非常相似,甚至使用相同的縮略詞,但似乎限制了平移的變形。
- Neural Scene Flow Fields(2020)采用已知攝像機(jī)姿態(tài)的單目視頻作為輸入,深度預(yù)測作為先驗(yàn),并輸出場景流進(jìn)行正則化,用于損失函數(shù)。
- Spatial-Temporal Neural Irradiance Field(2020)僅使用時(shí)間作為額外輸入。要成功訓(xùn)練這種方法來渲染任意視點(diǎn)視頻(來自RGB-D數(shù)據(jù)?。?,需要仔細(xì)選擇損失函數(shù)。
- NeRFlow(2020)使用變形MLP對場景流建模,并跨時(shí)域進(jìn)行積分,獲得最終變形。
- NR NeRF(2020)還用變形MLP對非剛性場景建模。除了攝像機(jī)參數(shù)之外,它不依賴預(yù)計(jì)算的場景信息,但與Nerfies相比,生成的輸出稍微不那么清晰。
- STaR(2021)將多視圖RGB視頻作為輸入,并將場景分解為靜態(tài)和動態(tài)體。但是,目前它只支持一個(gè)運(yùn)動目標(biāo)。
還有兩篇論文關(guān)注人物的頭像/肖像。
- PortraitNeRF(2020)創(chuàng)建靜態(tài)NeRF風(fēng)格的頭像(Avatar),但僅用一個(gè)RGB拍攝圖像。為了實(shí)現(xiàn)這一點(diǎn),需要燈光舞臺訓(xùn)練數(shù)據(jù)。
- DNRF(G2020)專注于4D Avatar,將變形面部模型納入流水線,施加強(qiáng)烈的歸納偏差。
NeRF風(fēng)格方法得到增強(qiáng)的另一個(gè)方面是如何處理照明,通常是通過可用于重照明場景的潛代碼。
- NeRV(2020)用第二個(gè)“可見性”MLP支持任意環(huán)境照明和“一次反射”間接照明。
- NeRD(2020)是另一項(xiàng)工作,其中使用局部反射模型,此外,對于給定場景,去除低分辨率球面諧波照明。
- Neural Reflectance Fields(2020)通過添加局部反射模型改善NeRF,除密度外。它產(chǎn)生了令人印象深刻的重照明結(jié)果,盡管來自單點(diǎn)光源。
- NeRF-W(2020)是NeRF的首批后續(xù)工作之一,優(yōu)化潛外觀代碼,以便能夠從控制較少的多視圖集合中學(xué)習(xí)神經(jīng)場景表示。
潛代碼也可用于編碼形狀先驗(yàn):
- pixelNeRF(2020)更接近基于圖像的渲染,其中在測試時(shí)用N個(gè)圖像。它基于PIFu,創(chuàng)建像素對齊的特征,然后在評估NeRF-樣式渲染器時(shí)進(jìn)行插值。
- GRF(2020)在設(shè)置上非常接近pixelNeRF,但在規(guī)范空間而不是視圖空間中運(yùn)行。
- GRAF(2020),即“輻射場的生成模型”,是NeRF的條件變型,添加了外觀和形狀潛代碼,同時(shí)通過GAN風(fēng)格訓(xùn)練獲得視點(diǎn)不變性。
- pi GAN(2020),與GRAF類似,但用了一種SIREN式樣的NeRF實(shí)現(xiàn),其中每一層都由不同的MLP輸出進(jìn)行調(diào)制,該MLP采用潛代碼。
可以說,所有這些都不會擴(kuò)展到由許多目標(biāo)組成的大型場景,因此一個(gè)令人興奮的新領(lǐng)域是如何將目標(biāo)組成體渲染場景。
- Object-Centric Neural Scene Rendering(2020)在以目標(biāo)為核心的坐標(biāo)系中學(xué)習(xí)“目標(biāo)散射函數(shù)”,允許使用蒙特卡洛渲染合成場景并真實(shí)地照亮場景。
- GIRAFFE(2020)通過以目標(biāo)為中心的NeRF模型輸出特征向量而不是顏色來支持合成,然后通過平均合成,并以低分辨率渲染為2D特征圖,然后在2D中進(jìn)行上采樣。
- Neural Scene Graphs(2020)支持場景圖中的多個(gè)以目標(biāo)為中心的NeRF模型。
最后,至少有一篇論文在(已知)目標(biāo)姿態(tài)估計(jì)的背景下使用了NeRF渲染。
- iNeRF(2020)在姿態(tài)估計(jì)框架中使用了NeRF MLP,甚至能夠通過微調(diào)姿態(tài)改善標(biāo)準(zhǔn)數(shù)據(jù)集上的視圖合成。然而,它還不能處理照明。
神經(jīng)體渲染和NeRF風(fēng)格的論文,最終是否會成功還遠(yuǎn)未可知。雖然現(xiàn)實(shí)世界中確實(shí)存在煙霧、煙霧、透明等,但最終大部分光線都從表面散射到眼睛中。由于基于體的方法,NeRF風(fēng)格的網(wǎng)絡(luò)可能很容易訓(xùn)練,但已經(jīng)看到一種趨勢,即論文試圖在收斂后發(fā)現(xiàn)或猜測曲面。事實(shí)上,原NeRF論文中的分層抽樣方案正是這樣。因此,當(dāng)從NeRF中學(xué)習(xí)時(shí),可以很容易地看到移回SDF風(fēng)格的隱式表示或甚至體素,至少在推理時(shí)是這樣。