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