神經渲染中的特色深度計算特徵

摘要
神經渲染是以深度學習為基礎的新型圖形渲染方法,是實現時下熱點概念“元宇宙”的關鍵要素。同時神經渲染也是深度學習的前沿方向,催生了許多新的深度學習方法與計算結構。本文以當前神經渲染中兩個影響力較大的方法NeRF[1]和GauGAN[2]以及相關的拓展研究為基礎,嘗試整理分析神經渲染方法中一些比較有特色的計算結構與運算元特徵。需要指出的是本文並不是對神經渲染方法整體的演算法分析,也不是對所有神經渲染特色運算元的分析。事實上,神經渲染方法的主體結構還是主流深度學習中廣泛採用的操作,如卷積、池化等,為大家所熟知。我們在之前的文章中也對這些神經渲染方法的整體結構及一般特點做了分析(神經渲染最新進展與演算法(一):語義影像合成神經渲染最新進展與演算法(二):NeRF及其演化)。因此,本文僅選取這些方法中一些關鍵的、但不常見的特色運算元,以乘加為基本計算單位,評估了它們的計算特徵。
NeRF方法的結構與計算分析
NeRF是一種深度容積渲染方法,其主要特點是場景的深度隱式表達與容積渲染。與一般渲染方法直接構建場景結構不同,NeRF訓練一個神經網路表徵三維場景,是一個典型三維重建過程。輸入場景空間和視角座標,場景表徵網路輸出對於空間體素的顏色等場景資訊。進一步,NeRF按照volume rendering方法沿著成像面畫素對應投影射線方向取樣場景體素的顏色密度,然後對所有體素積分,即可在成像面產生影像。所以NeRF方法包括兩部分:神經渲染場網路和容積投影積分演算法。 
1. 3D場景隱式表徵
Neural radiance filed是一個Implicit function,將三維場景間接表徵為一個場景體素座標與相機觀察角度的函式F,而不是顯示記錄場景內容。
函式F是一個多層MLP網路,輸入體素座標與觀察角度,輸出對應位置體素在給定視角下的顏色與密度。其中體素位置輸入60維向量,視角輸入24維向量。NeRF模型是MLP網路,結構固定,一組網路權重對應一個場景。NeRF的具體細節可參見我們之前的公眾號介紹。
圖1 NeRF模型 ([1] 圖7)
由上圖可見NeRF方法的網路結構與計算特徵不復雜,一次前向的乘加(MA)次數為:
60×256+256x256x4+(256+60)x256+256x256x4(256+24)x256+256×128 = 64,409 = 629K 
雖然單次計算量並不大,但用NeRF方法渲染影像的容積投影涉及多次取樣,這使得全過程計算量巨大。
2. 容積投影
容積渲染假定3D場景的所有位置體素都可以由其色彩和不透明度(密度)來表達,沿著指定觀察方向對空間體素積分即可實現渲染。
圖2 容積積分的ray marching
如圖,容積渲染是一個ray marching過程。具體實現可分為幾步:
1) 根據視角和成像面分辨率確定投影射線位置
2) 射線上取樣體素,逐點輸入NeRF網路計算顏色密度
3D場景有效體素的分佈是稀疏的。為提升取樣效率,Nerf採用了二次取樣方法。第一次粗取樣64點,估計該射線體素的機率密度分佈。第二次根據密度分佈,再取樣128點。
3) 射線上所有點積分,得到成像面一個畫素的渲染值。
4) 掃描成像面所有畫素,完成整幅影像渲染。
由此可見,NeRF渲染影像需要執行多次的取樣和NeRF網路計算。如果產生一幅1024×1024的影像,我們可以估算其乘加次數為:
一個投影畫素 192個取樣:192x629K = 123,666,432 = 117.94M
一幅1024×1024影像:1024x1024x117.94 = 117.94T
GauGAN及其SPADE運算元
GauGAN是神經渲染另一個影響較大的工作,以對抗神經網路為主體,主要應用於語義影像合成。自2019年釋出以來,GauGAN在學界引起很大反響,許多後續工作借鑑和利用了它的演算法。
GauGAN方法整體上是一種可控制的對抗生成網路,用語義圖和自然影像訓練網路。訓練中自然影像由 encoder生成隱空間變數,與語義圖一起在生成器產生真實感影像,並在判別器比較。訓練好的生成器可以根據輸入的語義圖產生真實感影像。具體詳情可參見我們之前的公眾號文章。
圖3 GauGAN基本架構 ([2] 圖15)
GauGAN也稱為SPADE網路。這是因為其Generator集成了特殊定義的啟用歸一化運算元 spatial adaptive normalization(SPADE)。

1. SPADE

GauGAN的生成器採用了SPADE運算元對卷積層啟用做歸一化。SPADE運算元的提出是為了克服BN後語義資訊丟失問題。SPADE運算元中batch norm的控制引數與對應的語義圖特徵相關:
其中,m是語義圖,i是網路層,h為輸入feature,c,y,x分別為feature通道及二維座標。由公式可知,歸一化計算中控制變數γ和β是空間座標和特徵通道的函式,需要根據輸入的語義圖由卷積網路計算而得。
圖4 SPADE運算元([2] 圖2和圖10)
可以看出控制變數γ和β是與feature map尺寸相同的tensor,由語義分割圖計算而來。對於nxnxk feature map,其計算量以乘加(MA op)衡量為:
完成一次SPADE norm的控制變數共需

次乘加運算。相應的網路引數量為:

GauGAN方法將經典的卷積殘差模組中的BN用SPADE運算元代替,構建了新的SPADE Residual Block並用於生成器網路。
圖5 SPADE ResBlk([2]圖11)
因此一次殘差模組需三次SPADE norm控制變數的計算,共計:
整個生成器網路結構如下:
圖6 SPADE生成器 ([2] 圖12)
共計7層SPADE殘差模組,輸入feature map尺寸kxhxw由1024x4x4逐步增加到64x256x256。以圖中列出的引數為基礎,對應SPADE模型的引數及計算量如下表。其中第4列是SPADE norm的乘加數量,第5列是ResBlk中卷積運算元部分的乘加數量。可以看到SPADE的乘加數遠超過普通殘差網路的計算量。

2. Spectral Normalization

Spectral normalization是在對抗生成網路中使用的權重處理方法,由Miyato等在Spectral Normalization for Generative Adversarial Networks一文提出。該歸一化是對網路引數的處理,而非像batch norm一樣對feature maps的處理。
與許多GAN實現一樣,GauGAN也使用了Spectral Norm對網路權重歸一化以保證收斂。具體來看,GauGAN方法對Generator和Discriminator中的卷積運算元都作了歸一化處理,將卷積核矩陣權重除以該矩陣最大奇異值來歸一化。
矩陣奇異值一般需要透過矩陣奇異值分解獲得。這是一個計算代價很大的過程,而在網路訓練中更新權重還需要反覆執行該操作。因為Spectral Norm僅需計算最大奇異值,我們可以透過冪迭代近似來計算,該操作透過多次矩陣乘迭代來逼近結果,減少了計算量。在原文中,作者更指出一次迭代即可達到精度要求。
一次迭代設定下,給定mxn的矩陣W和隨機初始mx1向量u,譜歸一化計算步驟如下:
然後計算最大特徵值(譜範數)

。權重矩陣W除以該值即可得到歸一化的權重矩陣。由此可知,矩陣譜歸一化中二次向量更新需要的乘加計算量為2xnxm次(忽略分母中二範數的計算量)。

其它方法中的一些特色計算
1. ModLinear運算元
GANcraft是2021年上半年提出的一項有影響力的工作[3]。它以MineCraft風格的語義畫素塊作為輸入,輸出的不僅僅是對應的單張真實感影像,而是任意視角的真實感影像。我們在之前的公眾號曾經有詳細的分析。

圖7 GANCraft整體架構([3] 圖3)
從運算元特徵角度來理解,GANcraft集成了NeRF和GauGAN兩種結構。除了上述網路計算結構特徵外,GANcraft的神經輻射場網路Per-sample Network加入了ModLinear運算元來讓風格特徵調節網路輸出風格。

圖8 基於MLP的Volume radiance field模型with ModLinear Operator([3] 圖6和圖10)
從計算特徵來看,ModLinear運算元涉及運算較簡單,主要是矩陣乘加、向量乘加的組合。風格特徵向量經過linear產生係數和bias與輸入特徵乘加形成風格調製的輸出。主要的乘加計算如上圖紅色標記,共計:

ModLinear運算元與[4]中的Rendering-aware denormalization(RAD)運算元的計算結構類似,此處不再贅述。值得一提的是[4]文研究了傳統渲染與神經網路方法融合的方法,是一個很有價值的思路。
圖9 RAD模組([4] 圖8)
2. AutoInt[5]
與前面介紹的方法和運算元結構不同,AutoInt並不是一種完成單一功能的方法、網路結構或運算元,而是一種新型的網路計算與最佳化思路。
AutoInt將容積渲染中一條射線的投影看作是定積分,並定義對應的神經網路G代表積分過程,然後對該神經網路G求導得到對應的導數網路D。顯然,神經網路G, D具有共同的網路引數。AutoInt首先訓練導數網路D,然後將最佳化的引數代入積分函式網路G。給定投影線的起始點,容積投影可透過計算神經網路函式G在兩點的差值來計算,即兩次對G的前向計算就確定了投影值。圖10很清晰地描述了該方法。
圖 10 AutoInt流程([5] 圖1)
具體實現上,AuoInt將神經網路表達為有向無環圖DAG,透過自動微分,逐個節點遞迴呼叫構建梯度網路。眾所周知,對積分函式網路求導是一個求偏導的過程,由於中間變數的原因,對應的導數網路存在多個分支。一般情況下,導數網路看起來像多支並行的神經網路結構。
圖11 AuotoInt DAG例項 ([5] 附錄圖1)
AutoInt從整體上簡化了前向積分,但從計算特徵角度來看,訓練是在導數網路上進行,網路結構與引數計算的複雜度似乎相對增加了。但實際上,各條分支的對應節點是相同的。一個節點的值計算一次即可多次複用。因此導數網路的前後向推導時總的計算量並沒有增加。
AutoInt是從基本的微積分原理出發提出的新型計算方法,充分利用了學習框架的自動微分能力。它不僅僅適用於容積渲染,而是可以應用到任何沿輸入積分的情況。對於深度PDE求解的mesh-free方法或其它以座標為輸入的深度學習網路都可以利用定積分和AutoInt方法。
小結
神經容積表達和對抗生成網路是神經渲染實現的兩個重要工具。本文以GauGAN和NeRF為物件,簡要分析了神經渲染中深度學習方法的一些有特色的結構和計算特徵。由於神經渲染髮展迅速,各種方法層出不窮,我們無法一一列舉。希望我們的初步調研能夠起到拋磚引玉的作用。我們後續會持續跟蹤這些方面的進展,也歡迎有興趣的朋友一起參與。
參考文獻
[1] B. Mildenhall, et. al., NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis,arXiv:2003.08934v2.
[2] T.Park et.al., Semantic Image Synthesis with Spatially-Adaptive Normalization,  arXiv:1903.07291v2
[3] Z. Hao, et.al., GANcraft: Unsupervised 3D Neural Rendering of Minecraft Worlds, arXiv:2104.07659.
[4].S. Richter, H.AlHaija, and V. Koltun Enhancing photorealism enhancement, arXiv:2105.04619v1.
[5] D. Lindell, J.Martel and G. Wetzstein, AutoInt: Automatic Integration for Fast Neural VolumeRendering, arXiv:2012.01714v2.
關於壁仞科技研究院
壁仞科技研究院作為壁仞科技的前沿研究部門,旨在研究新型智慧計算系統的關鍵技術,重點關注新型架構,先進編譯技術和設計方法學,並將逐漸拓展研究方向,探索未來智慧系統的各種可能。壁仞科技研究院秉持開放的原則,將積極投入各類產學研合作並參與開源社群的建設,為相關領域的技術進步做出自己的貢獻。
掃碼關注我們

相關文章