NeRF开篇
NeRF、NeRF SLAM、Active SLAM系列
本人最近粗略看了一些基于NeRF的工作,原本學(xué)習(xí)的是SLAM方向,發(fā)現(xiàn)有一些NeRF和SLAM結(jié)合的工作,并且由于NeRF的地圖效果實(shí)在給人較好的可視感受,故想要研究一番,并且上研后組內(nèi)的方向有想向Active SLAM方面做,故也有所涉及。
* 以下觀點(diǎn)都是我個(gè)人的見解,不正確指出望能批評(píng)指正,也是一個(gè)獲得反饋學(xué)習(xí)的過程
NeRF、SLAM簡述
首先在分析主流工作之前先簡述一下NeRF、SLAM的概念。
SLAM
?SLAM(Simultaneous Localization And Mapping,同時(shí)定位與地圖構(gòu)建),正如字面意思,能夠同時(shí)完成自身定位和地圖構(gòu)建,這里我們主語可以選用機(jī)器人,就是一個(gè)機(jī)器人如何在未知的環(huán)境中通過傳感器的輸入完成定位、建圖,并且兩者是相輔相成的,精確的定位能夠保證地圖的優(yōu)良性,而反之地圖的完美又能夠使得傳感器數(shù)據(jù)的匹配更加準(zhǔn)確從而獲得更加精確的定位。
?在我剛上本科的時(shí)候好像還是一個(gè)比較小眾的方向,但是最近幾年乘著自動(dòng)駕駛的快車已經(jīng)飛速開卷了,但實(shí)際上大家還是在卷精度,真正落地的應(yīng)用,可能還是掃地機(jī)器人、餐廳送餐等,總體來說在實(shí)現(xiàn)真正的自動(dòng)駕駛、取代外賣物流等工作還有很長一段路要走,倒是礦廠自動(dòng)駕駛挖掘機(jī)落地還比較快(主要是日常生活環(huán)境太復(fù)雜了,主要是人)。
NeRF
NeRF(Neural Radiance Field,神經(jīng)輻射場(chǎng))是一種以基于光場(chǎng)理論的環(huán)境隱式表達(dá)。
因?yàn)镹eRF的輸出不是常規(guī)SLAM中的地圖,二維的Cartographer生成的是二維柵格地圖、ALOAM等激光SLAM生成的是點(diǎn)云地圖、ORB-SLAM2生成稀疏點(diǎn)云、Droid SLAM稠密點(diǎn)云(基于學(xué)習(xí)的端到端,吊打ORBSLAM3,這就是4張3090的魅力嗎,但是建的圖也驚艷到我了)[藍(lán)色直接跳轉(zhuǎn)Github]
好的,撤回來說NeRF,NeRF的輸入是相機(jī)的世界坐標(biāo) x,y,zx,y,zx,y,z,朝向 θ\thetaθ、?\phi?,共5D輸入,然后輸出是該個(gè)相機(jī)位姿下的圖像,怎么樣是不是很抽象?所以并沒有所謂的幾何空間點(diǎn)的表達(dá),一切都隱式地在神經(jīng)網(wǎng)絡(luò)里面了。
輻射場(chǎng)這里指的是光輻射,之前所過NeRF是基于光場(chǎng)利用的,當(dāng)光線和空間中的粒子接觸的時(shí)候總會(huì)有一部分被吸收、一部分被反射、一部分是物體自己發(fā)出的輻射(這里我可能不對(duì)光和輻射進(jìn)行嚴(yán)格區(qū)別),其中概念也和計(jì)算機(jī)圖形學(xué)中輻射場(chǎng)立體渲染有關(guān),而NeRF則是一種簡化的表達(dá),將空間中的任意一個(gè)點(diǎn)都給定一個(gè)密度值density 記 σ\sigmaσ,它也有自己的顏色color 記 c=(r,g,b)c=(r,g,b)c=(r,g,b)。
然后依照相機(jī)模型,我們可以直觀理解一下相機(jī)成像,是光線照射到相機(jī)成像CMOS/CCD(感光元器件),然后在生成像素。因此正是知道了相機(jī)的位置和朝向,從而通過針孔相機(jī)模型其實(shí)知道每個(gè)像素對(duì)應(yīng)于空間中的一條射線的位置,這樣就可以通過將射線上的點(diǎn)密度值density
、顏色值color ,進(jìn)行積分(離散就是累加)得到像素的值,從而生成一張完整的圖像,而通過對(duì)密度值density進(jìn)行積分(求和)就可以得到深度圖了。
不搞個(gè)視頻我怕你們不學(xué)了
NeRF的基礎(chǔ)學(xué)習(xí)
接下來是我在從零了解NeRF過程中收集的一些學(xué)習(xí)資料,希望能夠給大家?guī)硪恍椭?#xff0c;我也剛開始了解這個(gè)方向幾個(gè)星期,希望不要誤人子弟,哈哈哈
原生NeRF
NeRF的誕生就是ECCV 2020的一篇Paper吧。
- 新世界的大門:http://arxiv.org/abs/2003.08934
- Github:https://github.com/bmild/nerf
- Pytorch版本:https://github.com/yenchenlin/nerf-pytorch
教程資料
-
chi80講述NeRF原理,視頻分辨率很低但是講的還ok
-
完整材料
-
知乎上的講的還不錯(cuò)
-
NeRF參數(shù)講解
-
體渲染
代碼實(shí)踐
Tutorial for NeRF
地址:Medium(不登錄反而能看)
個(gè)人記錄針對(duì)上面教程的記錄:
?marching cubes是一個(gè)生成3D mesh的算法,從NeRF網(wǎng)絡(luò)恢復(fù)3D模型所用的方法
?3D數(shù)據(jù)的表達(dá)形式:從3D voxels到點(diǎn)云到SDF
?傳統(tǒng)三維構(gòu)建的共同缺點(diǎn):
???相機(jī):耗時(shí)和需要大量數(shù)據(jù)
???雷達(dá):昂貴
???人工建模
???對(duì)于高反射物體、“網(wǎng)狀”物體,如灌木叢和鏈狀柵欄,或透明物體,都不適合大規(guī)模掃描。
???影響模型精度:stair-stepping effects and driff
概念
?光場(chǎng),其用不同方向觀測(cè)角度下的光線掃描三維空間中的每個(gè)點(diǎn),分別有五個(gè)變量x=(x,y,z)x =(x,y,z)x=(x,y,z)、d=(θ,?)d=(\theta ,\phi)d=(θ,?)(分別是空間中點(diǎn)的三維坐標(biāo)和光線的角度)
為什么只有兩個(gè)變量,因?yàn)樵诳臻g中一個(gè)點(diǎn)定下來之后,就是經(jīng)緯度的問題了,不像是描述位姿。
?NeRF基于光場(chǎng)(light/radiance fields)。NeRF則是構(gòu)建從光場(chǎng)的5D空間描述,到4D空間的映射(顏色,強(qiáng)度density),c=(R,G,B),σc=(R,G,B),\sigmac=(R,G,B),σ。density可以理解為光線在五維空間中被截?cái)嗟膌ikehood,比如遮擋。
NeRF的標(biāo)準(zhǔn)范式:F:(x,d)→(c,σ)F:(x,d) \rightarrow (c,\sigma)F:(x,d)→(c,σ)
?在生成式場(chǎng)景重建課題(generalized scene reconstruction)中,給定相機(jī)位姿和圖像,還有許多SFM系列算法: COLMAP, Agisoft Metashape, Reality Capture, or Meshroom
NeRF的幾個(gè)過程
數(shù)據(jù)處理
?通過給定位姿和圖像,構(gòu)建射線,通過對(duì)射線進(jìn)行采樣生成數(shù)據(jù)點(diǎn),采用Coarse-to-fine的方式,先均勻分段,然后對(duì)每個(gè)段進(jìn)行隨機(jī)采樣,這樣就用 r=o+tdr = o + tdr=o+td 來表示每一個(gè)采樣點(diǎn),就是 r=(x,y,z)r = (x,y,z)r=(x,y,z),其中方向 d=(θ,?)d=(\theta ,\phi)d=(θ,?) 就是每個(gè)相機(jī)坐標(biāo)的原點(diǎn)和 vc=[0,0,?1]v_c=[0,0,-1]vc?=[0,0,?1] 經(jīng)過 TwcT_{wc}Twc? 轉(zhuǎn)到世界坐標(biāo)下,注意這里不需要加上 vov_ovo? ,因?yàn)橹皇谴硪粋€(gè)朝向
Axes3D.quiver(X,Y,Z,U,V,W,/,length=1,…)
X,Y,Z是箭頭的起點(diǎn)坐標(biāo),U,V,V是箭頭的方向組成
注意OpenGL和COLMAP數(shù)據(jù)之間的坐標(biāo)系問題
https://blog.csdn.net/OrdinaryMatthew/article/details/126670351
分層采樣:
?是對(duì)每個(gè)均分的bin區(qū)間通過均勻分布的形式進(jìn)行采樣,這里好像還可以通過逆深度進(jìn)行表示,主要是在射線中,near到far進(jìn)行分段
模型構(gòu)建
?通過采樣獲得初始數(shù)據(jù)后,就利用NeRF來構(gòu)建5D到4D的映射,網(wǎng)絡(luò)架構(gòu)如下:
注意這里的PositionEncoder不僅僅是60,還會(huì)包含原來的3各個(gè)維度,即L=10L=10L=10的時(shí)候(cos,sin),編碼后維度:3*20+3
○ PositionEncoding:
NeRF的優(yōu)勢(shì)
?● 直接數(shù)據(jù)驅(qū)動(dòng)
?● 場(chǎng)景的連續(xù)表達(dá)
?● 隱式考慮物體特性:specularity高光,roughness粗糙度
?● 隱式表達(dá)光感
A overview of NeRF
不同類型的NeRF工作
?A litany of papers have since sought to expand the functionality of the original with features such as few-shot and one-shot learning[2, 3], support for dynamic scenes[4, 5], generalizing the light field into feature fields[6], learning from uncalibrated image collections from the web[7], combining with LiDAR data[8], large-scale scene representation[9], learning without a neural network[10], and many more. For some great overviews of NeRF research, see this great overview from 2020 and another overview from 2021 both by Frank Dellaert.
?SLAM學(xué)術(shù)界的泰斗,Frank Dallaert(https://dellaert.github.io/),gtsam的作者,也開始轉(zhuǎn)行研究NeRF,可見NeRF的價(jià)值和對(duì)視覺SLAM的意義。Frank大佬寫了一系列NeRF相關(guān)文章的綜述。
?● https://link.zhihu.com/?target=https%3A//dellaert.github.io/NeRF/
?● https://link.zhihu.com/?target=https%3A//dellaert.github.io/NeRF21/
?● https://link.zhihu.com/?target=https%3A//dellaert.github.io/NeRF22/
*上面來源:基于神經(jīng)輻射場(chǎng)的(NeRF-based) SLAM 綜述
第一次先分享這么多吧,后續(xù)還會(huì)單獨(dú)更新一個(gè)專欄,分別對(duì)NeRF的論文進(jìn)行歸納整理
總結(jié)
- 上一篇: java的幂等性处理
- 下一篇: 小白也能读懂的 ZigBee 3.0 简