instant-ngp总结
Nerf方法就是經典的隱函數渲染方案。
Nerf的開山之作"Nerf: Representing scenes as neural radiance fields for view synthesis"發表于2020年的eccv上。
Nerf的主要目的:利用已有的大量2D數據作為監督,用已有的2D數據去生成該物體或者場景,新視角下的重建結果。
Nerf 的主要過程就是利用5D向量值函數去擬合整個三維場景的表示。利用
去表示整個場景。
輸入空間中一個點的3D坐標x,以及觀察視角d。生成對應的顏色值C,以及不透明度σ,這也是與現實世界相對應的。
在Nerf的渲染和訓練過程,利用到了volume rendering的思想(如下圖所示)。
如上圖中的藍色點所示,它是從空間中某一像素所發出的一條射線上的點,那么我們根據這個點對應的3D坐標位置與視角d,通過上面的Nerf5D向量值函數,計算出該點對應的顏色值與不透明度。基于這個思想,我們將整條射線上所有點的顏色值與體積密度計算出來。再將整條射線上點的顏色進行積分,那得到的積分值,就是對應像素點的顏色值。這實際上也是volume rendering的思想。
在理論上,這個積分應該是連續的,不過在實際的渲染或者工程當中,想實現連續的積分不太現實。在這里我們的解決方案就是利用離散積分的方式,對射線上的點進行均勻采樣,利用采樣點的離散的積分和,來模擬上面的過程。
那在實際的train或者渲染過程,也是上面剛才說到的,利用離散積分的方式,對空間中的點進行采樣,然后渲染出對應視角的顏色值,將其與GT做比較,利用誤差去優化網絡。
那其實可以法線,在這個過程中會有一個如何對空間中點采樣的策略問題。因為如果采樣點過多,那計算效率就會降低,那如果采樣點過少,又無法很好地近似整個場景的三維表示。怎么設置采樣策略就比較重要了。
在這里我們有一個非常樸素的想法,對于我們的重建結果或者渲染結果而言,并不是空間中所有的點都重要,對于空間中那些空曠的點,它對于最終的重建結構影響不是很大。真正起作用的點是物體所在的區域,它們才對真正的重建結果起作用。那么我們在采樣的過程中,對于物體在的區域多采樣,對于空曠的區域少采樣,用這種分層采樣的方式去優化采樣的策略。
NSVF
對于如何優化Nerf的時間上的效率問題,如何做空間中點的采樣,2020年的另一篇工作NSVF也提出了一種解決思路。
在NSVF中,作者將整個三維空間用體素分割出來,在采樣的過程中只對空間中有意義的點進行采樣,對于沒有意義的空的區域,那完全拋棄掉。然后再逐級的對體素進行精細化操作,在這個過程每個體素塊的采樣率不變,但是隨著體素塊變小,會對場景中細節區域的學習會更多。
總結:用體素表達三維空間,自剪枝的part,逐級精細化。
像剛才我們講到,為了優化Nerf的訓練速度、渲染速度等等。研究人員嘗試對如何采樣這部分進行設計和優化,Nerf最開始的采樣方案是分層采樣的策略,后來的NSVF提出的,基于體素的多分辨率采樣+自剪枝的策略,也多速度的問題做了一定程度的優化,但是這個優化是針對特殊task的,所以不具備通用性。
那么為了提出一種通用的加速方案,能夠對不同的任務進行加速,這也是這篇論文的目的。
instant-NGP
這篇論文的主要核心點是,提出了一種多分辨率哈希編碼的通用方案,對不同的任務進行加速處理。
對于傳統的深度學習模型,我們可以用m(x,Φ)去表示它,這里的Φ就是我們希望網絡學習到的權重。但是在instant-ngp中,作者還通過這個函數y=enc(x,𝜃)對輸入x再進行編碼操作,獲得y,將這個y輸入到我們的網絡中去加速我們特定任務的速度和擬合質量。我認為對于x再編碼的操作,就是instant-ngp這么快的核心。在這里的話,我認為這個過程有些像,復合函數的味道。
總結:instant-ngp不但有可訓練的網絡權重Φ,也有編碼參數𝜃。
同時在這個過程中,作者將這些參數分為L層,每層包含了T個維度為F的特征向量。L對應的是特定分辨率體素的編碼層,也做為一個超參數,在這里被設置為16。也就是體素分辨率的變化分為16級。其中每一層的變化由Nl去調整。
在這里我的理解是,分級操作實際是,假設有一個三維坐標點,它是float型,那通過分級操作,對這個float型坐標點進行向上取整或向下取整,使其變為一個整數型值。
后面的話,它通過一個空間哈希函數,對特征向量進行調整,分配到不同的哈希表中去。
在這里有一個問題,其實可以發現,instant-ngp
總結
以上是生活随笔為你收集整理的instant-ngp总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【小月电子】ALTERA FPGA开发板
- 下一篇: DS博客作业06——图