杜曉英,袁慶霓,2,3,齊建友,王晨,杜飛龍,任澳
(1.貴州大學現(xiàn)代制造技術教育部重點實驗室,貴州 貴陽 550025;2.貴州大學機械工程學院,貴州 貴陽 550025;3.貴州大學省部共建公共大數(shù)據(jù)國家重點實驗室,貴州 貴陽 550025)
同步定位與建圖(SLAM)[1]能夠在未知環(huán)境下完成地圖的自主構建與定位,是工業(yè)機器人、自主導航、無人駕駛等應用中的基礎技術之一。目前SLAM 采用的傳感器主要是激光雷達、相機以及慣性測量單元(IMU)[2],視覺SLAM 是一種以相機作為傳感器的SLAM,如ORB-SLAM2[3]、LSD-SLAM[4]、DSO[5]等視覺SLAM 方法。
研究視覺SLAM 在真實動態(tài)場景下的性能表現(xiàn)已成為SLAM 領域中的趨勢,如張慧娟等[6]先計算獲得變換矩陣,之后提取線特征,并對其進行靜態(tài)權重的評估,最后通過余下的靜態(tài)特征進行相機位姿估計完成跟蹤任務。楊世強等[7]對傳統(tǒng)SLAM 系統(tǒng)進行改進,提出一種基于幾何約束的動態(tài)目標檢測算法。DAI等[8]采用Delaunay 三角剖分方法為地圖點建立與圖類似的結構,以判斷其鄰接關系,之后,將多個關鍵幀之間觀測不一樣的邊緣移除,最終,完成動態(tài)物和靜態(tài)背景的分離。以上算法雖然可以提高動態(tài)環(huán)境下視覺SLAM 的魯棒性,但是其構建的地圖缺少豐富的語義信息。隨著深度學習的發(fā)展和計算機性能的不斷提高,目標檢測與語義分割為解決動態(tài)環(huán)境下VSLAM 算法魯棒性差的問題提供另1 種技術路線。YU等[9]提出DS-SLAM 算法,利用語義分割網絡SegNet 和運動一致性檢測方法剔除動態(tài)特征點。BESCOS等[10]采用實例分割網絡Mask R-CNN 分割先驗動態(tài)目標,并利用多視圖結合方法檢測潛在運動物。ZHONG等[11]采用目標檢測方法SSD[12]檢測幀中的動態(tài)物體,并對動態(tài)特征點進行運動概率傳播,在跟蹤線程中剔除動態(tài)點。XIAO等[13]同樣使用SSD 檢驗先驗運動物體,并通過選擇性跟蹤算法處理動態(tài)特征點。然而,無論是SegNet 還是Mask R-CNN[14]網絡,都存在計算量大、運行時間長的問題。雖然語義分割可以檢測動態(tài)物體,改善動態(tài)物體對SLAM 的影響,但是如何選擇1 個精度高且實時性較好的語義分割網絡完成動態(tài)特征點的檢測,是動態(tài)SLAM 需要解決的首要問題。
ORB-SLAM2 是1 個開源視覺SLAM 算法,因其良好的代碼規(guī)范性與拓展性,被眾多研究人員使用。ORB-SLAM2 主要組成部分為跟蹤線程、建圖線程、回環(huán)檢測線程。本文以ORB-SLAM2 為基礎框架,提出一種動態(tài)場景下基于語義分割的視覺SLAM 方法,具體內容包括:在視覺ORB-SLAM2 的RGB-D相機模式中,在原有的前端里程計、局部建圖、回環(huán)檢測3 個線程基礎上,添加語義分割模塊、動態(tài)特征點檢測模塊和構建語義八叉樹地圖的線程。視覺SLAM 總體框架如圖1 所示。首先,RGB-D 相機獲取的RGB 圖像傳入跟蹤線程,在這個線程中采用ORB 方式提取圖像特征,包含當前幀的關鍵點和描述子;然后,通過語義分割網絡對RGB 圖像進行像素級的語義分割,分割出具體的對象并篩選出運動對象,對動態(tài)點進行初步的去除,如行走的人等;最后,利用多視圖幾何檢測并去除剩余動態(tài)物體,將剩余的靜態(tài)特征用于位姿估計;最終,在語義地圖構建線程中利用語義分割提取的語義信息生成點云地圖并轉換為八叉樹地圖。
圖1 視覺SLAM 總體框架Fig.1 Overall framework of visual SLAM
本文以DeepLabv3plus[15]為基礎框架,設 計一種輕量化網絡。首先,采用MobileNetV2[16]完成特征提取;然后,將深度可分離卷積應用到ASPP模塊中;最后,在網絡中插入SE 注意力機制[17]。圖2 所示為本文改進的DeepLabv3plus 的網絡結構,與原網絡結構相比,主干網絡選擇MobileNetV2 代替原來的Xception[18],并采用遷移學習加載預訓練模型,在ASPP 模塊中使用深度可分離卷積,在保證分割精度的同時縮短運行時間??紤]到注意力機制能夠自動調整網絡中表現(xiàn)較好和表現(xiàn)較差的特征通道權重,本文還在網絡中插入SE 注意力機制,使網絡性能盡可能達到最佳,提升訓練效果。
圖2 改進的DeepLabv3plus 網絡結構Fig.2 Structure of improved DeepLabv3plus network
研究人員利用語義分割網絡只能檢驗先驗運動目標對象(如人),忽略了椅子、書本等靜態(tài)物體發(fā)生被動運動時對SLAM 產生的影響,如人們手中的書本或者人為推動的椅子等,應將其視為動態(tài)目標對象,卻被視為靜態(tài)對象,這將會對SLAM 產生較大影響。因此,本文進一步采用多視圖幾何方法進行動態(tài)特征點檢測:將地圖點云投影到當前幀,并利用視點差異和深度值變化大小將目標對象區(qū)分為動態(tài)目標和靜態(tài)目標。多視圖幾何原理示意圖如圖3 所示,對于每個輸入幀,選擇多個之前與輸入圖像幀重合度較高的幀,把關鍵幀Kf中的關鍵點p投影到當前幀Cf,得到投影點p'和投影深度Dproj,每個關鍵點對應的3D 點是P,然后計算視差角α(p的反投影與p'之間形成的夾角α)。從TUM 數(shù)據(jù)集上的測試結果可以看出,當α>30°,可判斷其為動態(tài)點。同時,本文還須計算深度值差ΔD=Dpro-jD',D'表示當前幀中關鍵點深度,若ΔD=0,該點被認為是靜態(tài)的,若ΔD>0,則該點被認為是動態(tài)的。
圖3 多視圖幾何原理示意圖Fig.3 Schematic diagram of multiview geometry principles
在語義地圖構建線程中,借助PCL庫[19],結合關鍵幀和深度圖生成點云,利用當前幀的位姿及其點云進行點云后續(xù)處理,完成點云地圖的構建,并在點云地圖中進行語義信息的標注。然而點云地圖雖然給人很直觀的感覺,但是點云地圖存在存儲空間大、位置信息冗余以及不能直接用于導航等問題。與點云地圖相比,八叉樹地圖[20]同樣具有點云地圖的直觀性,但存儲空間卻遠遠小于點云地圖,同時八叉樹地圖可以用于物流倉儲機器人后續(xù)的路徑規(guī)劃,適用于各種導航算法,如A*、D*導航[21]算法。因此,本文對點云地圖做進一步處理,將點云地圖轉換為八叉樹地圖,完成語義八叉樹地圖的構建。但是在建圖過程中,因存在傳感器的噪聲和運動物體產生的誤差,導致某個節(jié)點在每個時間點上狀態(tài)都不一樣。因此,本文選用概率方式說明某一節(jié)點被占據(jù)還是未被占據(jù)。假設使用x∈[0,1]進行說明,設x初始值為0.5,若該節(jié)點狀態(tài)一直是被占據(jù)的,那么x值會不斷增大,反之,該節(jié)點是未被占據(jù)的,那么x值會不斷減小。若x出現(xiàn)不斷增大或減小的情況,則會出現(xiàn)x值跳出[0,1]區(qū)間的情況,給數(shù)據(jù)處理帶來不便。因此,采用概率對數(shù)值描述節(jié)點是否被占用,設y∈R(實數(shù)集)表示概率對數(shù)值,占用概率p的數(shù)值范圍為[0,1],則logit 變換公式如下:
假設某節(jié)點n在T時刻的 觀測概率是P(n|Z1∶T),Z表示觀測數(shù)據(jù),則其被占據(jù)的概率P(n|Z1∶T)表示:
其中:P(n)表示節(jié)點n被占據(jù)的先驗概率;P(n|Z1∶T-1)表示n節(jié)點從起始到T-1 時刻的估計概率。本文將先驗概率P(n)設為0.5,那么式(3)轉換為概率對形式為L(n|Z1∶T),表示節(jié)點n從起始 到時間T的概率 對數(shù)值,則T+1 時刻觀測概率如下:
其中:L(n|Z1∶T-1)與L(n|ZT)分別表示節(jié)點n在T時刻前和T時刻被占據(jù)的概率對數(shù)值。由式(4)可知,當某一節(jié)點被重復觀測到被占據(jù)時,其概率對數(shù)值隨之增加,否則減少。根據(jù)獲得的信息,能動態(tài)調整該節(jié)點的占據(jù)概率,對八叉樹地圖不斷進行更新。
實驗搭配的平臺配置如下:CPU 為AMD R7-4800H,GPU 型號為NVIDIA RTX3060,OS 為64 位Ubuntu 16.04 系統(tǒng)的筆記本。語義分割實驗部分使用的軟件配置:PyTorch 1.7.1,CUDA 11.0,CUDNN 8.0.5.39,Python 3.6,顯存大小為16 GB。
作為Lumix系列相機的全新旗艦,這臺無反相機使用了一塊4700萬像素的全畫幅傳感器,機內防抖系統(tǒng)以及60fps的4K視頻拍攝能力,XQD+SD雙儲存卡的設置則保證了數(shù)據(jù)儲存的安全性。S1R是松下與適馬以及徠卡結成聯(lián)盟(詳見右頁)之后發(fā)布的第一款產品,使用的鏡頭卡口為徠卡L卡口。
改進后的DeepLabv3plus 在PASCAL Voc 數(shù)據(jù)集[22]上進行訓練并驗證。表1 所示為DeepLabv3plus與本文改進的語義分割算法的實驗測試結果。從表1 可以看出,本文設計的語義分割模型的平均交并比為73.4%,模型大小為13.1 MB,時間約21 ms。
表1 不同模型的語義分割性能對比Table 1 Semantic segmentation performance comparison among different models
圖4 所示為DeepLabv3plus 與改進后的語義分割模型的分割效果對比。從圖4 可以看出,改進后的DeepLabv3plus 大致輪廓的分割結果與原模型相同,在分割對象細節(jié)方面存在微小差別,如圖4 中的第2行圖中2個人之間的間隙部分。相比DeepLabv3plus,改進后的DeepLabv3plus 模型大小減少約97%,單張圖片運行時間縮短約89%。
圖4 改進前后DeepLabv3plus 的分割結果對比Fig.4 Comparison of segmentation results of DeepLabv3plus before and after improvement
本文將從TUM[23]數(shù)據(jù)集中選取高動態(tài)場景walking 序列共4 組序列進行定位誤差實驗。為了便于區(qū)分,本文用fr3、w、half分別代表freiburg3、walking、halfsphere,并將其作為序列名稱。將本文算法分別與DS-SLAM、DLP-SLAM 以及ORB-SLAM2 進行比較,其中DLP-SLAM 是指以ORB-SLAM2 為基礎框架,將DeepLabv3plus 算法與多視圖幾何相結合進行動態(tài)物體剔除的視覺SLAM。
本文以絕對軌跡誤差(ATE)和相對位姿誤差(RPE)[24]作為性能指標,分別計算其對應的均方根誤差(RMSE)和標準差(SD)。RMSE 記錄了估計值和真實值之間誤差,其值越小,代表所估計的軌跡越接近真實軌跡。SD 代表軌跡估計的離散度。
表2 和表3 所示為本文算法與ORB-SLAM2、DLP-SLAM 以及DS-SLAM 算法在絕對軌跡誤差和相對位姿誤差方面的實驗結果。從表2 和表3 可以看出:與傳統(tǒng)ORB-SLAM2 相比,在高動態(tài)walking序列下,本文算法的絕對軌跡誤差的RMSE 值和SD值最高分別提升98%和97%以上;本文算法相對位姿誤差的RMSE 和SD 指標值提升幅度在52%~74%之間。與DLP-SLAM、DS-SLAM 相比,本文算法的絕對軌跡誤差和相對位姿誤差的RMSE 值也有所提升。
表2 不同算法的絕對軌跡誤差對比結果Table 2 Comparison results of absolute trajectory errors among different algorithms
表3 不同算法的相對位姿誤差平移部分的對比結果Table 3 Comparison results of relative pose error translation parts among different algorithms
圖5 所示為在高動態(tài)fr3/w/rpy 序列中本文算法、ORB-SLAM2 以及DLP-SLAM在x、y、z軸上的位移估計值和真實值比較(彩色效果見《計算機工程》官網HTML 版),其中藍色線條代表ORB-SLAM2,虛線代表實際值(ground truth)[25],橘色實線代表DLP-SLAM,綠色代表本文算法。
圖5 不同算法在fr3/w/rpy 序列下的x、y、z 軸位移對比Fig.5 Comparison of x,y,and z-axis displacements among different algorithms in the fr3/w/rpy sequence
圖6 所示為各算法姿態(tài)角估計值和真實值的比較(彩色效果見《計算機工程》官網HTML 版)。
圖6 不同算法在fr3/w/rpy 序列下的姿態(tài)角對比Fig.6 Comparison of attitude angles among different algorithms in fr3/w/rpy sequences
從圖5 和圖6 可以看出,綠色實線和虛線幾乎重合在一起,藍色線條與虛線的距離最遠,其誤差最大,橘色實線與虛線之間也存在較小偏差。這表明無論是在x、y、z軸上的軌跡還是姿態(tài)角(yaw、pitch、roll)上的軌跡,與真實軌跡相比,ORB-SLAM2 生成的軌跡發(fā)生了較大幅度的漂移,DLP-SLAM 發(fā)生較小漂移,而本文算法生成的軌跡與真實值幾乎重合。本文算法在動態(tài)場景下定位與建圖的精度更加準確,魯棒性更好。其原因為原有算法假設環(huán)境是靜態(tài)的,而運動物體的存在會影響位姿估計的結果,甚至引起系統(tǒng)故障的發(fā)生。本文算法利用改進的DeepLabv3plus 以及多視圖幾何檢測動態(tài)點,并剔除動態(tài)點,之后利用剔除掉動態(tài)點之后的靜態(tài)點進行位姿估計,使獲得的位姿估計更加準確,避免引起系統(tǒng)故障。
圖7 分別所示為在高動態(tài)序列fr3/w/xyz 下ORBSLAM2、DLP-SLAM 及本文算法得到的相機運動軌跡與ground truth 之間的偏差(彩色效果見《計算機工程》官網HTML 版)。黑色線條代表ground truth,藍色線條代表預測軌跡,紅色線條代表相機預測軌跡與ground truth 之間的偏差,紅色線條越短代表偏差越小。從圖7 可以看出,本文算法運動軌跡圖中紅色線條最短,位姿估計更加準確,說明在動態(tài)環(huán)境下定位誤差較小,能有效降低動態(tài)物體對VSLAM 的影響。
圖7 不同算法在高動態(tài)序列fr3/w/xyz 下的軌跡Fig.7 Trajectories among different algorithms under high dynamic sequence fr3/w/xyz
為進一步說明本文算法的有效性,本文在實驗室真實環(huán)境下進行實驗驗證。圖8 所示為移動機器人的真實運動軌跡,邊框表示移動機器人在真實環(huán)境中的實際運動軌跡。移動機器人平臺利用搭載的KinectV2 相機[26]在搭建的實驗環(huán)境中根據(jù)先前設計好的路線運動,并進行環(huán)境感知,記錄環(huán)境數(shù)據(jù)。隨后,在Ubuntu16.04 中,將獲取的數(shù)據(jù)通過ROS 工具制作成TUM 數(shù)據(jù)集的格式,進而驗證本文算法的有效性和可行性。
圖8 移動機器人的真實運動軌跡Fig.8 Real motion trajectory of the mobile robot
圖9 所示為本文算法在真實環(huán)境中的特征提取。從圖9 可以看出,本文算法在進行特征提取時剔除掉了人和人手中物體共2 個動態(tài)物體。
圖9 在真實場景下的特征提取Fig.9 Feature extraction in the real scene
圖10 所示為本文算法和ORB-SLAM2 算法在真實環(huán)境下的三維軌跡對比。從圖10 可以看出,由于實驗場景中有運動物體,因此ORB-SLAM2 算法生成的軌跡與實際運動軌跡相比出現(xiàn)了較大幅度的波動,而本文算法生成的軌跡與實際運動軌跡基本相符,波動幅度較小。
圖10 本文算法和ORB-SLAM2 的三維軌跡對比Fig.10 Three-dimensional trajectory comparison between the proposed algorithm and ORB-SLAM2
本文選取TUM 數(shù)據(jù)集中walking 序列的1 個子序列作為測試對象,如圖11 所示,此序列中存在2 個不斷運動的行人。
圖11 fr3/w/static 子序列Fig.11 fr3/w/static subsequence
圖12 所示為本文方法建立的地圖(彩色效果見《計算機工程》官網HTML 版)。為了可視化,本文使用藍色代表顯示屏的像素,紅色代表椅子的像素,其余像素使用物體本身顏色。從圖12 可以看出,本文算法建立的語義地圖中已剔除動態(tài)物體,不存在顯著的動態(tài)物體如行走的人,說明較好地完成地圖構建。從圖12 中像素分布區(qū)域可以看出,顯示屏中大部分像素得到了很好的語義賦予,但是椅子相對語義賦予較差。這是因為在PASCAL VOC 數(shù)據(jù)集上訓練時,該數(shù)據(jù)集中的椅子和TUM 數(shù)據(jù)集中的椅子存在較大差異,因此本文算法沒有得到較優(yōu)的椅子分割結果。另外,為了說明八叉樹地圖所占內存空間小于點云地圖,本文記錄了fr3/w/xyz、fr3/w/static 序列構建的點云和八叉樹地圖所占內存大小,如表4 所示。
表4 不同序列的存儲空間對比Table 4 Storage space comparison among different sequences 單位:MB
圖12 本文算法生成的點云和八叉樹地圖Fig.12 Point cloud and octree maps generated by the proposed algorithm
本文提出動態(tài)場景下基于語義分割的視覺SLAM 算法。通過對DeepLabv3plus 進行改進,采用MobileNetV2 進行特征提取,對ASPP 模塊進行修改,并引入SE 注意力機制,提高分割速度,通過改進后的DeepLabv3plus 和多視圖幾何方法檢測動態(tài)特征點并剔除。實驗結果表明,本文算法與ORBSLAM2 相比,運行時間延長,與DLP-SLAM 相比運行時間有所降低,并且其精度依然較高,利用語義信息生成靜態(tài)的語義八叉樹地圖,節(jié)省了大量的存儲空間,同時生成的地圖可直接用于機器人的路徑規(guī)劃中。在去除動態(tài)特征點時因分割的不完整導致部分動態(tài)點未被識別,因此后續(xù)將選擇分割精度更高的網絡。