萬萬沒想到,把照片變 3D 這件事,離了神經(jīng)網(wǎng)絡(luò)也是這般絲滑。
而在此之前,新視角合成這方面的“大牛”,是近兩年大火的 NeRF (神經(jīng)輻射場)。它是一個簡單的全連接神經(jīng)網(wǎng)絡(luò),使用 2D 圖像的信息作為訓(xùn)練數(shù)據(jù),還原擁有體積的 3D 場景。
但最近,來自伯克利大學(xué)的研究人員提出了一個叫做 Plenoxels 的方法。不需要神經(jīng)網(wǎng)絡(luò),僅僅通過梯度下降和正則化便實(shí)現(xiàn)了同樣的效果,而且速度還快了 100 倍!那么他們是如何做到這點(diǎn)的呢?
由 NeRF 到 Plenoxels 的進(jìn)化
為了幫助大家理解 Plenoxels,我們先來簡單介紹一下 NeRF 模型。
要準(zhǔn)備 NeRF 的數(shù)據(jù),我們首先需要一部相機(jī)。
拍了很多張各個角度的照片后,沿相機(jī)射線將每一張 2D 圖片的坐標(biāo)與視圖方向構(gòu)成一個 5D 向量 (x, y, z, θ, φ)作為 mlp (多層全連接神經(jīng)網(wǎng)絡(luò))的輸入。
我們從圖 (b) 上可以看到,射線上的點(diǎn)有了顏色,每點(diǎn)的顏色 c = (r, g, b)和密度(σ)就是輸出向量。接著 NeRF 使用體積渲染技術(shù)將得到的顏色與密度進(jìn)行 3D 渲染。
由于渲染函數(shù)是可導(dǎo)的,我們可以最小化合成效果與實(shí)際效果的誤差,從而進(jìn)行神經(jīng)網(wǎng)絡(luò)參數(shù)的優(yōu)化。其中 mlp 使用的參數(shù)多可達(dá)到 5MB,實(shí)際訓(xùn)練起來就會發(fā)現(xiàn)訓(xùn)練時間十分漫長,通常要 1-4 天。這個速度與 Plenoxels 的 11 分鐘相比確實(shí)是無法接受的。
2D 圖片變 3D,聽起來不是個小工程,Plenoxels 不用神經(jīng)網(wǎng)絡(luò)是如何實(shí)現(xiàn)的呢?其實(shí)并不復(fù)雜。
Plenoxels 發(fā)現(xiàn) NeRF 成功的秘訣其實(shí)是它的體積渲染方程,與其最耗時的神經(jīng)網(wǎng)絡(luò)關(guān)系不大。那么你一定會好奇這個體積渲染方程究竟是何方神圣,我們就先來看一下。
σi 代表不透明度,ci 代表顏色,δi 代表距離。Ti 代表有多少光經(jīng)過射線上的點(diǎn) i,是通過密度和距離計算的。這個體積渲染方程其實(shí)就是將射線上每個點(diǎn)的顏色,不透明度,光,還有距離進(jìn)行了一個整合處理。
體積渲染方程介紹過了,那么不需要神經(jīng)網(wǎng)絡(luò)的 Plenoxels 是如何表示圖片的呢?
Plenoxels 首先重建了一個稀疏的體素表格,每個被占用的體素都帶有不透明度和球諧系數(shù)。
我們的顏色信息就存儲在這些球諧系數(shù)中,每個顏色通道需要 9 個系數(shù)表示,一共有三個顏色,那么每個體素就需要 27 個球諧系數(shù)來表示它的顏色。
相機(jī)射線經(jīng)過的每個點(diǎn)的顏色和不透明度,就是通過其最近處的 8 個體素的三線性插值計算的。接著與 NeRF 一樣,使用體積渲染技術(shù)將得到的顏色與不透明度進(jìn)行 3D 渲染。
Plenoxels 通過對渲染的像素的平均平方誤差 (MSE)進(jìn)行最小化,來優(yōu)化體素的不透明度和球諧系數(shù),并且使用 TV 正則化幫助消除噪聲。
我們可以看出,是否使用 TV 正則化的效果區(qū)別還是很大的!
提速 100 倍,僅需 11 分鐘
我們用最直觀的方法對比一下兩個模型速度上的差距。
看到了嗎,只用幾秒 Plenoxels 就可以達(dá)到一個比較清晰的效果,而 NeRF 只有一個模糊的影子。
同樣是單個場景,NeRF 使用型號為 v100 的單個 GPU 訓(xùn)練需要耗時 1-2 天,而 Plenoxels 使用單個 GPU 通常只需要 11 分鐘。
這時有一個問題一定縈繞在你的腦海里,速度提升了這么多,效果真的不會受影響嗎?
空口無憑,我們還是要用數(shù)據(jù)說話。
PSNR (峰值信噪比):是最普遍,最廣泛使用的評鑒畫質(zhì)的客觀量測法,PSNR 值越大,就代表失真越少。
SSIM (結(jié)構(gòu)相似性):衡量實(shí)際圖像和合成圖像的相似度,當(dāng)兩張圖像一模一樣時,SSIM 的值等于 1。
LPIPS (學(xué)習(xí)感知圖像塊相似度):用于度量實(shí)際圖像和合成圖像之間的差別,值越低代表圖片越相似。
可以看到 Plenoxels 對比其他模型的表現(xiàn)不說樣樣最好,但也絕不落后他人,關(guān)鍵在于它的速度整整快了兩個數(shù)量級!
正因?yàn)?Plenoxels 速度上的大幅提升,使得一些目前處于瓶頸的下游應(yīng)用變得可能,例如多次反射照明 (multi-bounce lighting)和大型場景的 3D 建模 (3D generative models)。
如果能在相機(jī)和體素散列上進(jìn)行有效優(yōu)化,模型甚至可以讓端到端三維重建成為擁有 pipeline 的實(shí)際應(yīng)用。
相信 Plenoxels 的潛力不僅于此,讓我們一起期待它落地后的成果吧!
UC 伯克利本科生一作
效果強(qiáng)勁的 Plenoxels 來自 UC 伯克利的學(xué)生團(tuán)隊(duì),一作 Alex Yu 還是一名本科生。在大學(xué)里,他不僅同時學(xué)習(xí)計算機(jī)和應(yīng)用數(shù)學(xué)兩門專業(yè),還在伯克利的 BAIR ( Berkeley Artificial Intelligence Research)實(shí)驗(yàn)室進(jìn)行 3D 計算機(jī)視覺的相關(guān)研究。
Alex 計劃在 2022 的秋季開始他的 PhD 旅程,讓人不禁感嘆 AI 界真是人才輩出。在未來經(jīng)過 PhD 的學(xué)習(xí)后,他又會迸發(fā)出怎樣的能量呢,讓我們一起拭目以待吧!
GitHub 代碼開源
目前,Plenoxels 項(xiàng)目的代碼已經(jīng)在 GitHub 上開源。
小伙伴們要注意的是,拍攝照片的時候要盡可能環(huán)繞物體,并且嘗試不同的高度哦。
快來試試效果如何吧!
參考鏈接:
[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
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。