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