林義忠,謝震鵬
(廣西大學機械工程學院,廣西南寧 530000)
隨著同步定位與地圖構建(SLAM)的研究與發展,視覺SLAM能獲取更多的環境信息,具有較好的精度和相比激光傳感器更便宜的價格,因此在很多領域都有廣闊的應用前景。對于SLAM而言,地圖的構建非常重要。傳統的SLAM構建的地圖有柵格地圖、拓撲地圖和點云地圖等,這些地圖只包含了環境中的拓撲信息和幾何信息,沒有環境的語義信息,這樣的地圖不能讓機器人完成更高級的任務。因此,對環境中的物體進行語義提取和標注的語義SLAM就成為了一個重要的研究方向。
深度學習能夠很好地對圖像中的物體進行檢測和分類,因此很多學者將深度學習引入到SLAM的研究當中。TATENO等[1]使用CNN預測深度圖,并融合單目SLAM得到的深度信息構建語義地圖。MCCORMAC等[2]使用CNN進行語義分割,并采用ElasticFusion構建語義地圖。KUNDU等[3]從單目視頻中使用語義分割和三維重建構建語義地圖。ENDO等[4]融合CNN和LSD-SLAM構建了半稠密三維語義地圖。趙洋[5]采用GrabCut方法優化了Mask-RCNN算法的分割效果,并在該結果的基礎上構建了三維語義地圖。常思雨[6]提出一種基于改進GrabCut方法的目標RGB分割算法,該算法通過CPF算法分割深度圖的信息,剔除了GrabCut分割色彩圖中不符合目標空間幾何關系的像素點,提高了RGB-D分割效果,并以此建立了語義八叉樹地圖。白云漢[7]結合ORB-SLAM和YOLO算法進行目標檢測并構建語義地圖。鄒斌等人[8]在ORB-SLAM2的基礎上結合光流方法[9]進行優化,同時將其與YOLOv3網絡檢測出的物體語義信息融合并構建語義地圖。
本文作者在ORB-SLAM2系統上,增加目前最新的YOLOv7-mask網絡進行目標物體的檢測,得到目標物體的類別和掩碼,從而得到圖像中的語義信息,進而構建語義地圖。該方法能在移動機器人上實時地進行語義地圖的構建。
視覺SLAM常用的特征點法有SIFT算法、SURF算法和ORB算法,其中ORB算法具有特征提取和匹配速度快、魯棒性好的特點,能滿足實時性要求。ORB-SLAM2支持單目、雙目和RGB-D三種相機,并且使用前端、后端和閉環檢測三個線程并行實現算法[10]。前端讀取圖像并從圖像中提取ORB特征以及完成相鄰兩幀之間的特征匹配,然后利用已匹配的特征點對構建重投影誤差函數,以此進行VO求解。閉環檢測用于檢測相機是否到達了曾經到達過的地方,以便消除長時間對相機位姿估計帶來的積累誤差。后端用于局部優化建圖,并且在閉環檢測成功檢測到相機到達曾經到過的位置時觸發全局優化。基于以上原因,本文作者選擇ORB-SLAM2作為視覺SLAM系統框架,同時,由于構建的是室內語義地圖,因此選擇RGB-D相機來獲取環境信息。ORB-SLAM2系統框架如圖1所示。
基于深度學習的目標檢測方法主要有兩類:一類是two-stage,基于區域建議的算法,代表算法有Fast R-CNN;另一類是one-stage,基于回歸的算法,代表算法有YOLO、SDD。YOLO是一種端到端的目標檢測算法,其優點是速度快,但精度相對較低。YOLO系列算法目前發展到了YOLOv7。YOLOv7由WANG等[11]提出,其大體框架和YOLOv5類似,但Backbone部分和Head部分有所不同。YOLOv7的Head部分使用Lead Head獲取網絡的深層信息作為輸出,Aux Head獲取網絡的淺層信息,用Lead Head引導Aux Head,以檢測好的正樣本進行匹配,解決了模型隨深度降低帶來的性能退化、正樣本差等問題。
為了避免目標檢測的邊界框可能包含非目標物體的點,本文作者采用YOLOv7-mask實現實例分割。YOLOv7-mask在YOLOv7的基礎上加入了BlendMask[12],實現了實例分割。YOLOv7-mask架構如圖2所示。

圖2 YOLOv7-mask架構
本文作者在ORB-SLAM2算法框架的基礎上,結合YOLOv7-mask進行目標物體的實例分割,利用得到的語義信息構建語義地圖,如圖3所示。

圖3 語義地圖構建整體框架
實例分割是對新關鍵幀的彩色圖像進行目標檢測和語義分割,得到圖像中目標物體的像素點以及其所屬物體的類別信息。本文作者采用YOLOv7-mask網絡實時地對彩色圖像進行實例分割,并生成一張與彩色圖像尺寸大小相同、帶有語義信息的語義灰度圖,語義灰度圖像中不同的非零數字代表不同類型的目標物體。
在插入新的關鍵幀時,ORB-SLAM2新增的語義地圖線程先將新關鍵幀的彩色圖傳送給YOLOv7-mask網絡框架,YOLOv7-mask提取該彩色圖像的語義信息,并生成一張語義灰度圖。然后利用YOLOv7-mask傳送回來的語義灰度圖和新的關鍵幀深度圖生成該關鍵幀的語義點云;生成的語義點云須同時滿足在深度圖中對應位置的深度值大于0、在語義灰度圖中對應位置的灰度值在目標物體類別對應的數字中,不滿足則不生產該點云;生成的語義點云中包含點云的X、Y、Z坐標位置,以及跟物體類別對應的RGB顏色信息。接著,利用該新關鍵幀的位姿將生成的語義點云投影到同一世界坐標系下,完成點云拼接,以實現語義點云地圖的構建。最后將生成的語義點云轉換成octomap中帶顏色信息的八叉樹地圖,實現語義八叉樹地圖的構建。
采用ROSMASTER X3機器人作為硬件平臺,如圖4所示。它搭載了Astra Pro深度相機、電機、麥克納姆輪、電池、Jetson Xavier NX主機、ROS機器人擴展板和顯示屏等。其組成原理如圖5所示。

圖4 ROSMASTER X3機器人

圖5 ROSMASTER X3機器人組成原理
文中采用的是Linux的ubuntu 18.04系統,以及其對應的ROS Melodic版本的ROS系統作為軟件平臺。ORB-SLAM2和YOLOv7-mask的運行環境配置如表1所示。

表1 ORB-SLAM2和YOLOv7-mask的環境配置
3.2.1 ROS自定義服務消息
由于YOLOv7-mask和ORB-SLAM2采用不同語言進行編程,因此本文作者通過自定義ROS服務通信消息類型實現ORB-SLAM2和YOLOv7-mask之間的圖像傳輸,如圖6所示。

圖6 YOLOv7-mask和ORB-SLAM2的服務消息通信示意
在ORB-SLAM2創建新的關鍵幀時,該關鍵幀的彩色圖用cv_bridge轉換成ROS可以傳送的格式后,傳送給YOLOv7-mask所在的節點。在該節點中,先將傳送過來的彩色圖用cv_bridge轉換成OpenCV能處理的格式,然后用YOLOv7-mask提取該圖像的語義信息,得到一張帶有物體語義信息的語義灰度圖,語義灰度圖經過cv_bridge轉換格式后傳送回ORB-SLAM2所在的節點,再將語義灰度圖經過cv_bridge轉換成OpenCV能處理的格式后,利用該關鍵幀的深度圖、語義灰度圖構建語義八叉樹地圖。
3.2.2 語義八叉樹地圖構建實驗
為了驗證文中算法對動、靜態場景的地圖構建效果,先在實驗室靜態場景下構建語義八叉樹地圖,然后在實驗室動態圖場景下構建語義八叉樹地圖。實驗室場景如圖7所示。

圖7 實驗室場景
首先對實驗室靜態場景構建語義八叉樹地圖,控制ROSMASTER X3機器人在實驗室中移動,實驗結束后的輸出結果如圖8所示。結果顯示該次實驗共創建了60張關鍵幀,生成了166 235個PCL點云,所有關鍵幀的彩色圖從轉換格式到YOLOv7-mask網絡提取語義信息,生成帶有語義信息的灰度圖,再傳送到ORB-SLAM2節點并轉換格式整個過程所花費的時間為27.153 7 s,平均每張關鍵幀整個過程花費的時間為0.452 562 s,最后保存了PCL語義點云地圖和語義八叉樹地圖。

圖8 靜態實驗室場景實驗結果
圖9和圖10分別為靜態實驗室場景下創建的部分關鍵幀彩色圖以及對應的語義灰度圖。可以看出:YOLOv7-mask網絡能比較好地提取出實驗室場景下的椅子、計算機顯示器、鍵盤、鼠標的語義信息,但對桌子的識別效果不好。這是因為訓練YOLOv7-mask使用的數據集中桌子類型以餐桌為主,而實驗室的桌子是辦公桌,差別太大導致識別效果差,有時候會將其局部識別成其他物體。同時,YOLOv7-mask對于椅子這種形狀比較復雜的物體,在進行實例分割時,不能很好地將其輪廓給分割出來。

圖9 靜態實驗室場景下部分關鍵幀彩色圖

圖10 靜態實驗室場景下部分關鍵幀語義灰度圖
靜態實驗室場景下的語義點云地圖如圖11所示,圖中主要聚集在一起的點云都是實驗室場景中主要存在的物體,并根據它們類別的不同顯示出了不同的顏色,如藍色點云所屬類別為椅子、黃色點云所屬類別為計算機顯示器、青色點云所屬類別為鼠標以及紫色點云所屬類別為鍵盤。但地圖中也明顯存在著不聚集在語義物體附近的語義點云,可能是由于提取語義信息時產生的錯誤語義導致的。圖12為圖11的語義點云地圖轉換成的語義八叉樹地圖,在八叉樹地圖中采用體素代替點云,數據明顯減少。同時,語義八叉樹地圖去除了許多語義點云地圖中離散的語義點云。但是,語義八叉樹地圖也因為使用體素代替點云,所以建立的物體模型不如語義點云地圖更接近真實物體。

圖11 靜態實驗室場景下語義點云地圖

圖12 靜態實驗室場景下語義八叉樹地圖
為了驗證文中的算法在動態場景中也能有好的建圖效果,本文作者在明亮的、有人員走動的實驗室中進行語義八叉樹地圖構建實驗。圖13和圖14分別為動態實驗室場景下創建的部分關鍵幀彩色圖以及對應的語義灰度圖。圖13展示了該次實驗創建的56張關鍵幀中包含人的5張圖像,在這5張圖像中,在實驗室中移動人遮擋了如椅子、計算機顯示器、鍵盤等物體。從圖14可以發現,被人遮擋的椅子、計算機顯示器、鍵盤等物體無法被YOLOv7-mask網絡識別,提取語義信息,或者不能識別出完整的物體語義信息。

圖13 動態實驗室場景下部分關鍵幀彩色圖

圖14 動態實驗室場景下部分關鍵幀語義灰度圖
動態實驗室場景下的語義點云地圖如圖15所示,語義八叉樹地圖如圖16所示。對比圖15和圖11可以發現,雖然在動態環境下,有時候YOLOv7-mask網絡無法識別、分割實驗室被遮擋的物體,但是在點云拼接下,仍然可以較好地構建語義點云地圖。并且由于文中算法只對選中的語義類別進行語義地圖的構建,因此在語義點云圖中不會出現人的點云,剔除了動態物體。在該次實驗中構建的語義點云地圖,出現的綠色點云對應的語義類別為餐桌,但其對應的實驗室物體為凳子,屬于錯誤的識別、分割。在圖16中,語義八叉樹地圖由于使用概率判斷一個體素是否被占據,因此剔除了圖15中被誤識別為餐桌、實際屬于凳子的綠色點云,說明八叉樹地圖可以有效地剔除偶爾出現的誤識別、分割導致的錯誤點云。

圖15 動態實驗室場景下語義點云地圖

圖16 動態實驗室場景下語義八叉樹地圖
以上實驗可說明文中提出的算法在動、靜態場景下都有比較好的建圖效果,并且能在室內場景下實時構建語義地圖。而八叉樹地圖相比點云地圖具有濾波和剔除誤識別、分割產生的點云的效果。以上實驗所構建的語義地圖占據存儲空間情況如表2所示,可以看出:語義八叉樹地圖占據存儲空間的大小遠小于語義點云地圖。

表2 占據存儲空間對比
本文作者提出一種基于ORB-SLAM2和YOLOv7-mask網絡的語義地圖構建方法,在ORB-SLAM2算法基礎上新增語義建圖線程,生成新的關鍵幀時,語義建圖線程利用新關鍵幀的深度圖和YOLOv7-mask網絡提取彩色圖語義信息后生成的語義灰度圖,生成新關鍵幀的語義點云,通過點云拼接生成語義點云地圖,最終將語義點云地圖轉換成帶有顏色信息的語義八叉樹地圖。本文作者以ROSMASTER X3機器人作為硬件平臺,ROS Melodic作為軟件平臺,在實驗室的動、靜態場景對所設計的語義地圖構建方法進行實驗和分析,并生成了語義點云地圖和語義八叉樹地圖,驗證了所提出的語義地圖構建方法的可行性。在后續的研究中,還需要實現物體級的語義地圖,并對地圖中的離散點云進行處理。