instant-ngp
instant-ngp
instant-ngp是今年NVIDIA在SIGGRAPH 2022中的項目,由于其"5s訓練一個Nerf"的傳奇速度,受到研究人員的關注。下面對其做簡單介紹,也作為自己學習的記錄。
背景
傳統基于全連接的神經網絡已經能解決很多問題,比如MLP結構(PointNet、Nerf等),但是這種全連接的神經網絡在訓練和評估中代價很大。同時在基于深度學習的圖形學任務中,每個工作都針對自己特定的task,設計不同的網絡結構,這樣的缺點是這些方法只限制在特定的任務上,同時這些工作在優化整個網絡的過程中,需要對整個網絡進行優化,這加大了網絡的花費。
方案
作者提出一種基于多分辨率的哈希編碼方案,這個方案與task無關,是一種通用的方案(改方案能用在多種不同任務中),改方案只由參數T和期望的分辨率Nmak配置,實驗結果表明該方案在多項任務上達到了不錯的效果。該方案與任務無關的自適應性和效率的關鍵是哈希表的多分辨率層次結構。
Adaptivity
作者將網格級聯的映射到相應的固定大小的特征向量數組。在粗分辨率下,從網格點到數組條目有一個1:1的映射。在精細分辨率下,數組被視為一個哈希表,并使用空間哈希函數進行索引,其中多個網格點為每個數組條目起別名。
這種哈希碰撞將導致訓練梯度達到平均水平,這意味著最大的梯度(與損失函數最相關的梯度)將占主導地位,因此哈希表將自動對最重要且細節最豐富的部分做優先考慮。同時與之前的工作不同,在instant-ngp的訓練期間不需要對數據結構進行系統性更新。
Efficiency
哈希表的查找是O(1),同時哈希表可以并行的查找。
MultiResolution Hash Encoding
Hash_encoding_parameters table Illustration of the multiresolution hash encoding in 2D一個全連接網絡 m(y;?\phi?),對輸入的y進行編碼y=enc(x;θ\thetaθ),因此在instant-ngp中,既有可訓練的權值參數?\phi?,也有可訓練的編碼參數θ\thetaθ。這些參數被分布為L個層,每層中包含T個維度為F的特征向量。上面的表1為哈希編碼參數,只有哈希表的大小T和期望的分辨率Nmak需要被設置(作為超參數 )。
在這個過程中,每個層是獨立的(如上圖中的紅藍兩層,分別代表不同層級。紅色代表分辨率較高的體素網格、藍色代表分辨率較低的體素網格),同時存儲網格頂點所代表的特征向量,每一層的分辨率是最糙分辨率與最佳分辨率之間的幾何級數。[Nmin,Nmak]。Nmak代表了數據中的最好細節。
由上面的陳述我們知道參數被分為L個層,按照表1給出的超參數可知L被設置為16,即體素的分辨率有16個等級,那么分辨率層級從低到高的變化公式為:
其中b被認為是成長參數,作者將其設置為1.38到2之間。對于L層中的某個層l,輸入的坐標點對應的分辨率為
對于較粗糙的網格,不需要T個參數,它的參數量應該為(N𝑙)d≤T,這樣以來映射就可以保證一對一的關系,對于精細網格,使用空間哈希函數h:Zd→ZT將網格索引到數組。本文中空間哈希函數的定義為
運算符?\bigoplus?表示異或運算,π\piπi表示獨一無二大小的大素數,改計算在每一維產生線性同余排列,以解除維度對哈希值的影響。最后根據x在體素中的相對位置,實現體素內角點特征向量的線性插值,插值的權重為(我猜這里應該代表可視化圖中,線性插值的部分,但還是有些不理解)。
根據以上對哈希編碼的陳述,可以理解這個過程在L層中可以獨立的執行,不會相互干擾。這樣的話每一層的插值向量以及輔助輸入(位置+視角方向)被串聯以產生y,y是由輸入的enc(x;𝜃)到MLP m(y;Φ)。
神經網絡訓練參數
為了優化GPU的緩存,作者逐級的處理對應的哈希表,當處理一批輸入時,首先計算多分辨率哈希編碼的第一級,接著是第二級,依次類推。所以在整個過程中,只有少量的哈希表需要駐留在GPU緩存中,節省了GPU的內存。
問題
- Q1:什么是計算機圖形基元
我的理解就是計算機圖形中的基本元素:像素、線條、特征點等。
- Q2:多個網格點為每條數組條目起別名
我理解這步就是,將多個網格點組成的特征向量,通過哈希函數,映射到對應的哈希表中。
- Q3:下圖的紅藍代表不同尺度,換句話說是將坐標進行縮放,它是怎么縮放的?
我猜測可能的步驟有兩種:
1.將坐標點轉換為一個特征向量,然后在將特征向量簡化
2. 整個空間用體素分隔開,那么對于三維空間中一點用多級的體素塊去表達。用粗糙的體素塊去表達整個空間,學習整個場景的宏觀特征。用精細的體素塊去表達整個空間,學習到場景的精細細節。
- Q4: ? 為什么使用作者提出的空間哈希函數,在每一維產生線性同余排列(可理解),為什么可以解除維度對散列值的影響呢?
- Q5:根據x在體素網格中的相對位置,實現對體素內角點的特征向量線性插值,插值的權重為
那這個權重是怎么計算到的Xl指的是什么?Xl向下取整又指的什么?
- Q6:哈希表這塊怎么訓練,所謂的θ參數是什么
我的理解是,將對應的值先用對應的哈希函數處理,然后再用MLP結構將哈希值映射為一個特征向量。所謂的參數θ就是對哈希值映射的MLP層的權重,與做Nerf處理的MLP結構的權重Φ區分開。
我對這里的理解是:
傳統的神經網絡都是將輸入映射到高維空間,通過神經網絡從數據中擬合特點的規律,實現我們的任務。
神經網絡從根據特定的任務,可以像搭積木一樣,增加或者刪除特定的模塊,去適應對應的任務。但是這種方法的缺陷就是,構建出的特定框架,只能適合特定的任務。
第一句話中,將級聯的網格映射到相應大小的特征向量數組上,在粗分辨率下網格到數組條目的映射是1:1。怎么從網格映射到數組?網格是怎么來的?Nerf中的網格是啥?
第二句話中,在精細分辨率下,數組被視為一個哈希表,并使用空間哈希函數進行索引,其中多個網格點為每個數組條目起別名。多個網格映射到同一個數組理解,但是網格點怎么作為值映射成哈希值?
第三句話,這種哈希碰撞導致碰撞訓練梯度達到平均水平,這意味著最大的梯度——那些與損失函數最相關的梯度——將占主導地位。
第四句話,因此,哈希表自動對具有最重要精細細節的稀疏區域進行優先級。與之前的工作不同,在training期間的任何時候都不需要對數據結構進行結構性更新。這里能理解。
中間劃線的話,怎么把這些參數劃分為L個級別,就是用不同層級分辨率嗎?
怎么對輸入的坐標點X進行縮放
總結
以上是生活随笔為你收集整理的instant-ngp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十九个国内外主流的三维GIS软件
- 下一篇: (转)三维GIS软件十九重唱