宋力爭,林冬云,彭俠夫,劉騰飛
(廈門大學(xué) 航空航天學(xué)院,福建 廈門 361005)
雙目立體視覺在機器人導(dǎo)航、AR/VR、室內(nèi)場景三維重建中有廣泛應(yīng)用。其中,patch-match[1]算法以內(nèi)存消耗低、重建精度高的性能被很多研究者所采用[2-4]。然而,patch-match[1]算法在求取視差d時,需要有序地對視圖中的每個像素進(jìn)行隨機初始化和迭代求解,導(dǎo)致運行時間成本較高。針對上述問題,本文介紹對傳統(tǒng)的patch-match[1]算法的優(yōu)化方法。
卷積神經(jīng)網(wǎng)絡(luò)在計算機視覺中的很多領(lǐng)域都取得了很好的效果,例如:目標(biāo)檢測和識別[5-6]、語義分割[7-8]等。上述成果帶給人們解決傳統(tǒng)算法在重建不連續(xù)等區(qū)域所面臨難題的希望。在一些復(fù)雜多變的戶外環(huán)境中,基于深度學(xué)習(xí)的算法[9-11]進(jìn)行立體視覺重建時的精度要優(yōu)于傳統(tǒng)算法,同時,其時間復(fù)雜度相對較低。文獻(xiàn)[12-13]中,作者利用卷積神經(jīng)網(wǎng)絡(luò)尋找對應(yīng)點,例如在MC-CNN (matching cost convolutional neural network)中,作者通過搭建一個孿生神經(jīng)網(wǎng)絡(luò)計算一對相同尺寸圖像塊的相似性得分,判斷它們是否匹配。然而,MCCNN[13]缺乏利用上下文信息,在容易出錯的區(qū)域依然面臨巨大挑戰(zhàn),例如反光、遮擋、不連續(xù)區(qū)域等。為了讓網(wǎng)絡(luò)模型充分利用圖像的上下文信息,在GC-net (geometry and context network)[11]和PSM-net (pyramid stereo matching network)[14]中,作者通過搭建一個端到端的編碼-解碼網(wǎng)絡(luò)結(jié)構(gòu)和金字塔池化去融合不同尺度下的語義特征來擴大感受野范圍,提高算法的魯棒性和精度?;趯W(xué)習(xí)的重建算法在比較復(fù)雜的環(huán)境中,具有傳統(tǒng)算法不具備的優(yōu)良性能。本文嘗試將深度學(xué)習(xí)融入patch-match算法,使得patch-match算法繼承深度學(xué)習(xí)的優(yōu)良特性,并降低運行時間。
Patch-match算法求取每個像素的視差值d ,需要經(jīng)歷5個階段,即:隨機初始化、空間傳播、視角傳播、時間傳播和平面細(xì)化。其中,平面細(xì)化步驟消耗時間占據(jù)整個算法一半以上。因此本文主要目標(biāo)之一是減少平面細(xì)化步驟的運行時間。在文獻(xiàn)[1]中,作者對每個像素點視差進(jìn)行平面細(xì)化,需要定義2個搜索區(qū)間和Δn=進(jìn)行迭代搜索。我們發(fā)現(xiàn)準(zhǔn)確度高的視差值 d 不需要很大的搜索空間。為此我們考慮了針對每個像素進(jìn)行動態(tài)調(diào)整和的方法。
研究[15]發(fā)現(xiàn)深度學(xué)習(xí)模型預(yù)測視差,可以有效地評估預(yù)測視差 d的準(zhǔn)確度。在文獻(xiàn)[16]中,Yaoyu Hu基于改造的PSM-net[14]網(wǎng)絡(luò)預(yù)測每個像素初始的視差值 d 和對應(yīng)的異方差不確定度 σ,利用 σ縮小SGBM[17]視差匹配區(qū)間范圍。出于相同目的,我們搭建了一個可以同時輸出深度圖和異方差不確定度的深度學(xué)習(xí)模型,σ越大表示網(wǎng)絡(luò)輸出的視差 d越不穩(wěn)定,在平面細(xì)化步驟中擴大它的搜索區(qū)間,如果 σ很小,則相反。因此,我們根據(jù)每個像素 σ 的大小動態(tài)設(shè)置和降低平面細(xì)化步驟的運行時間,同時繼承深度學(xué)習(xí)模型的優(yōu)良性能。
圖1展示文中所提出算法的處理流程,首先,利用深度學(xué)習(xí)模型PSMNU(PSM-net with uncertainty)預(yù)測立體圖片的左右視差圖和異方差不確定度;然后,將視差 d 和異方差不確定度 σ作為先驗信息輸入到patch-match算法中,在平面細(xì)化步驟中,利用異方差不確定σ動態(tài)設(shè)置和;最后,修正后的patch-match算法輸出最終的視差圖。通過上述步驟,我們可以減少原始算法的運行時間,提高重建精度。
圖1 算法處理流程Fig.1 Flow chart of algorithm processing
建立基于PSM-net[14]的PSMNU網(wǎng)絡(luò),如圖2所示,該網(wǎng)絡(luò)在預(yù)測稠密深度圖方面具有良好性能。由于PSM-net[14]網(wǎng)絡(luò)旨在輸出深度圖,為了同時輸出異方差不確定度 σ,根據(jù)文獻(xiàn)[15]對PSMnet[14]的回歸層進(jìn)行修改,輸出 H×W×D×2維度的代價體積,H和W分別表示輸入圖像的高、寬,D表示最大視差。在代價體積中,最后維度(第4個維度)的第1個值表示每個像素在當(dāng)前視差下的代價,第2個值表示異方差不確定度。
圖2 PSM-net網(wǎng)絡(luò)結(jié)構(gòu)Fig.2 Structure diagram of PSM-net network
訓(xùn)練一個可以同時輸出深度圖和異方差不確定的深度網(wǎng)絡(luò),需要學(xué)習(xí)函數(shù) f來推斷后驗分布,f 將一對立體輸入圖像 IL和 IR映射到視差估計和由方差給出的異方差不確定度量如(1)式:
式中:Np表示圖像中的像素數(shù)量; Ep和 σp分別定義如(3)式和(4)式。(2)式中的損失函數(shù)由2部分組成:殘差回歸和一個不確定性正則項。實驗中,我們不需要“異方差不確定性標(biāo)簽”來學(xué)習(xí)異方差不確定性,相反,只需要監(jiān)督學(xué)習(xí)預(yù)測視差,就能從損失函數(shù)中隱式地學(xué)習(xí)異方差不確定 σ。正則化的目的是防止網(wǎng)絡(luò)對所有數(shù)據(jù)點預(yù)測無限大的 σ,導(dǎo)致?lián)p失函數(shù)為零。同時,為了提高PSMNU網(wǎng)絡(luò)的收斂性和穩(wěn)定性,采用 smoothL1損失函數(shù)計算視差損失,由于其具有魯棒性且對異常值不敏感[18]。
式中:d 表示當(dāng)前像素 p 的真實視差。
Patch-match[1]是一個優(yōu)秀的局部立體匹配算法,算法的處理流程如圖3所示。
圖3 patch-match算法流程圖Fig.3 Flow chart of patch-match algorithm
首先,輸入一對矯正后的立體圖片 mL和 mR;然后,通過隨機初始化對 mL和 mR中的每一個像素隨機分配一個視差值 z0和 單位向量 n=(nx,ny,nz);最后,對左右視差圖分別進(jìn)行迭代優(yōu)化。迭代步驟包括4個階段:1)空間傳播,將位于 p鄰域內(nèi)的像素 q的平面 fq給予 p,如果 m(p,fq)<m(p,fp),則接受fq作為p的新平面;2)視圖傳播,將位于 p第2個視角中的對應(yīng)像素 p′的平面 fp′給予p,如果m(p,fp′)<m(p,fp),則接受 fp′作 為 p的新平面;3)時間傳播,這種形式的傳播只適合處理視頻序列立體重建,將上一幀像素的 fp′給予當(dāng)前幀相同位置 p,如果m(p,fp′)<m(p,fp),則接受 fp′作為 p 的新平面;4)平面細(xì)化:不斷更新 z0和 n=(nx,ny,nz),從而獲取一個新平面fp′,如果 m(p,fp′)<m(p,fp),則接受 fp′作 為p的新平面。根據(jù)平面f計算匹配像素p的聚合代價,如(6)~(8)式:
式中:WP表示以像素 p 為中心的方形窗口; af、 bf、cf表示位于像素 q處 的平面參數(shù); qx、 qy分別表示像素 q在圖像坐標(biāo)系中的水平坐標(biāo)和豎直坐標(biāo);權(quán)重函數(shù) w(p,q)利用顏色相似性判斷p與q位于相同平面的可能性; Ip、 Iq分別表示像素p、 q的灰度強度;函數(shù) ρ(q,q′)用于計算像素p、 q′之間的不相似性;?、 τcol、 τgrad是超參數(shù),具體細(xì)節(jié)可參考文獻(xiàn)[1]。
在文獻(xiàn)[1]中,作者利用像素點坐標(biāo)、法向量表示 fp。首先,分別定義2個參數(shù),表示3D點中z坐標(biāo)所允許的最大變化范圍,即:表示法向量 n所 允許的最大變化范圍。作者在區(qū)間中隨機估計 Δ z0并計算=z0+Δz0,從而獲取一個新的3D點 P′=(x,y,。類似的,在區(qū)間估計3個隨機值用于形成向量 Δn,然后計算修正后的法向量 n′=u(n+Δn),其中 u()用于計算單位向量。最終,用更新后的參數(shù) P′和 n′去修正位于當(dāng)前像素點p上的平面 fp,再通過(9)式求出當(dāng)前視差 dp。如果 m(p,)<m(p,fp),我們就接受該平面 。
每一次更新視差、法線,需要再次代價聚合,導(dǎo)致patch-match的運行時間主要集中在平面細(xì)化階段[1]。為了降低patch-match的運行時間,需對平面細(xì)化階段進(jìn)行優(yōu)化。
在上述步驟中,我們通過PSMNU網(wǎng)絡(luò)獲得左右視圖的視差和異方差不確定度 σ,并將和 σ作為patch-match的先驗信息。在隨機初始化步驟中,用初始化每一個像素視差,保證絕大數(shù)像素的初始視差有良好的初始值。因此,在平面細(xì)化階段,不需要對所有像素進(jìn)行大范圍搜索。利用σ獲取PSMNU對預(yù)測視差的確信程度,對于低σ的像素,可以縮小和的區(qū)間范圍,降低平面細(xì)化的迭代次數(shù)。如果 σ很大,則保持和的區(qū)間范圍不變。通過上述步驟,不僅可以降低patch-match的運行時間,還會保證最優(yōu)的視差值被找到。利用(10)~(13)式,可以確定每一個像素初始的和
式中:t 表示當(dāng)前第幾次迭代;k是一個超參數(shù),對于所有的實驗設(shè)置 k =0.5。
所有實驗均在一臺擁有2.90 GHz Intel Core i5-9400F CPU和8 GB RAM的PC機上的Visual Studio 2017中進(jìn)行,軟件環(huán)境為Windows 64位操作系統(tǒng),編程語言是C++,需要的第三方庫為OpenCV3.1.0。實驗中,總共需要2個數(shù)據(jù)庫,分別是Scene Flow[18]和Middlebury Stereo Evaluation V3[19]。Scene Flow數(shù)據(jù)庫主要用來訓(xùn)練PSMNU網(wǎng)絡(luò)模型,Middlebury Stereo Evaluation V3用于驗證文中算法的有效性。我們從PSMNU網(wǎng)絡(luò)模型訓(xùn)練、實驗結(jié)果比較兩個方面來介紹實驗部分,為了驗證文中算法的有效性,對實驗結(jié)果進(jìn)行定性、定量分析。
本文PSMNU網(wǎng)絡(luò)結(jié)構(gòu)是基于PSM-net[14]實現(xiàn),通過修改PSM-net中的損失函數(shù)、網(wǎng)絡(luò)回歸層、代價體積滿足實驗?zāi)康?,具體實現(xiàn)細(xì)節(jié)可參考文獻(xiàn)[15-16]。
實驗中,使用PyTorch搭建PSMNU網(wǎng)絡(luò)模型,所有模型都使用Adam( β1=0.9,β2=0.999)進(jìn)行端到端優(yōu)化。在訓(xùn)練過程中,對所有數(shù)據(jù)集進(jìn)行顏色標(biāo)準(zhǔn)化及隨機裁剪處理,保證圖片尺寸滿足256×512像素,設(shè)定最大視差D為192。使用Scene Flow[18]數(shù)據(jù)集在3個nNvidia 1080Ti GPUs上從頭開始訓(xùn)練模型,學(xué)習(xí)速率為0.001,最小批次為9,每個顯卡3個批次,連續(xù)訓(xùn)練10個批次需要17 h左右。最后,我們通過PSMNU-L和PSMNU-R對Scene Flow[18]數(shù)據(jù)集進(jìn)行測試,如圖4所示。圖4(a)、圖4(b)分別表示frames cleanpass的左右視圖;圖4(c)、圖4(d)分別表示monkaa cleanpass的左右視圖。預(yù)測視差 d 和 σ均來自于PSMNU,為了更好地觀看σ圖,我們對異方差不確定度進(jìn)行歸一化操作。在物體的邊緣處,如圖片中的紅色虛線圈區(qū)域,由于存在遮擋、視差的不連續(xù)性導(dǎo)致該處的 σ 會展示出很高的不確定性。
圖4 PSMNU網(wǎng)絡(luò)輸出的視差 d 和異方差不確定度σFig.4 Disparity d and heteroscedastic uncertainty σ of PSMNU network output
為了比較文中算法與原始patch-match,我們采用文獻(xiàn)[1]中的參數(shù)設(shè)置,用像素35×35的代價聚合窗口,同時設(shè)置相同參數(shù){10,0.9,10,2},實驗數(shù)據(jù)集均來自于Middlebury Stereo Evaluation V2[19]。圖5展示文中算法與原始patchmatch的實驗結(jié)果。其中:圖5(a)為Middlebury數(shù)據(jù),從左到右依次為Tsukuba、Venus、Cones、Teddy;圖5(b)為原始算法求取的深度圖;圖5(c)表示原始算法求取的視差值誤差>1個像素(紅色);圖5(d)為PSMNU輸出的深度圖;圖5(e)為PSMNU輸出的異方差不確定度;圖5(f)為本文算法求取的深度圖;圖5(g)表示本文算法求取的視差值誤差>1個像素(紅色)。
圖5 patch-match算法與本文算法Fig.5 Patch-match algorithm and proposed algorithm
從實驗結(jié)果可以看出:本文算法在重建精度方面基本上與原始patch-match相同,為了定性地比較性能,用表1記錄實驗數(shù)據(jù),所有數(shù)據(jù)重建精度的評價指標(biāo)均使用Middlebury默認(rèn)錯誤閾值1個像素。其中,Nonocc、Disc所在列的數(shù)據(jù)分別表示無遮擋區(qū)域中絕對視差錯誤大于1.0像素所占百分比、不連續(xù)區(qū)域中絕對視差錯誤大于1.0像素所占百分比。從時間欄可以看出,本文算法在效率方面明顯優(yōu)于原始算法patch-match,同時,重建精度略優(yōu)于原始算法。本文算法性能的提高主要歸結(jié)于PSMNU輸出良好的視差圖和異方差不確定度,輸出的視差精度越高,越有助于本文算法確定一個較好的搜索起點。視差的精度與異方差不確定度成反比關(guān)系,在平面細(xì)化步驟中,小的 σ意味著在小范圍區(qū)間內(nèi)就可以搜索到正確的視差。因此,PSMNU的魯棒性影響著算法重建性能。與CSCA[20]算法進(jìn)行比較時,本文算法的重建精度更勝一籌,但運行時間比較長。
表1 Patch-match和本文算法的定量分析結(jié)果Table 1 Quantitative analysis results of patch-match algorithm and proposed algorithm
傳統(tǒng)的patch-match算法進(jìn)行立體三維重建具有良好性能,然而需要較長的運行時間。本文引用深度學(xué)習(xí)模型,該模型可以輸出初始視差值并評估視差預(yù)測的不確定性,我們利用評估得到的異方差不確定度動態(tài)調(diào)整每個像素的搜索區(qū)間,從而達(dá)到減少運行時間的目標(biāo)。實驗結(jié)果表明,本文提出的算法在效率和精度方面優(yōu)于原始算法。未來期望該算法可以在GPU上運行,以達(dá)到實時性的目的;同時,讓PSMNU結(jié)合多任務(wù)學(xué)習(xí)、多視角深度重建以提高魯棒性。