王成根, 史金龍*, 諸皓偉, 白素琴, 孫蘊翰, 盧加文, 黃樹成
(1.江蘇科技大學 計算機學院, 江蘇 鎮江 212000;2.南京大學 計算機軟件新技術國家重點實驗室, 江蘇 南京 210046)
基于深度相機的RGB-D SLAM技術已經成為多個領域內的研究熱點[1],其在虛擬維修、智能制造、AR及VR等場景中被廣泛應用。由于消費級深度相機工作距離限制,通常被應用于室內場景,如辦公室、餐廳、客廳等,往往包含運動的物體,包括一些發生較小形變的運動剛性物體如被搬動的椅子、箱子等和可能發生較大形變的運動非剛性物體包括行走的人,隨風擺動的窗簾等[2-3]。這些運動物體與環境的交互會嚴重影響相機位姿的計算,這給動態場景RGB-D SLAM帶來了重大挑戰。
為了解決這一難題,動態場景RGB-D SLAM往往結合二維實例分割網絡分析場景中物體的語義信息,或結合光流檢測運動物體,最后利用三維重建技術生成場景的三維地圖[4]。首先,現有的SLAM方法中具有代表性的是ORBSLAM系列工作[5-7],ORB-SLAM2[5]在ORBSLAM[6]的基礎上添加全局優化模塊,使相機位姿優化更具魯棒性。ORB-SLAM3[7]在ORBSLAM2的基礎上引入Atlas[8]模塊,保存瑣碎的子地圖,進一步提高大場景中相機位姿優化精度。其次,當前經常與SLAM技術結合的實例分割方法中,主流的是基于候選框的R-CNN(Region-CNN)系列工作[9-11]和無候選框的SOLO系列工作[12-13],Mask R-CNN[10]在Faster R-CNN[11]網絡中添加預測物體掩碼信息的分支,實現了圖像的目標檢測和實例分割。SOLOv2[12]對SOLO[13]進行改進,動態地分割場景中每個實例,與Mask R-CNN相比實現了更高的分割精度。此外,近年來主流的光流方法研究中,PWC-net[14]在保證光流估計精度和速度的同時,極大地減少了光流網絡訓練的空間開銷。RAFT[15]采用了一種基于LSTM[16](Long Short-Term Memory)網絡的可逆映射方法,并且在不同的分辨率下處理圖像,從而提高光流估計的準確性和魯棒性,達到了更優的效果。動態場景中RGB-D SLAM方法一般通過柵格化的方式表示三維場景。KinectFusion[17-18]率先使用TSDF(Truncated Signed Distance Function)實時重建三維場景,其利用高速的GPU線程計算每個柵格中的三維信息,Voxel Hashing[19]采用哈希索引策略管理GPU中每一個柵格,實現大場景三維地圖。
現有的動態場景RGB-D SLAM工作與二維實例分割結合。MaskFusion[20]將Mask R-CNN與ElasticFusion[21]結合,在動態場景中分割物體,追蹤動態剛性物體,并重建動態三維場景。DynaSLAM[22]將Mask R-CNN與ORB-SLAM2結合,剔除場景中動態區域,再通過靜態三維場景補全剔除的動態區域,獲得更高的相機位姿優化精度。Mid-Fusion[23]使用Mask R-CNN提取場景中的實例信息,通過Point-Plane ICP[24]策略優化相機位姿,追蹤運動的剛性物體,并重建動態三維場景。YOLO-SLAM[25]在YOLO[26]的基礎上提出一個輕量級Darknet19-YOLOv3模塊提取圖像中的實例信息,結合ORB-SLAM2計算相機位姿。雖然上述方法通過實例先驗信息能判斷和刪除動態物體,但卻忽略了運動物體也會有靜止的狀態。這樣的策略導致相機位姿優化中,物體靜止時表面的特征沒有被充分利用。
為了解決上述問題,一些工作與光流結合,檢測物體的運動狀態,為相機位姿優化提供更多穩定的特征。Alcantarilla[27]等人將SLAM技術與密集場景流結合,提高動態場景三維建模的精度和魯棒性。FlowFusion[28]引入PWC-net,通過光流殘差找到場景流中運動不一致的點云,并在追蹤相機和重建場景時去除這些點云。Occlu-sionFusion[29]利用RAFT提取場景中物體的運動信息,通過圖神經網絡[30]推斷物體被遮擋區域的運動,獲得更精確的動態場景RGB-D三維重建結果。雖然上述工作可以檢測出場景中的動態物體,但往往存在動態物體邊界不清晰,部分動態物體上的特征點被用于相機位姿計算,導致相機位姿優化不夠精準。此外,ACEFusion[31]結合基于DNN(Dynamic Neural Network)的實例分割模塊和光流,將場景中檢測的動態物體邊緣刻畫得更精確,但仍然忽略了運動物體靜止時表面的特征也可以用于相機位姿優化。
針對上述問題,本文做了以下工作:
(1)基于先進的相機位姿優化模塊、實例分割網絡和光流網絡,提出一種新穎的動態場景RGB-D SLAM方法;
(2)考慮到場景中可能會包含運動的非剛性物體,利用實例分割結果剔除場景中非剛性物體,并根據剛性物體語義信息構造語義地圖;
(3)針對運動的剛性物體,通過光流網絡估計相鄰幀之間的光流,利用光流計算語義地圖中物體的運動殘差,找到動態剛性物體并追蹤,再剔除動態剛性物體上的特征。通過前兩部分,可以得到用于計算相機位姿的穩定特征點,實現更加精確的相機位姿估計和三維場景;
(4)本文在TUM[32]和Bonn[33]公開數據集共30個RGB-D序列中進行測試,結果顯示:本文方法較現有最優的方法具有更高的相機位姿優化精度;本文消融實驗結果顯示:本文方法較僅利用先驗信息剔除物體特征點的方法具有更高的相機位姿精度;本文稠密建圖實驗結果顯示:本文重建的場景模型較當前先進的工作具有更高的三維重建精度。此外,通過點云的方式實時顯示動態剛性物體,使得重建的場景更加完整。
圖1為系統框架,本文在ORB-SLAM3[7]相機追蹤、局部建圖和回環檢測三個模塊的基礎上,增加動態檢測模塊和稠密建圖模塊。動態檢測模塊包括非剛性物體檢測和剛性物體檢測與追蹤兩個部分。非剛性物體檢測部分識別場景中非剛性物體并剔除物體對應區域的ORB特征點。剛性物體檢測與追蹤部分檢測場景中運動剛性物體,追蹤并剔除物體對應區域的ORB特征點。稠密建圖模塊構造語義地圖,并重建靜態背景和動態剛性物體。

圖1 系統框架圖Fig.1 System framework diagram
具體來說,方法將RGB-D圖像序列的每一幀輸入到動態檢測模塊。該模塊首先使用SOLOv2[12]進行非剛性物體檢測,提取場景中所有實例信息,并生成非剛性物體掩碼圖。接著,將非剛性物體外的實例信息融合到稠密建圖模塊構造的地圖中,生成具有實例信息的語義地圖。然后,使用RAFT[15]光流網絡計算前后兩幀圖像之間的光流信息,并通過光流和自我流提取場景的運動殘差。再根據運動殘差提取實例點云并追蹤其6D位姿,實現動態剛性物體檢測與追蹤。
當動態檢測完成后,剔除非剛性物體掩碼區域和動態剛性物體在當前幀投影區域的ORB特征點,將剩余的ORB特征點輸入ORB-SLAM3的相機追蹤、局部建圖、回環檢測模塊優化相機位姿。
最后,將優化后的相機位姿輸入到稠密建圖模塊中構造語義地圖,并管理地圖中的實例物體。使用帶符號截斷距離函數重建靜態背景,并以點云的形式重建動態剛性物體。
當第t幀It到達時,將RGB圖像輸入到SOLOv2[12]網絡,預測二維實例掩碼圖Maskt,如圖2(a)所示。Maskt中記錄了每個像素所屬的實例類別,即Maskt(x,y)=m,其中m∈[0,w]為像素坐標(x,y)處的掩碼值,w為Maskt中的實例總數。設場景中非剛性物體的掩碼值為θ,提取Maskt中值為θ的部分,得到It初始非剛性物體掩碼圖Kt,如圖2(b)所示。由于網絡預測的實例結果會存在過分割和漏分割的情況,隨后該模塊將Kt腐蝕并膨脹,得到處理后掩碼圖Kt′,結果如圖2(c)所示。最后將非剛性物體外的實例信息融合到語義地圖M中,如圖2(d)所示,同時在M中分割實例物體Oj(?j∈{0,1,…,N},N為物體的總數),具體分割算法見第3節。

圖2 非剛性物體檢測效果Fig.2 Effect diagram of non rigid object detection
3.2.1 運動剛性物體檢測
非剛性物體檢測完成后,先通過光流和自我流計算M中每一個實例的2D運動殘差。光流、自我流關系如圖3所示。

圖3 光流與自我流關系Fig.3 Diagram of relationship between optical flow and self flow
其中xp為t-1幀中運動物體三維點p對應的像素坐標,xq為t幀中三維點q對應的像素坐標,q為p在t時刻的位置。xp′為xp投影到t幀中對應的像素坐標,2D運動殘差即為
具體來說,首先通過RAFT[15]光流網絡計算出It和It-1之間的光流值為任意像素點),描述了x在It與It-1之間的運動,其中包含了相機運動與物體自身運動。
接著,設x對應的2D運動殘差為并將非剛性物體像素區域的運動殘差置為0,x0∈Kt。
隨后,根據相機位姿Tt和Tt-1,將It中非剛性物體外的像素xt?Kt投影到It-1,計算出相機自我流用于描述xt在It與It-1之間的相機運動,如公式(1)所示:
公式(1)中,π-1將xt反投影到三維空間,π將三維空間中的點投影到二維平面為It-1相機位姿的逆。
3.2.2 剛性物體追蹤
檢測出運動的剛性物體Lj后,通過非線性優化估計Lj從t-1時刻到t時刻變化的6D位姿
具體來說,先根據Tt-1將Lj任意三維點為三維點索引)投影到It-1中得到對應的像素坐標的光流值計算在It-1相機空間下坐標計算在It中對應的像素坐標再將反投影到It相機空間下,即
然后構造能量函數,優化Lj從t-1時刻到t時刻的6D位姿,如公式(3)所示:
Etotal為非線性最小二乘問題的能量函數,其中Eflow為光流項,如公式(4)所示:
其中:公式(5)為Point-Plane ICP[24]項為對應法線向量,其使得在優化中的預測值與在法線方向上對齊。
在It中完成動態檢測后,得到非剛性物體掩碼圖Kt以及追蹤的動態剛性物體點云Lj。將投影到It,得到動態剛性物體掩碼圖然后剔除Kt和區域的ORB特征點,接著將剩余的特征點輸入到ORB-SLAM3[5]相機追蹤模塊、局部建圖模塊和回環檢測模塊進行相機位姿優化。
RGB-D圖像It、相機位姿Tt和二維實例掩碼Maskt作為稠密建圖模塊的輸入,構造基于Voxel Hashing[19]的語義地圖M。M內任意體素v包含SDF值dv、權重wv、顏色值cv和物體編碼mv。
隨著相機運動,視野范圍內可見體素中dv,wv,cv,mv的值被不斷更新。假設{v}t為M在It視野范圍內可見的體素集合,vi∈{v}t。vi中dvi,wvi,cvi采用Voxel Hashing的方法進行更新。為了分割背景和每一個實例物體,本文先給Maskt中每一個實例賦予物體編碼值,再將Maskt融合到M中更新mvi,具體算法步驟如下:
輸入:二維實例掩碼圖Maskt、It的相機位姿Tt、語義地圖M。
輸出:體素的物體編碼值mv。
Step1:將Maskt中二維實例w為Maskt實例總數)的每個像素反投影到M中,找到其對應的體素集合{v}l。
Step2:若M中存在實例物體Oj,Oj對應體素與{v}l重合數量大于σ(σ為重合閾值),則將物體編碼置為j;若不存在或重合數量小于σ,賦予新的物體編碼。
Step3:根據It的相機位姿將vi投影到Maskt,找到與投影點歐式距離最小的像素坐標xvi,將Maskt對應的物體編碼賦值給mvi。
此外,對于運動的剛性物體,通過3.2.2節中的方法追蹤Oj并更新Lj,更新方法如公式(6)所示:
本文實驗平臺為Intel Xeon Silver 4214 CPU、32 G內存、RTX2080TiGPU的PC,操作系統采用Ubuntu18.04。實例分割與光流網絡的訓練與測試均使用Python編寫,SLAM部分、非剛性物體檢測、動態剛性物體檢測與追蹤部分使用C++編寫。
Bonn[33]數據集與TUM[32]數據集均為動態RGB-D SLAM領域廣泛使用的公開數據集。Bonn中共有24個RGB-D序列,其中包含了人體走動、人與箱子交互、人與氣球交互等多個動態場景,并提供了每一幀相機位姿真值。TUM數據集中有6個動態序列,其可根據人體的運動程度劃分為3個低動態場景和3個高動態場景。低動態場景中,人坐在椅子上進行辦公和交流;高動態場景中,人在辦公室內走動。TUM同樣提供了每一幀對應的相機位姿真值。
為了識別到場景中存在的語義,文章在Bonn數據集中選取900張圖片并標注,其中包含人體、椅子、桌子、氣球、小車、柜子和箱子共7個類別。使用SOLOv2[12]訓練,迭代600次,主干網絡使用Resnet[35]。RAFT[15]光流網絡采用其預訓練模型raft-sintel。
相機位姿精度是衡量RGB-D SLAM工作的重要指標,文章采用絕對軌跡誤差(ATERMSE)評估相機位姿精度,絕對軌跡誤差通常用于評估相機軌跡的全局一致性,表明了每一幀相機位姿估計值與真值之間的差值,數值越小,相機位姿精度越高。
在Bonn數據集24個動態序列上,將本文方法與StaticFusion[36],DynaSLAM[22],ReFusion[33]和ACEFusion[31]對比,分別用SF,DS,RF和AF表示。
實驗結果如表1所示,文章提出的方法在14個動態序列中達到了最先進的相機位姿優化精度。其中,Kidnapping2,Moving No Box,Moving O Box2,Placing No Box等序列均有顯著提升。經研究發現,這些序列均為人與箱子交互的場景,而本文方法將箱子處于靜態時穩定的特征點用于相機位姿優化。

表1 Bonn數據集絕對軌跡誤差對比Tab.1 Comparison of absolute trajectory error of Bonn dataset(m)
在TUM數據集上,將本文方法與DynaSLAM,ReFusion,RigidFusion[37]和ACEFusion對比,分別用DS,RF,Rigid和AF表示。
實驗結果如表2所示,其中Sitting Static,Sitting XYZ,Sitting Halfsphere,Walking Static,Walking XYZ等序列中,本文方法比現有的方法精度更高,這得益于文章將SOLOv2實例分割網絡和ORB-SLAM3相結合,將非剛性物體分割得更精確,參與相機位姿優化的特征點更可靠。

表2 TUM數據集絕對軌跡誤差對比Tab.2 Comparison of absolute trajectory error of TUM dataset(m)

表3 Bonn數據集不同策略的絕對軌跡誤差對比Tab.3 Comparison of Absolute Trajectory Errors for Different Strategies in the Bonn Dataset (m)
此外,文章選取部分實驗中的相機軌跡結果與真值對比,如圖4所示。

圖4 絕對軌跡誤差對比圖Fig.4 Diagram of Absolute trajectory error comparison
圖4中直觀地展示了文章提出的方法在Bonn和TUM數據集中相機絕對軌跡誤差對比。圖4共有9個子圖,每個子圖中黑色線代表數據集中真實軌跡,藍色線代表算法估計的相機位姿,紅色線代表兩者誤差(彩圖見期刊電子版)。從圖中可以看出,在大多數序列中,算法估計的相機位姿與真實軌跡的偏差較小,再次證明本文所提出方法在各個場景中都有優越表現。
如前文所述,當動態剛性物體處于靜止狀態時,其表面特征較為穩定,能夠很好的輔助相機位姿優化。為了證明這一點,文章選取Bonn數據集中含有動態剛性物體的序列,對比計算全程剔除和動態剔除兩種策略下的絕對估計誤差。
其中11個序列本文提出的動態剔除方法性能更好,其他4個序列Balloon,Balloon2,Moving O Box與Moving O Box2均未有提升,這是由于場景中的動態剛性物體如氣球、箱子始終處于運動狀態,無靜止狀態。
在稠密建圖系統將RGB-D序列幀和優化后的相機位姿輸入到稠密建圖模塊中,使用TSDF模型重建靜態背景,重建結果如圖5所示。

圖5 背景重建Fig.5 Background reconstruction map
圖5中5(a)為Bonn數據集中Person Tracking序列的背景重建結果,此序列中僅包含非剛性物體,即行走的人。5(b)為Bonn數據集中Moving No Box序列的背景重建結果,此序列包含非剛性物體和運動剛性物體, 即被人搬動的箱子。圖6中展示了本文方法與ReFusion在Bonn數據集Moving No Box序列的重建結果對比。

圖6 重建結果對比Fig.6 Comparison of reconstruction results
本文方法與ReFusion均可重建出背景模型,但ReFusion平均重建誤差為0.066 m,在墻面和桌面上誤差較大。本文方法平均重建誤差為0.042 m,與ReFusion相比重建精度更高。
此外,場景中動態剛性物體以點云的形式重建,如圖7所示。

圖7 動態剛性物體融合Fig.7 Dynamic rigid object fusion
圖7為Bonn數據集中Moving No Box序列動態剛性物體融合結果,圖中以時間戳的形式展示方法在230,240,250和260幀時動態剛性物體融合效果。場景中采用藍色點云凸顯追蹤的動態剛性物體,從圖中看出方法可將融合動態物體的三維場景重建完整(彩圖見期刊電子版)。
為了提高RGB-D SLAM方法在室內動態場景中的精度,文章提出一種基于實例分割與光流的RGB-D SLAM方法,在TUM和Bonn數據集上測試表明與當前最先進的工作ACEFusion相比相機精度提升約43%。本文通過語義信息和光流信息,檢測出場景中的非剛性物體和動態剛性物體,剔除非剛性物體和動態剛性物體特征點,重建靜態背景以及動態剛性物體,本文方法最終平均重建誤差為0.042 m。
但方法仍存在的局限性,首先,僅僅通過光流檢測出場景中動態剛性物體,沒有將光流信息用于靜態部分的相機位姿優化中。其次,直接剔除場景中非剛性物體,沒有追蹤和重建非剛性物體。在下一階段的工作中,進一步使用光流信息用于相機位姿優化,以提升SLAM系統的相機位姿精度,進一步的考慮非剛性物體追蹤和重建方法,提高動態場景模型重建精度。