基于深度學(xué)習(xí)的多視三維重建是指,利用神經(jīng)網(wǎng)絡(luò)技術(shù)解決多視立體視覺中的稠密重建問題,即輸入為多視角拍攝的RGB圖像及各個(gè)視角的位姿,輸出為整個(gè)物體或場景的三維點(diǎn)云脂新。傳統(tǒng)的稠密重建方法流程如下,1. 針對每一個(gè)視角做深度估計(jì)粗梭;2. 利用多個(gè)視角的信息對深度進(jìn)行濾波平滑争便;3. 將各個(gè)視角的深度圖融合在一起形成點(diǎn)云。與之對比断医,基于深度學(xué)習(xí)的多視三維重建針對的主要是流程1滞乙,通過深度學(xué)習(xí)的手段來完成單視角的深度估計(jì),其輸入為該視角圖像(reference image)與一系列對應(yīng)參與多視重建的相關(guān)圖像(neighboring/source images)鉴嗤,輸出為該視角的深度圖斩启。這類的網(wǎng)絡(luò)有很多,如MVSNet醉锅,CasMVSNet兔簇,PatchMatchNet等。這里主要記錄一下MVSNet及PatchMatchNet荣挨。
網(wǎng)絡(luò)結(jié)構(gòu)
MVSNet
MVSNet與語義分割網(wǎng)絡(luò)有很多類似的地方男韧,其實(shí)深度估計(jì)問題也可以理解為一個(gè)語義分割問題。我們將可能的深度設(shè)定一個(gè)范圍默垄,并將深度按一定方式劃分成份(一般是按深度的倒數(shù)平均劃分)此虑,對于每個(gè)像素而言,它的深度大致會(huì)有個(gè)取值口锭,網(wǎng)絡(luò)最終輸出來的是這個(gè)取值的概率朦前,最后可以計(jì)算出深度的期望值,即為網(wǎng)絡(luò)推理出來的深度鹃操。
MVSNet主要有幾部分:
特征提染麓纭:通過常用的一些卷積網(wǎng)絡(luò)配置,將輸入的reference image和source image轉(zhuǎn)化成下采樣的feature map荆隘。
-
差異計(jì)算:對于reference image每個(gè)像素恩伺,深度估計(jì)本質(zhì)上是要找到一個(gè)深度,使得它與source image上對應(yīng)的像素在某種維度上差異最小椰拒。
- 給定一個(gè)深度晶渠,假設(shè)該點(diǎn)的法向法向永遠(yuǎn)垂直于相平面,則可以估計(jì)出一個(gè)homography來計(jì)算對應(yīng)點(diǎn)燃观。這里homo的估計(jì)與傳統(tǒng)PatchMatch方法中的類似褒脯,只是把normal方向替換成垂直于相平面的方向,即這里采用的是fronto-parallel window缆毁,而不是slanted window番川。
- 利用這個(gè)homo,可以將source image對應(yīng)的feature map轉(zhuǎn)換到reference image的視角,再將其平均之后與reference的feature map對應(yīng)位置相減颁督,得到一個(gè)描述二者差異的一個(gè)volume践啄。
代價(jià)生成:這一步基本上就是一個(gè)U-Net的配置,作用是把差異的volume轉(zhuǎn)化成深度的概率圖沉御。
深度優(yōu)化:這一步主要是解決卷積以后邊界丟失的問題往核,通過加入原圖(一般而言邊界比較清晰),與深度圖一起形成一個(gè)4通道的volume嚷节,再經(jīng)過幾次卷積以后得到一個(gè)新的深度概率。Loss將考慮Loss0和Loss1的和虎锚。
PatchMatchNet
PatchMatchNet基本上是在利用神經(jīng)網(wǎng)絡(luò)模擬傳統(tǒng)的PatchMatch算法硫痰,其網(wǎng)絡(luò)結(jié)構(gòu)大的模塊有以下幾個(gè)部分:
- 特征生成:利用常用的encoder-decoder的結(jié)構(gòu)生成特征,不同層對應(yīng)了不同分辨率的特征
- PatchMatch:傳統(tǒng)的PatchMatch方法主要有計(jì)算代價(jià)窜护,傳播優(yōu)化效斑,隨機(jī)優(yōu)化等幾步,這里的PatchMatch模塊主要就是模擬這些算法過程
- 多分辨率的級聯(lián):與一些常見的分割網(wǎng)絡(luò)一樣柱徙,先在低分辨率上生成結(jié)果缓屠,再以此為基礎(chǔ)生成高分辨率的結(jié)果,而loss將兼顧各個(gè)分辨率
- 深度優(yōu)化:與MVSNet類似护侮,優(yōu)化邊界
PatchMatch的過程
輸入:每一張image(包括reference和source)都會(huì)生成三個(gè)feature map敌完,大小分別為, , ,分別在不同的stage當(dāng)做輸入羊初;初始深度圖滨溉,stage3來源于隨機(jī)初始化,而其他stage來自于上一stage的結(jié)果长赞;
-
以stage3為例晦攒,介紹整個(gè)過程。
Initialization:初始深度圖為隨機(jī)值得哆,對于每個(gè)像素脯颜,其深度的倒數(shù)在之間均勻分布取個(gè)值,得到大小為的深度圖贩据。
Differentiable warping:對于每個(gè)像素栋操,根據(jù)不同的深度,可以計(jì)算出單應(yīng)變換homo乐设,然后將source image對應(yīng)的feature map變換到reference image的視角讼庇。每一張source image將對應(yīng)得到大小為的warp 特征圖。
Group-wise correlation:對于reference image的一個(gè)像素近尚,給定一個(gè)深度蠕啄,其特征向量,大小為. 而對于source image的同樣像素,其特征向量. 然后我們將分成個(gè)組歼跟,每個(gè)組中有個(gè)特征值和媳,保證. 分塊求向量內(nèi)積,定義.經(jīng)過這個(gè)操作以后哈街,對于每張source image我們將得到大小為的特征圖留瞳。
Conv:把分塊那一維給卷積掉,得到大小為的特征圖骚秦,再附上sigmoid操作她倘,使得特征圖中所有的值變成概率分布.
Maxpooling: 再把深度那一維取最大值,得到大小為的weight圖作箍。
Multiplication: 把上述結(jié)果和Group-wise correlation的結(jié)果進(jìn)行pixel對應(yīng)的相乘硬梁,得到新的特征圖大小為.
Matching cost computation:直接把所有source image得到的上述結(jié)果加在一起,得到新的特征圖(Aggregated matching cost)大小為. 再經(jīng)過 conv去掉分組那一維胞得,得到大小為的特征圖荧止。結(jié)合上幾步來看,其實(shí)就是將各個(gè)source image得到的group correlation做了一個(gè)加權(quán)平均阶剑。
-
Adaptive spatial cost aggregation:對于每個(gè)像素而言跃巡,上面的cost都是單個(gè)像素計(jì)算而來的,考慮類似NCC的計(jì)算牧愁,需要引入一個(gè)局部的鄰域來表達(dá)cost素邪。雖然在計(jì)算feature的時(shí)候引入了CNN,相當(dāng)于已經(jīng)有一定的感受野了递宅,這里還是做了一次空間的聚合娘香。具體來說,每個(gè)像素的cost將由鄰域的像素cost加權(quán)平均得到办龄,但是這里的鄰域不是常規(guī)意義下的幾鄰域烘绽,而是在這個(gè)基礎(chǔ)上加了一個(gè)偏移,這個(gè)偏移量是可以通過網(wǎng)絡(luò)學(xué)習(xí)的俐填。這種自適應(yīng)的鄰域選擇安接,主要是為了避免在邊界處深度的大跳躍。下圖顯示了鄰域的自適應(yīng)選擇英融。這一步過后依然是大小為的特征圖盏檐。
Depth regression:以上1-8步對應(yīng)了代價(jià)計(jì)算的過程。第8步輸出的結(jié)果驶悟,對應(yīng)了深度的概率胡野,通過計(jì)算期望,可以得到最終的深度圖痕鳍,大小為硫豆,與下采樣的ground truth比較就形成了其中一個(gè)loss.
Adaptive propagation:傳統(tǒng)的方法中龙巨,傳播的過程是有一個(gè)固定的鄰域像素集合,通過比較這些像素的cost與當(dāng)前像素的cost來決定是否將這些像素對應(yīng)的深度傳播給當(dāng)前像素熊响。而PatchMatchNet拋棄了固定的鄰域選擇旨别,而是采用和步驟8中差不多的思路,先預(yù)定鄰域位置汗茄,假設(shè)有個(gè)鄰域像素秸弛,再通過CNN學(xué)習(xí)出一個(gè)offset. 這里也沒有顯式地比較這些offset后的像素和當(dāng)前像素的cost,而是直接將的深度圖直接擴(kuò)充為大小的深度圖洪碳,這里還包含了一次上采樣递览。
Local perturbation:和傳統(tǒng)方法一樣,傳播之后為了更好地優(yōu)化深度值瞳腌,會(huì)有一個(gè)隨機(jī)優(yōu)化的過程非迹。以步驟9輸出的深度圖為基礎(chǔ),先上采樣一次纯趋,然后再在一定的深度范圍內(nèi)將深度值隨機(jī)出個(gè)值,這樣深度圖的大小就變成了冷离。和步驟10得到的傳播結(jié)果放在一起吵冒,最終喂給stage2的深度圖大小即為.
以步驟11的深度圖,以及大小為的特征圖為輸入西剥,循環(huán)2-9步就完成了stage2痹栖,再循環(huán)一次就完成了stage1.
而在stage0時(shí),不再進(jìn)行PatchMatch的計(jì)算瞭空,而是直接采用MVSNet中深度優(yōu)化的操作揪阿,引入原圖的邊界信息,得到新一輪的深度圖咆畏。
最終的loss將每個(gè)stage的loss相加得到南捂。
討論
泛化性
PatchMatchNet的泛化性確實(shí)不錯(cuò),在DTU數(shù)據(jù)上訓(xùn)練的模型在我們自己拍的數(shù)據(jù)上也能得到不錯(cuò)的結(jié)果旧找。主要的原因在于溺健,整個(gè)網(wǎng)絡(luò)設(shè)計(jì)都在模仿傳統(tǒng)的PatchMatch方法,利用深度圖的groundtruth代替了以NCC為代表的score計(jì)算方法钮蛛,神經(jīng)網(wǎng)絡(luò)在各個(gè)模塊中扮演了自適應(yīng)設(shè)定參數(shù)的角色鞭缭,如在傳播的鄰域選擇上等。
性能
論文顯示魏颓,PatchMatchNet在DTU數(shù)據(jù)上有很好的完整性岭辣,但在我們自有的數(shù)據(jù)上,并沒有看到這一點(diǎn)甸饱,相反完整性還略差沦童。這也許和其中的一些參數(shù)設(shè)置或者使用DTU訓(xùn)練結(jié)果有關(guān)系。理論上分析,基于深度學(xué)習(xí)的方法有個(gè)很大的不同是在feature map上去尋找差異搞动,而不是在原圖上躏精,另外通過不同層次的downsample及卷積,差異的定義不再局限于一個(gè)微小的鄰域鹦肿,即它的感受野會(huì)更大矗烛。但是,同時(shí)需要看到的是箩溃,這類方法與傳統(tǒng)方法比較瞭吃,并沒有大的實(shí)質(zhì)性突破,特別是在弱紋理的數(shù)據(jù)上涣旨,這與網(wǎng)絡(luò)設(shè)計(jì)模擬傳統(tǒng)算法流程不無關(guān)系歪架。