神經(jīng)輻射場 (Neural Radiance Field, or NeRF) [Mildenhall et al., ECCV, 2020] 開啟了用神經(jīng)網(wǎng)絡(luò)表征三維場景的新范式。NeRF 這兩年在學(xué)術(shù)界和工業(yè)界都很火熱, 但 NeRF 一個比較大的缺點是, 渲染速度慢。雖然 NeRF 用的神經(jīng)網(wǎng)絡(luò) (11 層的 MLP) 本身很小, 但是渲染一個像素需要采集一條光線上的很多點(上百個), 這導(dǎo)致渲染一張圖的計算量非常大, 如下圖所示: 用 PyTorch 在單張 NVIDIA V100 顯卡測試, 渲染 400x400 的圖片就需要 6.7s 的時間, 這顯然不利于 NeRF 在業(yè)界落地 (例如各種 AR/VR 設(shè)備, meta universe 等)。
學(xué)術(shù)界已有不少研究工作來加速 NeRF。比較流行的一種方式是, 給定訓(xùn)練好的 NeRF, 采用更高效的數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲, 如 Sparse Voxel Octree [Yu et al., ICCV, 2021]. 盡管加速很可觀 (如 [Yu et al., ICCV, 2021] 實現(xiàn)了 3000x 的渲染加速), 但這種數(shù)據(jù)結(jié)構(gòu)也破壞了 NeRF 作為場景表征存儲小的優(yōu)點。譬如, 原始 NeRF 網(wǎng)絡(luò)僅僅 2.4MB 大小就可以存儲一個場景, 而采用 Sparse Voxel Octree 則需要 1.93GB [Yu et al., ICCV, 2021], 這顯然難以在端上應(yīng)用。 因此, 如何加速 NeRF 渲染并維持其存儲小的優(yōu)點 (簡言之: 小且快), 仍然是當(dāng)前的研究熱點, 也是本文的動因。
Arxiv: https://arxiv.org/abs/2203.17261
Code: https://github.com/snap-research/R2L
Webpage: https://snap-research.github.io/R2L/
核心方法 我們所提出的核心方法從整體范式上來說非常簡單: 通過數(shù)據(jù)蒸餾將神經(jīng)輻射場 (NeRF) 轉(zhuǎn)化為神經(jīng)光場(Neural Light Field, or NeLF) -- 從 NeRF 到 NeLF, 所以我們把方法命名為 R2L。 NeLF 與 NeRF 一樣, 都可以作為一個場景的表征. 不同的是:
NeRF 的輸入是場景中的一個點 (該點的坐標(biāo) + 該點所在視線的方向), 輸出是該點的 RGB 和不透明度。NeRF 網(wǎng)絡(luò)的輸出是中間結(jié)果, 并不是圖片上的 RGB 值. 要想得到一個像素的 RGB 值, 需要對該像素對應(yīng)光線上的很多點進(jìn)行積分 (即 Alpha Compositing)。
而 NeLF 的輸入是一條光線, 輸出直接是該光線對應(yīng)圖片上像素值, 不需要 Alpha Compositing 這一步。
對于 Novel View Synthesis 這個任務(wù)來說, NeLF 的優(yōu)勢很明顯: 速度快! 要得到一個像素的 RGB 只需要跑一次網(wǎng)絡(luò), 而 NeRF 則需要跑上百次。
但它的缺點也很明顯, 主要有兩個缺點: (1)NeLF 網(wǎng)絡(luò)要擬合的目標(biāo)函數(shù)比 NeRF 更難。這一點可以這么理解: 在一張圖片上相鄰兩個像素的 RGB 可能突變 (因為遮擋), 而相鄰兩個像素的光線方向其實差別很小, 這就意味著, 這個函數(shù)的輸入稍微變化一點, 輸出可能劇變, 這種函數(shù)的不連續(xù)性強, 復(fù)雜度高. 相比之下, NeRF 表達(dá)的函數(shù)是空間中的點, 空間中的點由于物理世界的連續(xù)性, 相鄰位置上 RGB 劇變的可能性小, 所以函數(shù)相對簡單。 (2)同樣一堆圖片, 用來訓(xùn)練 NeLF 的話, 樣本量會大幅降低. 一張圖片, 長寬為 H, W, 用來訓(xùn)練 NeLF 的話樣本量就是 H*W, 而訓(xùn)練 NeRF 樣本量是 H*W*K (K 是 NeRF 中的一條光線上的采樣點個數(shù), 在 NeRF 原文中 K=256). 所以, 從 NeRF 到 NeLF 訓(xùn)練樣本量會變?yōu)樵瓉淼?1/K, 這是很大的縮減。 神經(jīng)網(wǎng)絡(luò)有效, 通常需要有大量的訓(xùn)練數(shù)據(jù)。從 NeRF 變?yōu)?NeLF, 一方面要擬合的目標(biāo)函數(shù)變復(fù)雜了, 同時樣本量卻減小了, 無疑雪上加霜. 如何解決這些問題呢? 為了解決上述問題(1), 我們需要用一個更深的網(wǎng)絡(luò)來表征更復(fù)雜的函數(shù), 所以在我們的文章中提出了一個 88 層的深度殘差 MLP (deep residual MLP), 網(wǎng)絡(luò)結(jié)構(gòu)如下:
這樣的深層網(wǎng)絡(luò)在之前 NeRF 相關(guān)的工作沒有出現(xiàn)過 (之前的 NeRF 相關(guān)工作大多繼承了原始 NeRF 文章中的網(wǎng)絡(luò)結(jié)構(gòu), 小修小補)。為了能讓它訓(xùn)練起來, 我們引入了殘差結(jié)構(gòu)的設(shè)計。這一點跟 ResNet 的思想一樣, 本身并沒有更多的創(chuàng)新, 但把這一點引入到 NeRF/NeLF 中, 據(jù)我們所知, 本文是第一篇工作。殘差結(jié)構(gòu)的引入很有必要, 因為深度網(wǎng)絡(luò)沒有殘差結(jié)構(gòu)基本訓(xùn)練不起來, 這一點在文中的消融實驗中也得到了證實。 另一個值得注意的創(chuàng)新點是關(guān)于如何表征一條光線。理論上說, 一條光線用一個方向向量就可以確定, 但如果真的只用方向向量去表征, 就會出現(xiàn)上面說的 “輸入很接近, 輸出卻可能劇變” 的情況, 這就無疑會給 NeLF 網(wǎng)絡(luò)的學(xué)習(xí)帶來困難。為了使得 NeLF 網(wǎng)絡(luò)要學(xué)習(xí)的函數(shù)更容易一些, 我們需要增強輸入的差別. 具體來說, 我們采用一條光線上采樣的多個點的坐標(biāo) (如下圖所示), 將其串聯(lián)(concat) 起來成一個向量, 以此作為該光線的表征, 作為我們 NeLF 網(wǎng)絡(luò)的輸入。
這種表征非常簡單直接, 同時也很有效。在文中, 我們也展示了它比之前的 NeLF 工作中用到的其他表征 (例如 Plucker 坐標(biāo) [Sitzmann et al, NeurIPS, 2021]) 要更為有效。 為了解決上述問題(2), 我們使用了一個預(yù)訓(xùn)練好的 NeRF 模型來產(chǎn)生大量偽數(shù)據(jù) (pseudo data)。具體來說, 當(dāng) NeRF 對一個場景學(xué)習(xí)完之后, 給定任意一個角度 (ray direction), NeRF 都能返回這個角度下的圖片, 我們就把這些圖片收集起來, 形成了很多 (origin, direction, RGB) triplets。這些 triplets 就是訓(xùn)練我們模型的數(shù)據(jù), loss 函數(shù)是 mean squared error (MSE), 如下所示:
在我們的實驗中, 我們收集了 10k 張圖片, 是原始數(shù)據(jù)集 (大概 100 張圖片) 的 100 倍, 這些數(shù)據(jù)確保了有充足的樣本去訓(xùn)練 NeLF。文中的消融實驗也表明, 大量偽數(shù)據(jù)對性能至關(guān)重要 (6.9dB PSNR 提升)! 值得一提的是, 如果僅僅是用偽數(shù)據(jù)訓(xùn)練, 我們的模型最優(yōu)也只能復(fù)制 teacher NeRF, 無法超越它。為了能超越, 我們在原始圖片上再微調(diào) (Finetune) 一下模型。這個操作被證明有非常顯著的效果, 使得我們的模型可以顯著超越 teacher NeRF。 實驗效果 總的來說, 我們的模型在 NeRF Synthetic 數(shù)據(jù)集 (圖片尺寸 400x400) 上實現(xiàn)了將近 30x 的加速, 并把 PSNR 大幅提升了 1.4dB, 比同類其他方法更加高效。
視覺效果圖對比如下, 可以看到, 相比于 NeRF, 我們的模型 (Ours-2, 即在原始數(shù)據(jù)上微調(diào)后的模型)有肉眼可見的提升, 且計算量僅僅是 NeRF 的 1/26。
更多結(jié)果請參考我們的文章。代碼已經(jīng)開源: https://github.com/snap-research/R2L, 歡迎嘗試! 總結(jié)與未來工作 本文提出了一種全新的數(shù)據(jù)蒸餾方法來加速 NeRF: 我們使用訓(xùn)練好的 NeRF 模型產(chǎn)生偽數(shù)據(jù), 來訓(xùn)練提出的深度殘差 NeLF 網(wǎng)絡(luò)。該 NeLF 網(wǎng)絡(luò)可以達(dá)到超過 NeRF 的渲染質(zhì)量, 且實現(xiàn)將近 30x 加速, 并維持了存儲小的優(yōu)點。 未來工作方向: (1) 從 NeRF 中可以得到深度信息, 目前我們還沒提供從 NeLF 網(wǎng)絡(luò)中得到深度信息的方法, 這是不錯的探索方向。(2) 如何用更少, 更高質(zhì)量的偽數(shù)據(jù) (譬如進(jìn)行數(shù)據(jù)篩選) 來加速 NeLF 的訓(xùn)練也非常值得探索。
審核編輯 :李倩
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4812瀏覽量
103240 -
數(shù)據(jù)結(jié)構(gòu)
+關(guān)注
關(guān)注
3文章
573瀏覽量
40684 -
pytorch
+關(guān)注
關(guān)注
2文章
809瀏覽量
13875
原文標(biāo)題:ECCV 2022|Snap&東北大學(xué)提出R2L:用數(shù)據(jù)蒸餾加速NeRF
文章出處:【微信號:CVer,微信公眾號:CVer】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
使用ad9467-250來采集低頻信號,請問有什么方法來提高sfdr嗎?
PDM產(chǎn)品數(shù)據(jù)管理是什么?一文詳細(xì)了解三品PDM系統(tǒng)
用ADS1258做了一塊采集卡,請問有比較簡單的測試方法來測試我的采集卡的性能和精度嗎?
大連理工提出基于Wasserstein距離(WD)的知識蒸餾方法
一種面向飛行試驗的數(shù)據(jù)融合框架

全面總結(jié)動態(tài)NeRF

PyTorch GPU 加速訓(xùn)練模型方法
一種創(chuàng)新的動態(tài)軌跡預(yù)測方法

一種利用wireshark對遠(yuǎn)程服務(wù)器/路由器網(wǎng)絡(luò)抓包方法

THS4551是否可以通過在Vocm引腳處接入電阻調(diào)整分壓比例的方法來配置輸出共模電壓?
一種無透鏡成像的新方法

NONOS如何檢查是否實際發(fā)送了UDP數(shù)據(jù)包?
rup是一種什么模型
干貨分享 數(shù)據(jù)記錄儀自動測量與記錄加速度:振動,顛簸,沖擊和定位

評論