首頁  >  文章  >  科技週邊  >  腦補出新視角,一個統一的NeRF程式庫框架已開源

腦補出新視角,一個統一的NeRF程式庫框架已開源

WBOY
WBOY轉載
2023-05-15 20:58:041053瀏覽

假設一個物體你看了幾張照片後,能想像出其它角度看上去的感覺嗎?人是可以做到的,我們能自行推測出沒見過的部分,或者說沒見過的角度是什麼樣的。模型其實也有辦法做到,給定一些場景圖片,它也能腦補出一些未看過角度的影像。

渲染新視角,近來最引人注目的就是ECCV 2020 最佳論文榮譽提名的NeRF (Neural Radiance Field)了,它不需要以前複雜的三維重建過程,只需要幾張照片及拍攝此照片時相機的位置,就能合成新視角下的影像。 NeRF 驚豔的效果吸引了許多視覺方面的研究者,後續做出了一系列優秀的工作。

但困難的地方在於,這樣的模型建構起來比較複雜,目前也沒有一個統一的程式碼庫框架來實現它們,這無疑會阻礙該領域的進一步探索與發展。為此,OpenXRLab 渲染生成平台建構出高度模組化的演算法庫 XRNeRF,幫助快速實作 NeRF 類別模型的建置、訓練與推理。

腦補出新視角,一個統一的NeRF程式庫框架已開源

#開源位址:https://github.com/openxrlab/xrnerf

什麼是NeRF 類模型

NeRF 類任務,一般指的是在已知視角下捕獲場景信息, 包括拍攝到的圖像,以及每張圖像對應的內參外參,從而合成新視角下的影像。借助 NeRF 論文中的圖,我們能很清楚地理解這種任務。

腦補出新視角,一個統一的NeRF程式庫框架已開源

選自 arxiv: 2003.08934。

NeRF 在收集影像時會同時收集 5 維場景訊息,即一張影像對應一個三維座標值及另外兩個光線輻射角度。這樣的場景會透過多層感知機建模為Radiance Field,也就是說該多層感知機將輸入三維座標點並映射為該點的Density 和RGB 顏色,從而利用體素渲染(Volume Rendering)將Radiance Field 渲染為照片級的虛擬視角。

如上圖所示,透過一些圖片建構 Radiance Field 後,就能產生新視角下架子鼓的圖像。因為NeRF 並不需要明確地進行三維重建就能得到想要的新視角,所以它提供了一種基於深度學習的三維隱式表徵範式,僅使用2D 的posed images 資料就能訓練出包含3D 場景資訊的深度神經網路。

自NeRF 之後,類NeRF 的模型就層出不窮:Mip-NeRF 利用椎體而不是射線從而優化精細結構的生成效果;KiloNeRF 採用數以千計的微型多層感知機而不是單一大型多層感知機,降低計算量,實現即時渲染能力;此外AniNeRF 和Neural Body 等模型從簡短視訊幀中學習人體視角變換,得到很好的視角合成和驅動效果;此外,GN 'R 模型利用稀疏視角圖片與幾何先驗,實現不同ID 間可泛化的人體渲染。

腦補出新視角,一個統一的NeRF程式庫框架已開源

GN'R 提出的可泛化人體隱式場表徵,實現的單模型人體渲染效果

為NeRF 裝上輪子

儘管目前NeRF 類別演算法在研究領域具有非常高的熱度,但是畢竟屬於比較新的方法,所以模型實作上肯定是要麻煩一些的。如果是用 PyTorch 或 TensorFlow 這樣常規的框架,那就先得找個相近的 NeRF 模型,再在其基礎上修改。

這樣做會帶來幾個明顯的問題,首先即我們得完全讀懂一份實現,才能在其基礎上改成我們想要的樣子,這一部分其實工作量還是不小的;其次因為不同論文的官方實現並不統一,對比不同NeRF 類模型源碼時就會消耗比較大的精力,畢竟誰也不知道某篇論文的訓練過程中是不是有一些新穎的Trick;最後如果沒有一套統一的程式碼,驗證新模型的新想法無疑會慢很多。

為了解決眾多問題,OpenXRLab 為 NeRF 類別模型建構出一個統一的、高度模組化的程式碼庫框架 XRNeRF。

腦補出新視角,一個統一的NeRF程式庫框架已開源

XRNeRF 實現了眾多 NeRF 模型,上手更為容易,可輕鬆復現對應論文的實驗結果。 XRNeRF 將這些模型分成 datasets、mlp、network、embedder 和 render 這 5 個模組。 XRNeRF 的易用性在於,只需要透過 config 機制即能組裝不同模組而構成完整模型,極為簡單易用,同時也大幅增加了復用性。

在保證易用性的基礎上,同時還需要靈活性,XRNeRF 透過另一套註冊器機制,能客製化不同模組的具體特性或實現,從而使XRNeRF解耦性更強,程式碼也更易於理解。

此外,XRNeRF 所有實現的演算法都是採用Pipeline 的模式,數據上的Pipeline 讀取原始數據,經過一系列處理後獲得模型的輸入,模型的Pipeline 則對輸入的資料進行處理,獲得對應的輸出。這樣的 Pipeline 將 config 機制與註冊機機制串起來,組成了完整的架構。

XRNeRF 實現了眾多核心 NeRF 模型,並透過如上三大機制將它們都串起來,建構出既易用又靈活的高度模組化程式碼框架。

XRNeRF 的核心特性

XRNeRF 是基於 Pytorch 框架的 NeRF 類別 演算法庫,目前已經復現了 scene 和 body 兩個方向的 8 篇經典論文。相較於直接建模,XRNeRF 在搭模型效率、成本和彈性上都有顯著提升,而且有完善的使用文件、範例和 Issue 回饋機制,概括來說,XRNeRF 的核心特性大概有以下 5 點。

1. 實現了眾多主流和核心的演算法

例如開山之作NeRF,CVPR 2021 Best Paper Candidate (NeuralBody)、ICCV 2021 Best Paper Honorable Mention (Mip-NeRF) 與Siggraph 2022 Best Paper (Instant NGP)。

腦補出新視角,一個統一的NeRF程式庫框架已開源

在實現了這些模型的基礎上,XRNeRF 也能保證復現效果和論文中的基本一致。如下圖所示,從客觀的 PSNR 和 SSIM 指標來看,其能很好地重現原版程式碼的效果。

腦補出新視角,一個統一的NeRF程式庫框架已開源

腦補出新視角,一個統一的NeRF程式庫框架已開源

#2.模組化設計

XRNeRF 將整個程式碼框架進行了模組化設計,最大程度地提升了程式碼的可重複使用性,以便研究者對現有程式碼進行閱讀和修改。透過分析現有的NeRF 類別模型方法,XRNeRF 設計的具體模組流程如下圖所示:

腦補出新視角,一個統一的NeRF程式庫框架已開源


模組化的優點在於,假設我們需要修改資料格式,那隻需要修改Dataset 模組下的邏輯,假設我們需要修改渲染影像的邏輯,那就只需要修改Render model 模組。

3. 標準資料處理管線

#針對NeRF 類別演算法資料預處理較為複雜且多樣的問題,XRNeRF 提供了一套標準資料處理流程。其由多個資料處理操作序列得到,僅需修改 config 設定檔中的 data pipeline 部分,即可完成資料處理流暢搭建。

腦補出新視角,一個統一的NeRF程式庫框架已開源

NeRF 設定資料流程部分。

XRNeRF 中已經實作了多個資料集所需的資料處理op,只需要將這些op 在config 中依照順序定義好,即可完成資料處理流程的搭建。如果後續有新的 op 需要加入,也只需要在對應資料夾中完成新 op 的實現,即可一行程式碼加入整個資料處理流程當中。

4. 模組化網路建構方式

XRNeRF 中的模型主要由embedder、MLP 和render model組成,並透過network 連接,這幾者之間可以互相解耦,由此可以實現不同演算法之間不同模組的替換。

其中embedder 輸入點的位置和視角,輸出embedded 特徵資料;MLP 使用embedder 的輸出作為輸入,輸出取樣點的Density 和RGB 顏色;render model 則輸入MLP 的輸出結果,沿著射線上的點進行積分等操作,從而獲得影像上一個像素點的RGB 值。這三大模組再透過標準的 network 模組連接就構成了完整的模型。

腦補出新視角,一個統一的NeRF程式庫框架已開源

自訂 network 模組的程式碼結構。

5. 良好的復現效果

#支援最快60 秒訓練網絡,30幀每秒即時渲染,支援高清晰度、抗鋸齒、多尺度場景及人體影像渲染。無論是從客觀的 PSNR 和 SSIM 指標或主觀的 demo 展示效果來看,XRNeRF 都能很好地重現原版程式碼的效果。

XRNeRF 的使用

XRNeRF 框架看起來有非常好的特性,其使用起來也很簡單便捷。比如說安裝過程,XRNeRF 依賴的開發環境還是比較多的,PyTorch、CUDA 環境、視覺方面的處理庫等等。但是 XRNeRF 提供了 Docker 環境,透過 DockerFile 能直接建構鏡像檔。

腦補出新視角,一個統一的NeRF程式庫框架已開源

我們試了一下,相較於一步步配置各種運行環境與包,只需docker build 一行命令的配置方式顯然要方便太多了。另外建置 Docker 映像檔時,DockerFile 裡面配置了國內映像位址,所以速度還是很快的,基本上不用擔心網路問題。

在建置完映像,並從該映像啟動容器後,我們就能將專案程式碼,以及資料都透過 docker cp 指令傳到容器內。不過也可以直接在建立容器時透過 -v 參數直接將項目位址對應到容器內部。不過這裡要注意的是,資料集是需要放到確定位置的(否則需要改 config 檔案),例如 XRNeRF 專案下的 data 資料夾。

一般而言,下載完資料後,大概資料夾結構如下圖所示:

腦補出新視角,一個統一的NeRF程式庫框架已開源

現在,環境、資料與程式碼三者都準備好了,只需簡短的一行程式碼,就能執行NeFR 模型的訓練與驗證:

python run_nerf.py --config configs/nerf/nerf_blender_base01.py --dataname lego

其中 dataname 表示資料目錄下的特定資料集,config 表示模型的具體設定檔。因為 XRNeRF 採用的是高度模組化的設計,其 config 使用字典來構建,雖然乍一看可能會覺得有一點點繁瑣,但實際理解了 XRNeRF 的設計結構之後,閱讀起來就非常簡單了。

主觀看上去,config 設定檔(nerf_blender_base01.py)包含了訓練模型所有必要的信息,優化器、分散式策略、模型架構、資料預處理與迭代等等,甚至許多影像處理相關的配置也都包含在內。總結來說,除了具體的程式碼實現,config 設定檔描述了整個訓練、推理過程。

腦補出新視角,一個統一的NeRF程式庫框架已開源

描述模型結構部分的 Config 配置。

總的體驗起來,XRNeRF 從基礎的運行環境搭建到最終執行訓練任務都是比較流暢的。況且透過配置 config 文件,或是實現具體的 OP,同樣也能獲得非常高的建模彈性。相較於直接使用深度學習框架建模,XRNeRF 無疑將減少大量的開發工作,研究者或演算法工程師也能花更多時間在模型或任務創新上。

NeRF 類別模型目前仍是電腦視覺領域的研究重點,XRNeRF 這樣統一的程式碼庫,就像HuggingFace 的Transformer 庫一樣能聚集越來越多的優秀研究工作,聚集越來越多的新程式碼與新想法。反過來 XRNeRF 同樣也將大大加快研究者對 NeRF 類模型探索的腳步,便於將這一新領域應用到新場景與新任務中,NeRF 的潛力也將由此加速展開。

以上是腦補出新視角,一個統一的NeRF程式庫框架已開源的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除