梁 鴻,陳靈娜+,何嘯峰,周揚(yáng)帆,蔣良衛(wèi)
(1.南華大學(xué) 計(jì)算機(jī)學(xué)院,湖南 衡陽(yáng) 421001; 2. 湖南財(cái)經(jīng)工業(yè)職業(yè)技術(shù)學(xué)院 電子信息系,湖南 衡陽(yáng) 421000)
基于視覺的同時(shí)定位與地圖構(gòu)建(visual simultaneous localization and mapping,VSLAM)在自動(dòng)駕駛、移動(dòng)機(jī)器人、增強(qiáng)現(xiàn)實(shí)、虛擬現(xiàn)實(shí)等新興技術(shù)中發(fā)揮著重要作用?;丨h(huán)閉合作為視覺SLAM必不可少的一部分,能確保系統(tǒng)在長(zhǎng)期定位與跟蹤過程中更加準(zhǔn)確;回環(huán)閉合最重要的一步是閉環(huán)檢測(cè)。目前,大部分視覺SLAM方案主要使用基于局部特征的視覺Bow模型進(jìn)行閉環(huán)檢測(cè)。由于可以重用前端視覺里程計(jì)的描述子,常被基于間接法的SLAM系統(tǒng)所采用,如流行的ORB-SLAM2[1]、OpenVSLAM[2]都訓(xùn)練了各自的視覺詞典用于回環(huán)閉合和重定位。Gao等[3]將DSO[4]作為前端視覺里程計(jì),計(jì)算關(guān)鍵幀的ORB特征描述子并建立Bow模型,將其擴(kuò)展為具有回環(huán)閉合功能的直接法SLAM。Lee等[5]提出了一種松耦合的半直接法SLAM,亦使用DSO作為前端,并行執(zhí)行ORB-SLAM2部分功能實(shí)現(xiàn)閉環(huán)和重定位,并構(gòu)建全局一致的地圖。此類方法不同于間接法SLAM可以重用前端的Bow模型,在使用直接法完成前端位姿跟蹤后,需對(duì)關(guān)鍵幀提取特征點(diǎn)并計(jì)算相應(yīng)的描述子,增加了計(jì)算量。此外,基于局部特征的Bow模型會(huì)丟失更高層次的幾何和結(jié)構(gòu)信息,不能應(yīng)對(duì)較強(qiáng)的環(huán)境變化,且需預(yù)先訓(xùn)練視覺詞典;相對(duì)于局部特征描述子,表示整張圖像的全局描述子對(duì)外觀變化的魯棒性更好[6]。
本文在借鑒文獻(xiàn)[7]的思想上,提出了一種融合全局描述子和半直接法雙目SLAM方案—GDSLAM(global descriptor SLAM)。在ORB-SLAM2框架上,融合半直接法進(jìn)行位姿跟蹤,避免了計(jì)算特征詞向量和特征匹配;利用知識(shí)蒸餾的方法訓(xùn)練得到全局描述子計(jì)算模型,結(jié)合主成分分析(PCA)和K近鄰檢索,實(shí)現(xiàn)快速準(zhǔn)確的閉環(huán)檢測(cè),為系統(tǒng)重定位和回環(huán)閉合模塊實(shí)現(xiàn)了高效準(zhǔn)確的定位。
融合全局描述子和半直接法的雙目SLAM框架如圖1所示,包括4個(gè)部分:雙目跟蹤模塊、局部建圖模塊、關(guān)鍵幀的全局描述子管理模塊、回環(huán)閉合模塊。位姿跟蹤模塊通過半直接法實(shí)現(xiàn)位姿跟蹤。局部建圖模塊包括構(gòu)建地圖點(diǎn)和維護(hù)局部地圖,并進(jìn)行共視圖優(yōu)化。關(guān)鍵幀全局描述子管理模塊負(fù)責(zé)對(duì)關(guān)鍵幀計(jì)算全局描述子并進(jìn)行存儲(chǔ)和檢索?;丨h(huán)閉合模塊負(fù)責(zé)閉環(huán)檢測(cè)和全局優(yōu)化。其中,在模塊內(nèi)部或者模塊之間的雙向箭頭表示數(shù)據(jù)的傳遞和反饋。
圖1 GDSLAM系統(tǒng)框架
研究表明基于深度學(xué)習(xí)得到的場(chǎng)景描述在應(yīng)對(duì)環(huán)境變化時(shí)表現(xiàn)更好[8],并產(chǎn)生了一些優(yōu)秀的端到端圖像描述模型用于解決大規(guī)模的視覺場(chǎng)景識(shí)別問題[9]。但是這些模型由于參數(shù)太多、計(jì)算量太大,不適合用于需要實(shí)時(shí)計(jì)算的SLAM。Sarlin等[7]借助知識(shí)蒸餾[10]的方法將大型圖像檢索模型壓縮為具有移動(dòng)實(shí)時(shí)推理功能的小型網(wǎng)絡(luò),在移動(dòng)平臺(tái)上的檢索與定位。文獻(xiàn)[12]使用學(xué)習(xí)方式代替?zhèn)鹘y(tǒng)手工設(shè)置的特征提取,通過知識(shí)蒸餾實(shí)現(xiàn)同時(shí)預(yù)測(cè)局部和全局描述子,實(shí)現(xiàn)了類似的分層定位功能,并取得最新的成績(jī)。
在大型場(chǎng)景識(shí)別問題中,基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的研究工作通常分兩步生成圖像的全局描述子:首先,通過網(wǎng)絡(luò)編碼層計(jì)算圖像的高級(jí)特征圖,然后映射到一個(gè)緊湊的全局描述子中;最初使用最大池化作為映射層。Arandjelovic等[9]使用局部聚合特征(VLAD)描述方法為 CNN 設(shè)計(jì)了新的池化層,稱為NetVLAD層,更加有效地利用卷積特征,提高了對(duì)同類別圖像的表達(dá)能力和圖像區(qū)分能力。原始NetVLAD網(wǎng)絡(luò)由于參數(shù)太多,計(jì)算量太大,不適合資源受限的平臺(tái)使用。Sandler等[12]發(fā)布了MobileNet,這是一種針對(duì)資源受限的設(shè)備而設(shè)計(jì)的編碼器體系結(jié)構(gòu)。由于NetVLAD的訓(xùn)練過程很復(fù)雜,耗時(shí)長(zhǎng),不能滿足實(shí)時(shí)性;本文采取與文獻(xiàn)[7]類似的方法,通過知識(shí)蒸餾訓(xùn)練一個(gè)較小的網(wǎng)絡(luò)(MobileGDNet)來(lái)學(xué)習(xí)NetVLAD生成的圖像全局描述子,這大大減少了新模型的訓(xùn)練時(shí)間。通過最小化MobileGDNet與預(yù)訓(xùn)練的NetVLAD網(wǎng)絡(luò)生成的全局描述子之間的均方誤差損失(MSE loss)來(lái)訓(xùn)練MobileGDNet,訓(xùn)練過程如圖2所示。
圖2 通過知識(shí)蒸餾的方法訓(xùn)練MobileGDNet
由于原始的NetVLAD網(wǎng)絡(luò)使用matlab實(shí)現(xiàn),不方便擴(kuò)展訓(xùn)練;Cieslewski等[13]基于Tensorflow重新實(shí)現(xiàn)了NetVLAD(NetVLAD-Tensorflow),在本實(shí)驗(yàn)中也使用基于Tensorflow的NetVLAD作為訓(xùn)練網(wǎng)絡(luò)模型。MobileGDNet的編碼器是MobileNetV2模型,并使用在ImageNet上預(yù)訓(xùn)練的權(quán)重進(jìn)行初始化。為了減少計(jì)算,從包含較少的通道數(shù)(320)的倒數(shù)第二個(gè)圖像編碼層計(jì)算全局描述子。每個(gè)VLAD層具有32個(gè)聚類簇,共生成10 240維的圖像描述子,該描述子進(jìn)一步向下映射到4096維,保持與NetVLAD網(wǎng)絡(luò)相同的輸出維數(shù)??紤]到許多數(shù)據(jù)集不是RGB數(shù)據(jù)而是灰度圖,所以網(wǎng)絡(luò)的輸入為640*480的灰度圖像,并選擇包含各種環(huán)境和尺寸的Google Landmarks數(shù)據(jù)集[14],從中隨機(jī)選擇10萬(wàn)張圖片作為訓(xùn)練數(shù)據(jù)。實(shí)驗(yàn)環(huán)境為:操作系統(tǒng)環(huán)境為Ubuntu16.04,主頻為3.6 GHz的CPU,顯存為11 Gb的GTX1080Ti,16 G內(nèi)存。
為了驗(yàn)證MobileGDNet的圖像描述能力,選擇包含多個(gè)閉環(huán)的KITTI數(shù)據(jù)集00序列作為評(píng)估數(shù)據(jù)。使用主成分分析(PCA)減少描述子的維數(shù),提高檢索速度。首先,計(jì)算NetVLAD-Tensorflow、MobileGDNet在KITTI-00上的全局描述子,以及通過PCA降維之后的描述子(64維、128維、512維)。然后,計(jì)算距離協(xié)方差矩陣并獲取最相似位置向量。最后,分別與ground truth計(jì)算的最相似位置向量進(jìn)行比較,計(jì)算準(zhǔn)確率、召回率和AUC值。相應(yīng)的PR(準(zhǔn)確率-召回率)曲線和AUC值,如圖3所示。
圖3 KITTI-00序列上的PR曲線和相應(yīng)的AUC值
從圖3可見,MobileGDNet生成的描述子與NetVLAD-Tensorflow生成的描述子表現(xiàn)出了相似圖像描述能力,而且通過PCA對(duì)描述子降維,沒有明顯削弱其描述能力。從表1可見,通過知識(shí)蒸餾,MobileGDNet的模型大小相當(dāng)于NetVLAD-Tensorflow的1/20,而計(jì)算速度提升了6倍以上;此外,在GPU顯存為2 G的GTX1050上的計(jì)算速度達(dá)到了28幀/秒,對(duì)于計(jì)算資源有限的平臺(tái)較有利。
表1 模型大小與CPU計(jì)算耗時(shí)情況
GDSLAM在ORB-SLAM2框架上,選擇具有固定基線的雙目相機(jī)模型,能夠恢復(fù)圖像點(diǎn)深度信息,解決了單目相機(jī)尺度漂移的問題;使用基于光度最小化的半直接法估計(jì)位姿,具有更快的位姿跟蹤速度。在文中,假設(shè)以左相機(jī)作為相機(jī)坐標(biāo)系;令π表示相機(jī)坐標(biāo)系下的3D點(diǎn)p到特征點(diǎn)u的投影模型;相應(yīng)的π-1表示特征點(diǎn)u到相機(jī)坐標(biāo)系3D點(diǎn)p的反投影模型;令I(lǐng)k-i表示k-i時(shí)刻的幀信息,Ik表示當(dāng)前幀;令Tk,w表示當(dāng)前幀相機(jī)在世界坐標(biāo)系下的位姿,Tk,k-i表示當(dāng)前幀與第k-i幀的相對(duì)位姿變換。
首先,多線程對(duì)矯正之后的雙目灰度圖提取ORB特征并進(jìn)行匹配,計(jì)算雙目特征對(duì)的特征點(diǎn)深度值和地圖點(diǎn)的3維坐標(biāo),完成初始化,此過程與ORB-SLAM2一致。當(dāng)前幀的相機(jī)位姿Tk,w采用勻速運(yùn)動(dòng)模式與匹配關(guān)鍵幀兩種初始化策略,其中勻速運(yùn)動(dòng)模式與ORB-SLAM2一致。直接匹配關(guān)鍵幀初始化相機(jī)位姿:基于光度不變假設(shè)(即兩幀觀察到同一個(gè)3D點(diǎn)的像素塊之間的光度應(yīng)該相同),采取從粗到精的迭代順序進(jìn)行圖像對(duì)齊(首先在svo[15]中提出,能夠有效地執(zhí)行兩幀間的對(duì)齊);待優(yōu)化的殘差為關(guān)鍵幀Ik-i的特征點(diǎn)u對(duì)應(yīng)的圖塊與投影到當(dāng)前幀Ik上圖塊的光度差。在已知特征點(diǎn)深度du, 相應(yīng)的最小二乘公式為
(1)
解決該最小二乘問題,一般有前向組合和逆向組合兩種算法;其中,逆向組合算法可以提前計(jì)算雅可比矩陣J和海塞矩陣H,避免反復(fù)計(jì)算H而減少計(jì)算量;因此,使用逆向組合算法優(yōu)化該最小二乘模型能夠加速運(yùn)算。通過此方法,得到當(dāng)前幀與參考關(guān)鍵幀之間的相對(duì)變換位姿Tk,k-i, 進(jìn)而可以得到當(dāng)前幀的相機(jī)位姿Tk,w,Tk,w與幀間相對(duì)位姿Tk,k-i的變換公式為
Tk,w=Tk,k-i·Tk-i,w
(2)
通過勻速運(yùn)動(dòng)模型或者跟蹤關(guān)鍵幀獲得初始位姿之后,再與局部地圖中的地圖點(diǎn)進(jìn)行匹配,進(jìn)一步優(yōu)化當(dāng)前幀的位姿,待優(yōu)化的重投影誤差如式(3)。實(shí)現(xiàn)中使用了開源的圖優(yōu)化算法g2o;由于此處僅優(yōu)化相機(jī)位姿,故也稱為Motion-only BA(bundle adjustment)
(3)
采取與ORB-SLAM2一致的關(guān)鍵幀判斷策略,對(duì)于新插入的關(guān)鍵幀,由MobileGDNet計(jì)算相應(yīng)的全局描述子,并通過PCA降維之后加入關(guān)鍵幀的全局描述子存儲(chǔ)庫(kù)中,即建立KD樹并添加新的結(jié)點(diǎn);在重定位和回環(huán)閉合模塊中,結(jié)合K近鄰檢索與半直接法匹配完成閉環(huán)檢測(cè)。
閉環(huán)檢測(cè)作為視覺SLAM非常重要的一個(gè)部分,它的目的是識(shí)別以往到過的地方。對(duì)于視覺SLAM系統(tǒng),有效的閉環(huán)檢測(cè)可以幫助系統(tǒng)準(zhǔn)確及時(shí)地完成回環(huán)閉合,極大地減少系統(tǒng)運(yùn)行過程中的累積誤差,從而構(gòu)建連續(xù)的環(huán)境地圖。此外,閉環(huán)檢測(cè)也可以用來(lái)幫助系統(tǒng)在跟蹤失敗時(shí)進(jìn)行重定位。
回環(huán)閉合與重定位相同的地方在于都可以通過閉環(huán)檢測(cè)確定當(dāng)前幀的大概位置;但重定位在跟蹤丟失的情況下,一般在上一幀附近尋找匹配關(guān)鍵幀,確定相機(jī)目前的大概位置;而回環(huán)閉合為了避免錯(cuò)誤的閉環(huán)給系統(tǒng)帶來(lái)嚴(yán)重的影響,在閉環(huán)檢測(cè)過程中,則會(huì)排除前不久的關(guān)鍵幀。此外,回環(huán)閉合的閉環(huán)驗(yàn)證還可以加入更多的邏輯判斷,比如相機(jī)姿態(tài)的空間一致性。不同于ORB-SLAM2通過視覺詞袋方法檢測(cè)候選幀,本文通過關(guān)鍵幀全局描述子管理模塊選擇重定位和回環(huán)檢測(cè)的候選幀,然后通過位姿匹配驗(yàn)證空間一致性。
3.3.1 重定位
(1)對(duì)當(dāng)前關(guān)鍵幀的灰度圖計(jì)算全局描述子,并通過K近鄰搜索從地圖關(guān)鍵幀的描述子存儲(chǔ)庫(kù)中檢索得到前幾個(gè)最相似的關(guān)鍵幀索引,根據(jù)關(guān)鍵幀id倒序排列(優(yōu)先選擇當(dāng)前幀附近的關(guān)鍵幀)。
(2)當(dāng)前幀使用類似位姿跟蹤的方法與檢索到的關(guān)鍵幀圖像進(jìn)行位姿對(duì)齊,當(dāng)平均光度誤差較小時(shí)執(zhí)行下一步。
(3)在當(dāng)前幀中搜索來(lái)自關(guān)鍵幀的三維點(diǎn)。如果正確匹配的點(diǎn)超過20個(gè),則最小化匹配之間的重新投影誤差,并跳過其余關(guān)鍵幀。
只要找到一個(gè)有效的關(guān)鍵幀,跟蹤就繼續(xù)以新的估計(jì)相機(jī)位姿進(jìn)行。如果重定位無(wú)效,則將在接收到下一幀時(shí)再次執(zhí)行。
3.3.2 回環(huán)閉合
回環(huán)閉合一般分兩步執(zhí)行,首先檢測(cè)與驗(yàn)證閉環(huán),然后執(zhí)行位姿圖優(yōu)化與全局BA完成回環(huán)閉合。
(1)針對(duì)新插入的關(guān)鍵幀,通過K近鄰檢索前10幀最相似的關(guān)鍵幀;由于回環(huán)閉合對(duì)候選幀準(zhǔn)確性要求更高,需要檢測(cè)候選幀的連續(xù)性,故檢索的候選幀數(shù)大于重定位的設(shè)置值。過濾掉相似性較大的局部共視幀之后,為了加速閉環(huán)候選幀檢測(cè),只在圖像金字塔最高層將當(dāng)前關(guān)鍵幀與候選幀進(jìn)行幀間對(duì)齊,當(dāng)光度誤差較小時(shí),進(jìn)行接下來(lái)的候選幀連續(xù)性檢驗(yàn)。
(2)利用位姿圖優(yōu)化減小系統(tǒng)的運(yùn)動(dòng)漂移,并執(zhí)行全局BA,將閉環(huán)中所有關(guān)鍵幀的位姿和3D點(diǎn)作為優(yōu)化變量,通過最小化重投影誤差獲得全局一致性更好的運(yùn)動(dòng)軌跡和環(huán)境地圖。
實(shí)驗(yàn)所使用的環(huán)境配置:主頻為2.4 GHz的四核i5處理器,16 G內(nèi)存,顯存為2 G的GTX1050,系統(tǒng)環(huán)境為Ubuntu16.04。此外,選擇公開的KITTI數(shù)據(jù)集和EuRoc數(shù)據(jù)集[16]驗(yàn)證算法的有效性和準(zhǔn)確性,并與當(dāng)前流行的開源算法ORB-SLAM2、OpenVSLAM進(jìn)行對(duì)比。評(píng)估指標(biāo)使用絕對(duì)軌跡誤差的均方根誤差(absolute trajectory error’s RMSE,ATErmse)表示,絕對(duì)軌跡誤差是算法的估計(jì)位姿和真實(shí)位姿的直接差值,反應(yīng)了算法精度和軌跡全局一致性。為了方便與SLAM框架整合,實(shí)驗(yàn)過程中使用tensorflow的C++編譯版本部署MobileGDNet;在對(duì)已經(jīng)建好的KD-tree檢索時(shí)使用了libnabo,主要用于低維空間的快速K最近鄰檢索。
在回環(huán)閉合模塊的閉環(huán)檢測(cè)部分,使用輪詢匹配所有關(guān)鍵幀的方法代替使用全局描述子檢測(cè),實(shí)驗(yàn)中以SDSLAM標(biāo)識(shí),作為對(duì)比算法,驗(yàn)證基于全局描述子進(jìn)行閉環(huán)檢測(cè)在SLAM方案中的及時(shí)性和準(zhǔn)確性。
ORB-SLAM2、OpenVSLAM、SDSLAM、GDSLAM這4種算法啟動(dòng)后加載配置參數(shù)和詞典/模型所用時(shí)間的均值和中值見表2。算法的加載時(shí)間在實(shí)際應(yīng)用中會(huì)一定程度上影響用戶的感受。ORB-SLAM2和OpenVSLAM加載了原作者發(fā)布的詞典,其中ORB-SLAM2加載的詞典為文本型,而OpenVSLAM所使用的詞典為二進(jìn)制。從表2中可見,二進(jìn)制詞典相對(duì)文本型詞典加載時(shí)間更短,且占用存儲(chǔ)更少。GDSLAM加載的模型較小,時(shí)間較短。采用最小化光度誤差作為位姿跟蹤的SDSLAM加載時(shí)間最短。
表2 4種算法加載時(shí)間的均值和中值/s
位姿跟蹤模塊是實(shí)時(shí)執(zhí)行的,ORB-SLAM2、OpenVSLAM、GDSLAM這3種算法在KITTI數(shù)據(jù)集03序列上的跟蹤頻率如圖4所示,該序列共有800幀雙目圖像;在00-10序列上的平均跟蹤頻率如圖5所示。從圖4和圖5中可見,GDSLAM平均跟蹤耗時(shí)較ORB-SLAM2和OpenVSLAM更少,主要原因是:GDSLAM不需要計(jì)算圖像幀的詞向量,并且使用最小化光度誤差的半直接法匹配代替特征點(diǎn)匹配。
圖4 3種算法在KITTI數(shù)據(jù)集03序列上的跟蹤頻率
圖5 3種算法在KITTI數(shù)據(jù)集上的跟蹤頻率(FPS)
SDSLAM與GDSLAM在KITTI數(shù)據(jù)集各序列上的絕對(duì)軌跡誤差A(yù)TErmse,如圖6所示。在00序列上的軌跡如圖7所示,該序列共有4541幀雙目圖像,并包含多個(gè)閉環(huán),很適合用來(lái)做回環(huán)閉合模塊的檢測(cè)。從圖6可見,GDSLAM相對(duì)于SDSLAM,在大部分序列上都得到更低的誤差值,尤其在包含回環(huán)的序列(如:00、02、05、06、07、08、09),GDSLAM的絕對(duì)軌跡誤差A(yù)TErmse都比SDSLAM低許多。從圖7可見,GDSLAM能夠很好檢測(cè)到各處的回環(huán)閉合點(diǎn),而SDSLAM在最后的回環(huán)閉合處不能準(zhǔn)確識(shí)別并減少累計(jì)誤差。可以驗(yàn)證,在回環(huán)閉合模塊中,基于全局描述子的檢測(cè)方法相對(duì)于使用直接法匹配更加及時(shí)且準(zhǔn)確。
圖6 SDSLAM和GDSLAM在KITTI數(shù)據(jù)集下的 絕對(duì)軌跡誤差A(yù)TErmse
圖7 SDSLAM和GDSLAM在KITTI數(shù)據(jù)集的 00序列上的軌跡
ORB-SLAM2、OpenVSLAM、SDSLAM、GDSLAM這4種算法在公開的雙目數(shù)據(jù)集KITTI和Euroc上的實(shí)驗(yàn)結(jié)果見表3。從表3中可見,ORBSLAM2和OpenVSLAM作為當(dāng)前流行且開源的間接法SLAM在兩個(gè)數(shù)據(jù)集上的表現(xiàn)相差不大。本文的GDSLAM在KITTI數(shù)據(jù)集的03、05、06、09序列上誤差最小,其中05、06、09序列只有一個(gè)閉環(huán),且都處于圖像序列的結(jié)尾部分,對(duì)閉環(huán)檢測(cè)的及時(shí)性要求較高(在圖像序列處理完之前,若不能及時(shí)檢測(cè)到閉環(huán),就不能減少累積誤差,實(shí)驗(yàn)誤差較大);GDSLAM在09序列上的誤差相對(duì)ORB-SLAM2和OpenVSLAM分別減少了57%和32%;由此也驗(yàn)證了GDSLAM閉環(huán)檢測(cè)的及時(shí)性和準(zhǔn)確性。
從表3中也可見,GDSLAM在Euroc數(shù)據(jù)集的V101、V201、MH05序列上誤差最小。SDSLAM和GDSLAM在Euroc數(shù)據(jù)集上表現(xiàn)相當(dāng),而在KITTI數(shù)據(jù)集上,SDSLAM表現(xiàn)較差。由于KITTI數(shù)據(jù)集為室外環(huán)境且?guī)g的運(yùn)動(dòng)較大,要求算法能夠及時(shí)且準(zhǔn)確地檢測(cè)到閉環(huán)并減少累積誤差。Euroc數(shù)據(jù)集為室內(nèi)環(huán)境,算法中回環(huán)閉合模塊對(duì)實(shí)驗(yàn)結(jié)果的影響較小。
從以上實(shí)驗(yàn)可見,本文提出的GDSLAM相對(duì)于兩種流行的間接法SLAM(ORBSLAM2、OpenVSLAM)在跟蹤耗時(shí)方面有一定的優(yōu)勢(shì);相對(duì)于在回環(huán)閉合模塊中采用遍歷所有關(guān)鍵幀的方式進(jìn)行閉環(huán)檢測(cè)(如本文所設(shè)計(jì)的SDSLAM),GDSLAM能夠及時(shí)準(zhǔn)確地檢測(cè)閉環(huán)候選幀,完成回環(huán)閉合并減少累計(jì)誤差。
為了有效地解決基于半直接法視覺SLAM方案的閉環(huán)檢測(cè)問題,提出了融合全局描述子和半直接法的雙目SLAM(GDSLAM)。在ORB-SLAM2框架上,使用直接法代替基于ORB特征匹配,避免計(jì)算特征詞向量,一定程度上提高了跟蹤幀率;通過知識(shí)蒸餾,訓(xùn)練得到圖像的全局描述子生成模型,減少了訓(xùn)練時(shí)間且提高了已有網(wǎng)絡(luò)的通用性。構(gòu)建關(guān)鍵幀的全局描述子管理模塊,在GDSLAM的重定位和回環(huán)閉合模塊中能夠快速準(zhǔn)確地完成閉環(huán)檢測(cè)。在兩個(gè)公開數(shù)據(jù)集KITTI和Euroc上進(jìn)行實(shí)驗(yàn),并且與流行的開源算法ORB-SLAM2、OpenVSLAM進(jìn)行對(duì)比;實(shí)驗(yàn)結(jié)果表明,相對(duì)于SDSLAM(遍歷所有關(guān)鍵幀進(jìn)行閉環(huán)檢測(cè)),GDSLAM能夠更及時(shí)地檢測(cè)到閉環(huán),得到全局一致性更好的軌跡和地圖;在KITTI數(shù)據(jù)集中包含閉環(huán)的序列上,GDSLAM在其中大部分序列上取得了更小的絕對(duì)軌跡誤差;同時(shí),在取得相似跟蹤精度的情況下,能夠得到更高的跟蹤幀率。在接下來(lái)的工作中,進(jìn)一步提高前端跟蹤幀率,融入更高層圖像信息(如圖像語(yǔ)義信息等),設(shè)計(jì)魯棒性更好的全局描述子生成網(wǎng)絡(luò)。
表3 4種算法在KITTI和Euroc數(shù)據(jù)集下的絕對(duì)軌跡誤差A(yù)TErmse