譯者 | 朱先忠
審校 | 重樓
高斯潑濺(Gaussian Splatting)是“實時輻射場渲染的3D高斯潑濺”論文(引文1)中介紹的一種表示3D場景和渲染新穎視圖的方法。它被認為是NeRF(引文2)類模型的替代品,就像當年的NeRF模型本身一樣,高斯潑濺引發了一系列新的研究工作,這些工作選擇將其用作各種場景中3D世界的底層表示。
那么,高斯潑濺算法究竟有什么特別之處,為什么它比NeRF更好呢?或者說,可以下這樣的結論嗎?本文中,我們將全面地回答這幾個問題。
引言
首先,從本文標題中可以看出,高斯潑濺算法的主要成名點是高渲染速度。這歸功于下文將介紹的此算法實現本身以及由于使用自定義CUDA內核定制的渲染算法的實現。
圖1:在渲染速度(fps)、訓練時間(min)和視覺質量(峰值信噪比,越高越好)方面,之前的高質量表示和高斯潑濺(標記為“Ours”)的并排比較(源于引文1)
此外,高斯潑濺根本不涉及任何中性網絡。甚至沒有使用哪怕是一個小的MLP,也沒有引入任何神經網絡,場景本質上只是空間中的一組點。這本身就已經引起了人們的注意??吹竭@樣一種方法在我們癡迷于人工智能的世界里越來越受歡迎,也發現有些研究公司競相研發由越來越多乃至數十億個參數組成的模型,真是令人耳目一新。
高斯潑濺的想法源于“表面飛濺”(引文3),因此它樹立了一個很酷的例子——經典的計算機視覺方法仍然可以啟發相關的解決方案。它簡單而明確的表示使高斯潑濺特別容易解釋,這是在某些應用中選擇它而不是NeRF算法的一個很好的理由。
表示三維世界
如前所述,在高斯潑濺算法中,3D世界由一組3D點表示。事實上,存在數百萬個3D點,大約在50萬到500萬之間。每個點都是具有其自己獨特參數的3D高斯,這些參數針對每個場景進行擬合,使得該場景的渲染與已知的數據集圖像緊密匹配。優化和渲染過程將在稍后討論;讓我們暫時先來介紹幾個必要的高斯參數。
圖2:高斯中心(平均值(源自引文4中“動態三維高斯”)
每個3D高斯算法通過以下方式進行參數化:
- 平均μ可解釋為位置x、y、z;
- 協方差∑;
- 不透明度σ(??),是一個sigmoid函數,用于把參數映射到[0,1]區間;
- 顏色參數,可能是(R、G、B)3值形式,也可能是球面諧波(SH)系數方式指定。
這里需要進一步討論兩組參數:協方差矩陣和SH。接下來還有一個單獨的小節專門討論后者。對于協方差,設計之初指定它是各向異性的;也就是說,不是各向同性的。這意味著3D點可以是沿空間中任何方向旋轉和拉伸的橢球體。此參數可能需要9個子參數;然而,不能直接優化它們,因為協方差矩陣只有當它是正半定矩陣時才有物理意義。使用梯度下降進行優化使得很難直接在矩陣上提出這樣的約束,這就是為什么把它分解為如下形式:
這種因子分解被稱為協方差矩陣的特征分解,可以被理解為橢球體的配置,其中:
- S是具有3個縮放參數的對角縮放矩陣;
- R是用4個四元數解析表示的3x3旋轉矩陣。
使用高斯的美妙之處在于每一點的雙重影響。一方面,根據其協方差,每個點有效地表示了空間中接近其均值的有限區域。另一方面,它在理論上具有無窮大的范圍,這意味著每個高斯都是在整個三維空間上定義的,并且可以對任何點進行評估。這很好,因為在優化過程中,它允許梯度沿長距離流動(引文4)。
3D高斯i對3D中任意3D點p的影響定義如下:
圖3:三維高斯i對三維點p的影響(作者本人提供的圖片)
這個方程看起來幾乎像多元正態分布的概率密度函數,只是忽略了具有協方差行列式的歸一化項,而是用不透明度來加權的。
圖像形成模型和渲染
圖像形成模型
給定一組3D點,可能最有趣的部分是看它如何用于渲染。以前你可能熟悉一個NeRF中使用的ɑ-混合。結果表明,NeRF系列算法和高斯潑濺共享相同的圖像形成模型。要了解這一點,不妨讓我們繞道而行——重新訪問NeRF(引文2)及其許多后續作品中給出的體積渲染公式(1)。我們還將使用簡單的轉換來重寫它(2):
σ和δ的定義可以參考NeRF論文,但從概念上講,這可以理解為:圖像像素p中的顏色是通過沿穿過該像素的光線對樣本進行積分來近似的。最終顏色是沿該光線采樣的3D點的顏色的加權和,按透射率向下加權??紤]到這一點,讓我們最后來看高斯潑濺的圖像形成模型:
事實上,公式(2)和(3)幾乎相同。唯一的區別是如何在兩者之間計算。然而,這種微小的差異在實踐中變得極其顯著,并導致截然不同的渲染速度。事實上,它是高斯潑濺實時性能的基礎。
為了理解為什么會出現這種情況,我們需要理解f^{2D}的含義以及它提出的計算要求。這個函數只是我們在上一節中看到的f(p)到2D的投影,即投影到正在渲染的相機的圖像平面上。3D點及其投影都是多變量高斯,因此投影的2D高斯對像素的影響可以使用與3D高斯對3D中其他點的影響相同的公式來計算(見圖3)。唯一的區別是平均μ和協方差∑必須投影到2D中,這是使用EWA潑濺的導數來完成的(引文5)。
2D中的平均值可以通過使用內在相機矩陣K和外在相機矩陣W=[R|t]將齊次坐標(具有額外的1個坐標)中的向量μ投影到圖像平面中而簡單地獲得:
這也可以寫在一行中,如下所示:
這里的“z”下標代表z歸一化。2D中的協方差是使用(4)的雅可比定義的,J的定義如下:
整個過程仍然是可微分的,這對優化至關重要。
渲染
公式(3)告訴我們如何在單個像素中獲得顏色。要渲染整個圖像,仍然需要遍歷所有HxW射線,就像在NeRF中一樣。然而,該過程要簡單得多,因為:
- 對于給定的相機,在對像素進行迭代之前,每個3D點的f(p)可以預先投影到2D中。這樣,當高斯混合到附近的幾個像素時,我們不需要一遍又一遍地重新投影它。
- 對于單個圖像,沒有MLP可以被推斷為H·W·P倍,2D高斯直接混合到圖像上。
- 沿著射線評估哪個3D點沒有歧義,無需選擇射線采樣策略。與每個像素的光線重疊的一組3D點(參見(3)中的N)在優化后是離散的和固定的。
- 預處理排序階段在GPU上每幀完成一次,使用可微分CUDA內核的自定義實現。概念上的差異如圖4所示:
圖4:NeRF和GS之間的概念差異,左:沿射線查詢連續的MLP,右:混合與給定射線相關的離散高斯集(作者本人提供圖片)
上面提到的排序算法是本文的貢獻之一。其目的是準備使用公式(3)進行顏色渲染:按深度(接近圖像平面)對3D點進行排序,并按圖塊對其進行分組。第一種方法需要計算透射率,而后者允許將每個像素的加權和限制為僅相關3D點的α-混合(或者更具體地說,它們的2D投影)。該分組是使用簡單的16x16像素圖塊來實現的,并且如果高斯與多于單個視錐重疊,則它可以落在幾個圖塊中。得益于排序,每個像素的渲染可以簡化為像素所屬圖塊的預編序點的α-混合。
圖5:視圖截頭體,每個截頭體對應一個16x16圖像片段。顏色沒有特別的意義。排序算法的結果是按深度排序的每個圖塊內的3D點的子集
優化
一個天真的問題可能會浮現在腦海中:怎么可能從太空中的一群斑點中獲得一張看起來不錯的照片呢?如果沒有對高斯算法進行適當優化的話,你會在渲染中遭遇到各種各樣的頭疼任務。在圖6中,您可以觀察到這樣一個任務的例子,它們看起來非常像橢球體。獲得良好渲染的關鍵是三個部分:良好的初始化、可微分優化和自適應致密化。
圖6:未優化場景的渲染示例(作者本人圖片)
初始化是指在訓練開始時設置的3D點的參數。對于點位置(平均值),作者建議使用SfM(運動結構)產生的點云(見圖7)。邏輯依據是,對于任何3D重建,無論是GS、NeRF還是更經典的東西,你都必須知道相機矩陣,所以你可能無論如何都會運行SfM來獲得這些矩陣。既然SfM會產生一個稀疏點云作為副產品,為什么不使用它進行初始化呢?這就是論文的建議。當點云由于某些原因不可用時,可以使用隨機初始化,以避免最終重建質量的潛在損失。
圖7:SfM產生的稀疏3D點云,即初始化工作(來源:https://speciale.ar/publication/privacypreservingsfm/)
協方差被初始化為各向同性;換句話說,3D點以球體開始。半徑是根據到相鄰點的平均距離設置的,這樣3D世界就可以很好地覆蓋,并且沒有“洞”。
初始化之后,使用一個簡單的隨機梯度下降來正確地擬合所有內容。場景針對損失函數進行優化,該損失函數是地面實況視圖和當前渲染之間的L1和D-SSIM(結構不相似性指數度量)的組合。
然而,事實并非如此,另一個關鍵部分仍然存在,那就是自適應致密化。它在訓練期間偶爾出現一次,比如說,在每100個SGD步驟(目的是解決重建不足和過度的問題)中發生一次。需要強調的是,SGD本身只能調整現有的點。但在完全缺乏積分或積分過多的領域,它將很難找到好的參數。這就是自適應致密化的作用所在,用大梯度分割點(圖8),并去除收斂到非常低的α值的點(如果一個點那么透明,為什么要保留它?)。
圖8:自適應致密化:一個玩具的示例,用于擬合我們想要用幾個點渲染的豆形狀(圖源自引文1)
基于SH函數的視圖依賴顏色
球面諧波,簡稱SH,在計算機圖形學中發揮著重要作用,并首次被提出作為學習Plenoxel輻射場中離散三維像素的視圖相關顏色的一種方法(引文6)。視圖依賴性是一個很好的特性,可以提高渲染質量,因為它允許模型表示非朗伯效應,例如金屬表面的鏡面反射。然而,這當然不是必需的,因為可以進行簡化,選擇用3個RGB值表示顏色,并且仍然像引文4中那樣使用高斯潑濺。這就是為什么我們在制定整個方法后單獨審查這個表示細節的原因。
SH是在球面上定義的特殊函數。換句話說,您可以為球體上的任何點計算這樣的函數,并獲得一個值。所有這些函數都是通過為?(?? ≤ m≤?),每個SH使用一個(?, m)成對:
雖然一開始有點嚇人,但對于?的小值,這個公式大大簡化了。事實上,對于? = 1,Y=~0.822,只是整個球體上的一個常數。相反,?的值越高生成更復雜的曲面。該理論告訴我們,球面諧波形成了一個正交基,因此定義在球面上的每個函數都可以通過SH表示。
這就解釋了為什么依賴于視圖的顏色的想法可以這樣表達:讓我們把自己限制在一定程度的自由度?_max,并設定每種顏色(紅色、綠色和藍色)都是第一個?_max SH函數的線性組合。對于每一個3D高斯,我們都想學習正確的系數,這樣當我們從某個方向看這個3D點時,它會傳達出最接近地面實況的顏色。獲取視圖相關顏色的整個過程如圖9所示:
圖9:獲取點的視圖相關顏色(紅色分量)的過程(學習系數?_max=2和9。此處,sigmoid函數將值映射到[0,1]區間。通常情況下,使用剪輯代替(作者本人圖片)
高斯潑濺算法的局限性
高斯潑濺算法盡管總體效果很好,渲染速度也令人印象深刻,但其表示的簡單性也是有代價的。最重要的考慮因素是在優化過程中引入的各種正則化啟發式方法,以保護模型免于發生“破壞性”高斯:太大、太長、冗余等等。這一部分至關重要,上述問題可以在新視圖渲染之外的任務中進一步放大。
選擇放棄連續表示而選擇離散表示意味著MLP的歸納偏差消失了。在NeRF中,MLP執行隱式插值,并平滑給定視圖之間可能的不一致性,而3D高斯對此更具敏感性,導致了上述問題。
此外,高斯潑濺也并非沒有NeRF中存在的一些眾所周知的問題,它們都繼承自共享的圖像形成模型:在看不太清或看不見的區域中質量較低,靠近圖像平面處存在漂浮物等。
檢查點的文件大小是另一個需要考慮的屬性,盡管新型視圖渲染遠未部署到邊緣設備上??紤]到3D點的大致數量和流行的NeRF的MLP架構,兩者占用的磁盤空間數量級相同,高斯潑濺只多出幾倍。
總結
沒有一篇博客文章能公正地評價一種方法,只需運行相應實例并親自觀察一下結果便知。以下是您可以進一步研究本文相關內容可參考的資料:
- 高斯潑濺——使用自定義CUDA內核的官方實現;
- nerfstudio框架——它提供了高斯潑濺算法支持。這是一個最初專門用于NeRF類似模型的框架,但自2023年12月以來,它也支持高斯潑濺;
- threestudio-3dgs——另一個跨模型框架threestudio的擴展。如果你對基于提示詞生成3D模型感興趣,而不是學習現有的圖像集,那么你應該使用一下這個擴展;
- UnityGussianSplatting——如果你喜歡Unity,你可以將一個經過訓練的模型移植到這個插件中進行可視化;
- gsplat——一個CUDA加速高斯光柵化的庫,從nerfstudio分支出來。它可以用于獨立的基于Torch框架的項目,作為潑濺的可微分模塊。
鳴謝
這篇博客文章是基于Tali Dekel博士在實驗室的一次小組會議。特別感謝Michal Geyer參與論文的討論,還感謝引文4的作者對高斯潑濺的系統總結。
參考文獻
- Kerbl, B., Kopanas, G., Leimkühler, T., & Drettakis, G. (2023)。3D Gaussian Splatting for Real-Time Radiance Field Rendering(https://arxiv.org/abs/2308.04079),SIGGRAPH 2023。
- Mildenhall, B., Srinivasan, P. P., Tancik, M., Barron, J. T., Ramamoorthi, R., & Ng, R. (2020)。NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis(https://arxiv.org/abs/2003.08934)。ECCV 2020。
- Zwicker, M., Pfister, H., van Baar, J., & Gross, M. (2001)。Surface Splatting(https://www.cs.umd.edu/~zwicker/publications/SurfaceSplatting-SIG01.pdf。 SIGGRAPH 2001。
- Luiten, J., Kopanas, G., Leibe, B., & Ramanan, D. (2023)。Dynamic 3D Gaussians: Tracking by Persistent Dynamic View Synthesis(https://arxiv.org/abs/2308.09713)。International Conference on 3D Vision。
- Zwicker, M., Pfister, H., van Baar, J., & Gross, M. (2001)。EWA Volume Splatting(https://www.cs.umd.edu/~zwicker/publications/EWAVolumeSplatting-VIS01.pdf)。IEEE Visualization 2001。
- Yu, A., Fridovich-Keil, S., Tancik, M., Chen, Q., Recht, B., & Kanazawa, A. (2023)。Plenoxels: Radiance Fields without Neural Networks(https://arxiv.org/abs/2112.05131)。CVPR 2022。
譯者介紹
朱先忠,51CTO社區編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。
原文標題:A Comprehensive Overview of Gaussian Splatting,作者:Kate Yurkova