陳星, 張文海, 候宇, 楊林
1.重慶文理學(xué)院 智能制造工程學(xué)院, 重慶 402160; 2.重慶交通大學(xué) 機(jī)電與汽車工程學(xué)院, 重慶 400074;3.重慶長安工業(yè)(集團(tuán))有限責(zé)任公司 特種車輛研究所, 重慶 400023
雙目立體視覺如今廣泛地應(yīng)用在虛擬現(xiàn)實(shí)、巡線無人機(jī)作業(yè)、智能車、非接觸測距等諸多領(lǐng)域。立體匹配是雙目立體視覺的核心技術(shù)之一,其難點(diǎn)表現(xiàn)在:①搜索匹配點(diǎn)時(shí),一般會(huì)存在多個(gè)對應(yīng)點(diǎn),尤其是在重復(fù)紋理區(qū)域;②由于實(shí)際場景中的各個(gè)物體空間關(guān)系復(fù)雜、相互遮掩等噪聲的影響,造成了一些特征點(diǎn)不能找到正確的匹配點(diǎn);③場景中存在反光、弱紋理區(qū)域、透明物體和深度不連續(xù)等問題。
現(xiàn)有的立體匹配技術(shù)算法大致可以分為局部算法、全局算法和半全局算法。局部立體匹配算法的主要思想是通過支持窗口獲得聚合代價(jià),從而獲得單個(gè)像素的視差,具有模型復(fù)雜度低、效率高的優(yōu)點(diǎn),但存在匹配精度相對較差的缺點(diǎn)。半全局立體匹(semi-global-matching,SGM)[1],是基于一種逐像素匹配的方法,具有在保證近似于全局匹配算法匹配準(zhǔn)確率的條件下,大幅度降低算法復(fù)雜度,提升計(jì)算速度的特點(diǎn)。全局立體匹配的主要思想是構(gòu)造能量函數(shù),通過最小化能量函數(shù)來得到匹配結(jié)果,主要有動(dòng)態(tài)規(guī)劃(DP)[2]、置信度傳播[3]等算法,這類算法優(yōu)點(diǎn)是精度高,但具有時(shí)間復(fù)雜度高、實(shí)時(shí)性差的缺點(diǎn)。
近年來,深度學(xué)習(xí)發(fā)展迅速,因此有學(xué)者通過訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)來完成圖像塊的匹配計(jì)算。?bonta等[4]提出了(stereo matching by CNN,MC-CNN),首次將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用于匹配成本的計(jì)算,利用卷積從一對立體圖像獲取更為抽象魯棒的特征,計(jì)算兩者的相似性作為匹配成本。Shaked等[5]提出了對文獻(xiàn)[4]的改進(jìn)方法。但很多基于卷積神經(jīng)網(wǎng)絡(luò)的立體匹配算法只是對深層網(wǎng)絡(luò)的特征進(jìn)行計(jì)算,而忽略了淺層網(wǎng)絡(luò)的信息。深層網(wǎng)絡(luò)更注重于語義信息,而淺層網(wǎng)絡(luò)更注重細(xì)節(jié)信息,只采用深層網(wǎng)絡(luò)的語義信息進(jìn)行預(yù)測對小物體的匹配效果差。因此,有學(xué)者采用了一種結(jié)合圖像金字塔的方法[6],將原圖像采用高斯下采樣構(gòu)造出圖像金字塔,在圖像金字塔每層進(jìn)行計(jì)算,得到不同尺度的視差圖進(jìn)行融合,從而提高匹配精度,然而這種算法的缺點(diǎn)是計(jì)算量大、需要大量的內(nèi)存。還有學(xué)者在不同特征層分別計(jì)算匹配成本[7],這樣做可以獲得不同層的特征,但是沒有將特征進(jìn)行融合,獲得的特征不夠魯棒。
基于上述問題,本研究提出了一種結(jié)合特征金字塔結(jié)構(gòu)(feature pyramid networks,FPN)[8]和卷積神經(jīng)網(wǎng)絡(luò)(CNN)的立體匹配算法,試圖建立一個(gè)將深淺網(wǎng)絡(luò)特征進(jìn)行疊加融合的網(wǎng)絡(luò)。本研究的優(yōu)點(diǎn)是將深層特征和低層特征進(jìn)行融合,即可以充分利用低層特征所提供的準(zhǔn)確位置信息,又可以利用深層特征提供的語義信息,融合多層特征信息,且分別計(jì)算,再融合多組計(jì)算結(jié)果,可以得到較優(yōu)的匹配結(jié)果。
根據(jù)Scharstein等[9]提出的立體匹配算法分類和評價(jià),立體匹配的步驟通常分為4個(gè)部分:①匹配代價(jià)計(jì)算;②代價(jià)聚合;③視差選擇;④視差后處理。本文也遵循此步驟。
識(shí)別不同尺寸的物體是機(jī)器視覺的難點(diǎn)之一,通常的解決辦法是構(gòu)造多尺度金字塔。如圖1a)所示的圖像金字塔,由原圖像進(jìn)行一系列的高斯濾波和下采樣構(gòu)造而成,文獻(xiàn)[6]采用此結(jié)構(gòu),該做法雖然可以提高精度,但存在復(fù)雜度高、浪費(fèi)內(nèi)存的問題。圖1b)則在原圖像上進(jìn)行一系列卷積池化,獲得不同尺寸的特征圖,然后使用深層特征進(jìn)行計(jì)算,這種做法速度快、需要內(nèi)存少,但精度有所下降,且只使用深層特征,而忽略了淺層特征的細(xì)節(jié)信息。因此有了圖1c)的改進(jìn)方法,分別對每一層特征進(jìn)行計(jì)算,同時(shí)利用淺層和深層特征的信息,這樣做一定程度可以提高精準(zhǔn)度,但是它獲取的特征不夠魯棒。
圖1 各多尺度方法框架
因此,本研究采用特征金字塔結(jié)構(gòu)(FPN),架構(gòu)如圖1d)所示,首先對原圖像進(jìn)行卷積池化,獲取不同尺寸的特征圖,接著對深層特征圖進(jìn)行上采樣,次一層進(jìn)行下采樣使上下特征具有相同尺度,進(jìn)而將2張?zhí)卣鲌D進(jìn)行融合,融合后的特征用來第一次計(jì)算;接著將融合特征再進(jìn)行上采樣,再次一層特征下采樣,融合兩組特征,再進(jìn)行一次計(jì)算,往復(fù)直至較淺層網(wǎng)絡(luò),得到多組計(jì)算結(jié)果。該結(jié)構(gòu)將淺層特征和深層特征融合,既獲得淺層特征的細(xì)節(jié)位置信息,又可以利用深層特征的語義信息,使得特征魯棒,計(jì)算結(jié)果準(zhǔn)確。
根據(jù)以上介紹的FPN結(jié)構(gòu)特點(diǎn),本文設(shè)計(jì)了基于FPN的孿生[10]卷積網(wǎng)絡(luò)(FPN Siamese CNN,FS-CNN)來計(jì)算初始代價(jià)。網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示,整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)分為2個(gè)部分:
圖2 FS-CNN網(wǎng)絡(luò)結(jié)構(gòu)
1) 第一部分用于圖像的特征提取,由2個(gè)結(jié)構(gòu)相同的子網(wǎng)絡(luò)構(gòu)成。每個(gè)子網(wǎng)絡(luò)首先對輸入的15×15的圖像塊分別經(jīng)過4個(gè)卷積層,每一層都跟隨著批歸一化層(batch normalization layer)和ReLU激活函數(shù),其中除了第一層步長為1,其余層步長均為2,經(jīng)過4層卷積后,獲得了具有不同尺寸特征的網(wǎng)絡(luò)結(jié)構(gòu)。接著采用FPN結(jié)構(gòu),首先對C4卷積層特征圖進(jìn)行上采樣,使得尺寸和C3卷積層特征圖一致,把2個(gè)特征圖進(jìn)行相加(add)處理得到融合特征,為了消除采樣后的混疊效應(yīng),在融合之后加入卷積核大小為3×3的卷積層。左右子網(wǎng)絡(luò)將分別得到的融合特征圖進(jìn)行拼接(concatenate)處理,即可得到1個(gè)待匹配的融合拼接特征,重復(fù)以上的結(jié)構(gòu),就可以得到3個(gè)待匹配的融合拼接特征。值得注意的是需要在C2和C1卷積層特征圖融合前加入卷積核為1×1卷積層,目的是進(jìn)行通道數(shù)降維,使得特征圖維度相同。
表1 FS-CNN網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)表
2) 第二部份用于特征匹配,為3層全連接層。將3個(gè)待匹配的融合拼接特征分別輸入,得到3個(gè)匹配結(jié)果s1,s2,s3作為在不同尺度下計(jì)算的匹配相似度。除了全連接層最后一層采用Softmax激活函數(shù),其余層均采用ReLU激活函數(shù),上采樣均采用雙線性插值算法。網(wǎng)絡(luò)參數(shù)由表1給出,其中Add-0~2表示Add-0或Add-1或Add-2,其余Conv-Add-0~2等同符號(hào)意思相同;3/6/12×3/6/12×32表示3×3×32或6×6×32或12×12×32,其余同符號(hào)意思相同。
設(shè)以(i,j)為中心的左圖像塊為ρL(i,j),相應(yīng)視差為d時(shí)的右圖像塊為ρR((i,j),d),由于本文設(shè)計(jì)的網(wǎng)絡(luò)有3個(gè)輸出,即可得到3個(gè)初始匹配代價(jià)
(1)
(2)
式中:x,y是代價(jià)空間DSI上像素點(diǎn)坐標(biāo);d為對應(yīng)的視差值,d≤dmax,dmax=W×r為最大視差;W為原圖像的寬;r為一常數(shù),取0.16;α為參數(shù)常量,取0.2。
代價(jià)聚合就是通過一定的規(guī)則在得到初始匹配代價(jià)的局部區(qū)域中進(jìn)行累加聚合。一定角度上看,局部區(qū)域的代價(jià)聚合可以看做在代價(jià)空間DSI中的進(jìn)行濾波,即
(3)
引導(dǎo)圖濾波技術(shù)是一高效有效的濾波技術(shù),相比雙邊濾波器,引導(dǎo)圖濾波的計(jì)算復(fù)雜度僅為O(N),N為輸入圖像大小,因此引導(dǎo)圖濾波僅與輸入大小有關(guān),與支持窗口的大小無關(guān)。采用引導(dǎo)圖濾波器進(jìn)行代價(jià)聚合即就是在代價(jià)空間DSI上進(jìn)行濾波,輸入的p即為各個(gè)視差值所在代價(jià)空間層DSI(:,:,d),引導(dǎo)圖I則為左右原立體圖像。
在視差選擇階段傳統(tǒng)的做法一般采用貪婪算法(WTA)進(jìn)行簡單的視差選取。雖然WTA快速有效,卻忽略了相鄰像素的視差容限。因此有學(xué)者采用動(dòng)態(tài)規(guī)劃(DP)的全局思想來進(jìn)行視差的選擇,首先構(gòu)造能量函數(shù)M(x,y,d),采用DP最小化能量,并保存能量最小值所對應(yīng)的視差位置,可表示為
(4)
式中:Cagg(x,y,d)為像素點(diǎn)(x,y)在視差為d時(shí)的代價(jià)值;d′為相鄰像素點(diǎn)(一般指前一個(gè)像素點(diǎn))的視差選取;γ為參數(shù)常量。
但是采用這樣的做法,相鄰像素的視差選取為0~dmax,該算法的復(fù)雜度為O(WD2),W為圖像寬,D為選取視差范圍。所以,本研究采用改進(jìn)的動(dòng)態(tài)規(guī)劃的方法來進(jìn)行視差選擇:①首先縮小相鄰像素點(diǎn)視差選取的范圍,將視差范圍0~dmax縮小為{d,d+1,d-1};②接著結(jié)合WTA算法,將WTA獲取的視差值dWTA也作為格外的視差候選值。
改進(jìn)后的算法復(fù)雜度僅有O(WD),該算法的核心是結(jié)合WTA,提供格外的視差候選值,可以有效地避免出現(xiàn)過度平滑的現(xiàn)象,改進(jìn)后的算法可以表示為
(5)
由1.5節(jié)獲得的初始視差圖中還存在一些誤匹配,需要進(jìn)行視差精細(xì)化。本文采用左右一致性檢測來檢測遮擋點(diǎn),接著進(jìn)行遮擋點(diǎn)填充,最后采用加權(quán)的中值濾波器對視差圖進(jìn)行平衡濾波,獲得最終的視差圖。
FS-CNN網(wǎng)絡(luò)采用Tensorflow進(jìn)行訓(xùn)練,訓(xùn)練采用小批度(mini-batch),批度大小(batch size)為64,使用Adam優(yōu)化器,學(xué)習(xí)率為1×10-4,訓(xùn)練周期為50,動(dòng)量為0.9,匹配窗口為15×15。其余超參數(shù)neg-low=4,neg-high=8,pos=1,γ=2,ωk支持窗口為5×5,ò=0.01,參數(shù)具體意義可參考文獻(xiàn)[4]。運(yùn)行平臺(tái)為Windows10×64位系統(tǒng),CPU為Intel Core i5。
本研究采用Middlebury 2014數(shù)據(jù)集[11]。該數(shù)據(jù)集提供了30張立體圖像,圖像內(nèi)容多為室內(nèi)場景。其中包含15張帶有真實(shí)視差值訓(xùn)練圖像,15張未帶真實(shí)視差值的測試圖像。
訓(xùn)練數(shù)據(jù)集的構(gòu)造本研究采用在15張帶真實(shí)視差圖的圖像對上,對于每對圖像對,在左圖像隨機(jī)截取15×15的圖像塊,在右圖像上根據(jù)正負(fù)樣本對應(yīng)截取。正樣本表示右圖像在左圖像塊偏移真實(shí)視差值[+1,-1]對應(yīng)的位置下截取的右圖像塊,負(fù)樣本表示右圖像在左圖像塊偏移真實(shí)視差值[-4,+8]對應(yīng)的位置下截取的右圖像塊。接著隨機(jī)組合左圖像塊與右圖像像塊,對于左圖像塊與正樣本右圖像塊的組合設(shè)定標(biāo)簽為(1),對左圖像塊與負(fù)樣本右圖像塊的組合設(shè)定標(biāo)簽為(0)。
對FS-CNN網(wǎng)絡(luò)的每個(gè)結(jié)構(gòu)的作用進(jìn)行分析。在接下來的研究中,以與本研究提出的網(wǎng)絡(luò)最為相似的Dense-CNN網(wǎng)絡(luò)作為參考。實(shí)驗(yàn)的評判標(biāo)準(zhǔn)采用算法得到的視差值與真實(shí)視差值的差值絕對值小于3像素或小于真實(shí)視差的 6% 時(shí),認(rèn)為該點(diǎn)所得視差值是正確的,否則將該點(diǎn)計(jì)為視差錯(cuò)誤點(diǎn),即
(6)
式中:N為視差圖像素點(diǎn)總數(shù);de(x,y)為算法得到視差圖的視差值;dt(x,y)為真實(shí)視差圖的視差值;σt為設(shè)定的誤差限,本研究設(shè)置為3。
首先對主干特征提取結(jié)構(gòu)進(jìn)行測試,通過增加結(jié)構(gòu)的卷積層數(shù),測試對結(jié)果的影響。接著對FPN特征融合結(jié)構(gòu)進(jìn)行實(shí)驗(yàn)。最后測試特征匹配結(jié)構(gòu),通過改變?nèi)B接層數(shù)。實(shí)驗(yàn)結(jié)構(gòu)如表2所示。
表2 不同網(wǎng)絡(luò)結(jié)構(gòu)的評估結(jié)果
從表2的實(shí)驗(yàn)結(jié)果發(fā)現(xiàn),增加特征匹配結(jié)構(gòu)的全連接層數(shù)量對結(jié)果的精度影響不大;增加主干特征提取結(jié)構(gòu)的卷積層數(shù),在一定程度下能降低誤匹配率,但是降低的程度有限,而且增加了運(yùn)算成本;FPN特征融合結(jié)構(gòu)的引入,可明顯提高匹配精度,降低誤匹配率,精度超過了參考網(wǎng)絡(luò)Dense-CNN。
對比算法本文采用:SGBM[1](參數(shù):Sblock=9,Ndisparities=64,p1=200,p2=800);BM(參數(shù):Sblock=9,Ndisparities=64);NCC算法;同等條件處理的Dense-CNN[4]。圖3為不同算法生成的圖像對視差圖,從上到下依次是Adirondack,Recycle,Sword1,Piano,PianoL,Playtable,Sword2。
圖3 圖像對在各類算法生成的視差圖
表3 圖片誤匹配率U%
由表3觀察到,本研究提出的算法在不同場景的匹配精度明顯都高于半全局算法SGBM,且遠(yuǎn)高于BM、NCC局部算法。在同等條件下本研究算法誤匹配率低于傳統(tǒng)的Dense-CNN。值得注意的是,在PianoL場景中,由于左右圖像具有不同的光照條件,SGBM、BM、NCC 3個(gè)算法誤匹配率明顯變高,而Dense-CNN算法和本研究算法誤匹配率并無顯著變大,可以看出基于神經(jīng)網(wǎng)絡(luò)的匹配算法對光照影響具有一定的魯棒性。在場景Sword2中,傳統(tǒng)的Dense-CNN算法具有較高的誤匹配率,而本研究提出的改進(jìn)方法可以顯著地降低誤匹配率。
提出了一種結(jié)合特征金字塔(FPN)卷積神經(jīng)網(wǎng)絡(luò)的立體匹配算法,該算法在卷積網(wǎng)絡(luò)(CNN)基礎(chǔ)上,應(yīng)用了特征金字塔結(jié)構(gòu),自上而下地融合不同尺度的特征圖,且分別進(jìn)行特征匹配計(jì)算,得到3組特征匹配結(jié)果,再計(jì)算得3組匹配成本,融合3組匹配成本獲得最終匹配成本,利用引導(dǎo)圖濾波器進(jìn)行快速有效的代價(jià)聚合,在視差選擇階段采用改進(jìn)的動(dòng)態(tài)規(guī)劃(DP)算法,結(jié)合DP和WTA,既提高了匹配精度,又降低了復(fù)雜度。結(jié)果表明,所提算法精度優(yōu)于現(xiàn)有部分優(yōu)秀的匹配算法。目前該算法僅在CPU上實(shí)現(xiàn),今后可利用GPU的并行運(yùn)算來提高算法的效率。