神經(jīng)輻射場(chǎng) (Neural Radiance Field, or NeRF) [Mildenhall et al., ECCV, 2020] 開(kāi)啟了用神經(jīng)網(wǎng)絡(luò)表征三維場(chǎng)景的新范式。NeRF 這兩年在學(xué)術(shù)界和工業(yè)界都很火熱, 但 NeRF 一個(gè)比較大的缺點(diǎn)是, 渲染速度慢。雖然 NeRF 用的神經(jīng)網(wǎng)絡(luò) (11 層的 MLP) 本身很小, 但是渲染一個(gè)像素需要采集一條光線上的很多點(diǎn)(上百個(gè)), 這導(dǎo)致渲染一張圖的計(jì)算量非常大, 如下圖所示: 用 PyTorch 在單張 NVIDIA V100 顯卡測(cè)試, 渲染 400x400 的圖片就需要 6.7s 的時(shí)間, 這顯然不利于 NeRF 在業(yè)界落地 (例如各種 AR/VR 設(shè)備, meta universe 等)。

學(xué)術(shù)界已有不少研究工作來(lái)加速 NeRF。比較流行的一種方式是, 給定訓(xùn)練好的 NeRF, 采用更高效的數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲(chǔ), 如 Sparse Voxel Octree [Yu et al., ICCV, 2021]. 盡管加速很可觀 (如 [Yu et al., ICCV, 2021] 實(shí)現(xiàn)了 3000x 的渲染加速), 但這種數(shù)據(jù)結(jié)構(gòu)也破壞了 NeRF 作為場(chǎng)景表征存儲(chǔ)小的優(yōu)點(diǎn)。譬如, 原始 NeRF 網(wǎng)絡(luò)僅僅 2.4MB 大小就可以存儲(chǔ)一個(gè)場(chǎng)景, 而采用 Sparse Voxel Octree 則需要 1.93GB [Yu et al., ICCV, 2021], 這顯然難以在端上應(yīng)用。 因此, 如何加速 NeRF 渲染并維持其存儲(chǔ)小的優(yōu)點(diǎn) (簡(jiǎn)言之: 小且快), 仍然是當(dāng)前的研究熱點(diǎn), 也是本文的動(dòng)因。

Arxiv: https://arxiv.org/abs/2203.17261
Code: https://github.com/snap-research/R2L
Webpage: https://snap-research.github.io/R2L/
核心方法 我們所提出的核心方法從整體范式上來(lái)說(shuō)非常簡(jiǎn)單: 通過(guò)數(shù)據(jù)蒸餾將神經(jīng)輻射場(chǎng) (NeRF) 轉(zhuǎn)化為神經(jīng)光場(chǎng)(Neural Light Field, or NeLF) -- 從 NeRF 到 NeLF, 所以我們把方法命名為 R2L。 NeLF 與 NeRF 一樣, 都可以作為一個(gè)場(chǎng)景的表征. 不同的是:
NeRF 的輸入是場(chǎng)景中的一個(gè)點(diǎn) (該點(diǎn)的坐標(biāo) + 該點(diǎn)所在視線的方向), 輸出是該點(diǎn)的 RGB 和不透明度。NeRF 網(wǎng)絡(luò)的輸出是中間結(jié)果, 并不是圖片上的 RGB 值. 要想得到一個(gè)像素的 RGB 值, 需要對(duì)該像素對(duì)應(yīng)光線上的很多點(diǎn)進(jìn)行積分 (即 Alpha Compositing)。
而 NeLF 的輸入是一條光線, 輸出直接是該光線對(duì)應(yīng)圖片上像素值, 不需要 Alpha Compositing 這一步。
對(duì)于 Novel View Synthesis 這個(gè)任務(wù)來(lái)說(shuō), NeLF 的優(yōu)勢(shì)很明顯: 速度快! 要得到一個(gè)像素的 RGB 只需要跑一次網(wǎng)絡(luò), 而 NeRF 則需要跑上百次。

但它的缺點(diǎn)也很明顯, 主要有兩個(gè)缺點(diǎn): (1)NeLF 網(wǎng)絡(luò)要擬合的目標(biāo)函數(shù)比 NeRF 更難。這一點(diǎn)可以這么理解: 在一張圖片上相鄰兩個(gè)像素的 RGB 可能突變 (因?yàn)檎趽?, 而相鄰兩個(gè)像素的光線方向其實(shí)差別很小, 這就意味著, 這個(gè)函數(shù)的輸入稍微變化一點(diǎn), 輸出可能劇變, 這種函數(shù)的不連續(xù)性強(qiáng), 復(fù)雜度高. 相比之下, NeRF 表達(dá)的函數(shù)是空間中的點(diǎn), 空間中的點(diǎn)由于物理世界的連續(xù)性, 相鄰位置上 RGB 劇變的可能性小, 所以函數(shù)相對(duì)簡(jiǎn)單。 (2)同樣一堆圖片, 用來(lái)訓(xùn)練 NeLF 的話, 樣本量會(huì)大幅降低. 一張圖片, 長(zhǎng)寬為 H, W, 用來(lái)訓(xùn)練 NeLF 的話樣本量就是 H*W, 而訓(xùn)練 NeRF 樣本量是 H*W*K (K 是 NeRF 中的一條光線上的采樣點(diǎn)個(gè)數(shù), 在 NeRF 原文中 K=256). 所以, 從 NeRF 到 NeLF 訓(xùn)練樣本量會(huì)變?yōu)樵瓉?lái)的 1/K, 這是很大的縮減。 神經(jīng)網(wǎng)絡(luò)有效, 通常需要有大量的訓(xùn)練數(shù)據(jù)。從 NeRF 變?yōu)?NeLF, 一方面要擬合的目標(biāo)函數(shù)變復(fù)雜了, 同時(shí)樣本量卻減小了, 無(wú)疑雪上加霜. 如何解決這些問(wèn)題呢? 為了解決上述問(wèn)題(1), 我們需要用一個(gè)更深的網(wǎng)絡(luò)來(lái)表征更復(fù)雜的函數(shù), 所以在我們的文章中提出了一個(gè) 88 層的深度殘差 MLP (deep residual MLP), 網(wǎng)絡(luò)結(jié)構(gòu)如下:

這樣的深層網(wǎng)絡(luò)在之前 NeRF 相關(guān)的工作沒(méi)有出現(xiàn)過(guò) (之前的 NeRF 相關(guān)工作大多繼承了原始 NeRF 文章中的網(wǎng)絡(luò)結(jié)構(gòu), 小修小補(bǔ))。為了能讓它訓(xùn)練起來(lái), 我們引入了殘差結(jié)構(gòu)的設(shè)計(jì)。這一點(diǎn)跟 ResNet 的思想一樣, 本身并沒(méi)有更多的創(chuàng)新, 但把這一點(diǎn)引入到 NeRF/NeLF 中, 據(jù)我們所知, 本文是第一篇工作。殘差結(jié)構(gòu)的引入很有必要, 因?yàn)樯疃染W(wǎng)絡(luò)沒(méi)有殘差結(jié)構(gòu)基本訓(xùn)練不起來(lái), 這一點(diǎn)在文中的消融實(shí)驗(yàn)中也得到了證實(shí)。 另一個(gè)值得注意的創(chuàng)新點(diǎn)是關(guān)于如何表征一條光線。理論上說(shuō), 一條光線用一個(gè)方向向量就可以確定, 但如果真的只用方向向量去表征, 就會(huì)出現(xiàn)上面說(shuō)的 “輸入很接近, 輸出卻可能劇變” 的情況, 這就無(wú)疑會(huì)給 NeLF 網(wǎng)絡(luò)的學(xué)習(xí)帶來(lái)困難。為了使得 NeLF 網(wǎng)絡(luò)要學(xué)習(xí)的函數(shù)更容易一些, 我們需要增強(qiáng)輸入的差別. 具體來(lái)說(shuō), 我們采用一條光線上采樣的多個(gè)點(diǎn)的坐標(biāo) (如下圖所示), 將其串聯(lián)(concat) 起來(lái)成一個(gè)向量, 以此作為該光線的表征, 作為我們 NeLF 網(wǎng)絡(luò)的輸入。

這種表征非常簡(jiǎn)單直接, 同時(shí)也很有效。在文中, 我們也展示了它比之前的 NeLF 工作中用到的其他表征 (例如 Plucker 坐標(biāo) [Sitzmann et al, NeurIPS, 2021]) 要更為有效。 為了解決上述問(wèn)題(2), 我們使用了一個(gè)預(yù)訓(xùn)練好的 NeRF 模型來(lái)產(chǎn)生大量偽數(shù)據(jù) (pseudo data)。具體來(lái)說(shuō), 當(dāng) NeRF 對(duì)一個(gè)場(chǎng)景學(xué)習(xí)完之后, 給定任意一個(gè)角度 (ray direction), NeRF 都能返回這個(gè)角度下的圖片, 我們就把這些圖片收集起來(lái), 形成了很多 (origin, direction, RGB) triplets。這些 triplets 就是訓(xùn)練我們模型的數(shù)據(jù), loss 函數(shù)是 mean squared error (MSE), 如下所示:

在我們的實(shí)驗(yàn)中, 我們收集了 10k 張圖片, 是原始數(shù)據(jù)集 (大概 100 張圖片) 的 100 倍, 這些數(shù)據(jù)確保了有充足的樣本去訓(xùn)練 NeLF。文中的消融實(shí)驗(yàn)也表明, 大量偽數(shù)據(jù)對(duì)性能至關(guān)重要 (6.9dB PSNR 提升)! 值得一提的是, 如果僅僅是用偽數(shù)據(jù)訓(xùn)練, 我們的模型最優(yōu)也只能復(fù)制 teacher NeRF, 無(wú)法超越它。為了能超越, 我們?cè)谠紙D片上再微調(diào) (Finetune) 一下模型。這個(gè)操作被證明有非常顯著的效果, 使得我們的模型可以顯著超越 teacher NeRF。 實(shí)驗(yàn)效果 總的來(lái)說(shuō), 我們的模型在 NeRF Synthetic 數(shù)據(jù)集 (圖片尺寸 400x400) 上實(shí)現(xiàn)了將近 30x 的加速, 并把 PSNR 大幅提升了 1.4dB, 比同類其他方法更加高效。

視覺(jué)效果圖對(duì)比如下, 可以看到, 相比于 NeRF, 我們的模型 (Ours-2, 即在原始數(shù)據(jù)上微調(diào)后的模型)有肉眼可見(jiàn)的提升, 且計(jì)算量?jī)H僅是 NeRF 的 1/26。

更多結(jié)果請(qǐng)參考我們的文章。代碼已經(jīng)開(kāi)源: https://github.com/snap-research/R2L, 歡迎嘗試! 總結(jié)與未來(lái)工作 本文提出了一種全新的數(shù)據(jù)蒸餾方法來(lái)加速 NeRF: 我們使用訓(xùn)練好的 NeRF 模型產(chǎn)生偽數(shù)據(jù), 來(lái)訓(xùn)練提出的深度殘差 NeLF 網(wǎng)絡(luò)。該 NeLF 網(wǎng)絡(luò)可以達(dá)到超過(guò) NeRF 的渲染質(zhì)量, 且實(shí)現(xiàn)將近 30x 加速, 并維持了存儲(chǔ)小的優(yōu)點(diǎn)。 未來(lái)工作方向: (1) 從 NeRF 中可以得到深度信息, 目前我們還沒(méi)提供從 NeLF 網(wǎng)絡(luò)中得到深度信息的方法, 這是不錯(cuò)的探索方向。(2) 如何用更少, 更高質(zhì)量的偽數(shù)據(jù) (譬如進(jìn)行數(shù)據(jù)篩選) 來(lái)加速 NeLF 的訓(xùn)練也非常值得探索。
審核編輯 :李倩
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4838瀏覽量
107845 -
數(shù)據(jù)結(jié)構(gòu)
+關(guān)注
關(guān)注
3文章
573瀏覽量
41607 -
pytorch
+關(guān)注
關(guān)注
2文章
813瀏覽量
14856
原文標(biāo)題:ECCV 2022|Snap&東北大學(xué)提出R2L:用數(shù)據(jù)蒸餾加速NeRF
文章出處:【微信號(hào):CVer,微信公眾號(hào):CVer】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
用于窄帶匹配高速射頻ADC的全新方法
指令集測(cè)試的一種糾錯(cuò)方法
利用e203中NICE協(xié)處理器加速濾波運(yùn)算
一種新的無(wú)刷直流電機(jī)反電動(dòng)勢(shì)檢測(cè)方法
一種新的無(wú)刷直流電機(jī)反電動(dòng)勢(shì)檢測(cè)方法
一種無(wú)序超均勻固體器件的網(wǎng)格優(yōu)化方法
電池?zé)峁芾恚菏褂脭?shù)字孿生和多尺度方法來(lái)設(shè)計(jì)和優(yōu)化能源效率
漢思新材料取得一種PCB板封裝膠及其制備方法的專利
想在rtsmart中使用uart2,是不是只能通過(guò)修改設(shè)備樹(shù)方法來(lái)實(shí)現(xiàn)uart2的復(fù)用呀?
一種適用于動(dòng)態(tài)環(huán)境的3DGS-SLAM系統(tǒng)
一種全新的數(shù)據(jù)蒸餾方法來(lái)加速NeRF
評(píng)論