劉 強,袁 杰,匡本發(fā)
(新疆大學 電氣工程學院,新疆 烏魯木齊 830017)
近年來,機器人受到廣泛的關注,投入到越來越多的場景中使用,這對同步定位與建圖(SLAM)技術提出了新的挑戰(zhàn)[1-3]。SLAM 按照傳感器的不同,可以分為基于激光雷達的激光SLAM 和基于相機的視覺SLAM。視覺SLAM 因其傳感器能提供的信息豐富而獲得了較多的關注,因此眾多的學者提出了許多優(yōu)秀的SLAM 方案,如:MonoSLAM[4]、PTAM[5]、ORB-SLAM[6]、DTAM[7]和DSO[8]等。
這些算法能在靜態(tài)環(huán)境取得不錯的效果,而機器人的工作環(huán)境趨向于非結構環(huán)境,因此,視覺SLAM 需要能處理場景中的動態(tài)物體。
目前,針對動態(tài)物體的方法分為三類,分別為基于光流、幾何以及深度學習。文獻[9]通過計算光流的運動度量的方法來獲取可能的移動物體。文獻[10]檢測動態(tài)特征采用的是對極幾何與FVB(Flow Vector Bound)約束結合的方法。隨著深度學習的快速發(fā)展,與深度學習結合的方法也迎來了巨大的飛躍。文獻[11-12]通過先驗語義信息對動態(tài)特征進行剔除。文獻[13]提出了基于SegNet[14]的DS-SLAM 算法。文獻[15]提出了基于Mask R-CNN[16]的DynaSLAM 算法。文獻[17]提出了基于目標檢測和語義分割的RDTS-SLAM?;谏疃葘W習的方法中,在高動態(tài)場景中可以有效地剔除動態(tài)物體,但其對低動態(tài)場景直接利用先驗語義信息剔除動態(tài)特征反而降低了算法的定位能力。
針對上述問題,本文提出了一種結合實例分割與光流的視覺SLAM 算法,能夠對圖像中的動態(tài)物體與潛在動態(tài)物體進行運動狀態(tài)精準判定,然后再剔除從動態(tài)物體處提取的特征點,最后利用靜態(tài)特征點進行相機位姿估計。
圖1 為本文算法的系統(tǒng)框架。系統(tǒng)輸入為RGB-D圖像序列,實例分割線程對RGB 圖像進行分割獲取掩碼信息;跟蹤線程收到RGB 圖像后,先對其提取ORB[18]特征,在等待實例分割掩碼的時候對其進行稀疏光流處理,然后結合實例分割掩碼與先驗語義信息對光流信息進行處理得到非動態(tài)物體、動態(tài)物體和潛在動態(tài)物體的光流位移增量,再結合光流信息與實例分割掩碼進行聯(lián)合動態(tài)一致性檢查并剔除動態(tài)特征,最后利用靜態(tài)特征估計機器人位姿;局部建圖線程對地圖點進行實時更新;回環(huán)檢測線程對相機軌跡檢測回環(huán),并進行全局優(yōu)化。
圖1 本文算法系統(tǒng)框圖
光流是一種描述像素隨時間在圖像之間運動的方法,按照計算像素的多少分為了稀疏光流和稠密光流。稀疏光流中最具代表的是Lucas-Kanada 光流[19],稠密光流中最具代表的是Horn-Schunck 光流[20]。稀疏光流因計算像素較少,具有良好的實時性。本文算法中僅需要計算部分像素,故采用LK 光流。
在LK 光流中,假設同一個空間點被不同位姿下的相機觀測到的灰度值固定不變,根據(jù)假設有:
式中:Ix、Iy、It為該空間點灰度值在x、y、t方向上的偏導;u、v為該空間點對應像素點光流在x、y方向上的運動。
LK 光流存在的另一個假設是:某一像素和附近小鄰域Ω內像素運動一致。假設小鄰域內有n個像素點,可建立n個約束方程,為:
式(2)為超定線性方程,通過最小二乘對其求解,得到像素點光流運動信息u、v。利用像素點光流的運行信息,可以確定其在下一圖像中出現(xiàn)的位置,即為光流匹配點。為了讓LK 光流具有更強的魯棒性,引入圖像金字塔提取多層次的光流信息。
本文中采用YOLOv7[21]實例分割網(wǎng)絡來獲取像素級語義分割掩碼。YOLOv7 是一種新的體系結構,并且使用了相應的模型縮放方法,該方法提高了參數(shù)的利用率和計算效率。YOLOv7 在準確性和速度方面都具有優(yōu)越的性能。
YOLOv7 網(wǎng)絡模型如圖2 所示,由輸入(Input)、主干網(wǎng)絡(Backbone)、頭部網(wǎng)絡(Head)3 個主要模塊構成。輸入模塊的功能是將輸入的圖像調整為固定的尺寸大小,使其滿足主干網(wǎng)絡的輸入尺寸要求。CBS卷積層、EELAN 卷積層和MPConv 卷積層組成了主干網(wǎng)絡。MPConv 卷積層是在CBS 卷積層上加入了最大池化層(Maxpool),構成上下兩個分支,最終利用Concat 操作對兩個特征提取分支進行融合,從而提升了主干網(wǎng)絡提取特征的能力。
圖2 YOLOv7 網(wǎng)絡模型
E-ELAN 卷積層是高效層聚合網(wǎng)絡,可以在保持原始梯度路徑不變的狀態(tài)下,提升網(wǎng)絡的學習能力,同時也可以引導計算塊學習更多樣化的特征。頭部網(wǎng)絡先通過采用SPP 金字塔結構,提高頭部網(wǎng)絡的多尺寸輸入適應能力;再使用聚合特征金字塔網(wǎng)絡結構,使得底層信息可以自底層向上傳遞到高層,融合了不同層次的特征;最后生成實例分割掩碼。YOLOv7 的損失函數(shù)由定位損失、置信度損失和分類損失三部分構成,前者采用CIoU 損失,后兩者采用BCELoss 二值交叉熵損失。
實例分割線程為跟蹤線程提供了實例分割掩碼,通過掩碼信息,將出現(xiàn)在相機視野中的物體分為3 大類,分別為:靜態(tài)物體、動態(tài)物體和潛在動態(tài)物體。其中潛在動態(tài)物體主要是指椅子和書等較大可能處于被運動狀態(tài)的物體。首先計算得出光流運動信息中的非動態(tài)物體(潛在動態(tài)物體與靜態(tài)物體總稱)的平均位移增量S0,再計算每個潛在動態(tài)物體以及動態(tài)物體的位移增量,分別為、。
利用實例分割掩碼信息對3 類物體初始運動概率賦初值:
式中:P1、P2、P3分別為靜態(tài)物體、潛在動態(tài)物體和動態(tài)物體的初始運動概率。再計算出Smax與Smin作為位移增量判定上下界:
本文算法中有一個基本假設:靜態(tài)物體的狀態(tài)一直為靜止,故其聯(lián)合運動概率為:
結合動態(tài)物體和潛在動態(tài)物體光流位移增量,按照公式(7)、公式(8)計算聯(lián)合運動概率:
最后將>0.75 的潛在動態(tài)物體作為運動狀態(tài)進行剔除,將<0.75 的動態(tài)物體作為靜止狀態(tài)進行保留。將保留的特征用于相機運動估計。
本文算法不是直接剔除先驗動態(tài)物體上提取的特征,而是通過上述公式計算先驗語義信息與LK 光流信息的聯(lián)合運動概率,結合了語義信息與光流信息后,物體的運動判定更加準確。特別是,當RGB 圖像中先驗動態(tài)物體占據(jù)較大部分比例時,語義SLAM 若直接剔除未運動的人時,會導致估計的相機軌跡與真實軌跡之間的誤差過大。
本節(jié)將從定位準確度和真實場景兩個方面對本文算法進行驗證。此外,還將本文提出的算法與其他先進的SLAM 算法在TUM[22]中RGB-D 數(shù)據(jù)集上進行實驗對比。由于實驗需要,將選取TUM 中fr3 數(shù)據(jù)集中的4 個高動態(tài)場景和4 個低動態(tài)場景。絕對軌跡誤差(Absolute Trajectory Error,ATE)是相機位姿真實值與估計值的差值,本文將選擇ATE 作為定位準確度評價指標。
本文所用的實驗平臺為聯(lián)想Y9000P 筆記本電腦,CPU 為11th Gen Intel?CoreTMi7-11800H,RAM 為雙通道16 GB,GPU 為RTX 3060 Laptop,顯存6 GB。運行系統(tǒng)為Ubuntu 18.04,實例分割環(huán)境為CUDA 11.3,PyTorch 1.8,Python 3.8。
為了驗證本文算法對運動物體處提取的特征點剔除后對定位性能的提升,將本文算法的ATE 與ORBSLAM2 進行對比,如表1 所示。從表中數(shù)據(jù)可以看出,本文算法在4 個低動態(tài)數(shù)據(jù)集中相對提升率最高可達52.04%;在4 個高動態(tài)數(shù)據(jù)集中提升率最高達到了98.11%,最低達到了93.35%;在數(shù)據(jù)集s_x 中,本文算法的ATE 較ORB-SLAM2 的ATE 要大,經(jīng)分析在s_x 數(shù)據(jù)集中,剔除運動的特征點后的特征點數(shù)量較少,導致改進后的定位精度反而比ORB-SLAM2 要低。
表1 本文算法與ORB-SLAM2 算法的絕對軌跡誤差對比
將本文算法的ATE 與僅使用YOLOv7 刪除先驗動態(tài)物體處提取的特征點的ATE 相對比,如表2 所示。從表2 中數(shù)據(jù)可以得出,LK 光流與YOLOv7 實例分割結合的方法與僅使用YOLOv7 實例分割的方法相對比,在4 個低動態(tài)數(shù)據(jù)集中,LK 光流與YOLOv7 實例分割結合的方法的相對提升率均為正值;在4 個高動態(tài)數(shù)據(jù)集中,兩個為正值兩個為負值;相對提升率最小為-49.7%,經(jīng)分析,w_r 數(shù)據(jù)集中因相機旋轉導致光流精度受限,因此最終的定位精度反而較僅使用YOLOv7 實例分割的方法小。
表2 本文算法與僅使用YOLOv7 剔除動態(tài)特征方法的絕對軌跡誤差對比
結合表1 和表2 數(shù)據(jù)不難得出,本文算法在低動態(tài)數(shù)據(jù)集中的定位效果要比僅利用YOLOv7 實例分割剔除動態(tài)特征的定位效果好,在高動態(tài)數(shù)據(jù)集中的定位效果也有不弱于僅利用YOLOv7實例分割剔除動態(tài)特征的方法。圖3為ORB-SLAM2、YOLOv7與LK光流+YOLOv7估計的相機運動軌跡對比圖。圖中實線為相機的真實軌跡,點線為算法估計的軌跡,從圖中可以看出,本文算法在s_h、s_r、w_h 數(shù)據(jù)集中估計的相機軌跡更加貼合真實估計,估計軌跡與真實軌跡的誤差更小,直觀地體現(xiàn)了本文算法的先進性。
圖3 本文算法與ORB-SLAM2 的跟蹤軌跡對比
將本文算法的ATE 與其他優(yōu)秀的語義SLAM 相對比,如DS-SLAM、DynaSLAM,結果如表3 所示。
表3 本文算法與經(jīng)典SLAM 算法的絕對軌跡誤差對比 m
在4 個低動態(tài)數(shù)據(jù)集中,本文算法有5 個最優(yōu),且ORB-SLAM2 有2 個最優(yōu),其他優(yōu)秀算法僅1 個最優(yōu);在4 個高動態(tài)數(shù)據(jù)集中,本文算法有4 個最優(yōu)。本文算法在低動態(tài)數(shù)據(jù)集中的表現(xiàn)優(yōu)于其他算法,在高動態(tài)數(shù)據(jù)集中也有不弱于其他算法的表現(xiàn),充分驗證了本文算法的優(yōu)越性。
為了評估本文算法在真實場景中的性能,使用Kinect v2 深度相機對實驗室的日常場景進行圖像信息提取,并輸入本文算法,對算法運行中的特征提取、實例分割、光流運行信息、動態(tài)特征剔除進行可視化展示,如圖4 所示。從圖4 第一列圖像可以看出,當人坐在椅子上處于低動態(tài)時,本文算法認定其為靜止狀態(tài),不剔除其上特征點;圖中第二列,當人從座位中起身時被認定為動態(tài)狀態(tài),剔除其上特征點;圖中第三列和第四列,人處于行走時,本文算法認定人處于運動狀態(tài),剔除其上特征點。綜合圖4可以得出,本文算法可以精準地對運動特征進行剔除。
圖4 真實場景驗證
本文將物體分為3 類:靜態(tài)物體、動態(tài)物體和潛在動態(tài)物體,通過YOLOv7 實例分割掩碼與先驗信息,對其運動概率賦予初值,然后將YOLOv7 實例分割與光流運動信息相結合,分別計算每一個動態(tài)物體和潛在動態(tài)物體光流位移增量,根據(jù)位移增量判定其是否運動,最終對運動物體上提取的特征點進行剔除。本文算法能很好地判定物體的運動狀態(tài),不像其他語義SLAM,直接對先驗動態(tài)物體進行剔除,忽略了余留的靜態(tài)特征太少,導致算法定位精度降低。在TUM RGB-D 數(shù)據(jù)集中對本文算法進行驗證,實驗結果表明:本文算法在低動態(tài)數(shù)據(jù)集中定位效果優(yōu)于其他算法,在高動態(tài)數(shù)據(jù)集中也處于一流的水平。本文算法在真實場景中的運行過程展示了對于動態(tài)物體的運動狀態(tài)判別精準,能有效地幫助提高算法的定位能力。在未來的工作中,將探索以物體作為地標的語義SLAM。