網(wǎng)站開發(fā) 外包空心cba最新排名
三維高斯…噴噴
\, 3D Gaussian Splatting,下文簡(jiǎn)稱3DGS,是好一段時(shí)間以來在三維內(nèi)容創(chuàng)作和三維重建領(lǐng)域比較有熱度的一項(xiàng)技術(shù)。
它屬于基于圖像的三維重建方法,意思就是你對(duì)現(xiàn)實(shí)物體或者場(chǎng)景拍照片,就能給你訓(xùn)練成一個(gè)場(chǎng)景模型,能夠被渲染出來給你看。
它產(chǎn)生的模型可以作為三維內(nèi)容創(chuàng)作的資產(chǎn),什么意思呢,就是你可以搞一點(diǎn)視頻或者很多圖片作為輸入,丟進(jìn)什么應(yīng)用等一會(huì)就變成一個(gè)3DGS,最后過幾個(gè)插件就可以拖進(jìn)大家最愛的blender/ue/unity里面用啦。
所謂的輻射場(chǎng)方法意思就是它們會(huì)存一些輻射度(radiance),類似于存儲(chǔ)你位于某個(gè)地點(diǎn)、從某個(gè)視角、看場(chǎng)景里面的各個(gè)點(diǎn)發(fā)出的光的屬性。這些方法一般基于體渲染、光線步進(jìn)(Ray Marching)或者光線追蹤(Ray Tracing),得到的重建結(jié)果模型自然屬于一種獨(dú)特的格式。雖然說還是比較方便兼容真實(shí)感渲染(PBR)的,就像houdini里面的SDF、VDB,都是根據(jù)體積組織的……不過萬一如果想要變成有mesh那類表面建模的:那就還需要相當(dāng)多的額外工作(Sugar、此外DreamGaussian也有一個(gè)小工具)
最新的一些工作例如4DGS、4K4D甚至可以把視頻(連續(xù)圖像序列)重建成動(dòng)態(tài)場(chǎng)景,就是對(duì)于動(dòng)態(tài)場(chǎng)景的修改暫時(shí)可能比較尷尬。GS的小物體比較有優(yōu)勢(shì),靜態(tài)大場(chǎng)景看起來比較捉急,但是4D的工作同向?qū)Ρ饶壳翱雌饋頃?huì)比較好看。
自然還有GS進(jìn)SLAM的工作(GS-SLAM、SplaTAM),就不多嘴了。
先質(zhì)疑再質(zhì)疑
俗話說,demo都是騙人的 。上圖只是相對(duì)第一張圖稍微往右上轉(zhuǎn)了一點(diǎn)點(diǎn),把焦點(diǎn)從桌子轉(zhuǎn)到背景物件,有點(diǎn)難看吧。當(dāng)然如果增加訓(xùn)練步數(shù)和圖片數(shù)量能好看一點(diǎn),不過缺陷確實(shí)是存在的。隨便抓一個(gè)3DGS的演示基本都能看到這個(gè)問題,只要你不是站在被訓(xùn)練到的視角,那么你往背景看大概率就會(huì)出現(xiàn)如上圖所示的破洞。然而你拍場(chǎng)景的時(shí)候會(huì)對(duì)著墻角的雜草全方位覆蓋嗎?
如果你往被遮蓋的地方、或者圖上這種地方跑近了,你就會(huì)看到糊糊的Gaussian Splats。
如果你想要從3DGS得到一個(gè)完整的、有精細(xì)材質(zhì)的、甚至能估計(jì)碰撞體積的物體,就需要首先保證那個(gè)物體不能動(dòng)、其次從各個(gè)角度多拍點(diǎn)圖(如果你有三十萬相機(jī)能夠同時(shí)從各個(gè)角度拍完也行吧)。對(duì)于大場(chǎng)景來說,這種要求就有點(diǎn)嚴(yán)苛了,結(jié)果就是稍微遠(yuǎn)一點(diǎn)、幾米開外的地方都不能細(xì)看。
那么為啥會(huì)破洞呢?我們觀察這個(gè)例子
上面是3DGS、下面是點(diǎn)云。這兩幅圖照樣是在角落,那個(gè)桌子附近點(diǎn)特別多的。呃,當(dāng)然點(diǎn)云初始化來自于NeRF360V2 dataset,其實(shí)跟他一開始大差不差,這也是我們親愛的3DGS原論文里面指出故意的。
你可以簡(jiǎn)單地把3DGS理解成一種基于好多個(gè)點(diǎn)(點(diǎn)云)的結(jié)構(gòu),每個(gè)點(diǎn)在渲染的時(shí)候會(huì)變成一個(gè)從各個(gè)角度看可以有不同光澤的一坨球面高斯splat,形似橢球,上面的顏色是一個(gè)橢球面上的關(guān)于極坐標(biāo)角度的函數(shù),那不管是分段線性插值還是怎么的總要想個(gè)辦法近似吧,GS就是用球諧函數(shù)(圖是形似原子軌道,實(shí)際上還是球面上的函數(shù),極坐標(biāo)半徑是指那個(gè)角度上球諧函數(shù)值大小)作為基函數(shù),組合出一個(gè)比較豐富的函數(shù),拉一拉變成橢圓。雖然在訓(xùn)練和優(yōu)化的過程中這些橢圓的位置、尺寸朝向和圓潤(rùn)程度、不同方向上輻射折射反射出來的顏色等等(多元正態(tài)分布的均值、協(xié)方差、球面高斯的球諧系數(shù))可以有一定變化,但是假如一開始點(diǎn)沒安放好、分布相當(dāng)不均勻,那就會(huì)四處破大洞了。
呃呃。雖然破洞,還是有不少優(yōu)點(diǎn)。
表現(xiàn)上來說就和一般NeRF類似,著色還是相當(dāng)真實(shí)的(可以補(bǔ)光,不好把場(chǎng)景本來有的光去掉(relighting));另外因?yàn)槭前研畔⒋嬖邳c(diǎn)里面、而不是像NeRF那樣跟你的視線強(qiáng)相關(guān),總的來說多個(gè)3DGS可以方便地合并到一起。
從效率來說、一個(gè)是煉起來不算龜速,另一個(gè)是渲染快。上面那個(gè)小花園拿A5k跑大概一小時(shí)能有好幾萬steps(參考:論文里面拿來?yè)孲OTA用的是5k/7k/30k iters);渲染的時(shí)候能做到實(shí)時(shí)的,20系以上跑起來可以有一百到幾百fps。
順帶一提一個(gè)3DGS一般是1GB起步。這方面也有能縮到1/15的工作。
咋辦啊?
\, 3DGS的結(jié)果有時(shí)候看起來不理想,主要是那些位置本身并沒有充分的信息。哪怕有,注意到直接對(duì)比渲染結(jié)果和ground truth圖像的優(yōu)化目標(biāo)函數(shù)又不能很好地反應(yīng)三維重建的質(zhì)量和真實(shí)度,結(jié)果就是你從訓(xùn)練的時(shí)候相機(jī)的位置和姿態(tài)看過去它能擬合,結(jié)果挪動(dòng)一下看見面前的splats馬上偏離位置四處漏風(fēng)??紤]到真實(shí)世界各種經(jīng)驗(yàn)和物理先驗(yàn),例如局部一般會(huì)有比較重復(fù)自相似的樣式等等,或許能有幫助。
更加NeRF的Plenoctrees→Plenoxels幾乎可以說是3DGS的前身,之前許多工作其實(shí)也是強(qiáng)相關(guān)的,可以作為參考(就像Mip-splatting干的那樣)。
NeRF的時(shí)候一種思路是提出新的有關(guān)不確定性的量度(Bayes’ Rays),一種思路是利用真實(shí)世界信息來補(bǔ)全那些不確定的部分(Nerfbusters)。比如利用Segment Anything、利用3D Diffusion、配合深度等等(SparseGS)……反正能保證渲染實(shí)時(shí)就挺好的。
另外GS雖然又獨(dú)創(chuàng)又高效、不過在諸多NeRF類方法之中,其他方法在精度方面也還是很有價(jià)值的,而且有相當(dāng)一部分還能實(shí)現(xiàn)實(shí)時(shí)渲染。
順帶一提,如果你拍的時(shí)候拍太久了,環(huán)境光變化比較大;或者在涉及尤其是大面積陰影的情況下,呃,想想就知道會(huì)有麻煩。拍得充分一點(diǎn),不然會(huì)起黑霧的。自己拍著玩還可能要小心鏡頭光暈。
能講講原理嗎?
, , , 講完啦!想看定義看公式聽名詞還是看代碼啊?
3DGS整個(gè)過程主要包括從運(yùn)動(dòng)結(jié)構(gòu)恢復(fù)(SfM)得到點(diǎn)云、通過渲染得到loss再反向傳播訓(xùn)練其各點(diǎn)上球面高斯各項(xiàng)參數(shù)(它的位置都是比較清楚的,方便sort)。因?yàn)閟plat除了是各向異性之外基本可以類比一堆堆物理世界的粒子模型、有輻照度和各向異性顏色、有一定的不透明度以及一定的透光度,多個(gè)splat就要α-blending。訓(xùn)練的時(shí)候要把渲染結(jié)果跟ground truth比出loss,因?yàn)殇秩具^程是視野/視錐范圍內(nèi)部分點(diǎn)云各個(gè)點(diǎn)上根據(jù)存的系數(shù)得到3dsplat再被rasterize(三維正態(tài)分布沿一維積分(或者說求邊緣分布)得到二維,alpha-blending到你的screen uv上光柵化),就能順著或者逆著渲染過程變成圖像,這樣就有forward跟backward,順便還可以做點(diǎn)小并行。得益于它的splats可以排序,backward的時(shí)候alpha blending的逆過程是比較直接可行的。光柵化時(shí)還希望在經(jīng)過透視變換的時(shí)候splat不會(huì)被扭曲變形,要把變換矩陣近似一下。
3DGS的split clone prune有點(diǎn)被逼的,不過既然約等于一個(gè)個(gè)橢球球那也確實(shí)有一點(diǎn)難搞,不像NeRF那樣隱式了根本操心不了這些問題。4DGS里面專門關(guān)于位置做了點(diǎn)工作,如果能夠減輕對(duì)可能不太靠譜的SfM的依賴或許會(huì)更好一點(diǎn),像COLMAP-free 3DGS等等。PAPR里面也指出SfM不給力的情況下,對(duì)于clone的情況因?yàn)樘荻炔粚?duì)頭,有的點(diǎn)如果一開始就離splat遠(yuǎn),最后也幾乎不可能被照顧到。此外,split clone的方式面對(duì)紋理上的精細(xì)細(xì)節(jié)也比較乏力。
此外,輸入(多個(gè))連續(xù)圖像序列,一開始就重建出動(dòng)態(tài)場(chǎng)景表示,有需要再截取某一幀或許不失為一種選擇,也有機(jī)會(huì)利用其比較充分的信息讓那一幀的狀態(tài)更確定、說不定還能做一些物理模擬等等工作對(duì)比loss。