IV. Mip-NeRF

7hu95b發表於2024-05-28

Mip-NeRF演算法思想。

Paper explanation Mip-NeRF360 and BlockNeRF

一、NeRF 的缺點

所有采樣點都是:光心+畫素中心的射線確定的,如果給定的影像解析度比較低,那麼每個畫素會很大,中心點是不足以代表整個畫素的顏色的;這會導致 NeRF 鋸齒化太嚴重的問題(邊緣不是直接從白到黑,而是慢慢漸變)。anti-aliasing

二、Mip-NeRF 的主要創新點

正方形寫程式碼不好寫,所以把畫素作為一個圓形。那麼就從取樣點變成了介於兩個取樣圓形之間的錐臺(frustums);為了加速計算,內部使用高斯分佈進行模擬,作為 \(c_i\)\(\sigma_i\) 的值。
5f0c4c36dab7730f81cce910979ff544.png

除了錐臺這個方法外,還有種 sample per pixel 方法,也就是一個畫素取很多的點進行 ray tracing 取樣。效果肯定好,但是計算量翻倍太高,而錐臺這個方法平衡了效果和計算量。

一個錐臺中,所有 3D 點的 positional encoding 的結果,求期望後,作為 MLP 函式的輸入。而且這個結果是和物理上的簡諧運動相關。
b96b156a031831145b54e5752856ea66.png
當施加外力後,最後的結果有個衰減項:\(e^{-x}\)

只在一個尺度下訓練,可以同時在最大、最小尺度都取得很好的效果。

三、Mip-NeRF360

Mip-NeRF360

沒法把 Mip-NeRF 的取樣方式直接套用在 360° 上:Mip-NeRF 中物體距離相機的距離是大致一樣,所以可以控制取樣點的範圍,但是 360° 引入了很遠的背景,但我們不知道背景的距離,並且也不能把 bound 設為一個很大的值。

創新一:
8be4527d09e64d3a1c1a93dac811d8e0.png
把超出一定範圍的高斯分佈(橢圓形表示)進行壓縮,保證它們在指定半徑內部,雖然形狀不同,但仍保有原來的資訊,不會影響最後的渲染。

創新二:取樣點的取法不同:
20535caca2a5b1c226298d0df4f48dd7.png
原來的 NeRF 進行了兩段式取樣,並且 MLP 是 8 層,同時得到顏色和密度;而 Mip-NeRF 使用改良的 4 層 MLP 只得到 \(\sigma\) 的分佈,加快這個過程。

創新三:讓 \(\sigma\) 分佈趨近於 uni-model(只有一個高點)這樣的分佈。
b651c1422822b0ca2fefd56df418440f.png

四、Block NeRF

範圍太大了,沒法用同一個 DNN 進行訓練,人為切分成多個 Block,以某個點為圓心的圓。
8eeefdf1770f31f99f956bb89c44be23.png

重疊區域,引入了 visualbility 圖,確定該相信哪張影像。

白天-黑夜的訓練:引入 NeRF in the wild 的思路,引入了 appearence embeding 向量,控制輸出白天 or 黑夜的結果。

位置太大,導致 colmap 估計的位姿不準,導致銜接處有割裂感。除了訓練顏色和密度外,還會訓練位姿,使其更準確。

這個演算法沒有提供 Depth 圖,可能並不能證明真正學習到了深度,只是單純的重現了圖片。