鄭清芳/ZHENG Qingfang
( 1. 中興通訊股份有限公司,中國 深圳 518057;2. 移動網(wǎng)絡(luò)和移動多媒體技術(shù)國家重點(diǎn)實(shí)驗(yàn)室,中國 深圳 518055)
過去10 年,視頻相關(guān)技術(shù)[1-5]領(lǐng)域最深刻的變革發(fā)生在內(nèi)容分析方面。自從2012年AlexNet[6]在ImageNet大規(guī)模圖像識別挑戰(zhàn)(ILSVRC)競賽中奪冠以來,基于深度學(xué)習(xí)的計算機(jī)視覺技術(shù)突飛猛進(jìn),將內(nèi)容分析的準(zhǔn)確率提升至前所未有的水平,并催生出巨大的市場應(yīng)用規(guī)模。以人臉識別為代表的各項(xiàng)視頻內(nèi)容分析技術(shù)走出實(shí)驗(yàn)室,服務(wù)于千行百業(yè)。
未來10 年,同樣激動人心的突破有望發(fā)生在視覺內(nèi)容生成方面。簡單便捷地從2D視頻/圖像集中合成出嶄新視角的視頻/圖像,甚至重建出物體及場景的3D模型,并且畫質(zhì)達(dá)到照片級的逼真度和清晰度,一直是內(nèi)容生成方面的長期技術(shù)研究課題[7]。2020年美國加州大學(xué)伯克利分校的研究團(tuán)隊(duì)提出神經(jīng)輻射場技術(shù)(NeRF)[8]。NeRF 因其創(chuàng)新的方法及突出的效果,吸引了業(yè)界的廣泛關(guān)注,成為視圖合成/3D重建領(lǐng)域新的技術(shù)框架。自從發(fā)表后近兩年的時間里,該NeRF 論文被引用超過1 000 次。同時業(yè)界研究者對NeRF 技術(shù)進(jìn)行了大量的改進(jìn),并將其應(yīng)用領(lǐng)域擴(kuò)展到視頻編輯[9]、數(shù)據(jù)壓縮[10]、虛擬人[11]、城市建模[12]、地圖構(gòu)建[13]等諸多方面。
NeRF 技術(shù)的一個顯著缺點(diǎn)是模型訓(xùn)練及圖像渲染的速度極慢。在Nvidia的高端顯卡上,訓(xùn)練一個場景的模型需耗時1~2 d,而從模型中渲染出一幅800×800分辨率的圖像需耗時超過20 s。運(yùn)算速度方面的不足阻礙了NeRF 技術(shù)在實(shí)際應(yīng)用中的部署??上驳氖牵?jīng)過業(yè)界研究者近兩年的努力,渲染速度提升超過10 000 倍[14],訓(xùn)練速度提升超過300倍[15]。
針對NeRF的各種加速技術(shù),本文梳理并總結(jié)了速度提升的技術(shù)機(jī)理和工程技巧,并分析各項(xiàng)技術(shù)之間互相結(jié)合以達(dá)到復(fù)合加速效果的可能性,從而有助于激發(fā)更高效算法的產(chǎn)生,進(jìn)一步推進(jìn)NeRF 技術(shù)在內(nèi)容生成及其他領(lǐng)域的應(yīng)用。
文獻(xiàn)[16]和文獻(xiàn)[17]分別對2021年3月之前的NeRF相關(guān)技術(shù)做了綜述。文獻(xiàn)[16]針對促使NeRF 出現(xiàn)的各種技術(shù)和NeRF 出現(xiàn)后的各種改進(jìn)性技術(shù)這兩個主題,提供了注釋性的參考文獻(xiàn),但不涉及對各技術(shù)的詳細(xì)說明。文獻(xiàn)[17]將相關(guān)技術(shù)大致分為兩大類:第1 類對NeRF 表示方法的理論性質(zhì)和不足進(jìn)行分析,并提出優(yōu)化策略,包括對合成精度、繪制效率以及對模型泛用性的優(yōu)化;第2 類則以NeRF 的框架為基礎(chǔ)對算法進(jìn)行擴(kuò)展和延伸,使其能夠解決更加復(fù)雜的問題。文獻(xiàn)[16]和文獻(xiàn)[17]促使更多的研究者對NeRF 進(jìn)行研究,但也因其成文時間較早,無法涵蓋對2021 年3 月以后NeRF的許多重要進(jìn)展的總結(jié)。
文獻(xiàn)[18]綜述了神經(jīng)渲染技術(shù)的整體發(fā)展。神經(jīng)渲染技術(shù)廣義上是指所有利用神經(jīng)網(wǎng)絡(luò)產(chǎn)生新的視覺內(nèi)容的技術(shù),而NeRF僅是其中的一個子領(lǐng)域,側(cè)重于合成出新的視角的視覺內(nèi)容。文獻(xiàn)[18]重點(diǎn)介紹了將經(jīng)典渲染與可學(xué)習(xí)3D表示相結(jié)合的高級神經(jīng)渲染方法,盡管提及了許多NeRF相關(guān)的文獻(xiàn),但本質(zhì)上不是針對NeRF的綜述。
在本文的撰寫過程中,加拿大滑鐵盧大學(xué)的研究者在Arxiv.org上展示了預(yù)印本[19],全面介紹了過去兩年業(yè)界提出的各種NeRF 改進(jìn),以及NeRF 技術(shù)在各種計算機(jī)視覺任務(wù)中的應(yīng)用。與文獻(xiàn)[19]不同,本文著眼于運(yùn)算速度的提升,對各種加速技術(shù)進(jìn)行分類,闡釋技術(shù)背后的機(jī)理和工程技巧,展現(xiàn)NeRF發(fā)表以來的技術(shù)演進(jìn)脈絡(luò),以期為相關(guān)研究者提供有益參考。
對于給定的三維場景,任意位置的外觀取決于具體位置和觀測角度。場景表現(xiàn)出的顏色與光照條件相關(guān),導(dǎo)致從不同角度觀察同一位置時顏色也會出現(xiàn)變化。NeRF 是一個描述三維場景的函數(shù)(r,g,b,σ) = FΘ(x,y,z,θ,φ),其中FΘ用多層感知機(jī)(MLP)來具體表示。輸入位置信息(x,y,z)和觀測角度(θ,φ)后,該函數(shù)輸出該位置的體密度σ 和在對應(yīng)觀測角度的顏色值rgb。在基于NeRF的場景表示基礎(chǔ)上,可以采用經(jīng)典體渲染方法渲染出不同視角的新圖像。具體地,對于圖像中任意像素,沿著觀測角度的光線r 采樣N 個點(diǎn)Xi(i =1,…,N),對每個采樣點(diǎn)先根據(jù)FΘ計算出σi和rgbi,然后根據(jù)以下公式計算出最終的顏色值:
其中,δi代表在光線r上的采樣間隔。
為了訓(xùn)練出FΘ對應(yīng)的MLP具體參數(shù),對于給定的場景,采用不同位姿的攝像頭拍攝得到n幅圖像,利用梯度下降的方法,通過最小化預(yù)測圖像Ip與真值圖像Ic之間的誤差對FΘ進(jìn)行擬合,即
圖1 給出了NeRF 算法的流程。在文獻(xiàn)[8]中,作者為了得到含有更多高頻信息的輸出圖像,對輸入MLP 的位置和視角參數(shù)進(jìn)行了高階編碼操作γ(.)。另外,為了提升運(yùn)行速度,作者采用先粗放后精細(xì)的策略提高采樣的效率:首先在光線方向上均勻采樣64個點(diǎn),然后由這64點(diǎn)的密度值估計出密度分布函數(shù),再對高密度的區(qū)域采樣128點(diǎn)。
▲圖1 神經(jīng)輻射場算法流程[8]
NeRF的運(yùn)行速度十分緩慢,主要有兩個原因:
1)巨大的計算量。例如:在渲染一幅分辨率為800×800 的圖像時,NeRF 為了計算出每個像素的最終顏色值,需在光線行進(jìn)的方向上采樣192(64+128)個點(diǎn),并進(jìn)行256次MLP推理。這意味著渲染該圖像總共需要800×800×256=163 840 000 次MLP 推理。MLP 的網(wǎng)絡(luò)架構(gòu)如圖2(a)所示。每次推理計算需要超過100 萬次浮點(diǎn)運(yùn)算。總體而言,整個過程需要超過100T次浮點(diǎn)計算。
2)低效的實(shí)現(xiàn)方式。在通常針對Nvidia 圖形處理器(GPU)優(yōu)化的深度學(xué)習(xí)函數(shù)庫中,MLP 是逐層計算的。每一層用一個核函數(shù)來實(shí)現(xiàn)具體的計算,并向GPU 全局顯存寫入計算結(jié)果,而下一層在計算時又需從全局顯存讀取該計算結(jié)果并將其作為本層的輸入。在目前的GPU芯片架構(gòu)中,全局顯存的數(shù)據(jù)讀寫速度遠(yuǎn)小于計算速度。頻繁的數(shù)據(jù)讀寫嚴(yán)重制約了GPU的實(shí)際工作性能。
鑒于NeRF 巨大的潛在應(yīng)用前景,針對當(dāng)前NeRF 十分低效的運(yùn)行速度,近兩年來研究者們提出了一系列加速技術(shù)。由上一節(jié)的分析可知,對于給定分辨率的圖像,NeRF的實(shí)際運(yùn)行速度受到每道光線中的MLP 的計算復(fù)雜度、采樣點(diǎn)數(shù)量、硬件的技術(shù)特性等因素的綜合影響。本文從采用小型化MLP、減少采樣點(diǎn)數(shù)量、緩存中間計算結(jié)果以及充分利用硬件特性4個方面對現(xiàn)有技術(shù)進(jìn)行分類和介紹。
在NeRF 的實(shí)現(xiàn)中,圖像中每個像素的色彩值的計算都需上百次的MLP推理,因此減輕MLP 的計算復(fù)雜度是非常有必要的。如果采用更小型化的MLP,不論是減少其深度還是寬度,都會導(dǎo)致模型表征能力的下降,損害最終輸出圖像的視覺質(zhì)量。因而,此類方法的關(guān)鍵在于采用何種策略能夠確保小型化MLP 的最終輸出不會影響最終的視覺質(zhì)量。
DeRF[20]和KiloNeRF[21]采用了分而治之的策略:用更小的MLP來表示目標(biāo)場景的一部分而非整個場景。DeRF把整個場景劃分為不規(guī)則的互相獨(dú)立的16個Voronoi單元。相比于NeRF 中的MLP,每個Voronoi 單元對應(yīng)的MLP 深度不變但寬度減半,因此計算量只有原來的1/4。在渲染時,由于每條光線上的每個采樣點(diǎn)只計算與它相對應(yīng)的MLP,因此整體速度可以達(dá)到原始NeRF 的1.7 倍。KiloNeRF 采用沿坐標(biāo)軸均勻分解場景的方法,最多可以把場景分為16×16×16 = 4 096個小場景。每個小場景對應(yīng)的MLP的具體架構(gòu)如圖2(b)所示。該架構(gòu)僅有4 個隱含層且每層只有32 個通道,其計算量為NeRF 中MLP 的1/87。相比于原始的NeRF,KiloNeRF 的總體渲染速度可以達(dá)到3 個數(shù)量級的加速倍速。為了保證視覺質(zhì)量,在KiloNet 訓(xùn)練過程中采用知識蒸餾的方式,使KiloNeRF的輸出與NeRF的輸出相一致。
▲圖2 NeRF與KiloNeRF的比較[21]
Instant NeRF[22]的核心思路是:既然MLP 的最終輸出值取決于MLP 自身的參數(shù)和輸入的特征,那么小型化MLP 表征能力的減弱可以通過增強(qiáng)輸入特征的表征能力來彌補(bǔ)。Instant NeRF中的MLP由兩個分別包含1個及2個隱含層且每層都為64個通道的小型MLP串聯(lián)組成。不同于NeRF中的位置編碼,Instant NeRF對輸入?yún)?shù)采取多分辨哈希編碼方式:輸入?yún)?shù)在某個分辨率中經(jīng)過哈希后對應(yīng)一個特征向量,把輸入?yún)?shù)在所有分辨率中對應(yīng)的特征向量串聯(lián)起來形成最終的特征向量。Instant NeRF 不但加速了渲染過程,在Nvidia RTX 3090 GPU上能夠以60 fps的速度輸出1 920×1 080的圖片,而且解決了NeRF 模型訓(xùn)練慢的問題,將NeRF 訓(xùn)練速度提高了60 倍。實(shí)驗(yàn)結(jié)果表明,在最快的情況下,Instant NeRF模型的訓(xùn)練時間只需要5 s。圖3以2D空間場景為例解釋了Instant NeRF 的計算過程。該計算過程包括5 個步驟:1)對于給定的輸入坐標(biāo)x,在不同的分辨率中分別找到周圍的體素;2)在哈希表中查詢不同分辨率的體素所對應(yīng)的特征向量;3)根據(jù)x 在各自體素中的相對位置,插值計算出x 在不同分辨中的特征向量;4)將在各分辨率上的特征向量串聯(lián),形成最終的特征向量;5)將特征向量輸入神經(jīng)網(wǎng)絡(luò)進(jìn)行推理計算
▲圖3 Instant NeRF的計算過程[22]
盡管NeRF已經(jīng)采用了層次化的采樣策略來避免對整條光線進(jìn)行密集采樣,但是仍然需要固定的192個采樣點(diǎn)。事實(shí)上,由于目標(biāo)場景通常無法完全充滿整個三維空間,必然有某些采樣點(diǎn)落在目標(biāo)場景之外。另外,某些采樣點(diǎn)在視角方向上被完全遮擋,使得這些采樣點(diǎn)對最終的計算結(jié)果并無幫助。因此,更合理的采樣策略應(yīng)該可以避免把計算資源浪費(fèi)在這些采樣點(diǎn)上。
文獻(xiàn)[23]引入了一種用于快速和高質(zhì)量自由視角渲染的新神經(jīng)場景表示方法:神經(jīng)稀疏體素場(NSVF)。NSVF 定義了一組由稀疏體素八叉樹組織的體素有界隱式場,以對每個體素中的局部屬性進(jìn)行建模,并為體素的每個頂點(diǎn)分配一個特征。體素內(nèi)部具體位置的特征通過對體素8個頂點(diǎn)處的特征進(jìn)行插值計算。在渲染過程中,需要對每條光線進(jìn)行軸對齊邊界框相交(AABB)測試,即比較從光線原點(diǎn)到體素的6個邊界平面中的距離,檢查光線是否與體素相交。對于不相交的空體素,可以直接跳過,從而實(shí)現(xiàn)10 倍以上的渲染加速。圖4比較了NSVF與NeRF的不同采樣策略。因?yàn)镹SVF 渲染過程是完全可微的,所以可以通過將渲染的輸出結(jié)果與一組目標(biāo)圖像進(jìn)行比較,然后進(jìn)行反向傳播來實(shí)現(xiàn)端到端優(yōu)化。監(jiān)督訓(xùn)練NSVF的過程采用了漸進(jìn)式的策略,使得不包含場景信息的稀疏體素會被修剪掉,以允許網(wǎng)絡(luò)專注于具有場景內(nèi)容的體積區(qū)域的隱函數(shù)學(xué)習(xí)。文獻(xiàn)[23]中的實(shí)驗(yàn)表明,只需1 萬~10 萬個稀疏體素就能夠?qū)崿F(xiàn)復(fù)雜場景的逼真渲染。
▲圖4 神經(jīng)稀疏體素場和神經(jīng)輻射場的不同采樣策略對比[23]
盡 管TermiNeRF[24]、NeuSample[25]、DONeRF[26]的具體做法不同,但背后的思想?yún)s是類似的:在訓(xùn)練的過程中,聯(lián)合訓(xùn)練NeRF 和一個采樣神經(jīng)網(wǎng)絡(luò),而在渲染過程中,僅需對每條光線推理一次采樣神經(jīng)網(wǎng)絡(luò),即可得到所需的全部采樣點(diǎn)位置。以加速效果最好的DONeRF為例,為了在不影響圖像質(zhì)量的前提下大幅減少每條光線所需的采樣點(diǎn)數(shù)量,文獻(xiàn)[26]的作者引入真實(shí)深度信息,只考慮物體表面周圍的重要采樣點(diǎn)。DONeRF 由一個著色網(wǎng)絡(luò)和一個采樣網(wǎng)絡(luò)組成。其中,著色網(wǎng)絡(luò)使用類似NeRF 的光線行進(jìn)累積法來輸出顏色值,而采樣網(wǎng)絡(luò)則通過將空間沿光線離散化并預(yù)測沿光線的采樣概率,來預(yù)測每條光線上的多個潛在采樣對象。為了消除輸入的模糊性,光線被轉(zhuǎn)換到一個統(tǒng)一的空間中。作者使用非線性采樣來追蹤接近的區(qū)域,并在采樣網(wǎng)絡(luò)和著色網(wǎng)絡(luò)之間,對局部采樣進(jìn)行扭曲,以使著色網(wǎng)絡(luò)的高頻預(yù)測被引導(dǎo)到前景上。圖5 展示了DONeRF 的計算過程。實(shí)驗(yàn)結(jié)果表明,DONeRF 只用4 個采樣點(diǎn)就取得了與NeRF 相似的圖像質(zhì)量,渲染速度可實(shí)現(xiàn)20~48倍的提升。
▲圖5 DONeRF的計算過程[26]
如圖6所示,EfficientNeRF[27]在訓(xùn)練時采用了與NeRF相似的先粗放后精細(xì)的采樣策略,但是在粗放采樣階段只計算體密度σ > 0 的有效樣本,在精細(xì)采樣階段只計算w >0.000 1的關(guān)鍵樣本以及與其臨近的另外4個關(guān)鍵樣本,整體的訓(xùn)練時間減少了88%。每個位置對應(yīng)的σ值被初始化為非零值并存儲在Vσ中,在后續(xù)的每次訓(xùn)練迭代中根據(jù)Viσ =進(jìn)行更新。其中,β ∈(0,1)是控制更新率的參數(shù),σ(x)是本次迭代中得到的體密度值。w根據(jù)公式(2)—(4)計算。
▲圖6 EfficientNeRF訓(xùn)練過程中的采樣策略[27]
通過預(yù)先計算并將計算結(jié)果緩存起來,在后續(xù)使用時直接獲取該結(jié)果,是常見的加速方法。NeRF 本質(zhì)上是將5 維的輸入?yún)?shù)(3維的位置參數(shù)+2維的視角參數(shù))映射到4維向量的函數(shù)(r,g,b,σ) = FΘ(x,y,z,θ,φ)。對此,最簡單方法是直接將5 維輸入空間離散化,并將對應(yīng)的計算結(jié)果全部緩存。但該方法因?yàn)樗璧膬?nèi)存容量太大而不具可行性:即使假設(shè)輸入?yún)?shù)每個維度的分辨率都是512,所需的內(nèi)存也超過150 TB。
如圖7 所示,F(xiàn)astNeRF[28]和SqueezeNeRF[29]都利用了函數(shù)分解的思想。FastNeRF 將NeRF 分解為兩個函數(shù):第1 個函數(shù)(σ,u,v,w) = Fpos(x,y,z)將位置參數(shù)映射到體密度σ 和輻射圖(u,v,w);第2 個函數(shù)β = Fdir(θ,φ)則將視角參數(shù)映射到與輻射圖對應(yīng)的權(quán)重向量β,其中u、v、w、β 都是D 維向量。Fdir和Fpos的全部結(jié)果被預(yù)先計算并緩存。渲染時先根據(jù)位置和視角參數(shù)從緩存中分別查詢得到權(quán)重向量和深度輻射圖,然后通過計算二者的內(nèi)積即可獲得顏色值:(r,g,b) =。該計算量遠(yuǎn)小于NeRF 中的一次MLP 推理,因此FastNeRF的渲染速度比NeRF提升了約3 000倍。假設(shè)k和l分別表示位置和視角方向的分辨率,緩存Fpos和Fdir所需的內(nèi)存空間復(fù)雜度分別為O(Dk3)和O(Dl2),且O(Dk3)和O(Dl2)遠(yuǎn)小于緩存NeRF 所需的內(nèi)存空間復(fù)雜度O(k3l2)。在通常設(shè)置中,k = l = 1 024,D = 8,F(xiàn)astNeRF 所需的最大緩存空間大約為54 GB。為了能夠運(yùn)行在內(nèi)存更小的嵌入式設(shè)備上,如圖7 所示,SqueezeNeRF在FastNeRF的基礎(chǔ)上將函數(shù)Fpos進(jìn)一步分解為3 個函數(shù)并緩存其結(jié)果,所需內(nèi)存空間的復(fù)雜度也從O(Dk3)降到O(Dk2)。
▲圖7 NeRF、FastNeRF、SqueezeNeRR 3種神經(jīng)網(wǎng)絡(luò)架構(gòu)的對比
在文獻(xiàn)[30]中,作者首次提出NeRF-SH 模型(σ,k) = FSH(x,y,z),將空間位置映射為體密度σ 和球諧系數(shù)k =。NeRF-SH 的 訓(xùn) 練 過 程、渲染過程與NeRF 類似。作者采用稀疏八叉樹表示3維場景,在葉子節(jié)點(diǎn)上存儲各體素位置對應(yīng)的體密度σ 和球諧系數(shù)k。該位置在方向(θ,φ)的顏色值為,其中,Yml(θ,φ)是與方向(θ,φ) 相對應(yīng)的球諧系數(shù),S(x) =(1 + exp(?x))?1。與NeRF 相比,PlenOctree 技術(shù)不僅可以將渲染速度提升3 000多倍,還能將訓(xùn)練速度提升約4倍。在一般的場景中,Ple‐nOctree需要的內(nèi)存空間通常不超過5 GB。EfficientNeRF[27]采用不同的數(shù)據(jù)結(jié)構(gòu)來組織緩存數(shù)據(jù),用一個兩層的樹NerfTree 代替PlenOctree 中的稀疏八叉樹,實(shí)現(xiàn)了更快的緩存查詢速度。
根據(jù)圖形學(xué)知識,物體的顏色可以表示為漫反射色與鏡面反射色兩者之和,其中鏡面反射色與相機(jī)觀測角度有關(guān)。文獻(xiàn)[31]定義一個函數(shù)(σ,cdiffuse,vspecular)= F(x,y,z),場景中的每個位置都對應(yīng)著體密度σ、漫反射色cdiffuse,以及與鏡面反射色有關(guān)的4 維特征向量vspecular。這些數(shù)據(jù)經(jīng)預(yù)先計算后被緩存在稀疏神經(jīng)輻射網(wǎng)格(SNeRG)中。在渲染時,每條光線上采樣點(diǎn)通過查詢緩存直接獲取對應(yīng)的σ、cdiffuse和vspecular,這些采樣點(diǎn)的cdiffuse和vspecular分別根據(jù)σ值加權(quán)累積得到Cdiffuse和Vspecular。Vspecular只需經(jīng)過一次MLP 推理就可得到累積的鏡面反射色Cspecular,則最終像素的顏色為rgb = Cdiffuse+ Cspecular。利用該技術(shù)在AMD Radeon Pro 5500M GPU 上渲染Synthetic 360o圖像時,速度可達(dá)到84 fps。SNeRG 中的數(shù)組內(nèi)容可以通過便攜式網(wǎng)絡(luò)圖形(PNG)、聯(lián)合圖像專家組(JPEG)等算法被壓縮到平均90 MB以內(nèi)。
在實(shí)際部署中,算法總是運(yùn)行在特定芯片上的。提升算法的運(yùn)行速度通常意味著必須高效地利用芯片中的并行處理能力和內(nèi)存/緩存資源。
在Nvidia GPU 上,Instant NeRF 和KiloNeRF 取得顯著加速效果的重要原因之一在于:小型化的MLP 能夠更充分利用GPU 芯片的技術(shù)特性。例如,與NeRF 中的MLP 相比,KiloNeRF 中MLP 的理論計算量只有1/87,而實(shí)際加速效果卻高出1 000 倍。在常規(guī)的統(tǒng)一計算設(shè)備架構(gòu)(CUDA)深度學(xué)習(xí)函數(shù)庫中,MLP逐層用一個核函數(shù)計算,需要在GPU的全局顯存中讀寫中間計算結(jié)果。對于計算小型化MLP,數(shù)據(jù)訪問的時間遠(yuǎn)大于數(shù)據(jù)計算的時間。KiloNeRF 和Instant NeRF 都使用CUDA 重新編寫一個核函數(shù),并在其中完成MLP的所有計算,從而省去中間計算結(jié)果的數(shù)據(jù)搬運(yùn)操作,減少頻繁啟停核函數(shù)的時間開銷。
為了在移動設(shè)備上部署NeRF,Google 推出MobileN‐eRF[14]。MobileNeRF充分利用了標(biāo)準(zhǔn)GPU光柵化管道的并行性。測試結(jié)果表明,在輸出圖像視覺質(zhì)量相當(dāng)?shù)那疤嵯?,MobileNeRF 能夠比SNeRG 快10 倍,相當(dāng)于比原始NeRF 快了10 000 倍以上。為了適配GPU 的光柵化管道,MobileN‐eRF 采用與原始NeRF 不同的訓(xùn)練過程和表征方法,用帶有紋理的多邊形來表征每個場景模型。其中,多邊形大致沿著場景表面排布,紋理圖中存儲特征向量和離散的不透明度。渲染時MobileNeRF 先利用帶Z-buffering 的經(jīng)典多邊形光柵化管道為每個像素生成特征向量,然后將特征向量傳遞給OpenGL著色語言(GLSL)片段著色器,并在其中運(yùn)行小型化MLP,生成每個像素的色彩值。此外,MobileNeRF 的GPU 顯存利用率也高于SNeRG,在運(yùn)行過程中前者占用的GPU顯存約為后者的1/5。
基于現(xiàn)場可編程邏輯門陣列(FPGA),上海科技大學(xué)開發(fā)了首個針對NeRF 渲染算法的定制化芯片ICARUS[32]。ICARUS的架構(gòu)由定制的全光核組成,其中每個全光核集成了位置編碼單元(PEU)、MLP 引擎和體渲染單元(VRU)。當(dāng)采用40 nm 互補(bǔ)金屬氧化物半導(dǎo)體(CMOS)工藝且工作在300 MHz 時,單個全光核僅占7.59 mm2面積,功耗為309.8 mW,能效比GPU 高146 倍。ICARUS 的高效性能主要得益于以下3個方面:
1)使用經(jīng)過量化的定點(diǎn)數(shù)模型,尤其對于對復(fù)雜度最高的MLP計算,使用移位累加等近似算法。
2)全光核內(nèi)部完成NeRF 的全部計算過程。當(dāng)芯片加載經(jīng)過訓(xùn)練的NeRF網(wǎng)絡(luò)模型參數(shù)后,只要輸入觀察位置與視角,即可輸出對應(yīng)像素的最終色彩值,無須在片外存儲中間計算結(jié)果,從而消除了各運(yùn)算單元內(nèi)部、單元之間的數(shù)據(jù)存儲和搬運(yùn)操作。
3)每個像素的計算過程和結(jié)果完全獨(dú)立,控制邏輯大大簡化,可以方便地通過增加全光核數(shù)量來實(shí)現(xiàn)并行加速。
NeRF 技術(shù)可以從不同視角的2D 圖像集中學(xué)習(xí)并建立3D場景的隱含模型,并渲染出嶄新視角的圖像。不僅如此,新圖像的視覺效果能夠達(dá)到非常逼真的程度。自從2020 年第1篇關(guān)于NeRF的論文發(fā)表以來,NeRF技術(shù)為視角合成乃至3D 重建領(lǐng)域帶來新的研究思路。在兩年左右的時間里,該技術(shù)引起了業(yè)界廣泛關(guān)注,并得到了突飛猛進(jìn)的發(fā)展。在未來,NeRF 技術(shù)將為視覺內(nèi)容生成領(lǐng)域帶來巨大變革,如同當(dāng)前深度卷積網(wǎng)絡(luò)技術(shù)為視覺內(nèi)容分析領(lǐng)域帶來的變革一樣,在虛擬現(xiàn)實(shí)(VR)/增強(qiáng)現(xiàn)實(shí)(AR)及未來的元宇宙時代起到關(guān)鍵作用。
為了解決由NeRF技術(shù)運(yùn)行速度緩慢導(dǎo)致的實(shí)際部署難的問題,研究者們已經(jīng)提出各種加速技術(shù)。本文介紹了NeRF 的技術(shù)原理,并分析該技術(shù)運(yùn)行緩慢的原因:在獲得每個像素的最終顏色值時,整體運(yùn)行速度取決于MLP 的計算復(fù)雜度、每道光線沿線的采樣點(diǎn)數(shù)量等綜合因素。本文相應(yīng)地從采用小型化MLP、減少采樣點(diǎn)數(shù)量、緩存中間計算結(jié)果以及充分利用硬件特性4個方面對現(xiàn)有技術(shù)進(jìn)行綜述,介紹了各技術(shù)的加速原理和實(shí)現(xiàn)方法,希望可以幫助相關(guān)研究者快速了解本領(lǐng)域的技術(shù)現(xiàn)狀及演進(jìn)脈絡(luò)。
另外,NeRF 相關(guān)技術(shù)仍在快速發(fā)展中,同時實(shí)際應(yīng)用場景仍需要更加高效的加速技術(shù)。展望未來的技術(shù)發(fā)展,我們認(rèn)為應(yīng)重點(diǎn)關(guān)注以下幾個研究方向:
1) 復(fù)合加速效果
必須指出的是,盡管本文從技術(shù)原理的角度做了正交分類,并在各分類中列舉了代表性的工作,但所提及的諸多具體技術(shù)都綜合利用了多種加速原理。例如,EfficientNeRF在訓(xùn)練階段減少采樣點(diǎn)數(shù)量,而在渲染階段緩存計算結(jié)果;Instant NeRF 和KiloNeRF 都采用小型化MLP,并針對特定GPU 架構(gòu)優(yōu)化MLP 的推理速度。我們推測,通過結(jié)合額外的加速原理,現(xiàn)有的方法可以實(shí)現(xiàn)更高的加速倍數(shù),例如:KiloNeRF 可以進(jìn)一步與DONeRF 相結(jié)合,減少采樣點(diǎn)數(shù)量,進(jìn)一步提高渲染速度;Instant NeRF 可以在訓(xùn)練階段結(jié)合EfficientNeRF中的采樣策略,并采用DS-NeRF[33]中在損失函數(shù)里增加深度信息約束的做法,來加快訓(xùn)練過程收斂。對此,我們希望本文的分析能夠啟發(fā)感興趣的研究者設(shè)計出更加高效的算法。
2)訓(xùn)練加速和渲染加速
NeRF 技術(shù)的特點(diǎn)是:針對每一個靜態(tài)場景都需要訓(xùn)練一個模型,然后從模型中渲染出所需的圖像。鑒于原始NeRF 的訓(xùn)練渲染過程都十分緩慢,為了在實(shí)際應(yīng)用中使用NeRF 技術(shù),加速訓(xùn)練過程和渲染過程都十分必要。前述加速方法中有些只適用于渲染過程,甚至是以犧牲訓(xùn)練速度為代價的,例如:在KiloNeRF 和MobileNeRF 之類的采用小型化MLP 的方法中,為了保證最終模型的輸出質(zhì)量,需要先訓(xùn)練出NeRF中的MLP模型,再通過知識蒸餾的方式,訓(xùn)練出更小型化的MLP。
在諸如電商貨品展示的應(yīng)用場景中,可以通過兩階段的過程來綜合利用上述兩類加速方法:先離線使用某種加速方法訓(xùn)練出NeRF 模型,并進(jìn)一步轉(zhuǎn)換成更高效的表達(dá)形式,然后在線展示過程中采用另外一種加速方法渲染出圖片。而對于諸如3D 視頻通信的端到端實(shí)時應(yīng)用而言,往往需要同時加速模型訓(xùn)練和渲染過程。在本文提及的方法中,Ple‐nOctree、EfficientNeRF 和Instant-NeRF 能同時加速訓(xùn)練過程和渲染過程,但訓(xùn)練過程的加速比遠(yuǎn)小于渲染過程,訓(xùn)練速度遠(yuǎn)小于30 fps。
3)專用加速芯片
算法與芯片的發(fā)展總是相輔相成、互相促進(jìn)的。當(dāng)某種算法被廣泛采用時,通常研究者會為之設(shè)計專用的加速芯片,在性能、成本、功耗等方面實(shí)現(xiàn)更佳的匹配,從而進(jìn)一步推廣算法的應(yīng)用。在關(guān)于AlexNet 的論文發(fā)表之后大約兩年的時間,中科院計算所設(shè)計出第一款深度卷積網(wǎng)絡(luò)加速原型芯片DIANNAO[34]。該芯片將速度提升近120 倍,從此拉開波瀾壯闊的人工智能(AI)計算芯片產(chǎn)業(yè)化序幕;在有關(guān)NeRF 的論文發(fā)表之后大約兩年的時間,上??萍即髮W(xué)設(shè)計出第一款NeRF 渲染加速芯片ICARUS,使能效提升近140倍。ICARUS是否會同樣在芯片產(chǎn)業(yè)風(fēng)起云涌?現(xiàn)有GPU的技術(shù)特性并不完全適配神經(jīng)渲染的計算流程。類似Mobile‐NeRF 的技術(shù)通過復(fù)雜的轉(zhuǎn)化過程后,可以更加高效地利用現(xiàn)有GPU 的并行能力,從而能夠運(yùn)行在移動設(shè)備中的嵌入式GPU 上。我們十分期待業(yè)界共同努力,持續(xù)創(chuàng)新,研發(fā)出神經(jīng)渲染專用加速芯片產(chǎn)品,并創(chuàng)造出巨大的市場應(yīng)用空間,使得在各種設(shè)備上便捷、快速、經(jīng)濟(jì)地渲染出逼真高清的視覺內(nèi)容成為現(xiàn)實(shí)。