文露婷,李智
(四川大學 電子信息學院,四川成都,610065)
SLAM 技術是指在運動過程中通過機載傳感器實時采集的數(shù)據(jù)來構建環(huán)境地圖并實現(xiàn)自身定位的技術,是智能移動機器人可以在未知環(huán)境中自主作業(yè)的關鍵技術。常用傳感器有相機、激光雷達、慣性傳感器、編碼器等,相機即為視覺 SLAM 使用的傳感器。由于相機價格低廉、適用性高并且獲得的圖像信息豐富等特點,視覺 SLAM 成為當前研究的熱點[1]。
現(xiàn)有的視覺 SLAM 根據(jù)前端獲取圖像信息的方式不同,可分為兩大類:特征點法和直接法。特征點法的主要思路是在圖像中提取出一些關鍵點,然后通過特征點描述子計算它們之間的相似性并完成匹配,最后利用三角或?qū)O幾何的方法估算相機運動,優(yōu)秀算法代表有 PTAM[2]、ORB-SLAM3[3]。直接法則是直接利用像素灰度值進行匹配,基于光度不變性,通過最小化圖像中兩個對應位置的光度誤差來估計相機運動[4],優(yōu)秀算法代表有 LSDSLAM[5]、DSO[6]。兩種方法在靜態(tài)場景中均可實現(xiàn)高精度定位和高魯棒性運行,但現(xiàn)實場景中的動態(tài)物體如行人、車輛,會使系統(tǒng)出現(xiàn)錯誤的匹配,導致其定位精度和魯棒性大幅度下降。
為了減小上述動態(tài)物體對視覺 SLAM 系統(tǒng)的影響,國內(nèi)外學者分別提出了三種方法:基于多視幾何的方法,該方法首先建立靜態(tài)場景中的標準約束,然后通過判斷提取的特征點是否違背這些約束來檢測物體的靜止或運動狀態(tài);基于光流的方法,該方法通過比較兩幅圖像中對應像素的亮度值的變化,來推斷像素在圖像中的運動方向和大??;基于深度學習的方法,該方法通過運用目標檢測網(wǎng)絡和語義分割網(wǎng)絡識別并剔除場景中的動態(tài)特征點。上述方法在一定程度上能夠解決動態(tài)目標對系統(tǒng)的影響問題,但普遍存在精度較低或?qū)崟r性較差的問題。鑒于以上,本文以動態(tài)環(huán)境為研究背景,以 ORB-SLAM3 為框架,開展相關研究,主要有以下改進和創(chuàng)新:改進 YOLOv5s,將其主干網(wǎng)絡替換為 MobileNetV3[7]輕量級網(wǎng)絡,并引入SE[8]注意力機制,構成 MN-YOLOv5 模型。在 ORB-SLAM3 的框架中添加 MNYOLOv5s 模型組成的動態(tài)特征點剔除模塊,用于檢測并剔除動態(tài)特征點,減小動態(tài)物體對視覺 SLAM 系統(tǒng)的影響。
2015 年,Raul Mur-Artal 等人提出了只針對單目相機的 ORB_SLAM[9],主要有跟蹤、建圖、回環(huán)檢測三個線程,由此開始了 ORB-SLAM 系列算法。經(jīng)過幾年的迭代,2020 年該團隊開源了 ORB-SLAM3,是第一個支持視覺、視覺+慣導、混合地圖的 SLAM 系統(tǒng),被認為是目前最優(yōu)秀的 SLAM 算法之一。如圖1 所示,ORB-SLAM3 系統(tǒng)具有跟蹤、局部建圖、閉環(huán)檢測 3 個并行線程。從編程實現(xiàn)上來看,三大線程是父子關系,跟蹤線程持有其他兩個子線程的指針;但是從邏輯實現(xiàn)上,三大線程是并發(fā)的,系統(tǒng)的隨機性使得各個線程的運行順序是不固定的。跟蹤線程主要負責處理傳感器信息,通過最小化匹配地圖點的重投影誤差實時計算幀間相對位置,還會初始化地圖并根據(jù)地圖集來進行重定位,同時會篩選新的關鍵幀,之后的局部建圖和回環(huán)檢測線程均只處理關鍵幀以減少內(nèi)存消耗。局部建圖線程負責對得到的關鍵幀進行管理,增加關鍵幀和特征點到地圖中,剔除掉冗余的關鍵幀和點,并使用視覺或視覺慣性光束平差法(BundleAdjustment,BA)優(yōu)化地圖,在慣性情況下,IMU 參數(shù)通過線程使用最大后驗估計技術來進行初始化和優(yōu)化?;丨h(huán)檢測線程本質(zhì)上是通過計算圖像數(shù)據(jù)間的相似性,從而解決位置估計隨時間漂移的問題,首先根據(jù)查詢數(shù)據(jù)庫和計算 Sim3/SE3 來檢測回環(huán),而后通過循環(huán)融合和優(yōu)化本質(zhì)圖來進行回環(huán)矯正,最后利用全局 BA 優(yōu)化所有地圖點和關鍵幀組成的位姿圖[10]。
圖1 ORB-SLAM3 系統(tǒng)框架
1.2.1 YOLOv5s 目標檢測網(wǎng)絡
相比于之前版本,YOLOv5 改進方向有些許不同,它優(yōu)化了網(wǎng)絡結(jié)構、訓練策略并進行了數(shù)據(jù)增強,使得其在速度和精度上都有所提升。YOLOv5 目前仍在迭代更新,不同版本之間的主要區(qū)別在于深度及特征圖的寬度不同,YOLOv5s 網(wǎng)絡是YOLOv5 系列中深度、特征圖寬度最小的網(wǎng)絡,也是模型最小、運行速度最快的網(wǎng)絡,對硬件設備要求較低,因此更適合在移動端部署。本文采用的是 YOLOv5-6.1 版本,其主要網(wǎng)絡結(jié)構如圖2 所示,主要有四個組件:輸入層 Input 部分負責數(shù)據(jù)處理及增強,采用Mosaic 數(shù)據(jù)增強算法增加訓練樣本的多樣性和復雜性;骨干網(wǎng)絡 Backbone 部分負責對經(jīng)過處理后的圖像進行特征提取并輸出三個特征層;頸部網(wǎng)絡 Neck 部分負責將來自不同層次的特征圖進行融合,生成大、中、小三種類型的特征信息;頭部網(wǎng)絡 Head 部分負責生成最終的檢測結(jié)果。
圖2 YOLOv5s-6.1 網(wǎng)絡結(jié)構
1.2.2 MobileNet-V3 輕量級網(wǎng)絡
由 Google 在2019 年提出的網(wǎng)絡架構 MobileNetV3是專注于移動端設備的輕量級 CNN 網(wǎng)絡,在保證準精確率的同時大幅度減少了模型參數(shù)。MobileNetV3 經(jīng)過 V1和 V2 的迭代,它有以下創(chuàng)新:首先使用神經(jīng)網(wǎng)絡架構搜索技術,用于發(fā)現(xiàn)和優(yōu)化網(wǎng)絡結(jié)構;其次引入 SE 注意力模塊并將 Sigmoid 換成 hard-sigmoid,提升了模型的精確率和計算速度;同時更新激活函數(shù),ReLU 替換成 hardswish,提升了模型計算速度;最后優(yōu)化 V2 網(wǎng)絡的最后幾層,改進和刪除了許多所需計算時間較長的層,減少了運算量。MobileNetV3 有 Large 和 Small 兩個版本,本文采用Small,整體結(jié)構如圖3 所示。
圖3 MobileNetV3 網(wǎng)絡結(jié)構
1.2.3 SE 注意力機制
SE 在通道維度增加注意力機制,主要思想是通過一個權重矩陣,從通道域的角度賦予圖像不同位置不同的權重,對當前任務有益的特征圖的通道進行提高,反之抑制,從而讓神經(jīng)網(wǎng)絡重點關注某些特征通道。SE 的實現(xiàn)步驟如圖4所示: Squeeze 使用全局平均池化將每個通道的特征圖壓縮為向量;Excitation 使用兩個全連接層處理上述向量,構建通道間的特征相關性,生成通道權重值,輸出的權重值數(shù)目和輸入特征圖的通道數(shù)相同;Scale 用第二步得到的歸一化權重對特征圖進行賦值。圖中輸入前特征圖的每個通道都是一樣重要,輸出后每個通道的重要性不再一樣,不同顏色代表不同的權重。
圖4 SE 注意力機制實現(xiàn)步驟
1.2.4 MN-YOLOv5 目標檢測網(wǎng)絡
考慮到移動設備內(nèi)存及算力的限制,本文以 YOLOv5s網(wǎng)絡為基礎,提出 MN-YOLOv5 輕量化目標檢測算法,有以下改進:首先將骨干網(wǎng)絡 Backbone 替換為更加輕量化的MobileNet-V3 輕量級網(wǎng)絡,大幅度減少網(wǎng)絡參數(shù),有效地提高了運行速度;其次在 Backbone 中添加 SE 注意力機制,增強網(wǎng)絡對于重要信息的捕捉能力。MN-YOLOv5 網(wǎng)絡結(jié)構如圖5 所示。
圖5 MN-YOLOv5 網(wǎng)絡結(jié)構
1.3.1 基于MN-YOLOv5 的動態(tài)特征點剔除
本文主要研究室內(nèi)場景,因此選擇人和動物作為先驗動態(tài)目標。將目標檢測網(wǎng)絡 MN-YOLOv5 與 ORB-SLAM3 跟蹤線程結(jié)合,當圖片幀進入系統(tǒng)后,首先在跟蹤線程中提取圖片上的所有特征點得到集合,同時通過 MN-YOLOv5得到圖像中目標檢測框的集合,見式(1):
其中是第k幀圖像中的第m個特征點,是第k幀圖像中的第n個目標檢測框。若目標檢測框為人或動物,且,則判定為先驗動態(tài)點。由此可得到動態(tài)特征點集合和靜態(tài)特征點集合由于目標檢測框為矩形,框內(nèi)的特征點除了動態(tài)目標外還存在其他靜態(tài)特征點,如果一并剔除會導致 SLAM 系統(tǒng)匹配的特征點大幅度減少,不利于定位精度,因此引入光流法對動態(tài)特征點進行判斷剔除。
1.3.2 基于 LK 光流法的動態(tài)特征點剔除
首先運用 LK 光流法估計先驗靜態(tài)點的平均運動矢量,其關鍵在于灰度不變假設,即像素在運動過程中的灰度值恒定,由此可建立方程式(2):
其中等號左邊為t時刻位于 (x,y) 的像素灰度值,右邊為t+dt時刻位于 (x+dx,y+dy) 的像素灰度值,泰勒展開得:
結(jié)合式(2)和式(3)可得:
利用最小二乘法,并引入運動一致性約束,可求得每個先驗靜態(tài)點的運動矢量,再求平均即可得到背景運動速度U、V:
最后構建不等式(7)判斷集合Dp內(nèi)特征點是否為動態(tài)特征點:
γ為自適應閾值,若不等式不成立,則說明該特征點為靜態(tài)特征點,移入靜態(tài)特征點集合Sq。最后僅用Sq中的特征點用于特征匹配、相機的位姿估計,其余特征點被剔除。
在原 ORB-SLAM3 系統(tǒng)中的跟蹤線程加入動態(tài)特征點剔除模塊,將目標檢測網(wǎng)絡獲取的圖語義信息與提取到的ORB 特征點結(jié)合,以獲取先驗特征點,然后引入 LK 光流對先驗特征點進行二次判斷,最終僅利用靜態(tài)特征點進行位姿估計,降低動態(tài)物體對 SLAM 系統(tǒng)的影響。本文算法框架如圖6 所示。
圖6 本文算法框架
實驗所用設備的性能參數(shù)如表 1 所示,操作系統(tǒng)為 Ubuntu18.04,實驗環(huán)境為 Python3.6 +Pytorch1.2.1。
表1 實驗設備參數(shù)
實驗使用 VOC2007+VOC2012 數(shù)據(jù)集對 MNYOLOv5 及 YOLOv5 系列進行網(wǎng)絡訓練,訓練均不使用預訓練權重,訓練超參數(shù)如表2 所示,使用 SGD 優(yōu)化器訓練 500 輪次,設置早停機制,若精度在30 個輪次內(nèi)沒有上升就停止訓練。訓練過程精確率如圖7 所示,明顯 YOLOv5x 收斂最快且精確率最高,YOLOv5l 次之,YOLOv5n 最慢。
表2 訓練超參數(shù)
圖7 目標檢測網(wǎng)絡訓練過程的精確率
訓練后采用 VOC 測試集進行性能測試,含4952 張圖片,結(jié)果如表3 所示。由表可知,相比于 YOLOv5s,本文提出的 MN-YOLOV5 參數(shù)量減少了56.08%,算力要求減少了57.86%,權重文件減少了49.66%,幀率增加了3.03%,精度減少了0.96%,在可接受范圍內(nèi)提高了系統(tǒng)的運行速度,更容易部署在移動端。
表3 目標檢測網(wǎng)絡測試結(jié)果
本文軌跡誤差實驗采用德國慕尼黑工業(yè)大學提供的TUM 數(shù)據(jù)集[11]中的五個圖像序列,使用絕對軌跡誤差和相對軌跡誤差作為評價指標,評估參數(shù)有均方根誤差(Root Mean Squared Error,RMSE)、標準誤差(Standard Deviation,STD)和平均值(Mean)。為了驗證本文算法的有效性,對原 ORB-SLAM3 與本文算法進行對比實驗,結(jié)果如表4 和表5 所示。由表可知,本文算法在高動態(tài)場景walking_xyz、walking_half 中表現(xiàn)優(yōu)異,相較于原 ORBSLAM3 算法誤差下降 90% 以上,而在靜止場境 sitting_static 中,誤差下降不明顯甚至還有輕微上升。這表明ORB-SLAM3 在靜態(tài)環(huán)境中的確是一個定位精度高的系統(tǒng),但是無法在高動態(tài)環(huán)境中實現(xiàn)魯棒運行,而本文算法在動態(tài)場景中仍能保持較小的定位誤差,證實適合應用于動態(tài)環(huán)境的位姿估計。
表4 ORB-SLAM3 與本文算法的絕對軌跡誤差對比
表5 ORB-SLAM3 與本文算法的相對軌跡誤差對比
本文提出了一種基于MN-YOLOv5 的動態(tài)視覺SLAM算法,使用輕量級網(wǎng)絡 MobileNetV3 替換目標檢測網(wǎng)絡YOLOv5s 的主干網(wǎng)絡,并加入 SE 注意力機制,構建 MNYOLOv5 輕量級目標檢測網(wǎng)絡,改進后模型參數(shù)減少了56.08%,能更好地在移動端運用。將 LK 光流法與MNYOLOv5 目標檢測網(wǎng)絡結(jié)合,加入 ORB-SLAM3 系統(tǒng)的跟蹤線程,用于剔除動態(tài)特征點。實驗結(jié)果表明,在動態(tài)場景中本文算法可實現(xiàn)低誤差定位,相較于原 ORB-SLAM3 算法,位姿估計的均方根誤差下降了90% 以上。因此,本文提出的動態(tài)視覺 SLAM 算法具有較好的實際應用前景。接下來的工作將有兩個前進方向:繼續(xù)改進目標檢測網(wǎng)絡,提升網(wǎng)絡的精確率;考慮引入基于多視圖幾何的動態(tài)目標檢測,加強系統(tǒng)對動態(tài)點的識別能力。