李 鵬,黃 鵬,凌智琛,鄧甘霖
(湘潭大學(xué)自動(dòng)化與電子信息學(xué)院,湖南 湘潭 411100)
移動(dòng)機(jī)器人和自動(dòng)駕駛技術(shù)近年來得到了快速發(fā)展,對(duì)自主定位和導(dǎo)航的精度要求也越來越高。在室內(nèi)或弱衛(wèi)星導(dǎo)航環(huán)境下,基于視覺的同時(shí)定位與建圖(simultaneous localization and mapping,SLAM)技術(shù)有著至關(guān)重要的作用,視覺里程計(jì)(visual odometry,VO)作為視覺SLAM的關(guān)鍵環(huán)節(jié),也受到了越來越多的關(guān)注和研究。
視覺里程計(jì)可分為基于特征的方法和直接方法?;谔卣鞯姆椒╗1-2]通過檢測(cè)特征點(diǎn)和提取局部描述符作為中間表示,在圖像之間進(jìn)行特征匹配,并且使用重投影誤差來優(yōu)化相機(jī)位姿。而直接方法[3-5]則對(duì)圖像形成過程建模,通過假設(shè)灰度不變性對(duì)光度誤差函數(shù)進(jìn)行優(yōu)化。
深度學(xué)習(xí)近年來席卷了計(jì)算機(jī)視覺領(lǐng)域,基于深度學(xué)習(xí)的SLAM研究也取得了顯著進(jìn)展。目前相關(guān)工作主要關(guān)注SLAM標(biāo)準(zhǔn)環(huán)節(jié)的子問題,例如特征提取[6]、特征匹配[7-8]和異常值剔除[9]等。端到端的視覺里程計(jì)框架[10-11]提出了從卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks, CNN)中直接回歸相機(jī)相對(duì)姿態(tài)或定位信息。CNN-SLAM[12]在LSD-SLAM[4]的基礎(chǔ)上,將深度估計(jì)和圖像匹配均替換成基于CNN[13]的方法,但在室外精度嚴(yán)重不足。GEN-SLAM[14]使用單目RGB相機(jī),利用傳統(tǒng)幾何SLAM的結(jié)果來訓(xùn)練網(wǎng)絡(luò)得到位姿和深度估計(jì)。文獻(xiàn)[15]提出了一種基于改進(jìn)雙流網(wǎng)絡(luò)結(jié)構(gòu)的VO,并在卷積層中加入注意力機(jī)制。SfM-Lear-ner[11]同時(shí)訓(xùn)練姿態(tài)和深度網(wǎng)絡(luò),得到了與ORB-SLAM相競(jìng)爭(zhēng)的結(jié)果。Deep-VO-Feat[10]和D3VO[16]使用雙目相機(jī)進(jìn)行訓(xùn)練,可在單目相機(jī)運(yùn)行下直接得到真實(shí)尺度下的軌跡。文獻(xiàn)[17]使用長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)進(jìn)行時(shí)序建模,端到端地輸出位姿。然而,由于缺乏多視圖幾何約束[18],端到端的深度學(xué)習(xí)方法往往面臨著極大的尺度漂移問題,很難取得與傳統(tǒng)VO[19]相競(jìng)爭(zhēng)的結(jié)果。
光流估計(jì)作為視覺SLAM的子問題,傳統(tǒng)方法大多是基于Horn-Schunck算法[20]與Lucas-Kanade算法[21]進(jìn)行求解。最近,研究發(fā)現(xiàn)基于深度學(xué)習(xí)的方法可提取密集光流,在精度上大大優(yōu)于傳統(tǒng)方法。結(jié)合人工合成和真實(shí)數(shù)據(jù)的訓(xùn)練標(biāo)簽,FlowNet[22]首先提出了使用CNN訓(xùn)練光流,SpyNet[23]和PWC-Net[24]等使用從粗到細(xì)的金字塔結(jié)構(gòu)進(jìn)行迭代細(xì)化。
本文提出了一種基于無監(jiān)督深度網(wǎng)絡(luò)和光流網(wǎng)絡(luò)的視覺里程計(jì)。該方法結(jié)合了深度學(xué)習(xí)提取特征的魯棒性和多視圖投影原理的幾何約束。利用深度一致性和圖像相似性損失函數(shù)得到尺度一致的深度估計(jì)網(wǎng)絡(luò),并與RAFT(recurrent all-pairs field transforms)光流網(wǎng)絡(luò)[25]聯(lián)合訓(xùn)練得到更加魯棒的光流。深度估計(jì)網(wǎng)絡(luò)和光流網(wǎng)絡(luò)作為中間信息,并不直接輸出相機(jī)位姿,而是根據(jù)前后一致性誤差,在密集光流中進(jìn)行稀疏采樣,得到準(zhǔn)確的對(duì)應(yīng)關(guān)系。然后,利用多視圖幾何約束,并根據(jù)其結(jié)構(gòu)關(guān)系選擇最優(yōu)跟蹤方式,聯(lián)合深度網(wǎng)絡(luò)進(jìn)行深度對(duì)齊,從而得到尺度一致的視覺里程計(jì)。
無監(jiān)督學(xué)習(xí)的關(guān)鍵是使用圖像重建損失[26],利用估計(jì)的深度、位姿、光流和源圖像計(jì)算合成圖像與目標(biāo)圖像之間的差異。單視圖深度網(wǎng)絡(luò)、光流網(wǎng)絡(luò)和相機(jī)相對(duì)姿態(tài)網(wǎng)絡(luò)是3個(gè)單獨(dú)的任務(wù),但他們有相互關(guān)聯(lián)的圖像相似性約束關(guān)系,通過視圖合成,在現(xiàn)有無監(jiān)督信號(hào)的基礎(chǔ)上,結(jié)合空間一致性損失函數(shù)和圖像相似性損失函數(shù),耦合這3個(gè)網(wǎng)絡(luò)的訓(xùn)練過程。
網(wǎng)絡(luò)框架主要包括三部分:單視圖深度估計(jì)網(wǎng)絡(luò)、姿態(tài)估計(jì)網(wǎng)絡(luò)和光流網(wǎng)絡(luò)。深度估計(jì)網(wǎng)絡(luò)接收單個(gè)RGB圖像作為輸入并輸出逆深度圖,位姿網(wǎng)絡(luò)和光流網(wǎng)絡(luò)均接收兩幀圖像作為輸入,位姿網(wǎng)絡(luò)輸出兩幀之間的六自由度相對(duì)位姿,光流網(wǎng)絡(luò)輸出兩幀之間的雙通道光流。
網(wǎng)絡(luò)架構(gòu)整體流程如圖1所示,在訓(xùn)練期間,同時(shí)估計(jì)相鄰兩幀圖像深度,使用空間一致性約束使其深度信息一致。姿態(tài)網(wǎng)絡(luò)和光流網(wǎng)絡(luò)的輸入為兩張相鄰RGB圖像,聯(lián)合相對(duì)位姿估計(jì)和深度估計(jì)得到合成圖像,采用光度一致性損失函數(shù)和圖像平滑損失函數(shù)優(yōu)化深度信息和相機(jī)姿態(tài),通過合成光流對(duì)RAFT網(wǎng)絡(luò)進(jìn)行聯(lián)合優(yōu)化。與網(wǎng)絡(luò)單獨(dú)訓(xùn)練相比,結(jié)合多任務(wù)一致性約束,加強(qiáng)了網(wǎng)絡(luò)之間的聯(lián)系,得到了更加精確和魯棒的深度、姿態(tài)和光流估計(jì)。
圖1 無監(jiān)督深度學(xué)習(xí)架構(gòu)Fig.1 Architecture of unsupervised deep learning
在缺少真實(shí)深度信息和光流信息的情況下,無監(jiān)督網(wǎng)絡(luò)利用合成視圖,以幀間相似性作為監(jiān)督信號(hào)訓(xùn)練網(wǎng)絡(luò)模型。深度網(wǎng)絡(luò)和光流網(wǎng)絡(luò)通過姿態(tài)網(wǎng)絡(luò)進(jìn)行幾何關(guān)聯(lián),其中相對(duì)姿態(tài)估計(jì)網(wǎng)絡(luò)用于幫助約束深度網(wǎng)絡(luò)和光流網(wǎng)絡(luò),且只在訓(xùn)練期間使用。
考慮兩張相鄰圖像Ik和Ik+1,通過相對(duì)姿態(tài)網(wǎng)絡(luò)和深度估計(jì)網(wǎng)絡(luò)得到相機(jī)相鄰幀之間的運(yùn)動(dòng)Tk→k+1和單視圖深度Dk、Dk+1,根據(jù)等式
(1)
(2)
無監(jiān)督訓(xùn)練通常假設(shè)幀間相同物體表面外觀也相同,在簡(jiǎn)單逐像素差的基礎(chǔ)上,引入結(jié)構(gòu)相似度(structural similarity, SSIM)損失以學(xué)習(xí)相鄰幀之間的結(jié)構(gòu)信息,使用L1和SSIM[28]損失結(jié)合作為重建圖像損失
Lp=
(3)
其中,α=0.85;SSIM使用3×3大小的窗口計(jì)算;V是相鄰幀有效共視區(qū)域。
在低紋理場(chǎng)景或均勻區(qū)域下,假設(shè)的光度不變性會(huì)導(dǎo)致預(yù)測(cè)空洞問題,為了得到平滑的深度預(yù)測(cè),引入一階邊緣平滑項(xiàng)損失[29]
Ls=
(4)
對(duì)于動(dòng)態(tài)物體,聯(lián)合圖像分割網(wǎng)絡(luò)[30]進(jìn)行掩碼處理,大大增加了網(wǎng)絡(luò)計(jì)算負(fù)擔(dān)。本文根據(jù)Monodepth2[31],使用二進(jìn)制掩碼,忽略與攝像機(jī)同步運(yùn)動(dòng)的對(duì)象,該掩碼在網(wǎng)絡(luò)的正向傳遞中自動(dòng)計(jì)算
(5)
選擇使用泛化能力強(qiáng)、快速且準(zhǔn)確的RAFT網(wǎng)絡(luò)作為光流主干網(wǎng)絡(luò),與使用從粗到細(xì)的金字塔迭代式網(wǎng)絡(luò)[32]相比,RAFT只以高分辨率維護(hù)和更新單個(gè)光流場(chǎng),并且在迭代期間共享權(quán)重,克服了從粗到細(xì)優(yōu)化網(wǎng)絡(luò)時(shí)難以在粗分辨率下修正錯(cuò)誤和難以檢測(cè)小物體的快速運(yùn)動(dòng)這兩大困難。通過合成光流和RAFT網(wǎng)絡(luò)的誤差聯(lián)合訓(xùn)練進(jìn)行微調(diào)
(6)
其中,Fsyn表示合成光流網(wǎng)絡(luò);FR表示RAFT網(wǎng)絡(luò)。
在訓(xùn)練中,為了得到結(jié)構(gòu)一致的深度預(yù)測(cè),通過光流網(wǎng)絡(luò)將Dk+1與Dk對(duì)齊,計(jì)算深度一致性損失
(7)
綜上所述,網(wǎng)絡(luò)總體損失函數(shù)為
L=Lp+λsLs+λfLf+λdcLdc
(8)
其中,λs、λf和λdc表示各項(xiàng)損失的權(quán)重,所有損失共同應(yīng)用于深度網(wǎng)絡(luò)和光流網(wǎng)絡(luò)。
傳統(tǒng)視覺里程計(jì)一般分為初始化和運(yùn)動(dòng)跟蹤兩個(gè)過程,在初始化環(huán)節(jié)采用對(duì)極幾何方法得到稀疏三維點(diǎn)云,然后在跟蹤過程中使用運(yùn)動(dòng)模型或者PnP方法求解[R|t],并重新三角化新的匹配點(diǎn),在此過程中會(huì)引入累積誤差。本文使用深度網(wǎng)絡(luò)得到尺度一致的深度信息,三角化對(duì)齊過程獨(dú)立進(jìn)行,可以最大限度減少尺度漂移問題。
為了從光流網(wǎng)絡(luò)中提取稀疏匹配,同時(shí)使用前向光流和后向光流,利用雙向一致性誤差過濾得到精確的稀疏對(duì)應(yīng)關(guān)系(見圖3)。由于不依賴運(yùn)動(dòng)模型進(jìn)行局部匹配,避免了突然的運(yùn)動(dòng)轉(zhuǎn)向引起的大量特征點(diǎn)誤匹配問題。
圖3 從前向和后向光流中提取稀疏匹配關(guān)系Fig.3 Extraction of sparse matching relation from forward and backward optical flow
受ORB-SLAM初始化方法啟發(fā),考慮了2D-2D和3D-3D兩種跟蹤方式。ORB-SLAM使用模型得分方法僅進(jìn)行初始化模型選擇,跟蹤過程則使用恒速運(yùn)動(dòng)模型以及PnP方法求解運(yùn)動(dòng)軌跡。由于同時(shí)具有2D-2D和3D-3D對(duì)應(yīng)關(guān)系,不必進(jìn)行復(fù)雜的初始化調(diào)試,僅使用模型得分RF進(jìn)行跟蹤方式的選擇。首先求解單應(yīng)矩陣Hcr和本質(zhì)矩陣Fcr
(9)
其中,pc和pr為相鄰兩幀匹配點(diǎn),然后為H模型和F模型分別計(jì)算SH和SF得分(M為H或F)
(10)
當(dāng)發(fā)生三維點(diǎn)云結(jié)構(gòu)退化[33]的情況時(shí),ORB-SLAM選擇分解單應(yīng)矩陣求解相對(duì)運(yùn)動(dòng),經(jīng)常面臨初始化失敗問題。本文通過深度網(wǎng)絡(luò)得到尺度一致的深度信息,避免分解單應(yīng)矩陣,通過奇異值分解(singular value decomposition, SVD)[34]方法求解[R|t]
(11)
其中,p′表示與p相匹配的像素。
方法流程如下:
2)稀疏點(diǎn)采樣:將圖像劃分為10×10網(wǎng)格區(qū)域,并在每個(gè)區(qū)域中取dF小于閾值δ的前20組稀疏匹配點(diǎn);
3)模型選擇:計(jì)算本質(zhì)矩陣和單應(yīng)矩陣,然后計(jì)算模型得分RF=SF/(SF+SH),如果RF>0.5,則選擇2D-2D跟蹤模式,反之,則選擇3D-3D跟蹤模式;
采用Ubuntu 20.04系統(tǒng),CPU為 i5-10300H,GPU為 NVIDIA Geforce GTX 1660Ti,顯卡內(nèi)存為6 GB,設(shè)備內(nèi)存為16 GB。在KITTI數(shù)據(jù)集上進(jìn)行視覺里程計(jì)實(shí)驗(yàn),并與傳統(tǒng)方法和基于端到端的深度學(xué)習(xí)的方法進(jìn)行對(duì)比,以驗(yàn)證方法的有效性。
深度估計(jì)網(wǎng)絡(luò)基于通用的U-Net[35]網(wǎng)絡(luò)架構(gòu),即編碼器-解碼器結(jié)構(gòu),如圖4所示。以ResNet18[36]作為編碼器網(wǎng)絡(luò),解碼器使用跳躍連接架構(gòu),網(wǎng)絡(luò)層之間的跳躍連接使其能同時(shí)融合淺層幾何信息和高層抽象特征。由于相鄰幀之間的運(yùn)動(dòng)很小,多尺度輸出既不準(zhǔn)確也不必要,本文只輸出單尺度深度預(yù)測(cè)結(jié)果,這極大節(jié)省了計(jì)算資源。光流網(wǎng)絡(luò)使用RAFT網(wǎng)絡(luò)作為主干網(wǎng)絡(luò),相對(duì)位姿網(wǎng)絡(luò)是一個(gè)具有ResNet18結(jié)構(gòu)的姿態(tài)估計(jì)網(wǎng)絡(luò),使用軸角表示三維旋轉(zhuǎn)。
圖4 深度估計(jì)網(wǎng)絡(luò)架構(gòu)Fig.4 Architecture of depth estimation network
網(wǎng)絡(luò)模型使用Pytorch框架實(shí)現(xiàn),使用Adam優(yōu)化器進(jìn)行兩階段訓(xùn)練。第一階段訓(xùn)練20個(gè)周期,學(xué)習(xí)速率設(shè)置為10-4,批量樣本大小為8。第二階段訓(xùn)練100個(gè)周期,學(xué)習(xí)速率設(shè)置為10-5,批量樣本大小為4。在訓(xùn)練中,設(shè)置λs=0.4,λf=0.4,λdc=0.1,將圖像序列大小調(diào)整為480×640。
由于單目相機(jī)固有的缺陷,無法得到真實(shí)世界的絕對(duì)深度估計(jì),為了進(jìn)行比較,參照SC-SfMLearner的方法,將深度圖乘以尺度標(biāo)量r與真實(shí)尺度中值匹配,在KITTI數(shù)據(jù)集上使用平均絕對(duì)相對(duì)誤差(AbsRel)、平均log10誤差(SqRel)、平均均方根誤差(RMSE)、平均均方根log誤差(RMSElog)以及不同閾值(δ<1.25,δ<1.252,δ<1.253)的精度進(jìn)行深度評(píng)估。如表1所示,加粗字體表示該評(píng)估方面最好的結(jié)果,提出的方法與SfMLearner、Monodepth2及SC-SfMLearner相比,均有較大優(yōu)勢(shì),SfMLearner與Monodepth2均無法達(dá)到連續(xù)深度一致性,SC-SfMLearner與提出的方法可在長(zhǎng)時(shí)間序列上達(dá)到深度一致性,并由此減少了視覺里程計(jì)的尺度漂移問題。
表1 KITTI數(shù)據(jù)集單視圖深度估計(jì)結(jié)果Tab.1 Single-view depth estimation results of KITTI
KITTI數(shù)據(jù)集共提供了22組序列數(shù)據(jù),其中0~10提供了真實(shí)軌跡,實(shí)驗(yàn)在0~8序列進(jìn)行訓(xùn)練,9~10序列進(jìn)行評(píng)估測(cè)試,并與ORB-SLAM2和端到端的深度學(xué)習(xí)方法進(jìn)行對(duì)比研究。由于單目視覺里程計(jì)無法得到真實(shí)世界下的尺度,為了公平比較,統(tǒng)一將結(jié)果與真實(shí)軌跡尺度對(duì)齊。定性軌跡結(jié)果如圖5和圖6所示,相較于ORB-SLAM2、SfMLearner、SC-SfMLerner和Depth-VO-Feat,本文所提方法的軌跡平移漂移量明顯減少(見表2),這得益于尺度一致的深度估計(jì)。盡管Depth-VO-Feat使用雙目相機(jī)訓(xùn)練,能夠得到與真實(shí)世界尺度一致的結(jié)果,但其尺度漂移問題卻最為嚴(yán)重。相反,由于提取了精確的匹配關(guān)系,經(jīng)過尺度對(duì)齊之后,本文的方法與真實(shí)軌跡更加吻合。
圖5 KITTI 09序列軌跡Fig.5 Track of KITTI sequence 09
圖6 KITTI 10序列軌跡Fig.6 Track of KITTI sequence 10
表2 KITTI 09與10序列對(duì)比Tab.2 Comparison of KITTI sequence 09 and sequence 10
本文提出了一種基于無監(jiān)督網(wǎng)絡(luò)的視覺里程計(jì)方法,通過光流網(wǎng)絡(luò)與深度網(wǎng)絡(luò)進(jìn)行特征匹配與尺度對(duì)齊,并結(jié)合傳統(tǒng)方法的幾何約束條件進(jìn)行優(yōu)化,提高了精度與魯棒性,實(shí)驗(yàn)結(jié)果表明:
1)本文所提的基于無監(jiān)督網(wǎng)絡(luò)的方法有效提高了單目視覺里程計(jì)的精度;
2)有效減少了傳統(tǒng)單目視覺里程計(jì)的尺度漂移和尺度不一致問題;
3)提出的聯(lián)合光流網(wǎng)絡(luò)與深度網(wǎng)絡(luò)訓(xùn)練方法有效提高了深度網(wǎng)絡(luò)的精度。