函擎 發自 凹非寺
量子位 報道 | 公眾號 QbitAI
萬萬沒想到,把照片變3D這件事,離了神經網路也是這般絲滑。
而在此之前,新視角合成這方面的“大牛”,是近兩年大火的NeRF (神經輻射場)。
它是一個簡單的全連線神經網路,使用2D影象的資訊作為訓練資料,還原擁有體積的3D場景。
但最近,來自伯克利大學的研究人員提出了一個叫做Plenoxels的方法。
不需要神經網路,僅僅透過梯度下降和正則化便實現了同樣的效果,而且速度還快了100倍!
那麼他們是如何做到這點的呢?
由NeRF到Plenoxels的進化
為了幫助大家理解Plenoxels,我們先來簡單介紹一下NeRF模型。
要準備NeRF的資料,我們首先需要一部相機。
拍了很多張各個角度的照片後,沿相機射線將每一張2D圖片的座標與檢視方向構成一個5D向量 (x, y, z, θ, φ)作為mlp (多層全連線神經網路)的輸入。
我們從圖(b)上可以看到,射線上的點有了顏色,每點的顏色c = (r, g, b)和密度(σ)就是輸出向量。
接著NeRF使用體積渲染技術將得到的顏色與密度進行3D渲染。
由於渲染函式是可導的,我們可以最小化合成效果與實際效果的誤差,從而進行神經網路引數的最佳化。
其中mlp使用的引數多可達到5MB,實際訓練起來就會發現訓練時間十分漫長,通常要1-4天。
這個速度與Plenoxels的11分鐘相比確實是無法接受的。
2D圖片變3D,聽起來不是個小工程,Plenoxels不用神經網路是如何實現的呢?其實並不複雜。
Plenoxels發現NeRF成功的秘訣其實是它的體積渲染方程,與其最耗時的神經網路關係不大。
那麼你一定會好奇這個體積渲染方程究竟是何方神聖,我們就先來看一下。
σi代表不透明度,ci代表顏色,δi代表距離。Ti代表有多少光經過射線上的點i,是透過密度和距離計算的。
這個體積渲染方程其實就是將射線上每個點的顏色,不透明度,光,還有距離進行了一個整合處理。
體積渲染方程介紹過了,那麼不需要神經網路的Plenoxels是如何表示圖片的呢?
Plenoxels首先重建了一個稀疏的體素表格,每個被佔用的體素都帶有不透明度和球諧係數。
我們的顏色資訊就儲存在這些球諧係數中,每個顏色通道需要9個係數表示,一共有三個顏色,那麼每個體素就需要27個球諧係數來表示它的顏色。
相機射線經過的每個點的顏色和不透明度,就是透過其最近處的8個體素的三線性插值計算的。
接著與NeRF一樣,使用體積渲染技術將得到的顏色與不透明度進行3D渲染。
Plenoxels透過對渲染的畫素的平均平方誤差 (MSE)進行最小化,來最佳化體素的不透明度和球諧係數,並且使用TV正則化幫助消除噪聲。
我們可以看出,是否使用TV正則化的效果區別還是很大的!
提速100倍,僅需11分鐘
我們用最直觀的方法對比一下兩個模型速度上的差距。
看到了嗎,只用幾秒Plenoxels就可以達到一個比較清晰的效果,而NeRF只有一個模糊的影子。
同樣是單個場景,NeRF使用型號為v100的單個GPU訓練需要耗時1-2天,而Plenoxels使用單個GPU通常只需要11分鐘。
這時有一個問題一定縈繞在你的腦海裡,速度提升了這麼多,效果真的不會受影響嗎?
空口無憑,我們還是要用資料說話。
PSNR (峰值信噪比):是最普遍,最廣泛使用的評鑑畫質的客觀量測法,PSNR值越大,就代表失真越少。
SSIM (結構相似性):衡量實際影象和合成影象的相似度,當兩張影象一模一樣時,SSIM的值等於1。
LPIPS (學習感知影象塊相似度):用於度量實際影象和合成影象之間的差別,值越低代表圖片越相似。
可以看到Plenoxels對比其他模型的表現不說樣樣最好,但也絕不落後他人,關鍵在於它的速度整整快了兩個數量級!
正因為Plenoxels速度上的大幅提升,使得一些目前處於瓶頸的下游應用變得可能,例如多次反射照明 (multi-bounce lighting)和大型場景的3D建模 (3D generative models)。
如果能在相機和體素雜湊上進行有效最佳化,模型甚至可以讓端到端三維重建成為擁有pipeline的實際應用。
相信Plenoxels的潛力不僅於此,讓我們一起期待它落地後的成果吧!
UC伯克利本科生一作
效果強勁的Plenoxels來自UC伯克利的學生團隊,一作Alex Yu還是一名本科生。
在大學裡,他不僅同時學習計算機和應用數學兩門專業,還在伯克利的BAIR ( Berkeley Artificial Intelligence Research)實驗室進行3D計算機視覺的相關研究。
Alex計劃在2022的秋季開始他的PhD旅程,讓人不禁感嘆AI界真是人才輩出。
在未來經過PhD的學習後,他又會迸發出怎樣的能量呢,讓我們一起拭目以待吧!
GitHub程式碼開源
目前,Plenoxels專案的程式碼已經在GitHub上開源。
小夥伴們要注意的是,拍攝照片的時候要儘可能環繞物體,並且嘗試不同的高度哦。
快來試試效果如何吧!
參考連結:
[1]https://alexyu.net/plenoxels/?s=09
[2]https://github.com/sxyu/svox2
[3]https://www.casualganpapers.com/eccv-3d-novel-view-synthesis-differentiable-rendering-implicit-representation/NeRF-explained.html
[4]https://www.casualganpapers.com/nerf-3d-voxels-without-neural-networks/Plenoxels-explained.html
— 完 —
量子位 QbitAI · 頭條號簽約
關注我們,第一時間獲知前沿科技動態