李鶴喜, 李威龍
(五邑大學(xué) 智能制造學(xué)部,廣東 江門 529020)
基于雙目視覺的三維重建技術(shù)是立體視覺的一種重要實(shí)現(xiàn)方式[1],是通過雙目相機(jī)拍攝的圖像進(jìn)行立體匹配獲取視差信息,最后恢復(fù)出三維形狀。
立體匹配是雙目視覺三維重建的關(guān)鍵技術(shù)[2],是從獲取的同一場景的兩幅圖像中,尋找重疊區(qū)域的匹配對應(yīng)點(diǎn),進(jìn)而得到視差圖。傳統(tǒng)的立體匹配一般分為4個步驟[3]:計(jì)算像素對應(yīng)點(diǎn)的匹配代價并構(gòu)建代價空間、代價聚合、視差估計(jì)和優(yōu)化。Hischmiller H[4]提出了半全局立體匹配算法(SGM),該方法使用了互相關(guān)信息作為匹配代價,較好地實(shí)現(xiàn)了在精度和速度上的平衡;但是由于采用手工設(shè)計(jì)的特征進(jìn)行匹配,在精度方面仍然難以達(dá)到令人滿意的效果。Zbontar J等[5]提出了一種基于深度學(xué)習(xí)的立體匹配MC-CNN算法,此后,相關(guān)學(xué)者對基于深度學(xué)習(xí)的立體匹配算法[6~11]做了大量研究?,F(xiàn)有的基于深度學(xué)習(xí)的立體匹配算法大致可以分為兩大類:視差直接回歸方法和基于匹配代價空間方法。視差直接回歸方法不考慮立體幾何約束[12]直接從輸入的圖像對中恢復(fù)視差,如:文獻(xiàn)[6]中的DispNetC算法采用一種U型編碼器-解碼器結(jié)構(gòu)來回歸視差;基于匹配代價空間方法通過視差偏移來構(gòu)建3維代價空間或4維代價空間,文獻(xiàn)[8]中的GC-Net算法通過聚合操作來構(gòu)建4維代價空間。從視差圖中恢復(fù)場景的深度信息在自動駕駛,增強(qiáng)現(xiàn)實(shí),機(jī)器人導(dǎo)航等方面應(yīng)用廣泛,而這些應(yīng)用大多數(shù)都要求立體匹配的實(shí)時性?,F(xiàn)有的基于深度學(xué)習(xí)的立體匹配在精度方面表現(xiàn)越優(yōu),大多數(shù)模型的參數(shù)量就越大,難以達(dá)到實(shí)時的要求,GC-Net算法在構(gòu)建匹配代價空間時采用聚合操作,這就使得算法的規(guī)模增加,參數(shù)量達(dá)到3.5×106;AutoDispNet算法采用神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索技術(shù),其中學(xué)習(xí)編碼器-解碼器采用了較多的網(wǎng)絡(luò)架構(gòu)單元,使得網(wǎng)絡(luò)的參數(shù)量更是達(dá)到1.11×108。
針對上述問題,本文提出一種基于可變形卷積的立體匹配算法。首先,采用二維可變形卷積對輸入的左右“圖像對”提取更加有效的特征;然后,利用三維可變形卷積在匹配代價空間中有效地聚合兩圖像之間的相關(guān)性;最后,以級聯(lián)殘差學(xué)習(xí)方式構(gòu)建的3個階段,來有效地解決匹配代價空間所帶來的計(jì)算參數(shù)量大的問題,達(dá)到立體匹配實(shí)時的要求。
本文將從雙目相機(jī)標(biāo)定、立體校正、立體匹配和三維物體重建這4個完整的立體視覺工作流程,來敘述所提出算法的基本原理和實(shí)現(xiàn)效果。
相機(jī)標(biāo)定的目的就是建立相機(jī)圖像像素位置與物體空間位置之間的關(guān)系,即圖像坐標(biāo)系與世界坐標(biāo)系之間的關(guān)系。主要是求解相機(jī)的內(nèi)外參數(shù)和畸變參數(shù)。
在不考慮相機(jī)畸變參數(shù)的情況下,假定已知像素坐標(biāo)系和世界坐標(biāo)系的齊次坐標(biāo)映射關(guān)系如下:
(1)
式中:(u,v)表示像素坐標(biāo)點(diǎn);K表示相機(jī)內(nèi)參矩陣;fx=f×sx,fy=f×sy,其中,f表示物理焦距,sx和sy分別為x和y方向上的1 mm長度所代表像素;(u0,v0)表示像素坐標(biāo)原點(diǎn);γ表示制造誤差產(chǎn)生的兩個坐標(biāo)軸偏斜參數(shù),通??梢院雎?;R=[r1,r2,r3],表示旋轉(zhuǎn)矩陣;r1,r2,r3分別表示旋轉(zhuǎn)矩陣每1列的向量;t表示平移向量,代表相機(jī)外參;(xc,yc,zc)表示相機(jī)坐標(biāo)點(diǎn),(xw,yw,zw)表示世界坐標(biāo)點(diǎn)。
采用單平面棋盤格進(jìn)行標(biāo)定,可以假定棋盤位于世界坐標(biāo)zw=0的位置,式(1)可簡化為
(2)
(3)
式中:xij表示棋盤角點(diǎn)在像素坐標(biāo)下的實(shí)際值,n、m分別表示所選取的角點(diǎn)在不同平面上的成像點(diǎn)總分?jǐn)?shù)和對應(yīng)的空間點(diǎn)總數(shù);x′表示估計(jì)值;三維空間點(diǎn)Pj(xw,yw,zw)經(jīng)過初始的R,t,K變換得到x′。
由相機(jī)透鏡形狀引起的畸變稱為徑向畸變;而在相機(jī)組裝過程中,如果透鏡與成像平面不平行,就會引入切向畸變。對于畸變,可用以下函數(shù)進(jìn)行矯正。
徑向畸變矯正函數(shù):
(4)
式中:(xd,yd)表示畸變后的圖像坐標(biāo)點(diǎn);(x=xc/zc,y=yc/zc)表示理想坐標(biāo)點(diǎn);(k1,k2,k3)表示徑向畸變參數(shù);r2=x2+y2。
切向畸變矯正函數(shù):
(5)
式中p1和p2表示切向畸變參數(shù)。
考慮到透鏡畸變的影響,可將畸變參數(shù)一起放到優(yōu)化函數(shù)中,式(3)變?yōu)?/p>
(6)
上述為單目標(biāo)定,雙目標(biāo)定就是分別對左右相機(jī)進(jìn)行單目標(biāo)定,得到左右相機(jī)的內(nèi)外參數(shù),畸變系數(shù),然后確定左右相機(jī)坐標(biāo)系之間的相對關(guān)系:
(7)
式中:旋轉(zhuǎn)矩陣R′和平移向量t′表示左相機(jī)到右相機(jī)的坐標(biāo)轉(zhuǎn)換;Rl和tl表示左相機(jī)外參,Rr和tr表示右相機(jī)外參。
立體校正前后模型圖如圖1所示,即在立體匹配之前,利用雙目相機(jī)標(biāo)定的內(nèi)參以及左右相機(jī)坐標(biāo)系之間的相對關(guān)系,把消除畸變后的兩幅圖像的極線對齊。
圖1 立體校正Fig.1 Stereo rectification
基于可變形卷積的立體匹配算法由特征提取、匹配代價空間、代價后處理、視差/殘差回歸與視差優(yōu)化模塊組成,立體匹配算法設(shè)計(jì)如圖2所示。
特征提取模塊是一個在編碼階段引入2維可變形卷積沙漏型的編碼器-解碼器;匹配代價空間的構(gòu)建采用DispNetC的相關(guān)聯(lián)操作來形成3維代價空間;代價后處理模塊采用殘差結(jié)構(gòu)的3維可變形卷積對匹配代價空間進(jìn)行正則化處理;視差回歸模塊采用GC-Net所提出的soft argmin方法,表達(dá)如下:
(8)
視差優(yōu)化模塊為空間傳播網(wǎng)絡(luò)(spatial propagation networks)[14],該網(wǎng)絡(luò)能提取圖像的相似度矩陣,對預(yù)測的視差值進(jìn)行指導(dǎo)優(yōu)化。
算法分3個階段得到不同精度的視差圖。
在第1階段,特征提取模塊提取出分辨率為1/16的特征圖F1,因此,候選的視差值范圍變成0~1/16Dmax,所以在視差回歸與優(yōu)化后,需要通過上采樣操作和乘以16倍來得到第1階段的視差圖;
圖2 立體匹配算法設(shè)計(jì)Fig.2 Design of stereo matching algorithm
在第2階段,將候選的殘差值d的范圍設(shè)置為-2~2,根據(jù)第1階段的視差圖在分辨率為1/8的右特征圖F2進(jìn)行變形(warp)操作形成新的特征圖,然后與左特征圖形成匹配代價空間,回歸的殘差圖添加到第1階段的視差圖,再對視差圖進(jìn)行優(yōu)化,得到第2階段的視差圖;第3階段與第2階段同理進(jìn)行。
普通的卷積由兩個步驟組成:1) 在輸入特征圖x上使用一個規(guī)則的網(wǎng)格R進(jìn)行采樣;2) 采樣值乘以權(quán)值w再進(jìn)行求和。例如,R={(-1,-1),(-1,0),…,(0,1),(1,1)}表示一個擴(kuò)張率為1的 3×3的網(wǎng)格,對于在輸出特征圖y上的每個位置p0,有:
(9)
式中:pn表示屬于R的每一個位置。
在可變形卷積中,R加入了偏移值{Δpn|n=1,…,N=|R|},式(9)變成:
(10)
現(xiàn)在,采樣是在規(guī)則和偏移的位置上進(jìn)行pn+Δpn,因?yàn)棣n為小數(shù),式(10)需要通過線性插值來實(shí)現(xiàn),有:
(11)
式中:p表示任意的位置,在式(10)中p=p0+pn+Δpn;q表示特征圖x的每一個整數(shù)位置,G(*)有兩個維度,可以分為兩個一維核:
G(q,p)=g(qx,px)·g(qy,py)
(12)
式中:g(qx,px)=max(0,1-|qx-px|)。
圖3為卷積核大小為3×3的二維可變形卷積。其偏移值是通過在同一個特征圖上添加一層卷積獲得,其卷積核的大小和擴(kuò)張率與當(dāng)前可變形卷積核一樣。2N表示卷積的通道數(shù),對應(yīng)N個二維偏移值。三維可變形卷積是二維可變形卷積的推廣,卷積的維度增加一維,其原理相同。
圖3 3×3 二維可變形卷積Fig.3 3×3 2D deformable convolution
空間傳播網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示,用于優(yōu)化回歸的視差圖。主要包含一個可微分的線性傳播模塊和一個學(xué)習(xí)相似度矩陣的深度卷積神經(jīng)網(wǎng)絡(luò)模塊??臻g傳播網(wǎng)絡(luò)的線性傳播是在4個固定的方向:左到右,上到下和反向,對矩陣逐行或列進(jìn)行掃描。下面主要介紹從左到右方向,其它方向原理相同。
圖4 空間傳播網(wǎng)絡(luò)Fig.4 Space propagation network
首先,假設(shè)兩個大小都為n×n的二維圖像X和H,其中X為空間傳播前圖像,H為空間傳播后圖像,大小為n×1的xt和ht分別為它們各自的第t列。通過使用n×n線性變換矩陣Wt在相鄰兩列從左到右進(jìn)行線性傳播,
ht=(I-Dt)xt+Wtht-1,t∈[2,n]
(13)
式中:I表示n×n單位矩陣;初始條件為h1=x1;Dt(i,i)為對角矩陣,第i個元素為Wt第i行的求和。
(14)
因此,矩陣H(ht∈H,t∈[1,n])是按列以遞歸的方式進(jìn)行更新,對于每一列,ht為其前一列ht-1乘以矩陣Wt并與xt結(jié)合產(chǎn)生,是線性的。當(dāng)遞歸完成時,式(13)的矩陣表達(dá)如下:
(15)
深度卷積神經(jīng)網(wǎng)絡(luò)模塊主要是用來輸出相似性矩陣G,然后進(jìn)行線性傳播得到Hv。算法主要用深度卷積神經(jīng)網(wǎng)絡(luò)和線性傳播模塊從左圖像中學(xué)習(xí)H,來指導(dǎo)優(yōu)化回歸的視差圖。
損失函數(shù)主要采用平滑的L1損失與L2損失相比,平滑的L1更加魯棒和對異常值敏感性更低,定義如下:
(16)
(17)
采用7×10的棋盤格對雙目相機(jī)進(jìn)行標(biāo)定,每個格子20 mm。雙目相機(jī)保持不動,不斷改變棋盤的位置采集25組圖片來進(jìn)行標(biāo)定。圖5為棋盤角點(diǎn)提取示意圖。
圖5 棋盤角點(diǎn)提取Fig.5 Checkerboard corner extraction
標(biāo)定參數(shù)結(jié)果如表1所示。
表1 左右相機(jī)標(biāo)定參數(shù)結(jié)果Tab.1 Results of left and right camera calibration parameters
立體校正采用Bouguet[15]校正算法,立體校正結(jié)果如圖6所示。
圖6 立體校正結(jié)果Fig.6 Resul of stereo rectification
首先對基于可變形卷積的立體匹配算法在SceneFlow[6]、KITTI2015[16]數(shù)據(jù)集上進(jìn)行驗(yàn)證,并和傳統(tǒng)算法進(jìn)行比較。
數(shù)據(jù)集:SceneFlow是一個大規(guī)模合成的數(shù)據(jù)集,包含35454張訓(xùn)練圖像對以及4370張測試圖像對,分辨率為540×960 pixels,且提供了稠密的視差圖;KITTI2015包括200張訓(xùn)練圖像對以及200張測試圖像對,記錄了不同天氣條件下的真實(shí)場景,分辨率為 1 240×376 pixels,提供了由激光雷達(dá)獲取的稀疏視差圖。
評價指標(biāo):對于SceneFlow數(shù)據(jù)集采用端點(diǎn)誤差(end-point-error,EPE)作為評價指標(biāo),即預(yù)測視差值與視差真值的平均歐氏距離;對于KITTI2015數(shù)據(jù)集采用3像素誤差(3-pixel-error,3PE)作為評價指標(biāo),即圖像中誤差大于3像素的點(diǎn)所占總像素點(diǎn)的百分比。
立體匹配算法網(wǎng)絡(luò)如表4所示,所有卷積操作無偏置,后帶有批標(biāo)準(zhǔn)化(batch normalization)和ReLU激活函數(shù)。
立體匹配算法實(shí)驗(yàn)均在Ubuntu16.04上進(jìn)行,訓(xùn)練和測試使用1塊GPU顯卡,型號為NVIDIA GeForce GTX2080Ti顯卡,采用的深度學(xué)習(xí)框架為pytorch1.2.0,優(yōu)化器選擇Adam,參數(shù)設(shè)定:β1=0.9,β2=0.99,最大視差設(shè)為192。
圖7為算法在KITTI2015數(shù)據(jù)集上的測試結(jié)果,每個階段的3像素誤差(3PE)以及運(yùn)行時間如表2所示。表3為在SceneFlow數(shù)據(jù)集上3個階段的端點(diǎn)誤差(EPE)測試結(jié)果。
圖7 KITTI2015數(shù)據(jù)集上的測試結(jié)果Fig.7 KITTI2015 dataset test results
表2 在KITTI2015數(shù)據(jù)集的3個階段測試結(jié)果Tab.2 Three-stage test results on the KITTI2015 dataset
表3 在SceneFlow數(shù)據(jù)集的3個階段測試結(jié)果Tab.3 Three-stage test results on the SceneFlow dataset
從圖7、表2、表3中可看出,一個階段比一個階段的視差精度高,而且運(yùn)行時間只是略微增加,該算法可以根據(jù)不同的需求切換到不同的階段,得到不同精度的視差圖,從而實(shí)現(xiàn)由粗到細(xì)的三維重建。
算法網(wǎng)絡(luò)如表4所示。
表4 算法網(wǎng)絡(luò)Tab.4 Algorithmic network
本文采用的立體匹配算法與其它算法的對比如表5和表6所示,其中,表5為不同算法在KITTI2015數(shù)據(jù)集上的測試結(jié)果,其中根據(jù)是否為遮擋區(qū)域可分為All和Noc:All表示全圖區(qū)域,Noc表示非遮擋區(qū)域;根據(jù)其為背景、前景和全圖區(qū)域可分為D1-bg、D1-fg和D1-all這3種情況,評價指標(biāo)都為3PE。由表5可以看出:本文算法比文獻(xiàn)[5]中MC-CNN、文獻(xiàn)[17]中Content-CNN、文獻(xiàn)[6]中psNetC算法效果要好,比文獻(xiàn)[8]中GC-Net、文獻(xiàn)[18]中iResNet算法性能要稍差,但其運(yùn)行時間較快,僅為0.02 s。表6是與文獻(xiàn)[8]中GC-Net、文獻(xiàn)[18]中iResNet這兩個典型的立體匹配算法在SceneFlow數(shù)據(jù)集上的對比,可見其端點(diǎn)誤差降低,參數(shù)量僅為0.5×106。
表5 在KITTI2015數(shù)據(jù)集的測試結(jié)果Tab.5 Test results on the KITTI2015 dataset
表6 在SceneFlow數(shù)據(jù)集的測試結(jié)果Tab.6 Test results on the SceneFlow dataset
實(shí)驗(yàn)是在室內(nèi)實(shí)現(xiàn)目標(biāo)立體視覺的三維檢測與重建。待檢測的目標(biāo)是桌面上的杯子,采用前面標(biāo)定的雙目攝像機(jī)進(jìn)行左右兩幅圖像采集,利用可變形卷積立體匹配算法獲得3個階段的視差圖。利用視差與深度的轉(zhuǎn)換關(guān)系來得到物體深度值Z:
Z=(Bf)/d
(18)
式中:B表示雙目相機(jī)的基線;f表示焦距;d為視差值。
杯子深度圖的測試結(jié)果如圖8所示。得到3個階段的深度圖之后,在Open3D上對杯子進(jìn)行三維重建,重建效果如圖9所示。
圖8 杯子深度圖Fig.8 Cup depth map
圖9 3個階段的三維重建效果Fig.9 Three-stage 3D reconstruction effect
由重建的結(jié)果來看出:每一階段的物體輪廓都基本顯示出來,一個階段比一個階段重建的效果好。
本文提出了一種基于可變形卷積的立體匹配算法,與其他典型的基于深度學(xué)習(xí)的立體匹配算法相比,該算法不僅參數(shù)量少,僅為0.5×106,而且運(yùn)行時間也最短,只有0.02 s,可以用于像機(jī)器人導(dǎo)航這類視場中的三維物體的快速重建。還可以根據(jù)不同的等級需求,切換到不同的階段生成不同精度的視差圖來進(jìn)行三維物體重建,能夠滿足不同場合立體視覺的實(shí)時需求。