本發(fā)明涉及計(jì)算機(jī)視覺(jué)的立體匹配與深度學(xué)習(xí)技術(shù)領(lǐng)域,具體講的是一種基于雙流卷積神經(jīng)網(wǎng)絡(luò)的雙視點(diǎn)圖像立體匹配方法。
背景技術(shù):
立體視覺(jué)匹配是計(jì)算機(jī)視覺(jué)和非接觸測(cè)量研究中最基本的關(guān)鍵問(wèn)題之一,立體匹配的目標(biāo)是找出不同視角的圖像之間的對(duì)應(yīng)點(diǎn)關(guān)系,獲得視差圖,得到了視察圖之后,就可以很容易地得到原始圖像的深度信息和三維信息。因此,立體匹配問(wèn)題普遍被視為立體視覺(jué)中最關(guān)鍵的問(wèn)題。
視差圖的獲取是立體匹配問(wèn)題的關(guān)鍵,關(guān)于計(jì)算像素點(diǎn)視差值的算法,根據(jù)采用圖像表示的基元不同,可以分為:區(qū)域立體匹配算法,基于特征的立體匹配算法,基于相位的立體匹配算法。根據(jù)采用優(yōu)化理論的方法不同,又可分為:局部立體匹配和全局立體匹配。
立體匹配問(wèn)題作為立體視覺(jué)中最困難的問(wèn)題,是因?yàn)橛幸韵绿魬?zhàn):遮擋問(wèn)題,也就是一張圖的某些區(qū)域因?yàn)檎趽踉颍诹硪粋€(gè)視角的圖中沒(méi)有對(duì)應(yīng)的匹配點(diǎn)。其次是弱紋理的問(wèn)題,如果只從局部的角度計(jì)算,就會(huì)出現(xiàn)大量的匹配點(diǎn)。傳統(tǒng)的方法通過(guò)全局能量代價(jià)函數(shù)來(lái)檢測(cè)遮擋,利用增大窗口的方法處理弱紋理的問(wèn)題,但是效果有限[2]。
近幾年,深度學(xué)習(xí)在計(jì)算機(jī)視覺(jué)方面獲得了重大進(jìn)展,在圖像分類,物體檢測(cè),視覺(jué)顯著性檢測(cè)等很多傳統(tǒng)計(jì)算機(jī)圖像與視覺(jué)方面的問(wèn)題取得了巨大成功[4]。其中,最為典型的是卷積神經(jīng)網(wǎng)絡(luò)cnn,它通過(guò)卷積和池化操作提取了目標(biāo)特征,并降低了特征分辨率,減少了計(jì)算量[1]。將池化的結(jié)果通過(guò)激活函數(shù),將線性的卷積操作與非線性的激活函數(shù)結(jié)合,使得網(wǎng)絡(luò)可以模擬出更為復(fù)雜多樣的映射關(guān)系,使網(wǎng)絡(luò)獲得很好的特征提取的能力。
參考文獻(xiàn)
[1]krizhevsky,alex,ilyasutskever,andgeoffreye.hinton."imagenetclassificationwithdeepconvolutionalneuralnetworks."advancesinneuralinformationprocessingsystems.2012.
[2]klaus,andreas,mariosormann,andkonradkarner."segment-basedstereomatchingusingbeliefpropagationandaself-adaptingdissimilaritymeasure."patternrecognition,2006.icpr2006.18thinternationalconferenceon.vol.3.ieee,2006.
[3]arewereadyforautonomousdriving?thekittivisionbenchmarksuite,[online].available:
http://www.cvlibs.net/datasets/kitti/eval_stereo_flow.php?benchmark=stereo
[4]lecun,yann,yoshuabengio,andgeoffreyhinton."deeplearning."nature521.7553(2015):436-444.
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是鑒于立體匹配問(wèn)題在三維重建,機(jī)器人導(dǎo)航,三維場(chǎng)景感知等立體視覺(jué)問(wèn)題中的重要性以及其近幾年深度學(xué)習(xí)方法在計(jì)算機(jī)視覺(jué)領(lǐng)域的巨大成功,提出一種基于雙流卷積神經(jīng)網(wǎng)絡(luò)的立體匹配方法。
該方法利用一種雙流卷積神經(jīng)網(wǎng)絡(luò),學(xué)習(xí)并計(jì)算出左右視圖中目標(biāo)區(qū)域的匹配代價(jià),并以交叉聚合算法作為輔助,有效地獲得目標(biāo)圖像的視差圖。雙流網(wǎng)絡(luò)結(jié)構(gòu)不僅繼承了卷積神經(jīng)網(wǎng)絡(luò)計(jì)算量小,性能穩(wěn)定等優(yōu)點(diǎn),同時(shí)擁有較大的接受域,并且更充分地提取了目標(biāo)點(diǎn)鄰近區(qū)域的特征,擁有更高的精度。
為了實(shí)現(xiàn)上述目的,本發(fā)明通過(guò)以下技術(shù)方案予以實(shí)現(xiàn),具體包括如下步驟:
步驟(1):構(gòu)建一種基于交叉熵二值分類問(wèn)題的訓(xùn)練數(shù)據(jù),將訓(xùn)練數(shù)據(jù)分割出正負(fù)樣本。
步驟(2):提出一種雙流卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)用于計(jì)算兩張圖像的相似度,并利用步驟(1)構(gòu)建的數(shù)據(jù)去訓(xùn)練網(wǎng)絡(luò)的參數(shù)。
步驟(3):分段處理雙流網(wǎng)絡(luò)前向計(jì)算過(guò)程中分流和匯總兩個(gè)模塊,并保存中間數(shù)據(jù),節(jié)省大量計(jì)算量。
步驟(4):將網(wǎng)絡(luò)輸出結(jié)果轉(zhuǎn)化為匹配代價(jià),并利用交叉聚合算法將聚合區(qū)域內(nèi)的匹配代價(jià)平均化。
步驟(5):基于贏者通吃策略計(jì)算每一個(gè)像素點(diǎn)的視差,并用插值法對(duì)結(jié)果進(jìn)行亞像素增強(qiáng)。
步驟(1)所述的構(gòu)建訓(xùn)練數(shù)據(jù)具體如下:
所有數(shù)據(jù)和對(duì)應(yīng)的標(biāo)簽均從kitti數(shù)據(jù)庫(kù)獲取[3],本方法只使用灰度圖像數(shù)據(jù),并對(duì)所有灰度值歸一化。對(duì)于訓(xùn)練用數(shù)據(jù),需要為每一個(gè)像素點(diǎn)構(gòu)建一個(gè)正樣本和負(fù)樣本便于之后建立基于二分類問(wèn)題的交叉熵殘差。
設(shè)
對(duì)于一個(gè)正樣本:q=(x-dt,y)
對(duì)于一個(gè)負(fù)樣本:q=(x-dt+oneg,y)
dt為點(diǎn)p對(duì)應(yīng)的視差真值,oneg為一個(gè)隨機(jī)偏移量。由于數(shù)據(jù)都只有水平方向上的視差,垂直方向是對(duì)齊的,因此只需要水平方向的視差。所有靠近圖片邊界的點(diǎn),在取窗口時(shí),不夠的部分以0值填充。所有正樣本對(duì)應(yīng)的標(biāo)簽為1,負(fù)樣本對(duì)應(yīng)的標(biāo)簽為0。
步驟(2)所使用的雙流卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的具體設(shè)計(jì):雙流網(wǎng)絡(luò)由兩個(gè)孿生卷積神經(jīng)網(wǎng)絡(luò)組成,再將它們的結(jié)果匯總并輸出,每一個(gè)孿生卷積網(wǎng)絡(luò)都有左右兩個(gè)子網(wǎng)絡(luò),左右子網(wǎng)絡(luò)在網(wǎng)絡(luò)結(jié)構(gòu)上一樣,具體如下:
1.以32×32的窗口作為輸入
2.后接一個(gè)3×3,步長(zhǎng)為1的卷積層+relu激活層
3.后接一個(gè)2×2,步長(zhǎng)為2的下采樣層,下采樣采用maxpooling
4.后接三個(gè)3×3,步長(zhǎng)為1的卷積層+relu激活層
孿生網(wǎng)絡(luò)的兩個(gè)子網(wǎng)絡(luò)最后會(huì)得到兩個(gè)9×9的窗口,子網(wǎng)絡(luò)參數(shù)共享。
左右子網(wǎng)絡(luò)的不同在于:
左側(cè)子網(wǎng)絡(luò)的輸入是左圖的窗口,右側(cè)子網(wǎng)絡(luò)的輸入是右圖的窗口。
兩個(gè)孿生卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)也是一樣的,不同在于:
其中一個(gè)的輸入為原圖中解析度為32×32的窗口,另一個(gè)的輸入是將同一個(gè)點(diǎn)為中心的64×64的窗口下采樣成32×32的窗口。
兩個(gè)孿生網(wǎng)絡(luò)匯總時(shí)進(jìn)入決策層,結(jié)構(gòu)如下:
1.一個(gè)324×1024全連接層,輸出維度為1024,并經(jīng)過(guò)relu激活
2.一個(gè)1024×1的全鏈接層,輸出維度為1,并經(jīng)過(guò)sigmoid激活
網(wǎng)絡(luò)訓(xùn)練時(shí)使用的交叉熵殘差定義如下:
θ表示網(wǎng)絡(luò)的參數(shù),y(i)第i個(gè)樣本對(duì)應(yīng)的標(biāo)簽值,正樣本的y(i)為1,負(fù)樣本的y(i)為0,x(i)表示樣本i,h(x(i))表示第i個(gè)樣本的網(wǎng)絡(luò)最終輸出結(jié)果。
網(wǎng)絡(luò)的參數(shù)更新利用梯度下降法,公式如下:
α表示學(xué)習(xí)率,
對(duì)于參數(shù)θ,網(wǎng)絡(luò)的線性計(jì)算部分可表示成:
ak(x(i))表示樣本x(i)在第k層網(wǎng)絡(luò)中,線性部分的輸出結(jié)果,wk和bk分別表示該層的乘法參數(shù)和偏移參數(shù),
梯度
hθ(x(i))表示樣本x(i)在參數(shù)為θ時(shí),網(wǎng)絡(luò)的輸出結(jié)果。
步驟(3)在測(cè)試階段,對(duì)于左圖中某一點(diǎn)p(x,y),對(duì)于所有可能視差值d∈d,右圖中所有q(x-d,y)都是可能和p匹配的備選點(diǎn),令p-d表示點(diǎn)q。則需要計(jì)算所有組合<p,p-d>的相似度。
只有在決策階段才需要計(jì)算所有組合,因此在決策層之前先計(jì)算并保存所有點(diǎn)對(duì)應(yīng)窗口在孿生網(wǎng)絡(luò)的結(jié)果,保證每個(gè)窗口在孿生網(wǎng)絡(luò)中只計(jì)算一次。
最后再在決策層計(jì)算將對(duì)于p(x,y)的所有備選點(diǎn)的相似度結(jié)果,可節(jié)省不必要的計(jì)算量。
步驟(4)中,由于弱紋理現(xiàn)象和視差圖平滑化的需要,有必要利用交叉聚合的方法均值化同一物體上點(diǎn)的視差值,方法具體如下:
對(duì)于某一個(gè)像素點(diǎn)p,根據(jù)一定的規(guī)則進(jìn)行擴(kuò)散,可獲得區(qū)域u(p),擴(kuò)散規(guī)則如下:
|i(p)-i(pl)|<intensity(1)
||p-pl||<distance(2)
式1表示備選點(diǎn)pl與p的值的差距要小于閾值intensity,式2表示pl與p的距離要小于閾值distance。
根據(jù)以上規(guī)則,首先基于p點(diǎn)分別從上下方向延伸,得到一組垂直的像素點(diǎn)v(p),對(duì)于
得到u(p)后,匹配代價(jià)均值化計(jì)算如下:
步驟(5)的贏者通吃策略就是,設(shè)c(p,d)為交叉聚合的最終結(jié)果,對(duì)于左圖中某點(diǎn)p,選取所有c(p,d)中最小的結(jié)果作為匹配結(jié)果,那么d就是像素p的視差。
最后再對(duì)結(jié)果進(jìn)行亞像素增強(qiáng),公式如下:
dp為亞像素增強(qiáng)后結(jié)果,d為贏者通吃策略的結(jié)果,c為贏者通吃策略結(jié)果中對(duì)應(yīng)的c(p,d),c+為c(p,d+1),c-為c(p,d-1)。
本發(fā)明的有益效果如下:本發(fā)明利用一種雙流網(wǎng)絡(luò)結(jié)構(gòu),學(xué)習(xí)并計(jì)算出左右視圖中目標(biāo)區(qū)域的匹配代價(jià),并以一些后處理算法作為輔助,有效地獲得目標(biāo)圖像的視差圖。該方法有效地將深度學(xué)習(xí)中的卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用到了立體匹配中,不僅繼承了卷積神經(jīng)網(wǎng)絡(luò)計(jì)算量小,性能穩(wěn)定等優(yōu)點(diǎn),同時(shí)擁有較大的接受域,并且更充分地提取了目標(biāo)點(diǎn)鄰近區(qū)域的特征,擁有更高的精度。
附圖說(shuō)明
圖1是本發(fā)明基于雙流卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行立體匹配的算法流程圖。
圖2是雙流卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)。
圖3是交叉聚合范圍示意圖。
圖4是交叉聚合范圍選取流程圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
如圖1所示,一種基于雙流卷積神經(jīng)網(wǎng)絡(luò)的立體匹配方法,具體步驟如下:
步驟(1):構(gòu)建一種基于交叉熵二值分類問(wèn)題的訓(xùn)練數(shù)據(jù),將訓(xùn)練數(shù)據(jù)分割成正負(fù)樣本。
步驟(2):提出一種雙流卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)用于計(jì)算兩張圖像的相似度,并利用步驟(1)構(gòu)建的數(shù)據(jù)去訓(xùn)練網(wǎng)絡(luò)的參數(shù)。
步驟(3):分段處理雙流網(wǎng)絡(luò)前向計(jì)算過(guò)程中分流和匯總兩個(gè)模塊,并保存中間數(shù)據(jù),節(jié)省大量計(jì)算量。
步驟(4):將網(wǎng)絡(luò)輸出結(jié)果轉(zhuǎn)化為匹配代價(jià),并利用交叉聚合算法將聚合區(qū)域內(nèi)的匹配代價(jià)平均化。
步驟(5):基于贏者通吃策略計(jì)算每一個(gè)像素點(diǎn)的視差,并插值法對(duì)結(jié)果進(jìn)行亞像素增強(qiáng)。
步驟(1)所述的構(gòu)建訓(xùn)練數(shù)據(jù)具體如下:
所有數(shù)據(jù)和對(duì)應(yīng)的標(biāo)簽均從kitti數(shù)據(jù)庫(kù)獲取,本方法只使用灰度圖像數(shù)據(jù),并對(duì)所有灰度值歸一化。對(duì)于訓(xùn)練用數(shù)據(jù),需要為每一個(gè)像素點(diǎn)構(gòu)建一個(gè)正樣本和負(fù)樣本便于之后建立基于二分類問(wèn)題的交叉熵殘差。
設(shè)
對(duì)于一個(gè)正樣本:q=(x-dt,y)
對(duì)于一個(gè)負(fù)樣本:q=(x-dt+oneg,y)
dt為點(diǎn)p對(duì)應(yīng)的視差真值,oneg為一個(gè)隨機(jī)偏移量。由于數(shù)據(jù)都只有水平方向上的視差,垂直方向是對(duì)齊的,因此只需要水平方向的視差d。所有靠近圖片邊界的點(diǎn),在取窗口時(shí),不夠的部分以0值填充。所有正樣本對(duì)應(yīng)的標(biāo)簽為1,負(fù)樣本對(duì)應(yīng)的標(biāo)簽為0
步驟(2)所使用的雙流卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的具體設(shè)計(jì)如圖2所示,以下是具體說(shuō)明:
雙流網(wǎng)絡(luò)由兩個(gè)孿生卷積神經(jīng)網(wǎng)絡(luò)組成,再將它們的結(jié)果匯總并輸出,每一個(gè)孿生卷積網(wǎng)絡(luò)都有左右兩個(gè)子網(wǎng)絡(luò),左右子網(wǎng)絡(luò)在網(wǎng)絡(luò)結(jié)構(gòu)上一樣,具體如下:
5.以32×32的窗口作為輸入
6.后接一個(gè)3×3,步長(zhǎng)為1的卷積層+relu激活層
7.后接一個(gè)2×2,步長(zhǎng)為2的下采樣層,下采樣采用maxpooling
8.后接三個(gè)3×3,步長(zhǎng)為1的卷積層+relu激活層
孿生網(wǎng)絡(luò)的兩個(gè)子網(wǎng)絡(luò)最后會(huì)得到兩個(gè)9×9的窗口,子網(wǎng)絡(luò)參數(shù)共享。
左右子網(wǎng)絡(luò)的不同在于:
左側(cè)子網(wǎng)絡(luò)的輸入是左圖的窗口,右側(cè)子網(wǎng)絡(luò)的輸入是右圖的窗口。
兩個(gè)孿生卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)也是一樣的,不同在于:
其中一個(gè)的輸入為原圖中解析度為32×32的窗口,另一個(gè)的輸入是將同一個(gè)點(diǎn)為中心的64×64的窗口下采樣成32×32的窗口。
由此可以使網(wǎng)絡(luò)擁有較大的接收域,同時(shí)又強(qiáng)化了靠近中點(diǎn)部分信息的特征提取能力。
兩個(gè)孿生網(wǎng)絡(luò)匯總時(shí)會(huì)得到4個(gè)9×9窗口,將他們拉平并連接成1×324的向量,進(jìn)入?yún)R總的決策層,結(jié)構(gòu)如下:
3.一個(gè)324×1024全連接層,輸出維度為1024,并經(jīng)過(guò)relu激活
4.一個(gè)1024×1的全鏈接層,輸出維度為1,并經(jīng)過(guò)sigmoid激活
最后經(jīng)過(guò)sigmoid層的結(jié)果作為網(wǎng)絡(luò)的最終結(jié)果。
整個(gè)網(wǎng)絡(luò)非線性計(jì)算部分由relu和sigmoid組成。
relu定義如下:
sigmoid定義如下:
h(x)表示激活層(非線性運(yùn)算)的輸出,x表示激活層之前的線性計(jì)算輸出,網(wǎng)絡(luò)中線性計(jì)算部分可以表示成:
ak(x(i))表示樣本x(i)在第k層網(wǎng)絡(luò)中,線性部分的輸出結(jié)果,wk和bk分別表示該層的乘法參數(shù)和偏移參數(shù),
網(wǎng)絡(luò)訓(xùn)練時(shí)使用的交叉熵殘差定義如下:
l(θ)=y(tǒng)(i)logh(x(i))+(1-y(i))log(1-h(x(i)))
θ表示網(wǎng)絡(luò)的參數(shù),y(i)第i個(gè)樣本對(duì)應(yīng)的標(biāo)簽值,正樣本的y(i)為1,負(fù)樣本的y(i)為0,x(i)表示樣本i,h(x(i))表示第i個(gè)樣本的網(wǎng)絡(luò)最終輸出結(jié)果。
網(wǎng)絡(luò)的參數(shù)更新利用梯度下降法,公式如下:
α表示學(xué)習(xí)率,
梯度
hθ(x(i))表示樣本x(i)在參數(shù)為θ時(shí),網(wǎng)絡(luò)的輸出結(jié)果。
步驟(3)在測(cè)試階段,對(duì)于左圖中某一點(diǎn)p(x,y),對(duì)于所有可能視差值d∈d,右圖中所有q(x-d,y)都是可能和p匹配的備選點(diǎn),令p-d表示點(diǎn)q。則需要計(jì)算所有組合<p,p-d>的相似度。
只有在決策階段才需要計(jì)算所有組合,因此在決策層之前先計(jì)算并保存所有點(diǎn)對(duì)應(yīng)窗口在孿生網(wǎng)絡(luò)的結(jié)果,保證每個(gè)窗口在孿生網(wǎng)絡(luò)中只計(jì)算一次。
最后再在決策層計(jì)算將對(duì)于p(x,y)的所有備選點(diǎn)的相似度結(jié)果,可節(jié)省不必要的計(jì)算量。
步驟(4)中,由于弱紋理現(xiàn)象和視差圖平滑化的需要,有必要進(jìn)行交叉聚合均值化同一物體上點(diǎn)的視差值,方法具體如下:
對(duì)于某一個(gè)像素點(diǎn)p,根據(jù)一定的規(guī)則進(jìn)行擴(kuò)散,可獲得區(qū)域u(p),擴(kuò)散規(guī)則如下:
|i(p)-i(pl)|<intensity(1)
||p-pl||<distance(2)
式1表示備選點(diǎn)pl與p的值的差距要小于閾值intensity,式2表示pl與p的距離要小于閾值distance。
具體選取流程如圖4所示。根據(jù)以上規(guī)則,首先基于p點(diǎn)分別從上下方向延伸,得到一組垂直的像素點(diǎn)v(p),對(duì)于
u(p)范圍如圖3所示,得到u(p)后,匹配代價(jià)均值化計(jì)算如下:
c0(p,d)=-s(<pl(p),pr(p-d)>)
步驟(5)的贏者通吃策略就是,設(shè)c(p,d)為交叉聚合的最終結(jié)果,對(duì)于左圖中某點(diǎn)p,選取所有c(p,d)中最小的結(jié)果作為匹配結(jié)果,那么d就是像素p的視差。
最后再對(duì)結(jié)果進(jìn)行亞像素增強(qiáng),公式如下:
dp為亞像素增強(qiáng)后結(jié)果,d為贏者通吃策略的結(jié)果,c為贏者通吃策略結(jié)果中對(duì)應(yīng)的c(p,d),c+為c(p,d+1),c-為c(p,d-1)。
綜上所述,本發(fā)明利用雙流卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)不同視點(diǎn)圖片中匹配點(diǎn)之間的相似度,并利用交叉聚合的方法輔助,優(yōu)化了弱紋理區(qū)域的結(jié)果,通過(guò)實(shí)驗(yàn)證明本方法確實(shí)可以準(zhǔn)確地進(jìn)行立體匹配。不僅繼承了卷積神經(jīng)網(wǎng)絡(luò)計(jì)算量小,性能穩(wěn)定等優(yōu)點(diǎn),同時(shí)擁有較大的接受域,并且更充分地提取了目標(biāo)點(diǎn)鄰近區(qū)域的特征,擁有更高的精度。