王成根, 史金龍*, 諸皓偉, 白素琴, 孫蘊翰, 盧加文, 黃樹成
(1.江蘇科技大學 計算機學院, 江蘇 鎮(zhèn)江 212000;2.南京大學 計算機軟件新技術(shù)國家重點實驗室, 江蘇 南京 210046)
基于深度相機的RGB-D SLAM技術(shù)已經(jīng)成為多個領(lǐng)域內(nèi)的研究熱點[1],其在虛擬維修、智能制造、AR及VR等場景中被廣泛應(yīng)用。由于消費級深度相機工作距離限制,通常被應(yīng)用于室內(nèi)場景,如辦公室、餐廳、客廳等,往往包含運動的物體,包括一些發(fā)生較小形變的運動剛性物體如被搬動的椅子、箱子等和可能發(fā)生較大形變的運動非剛性物體包括行走的人,隨風擺動的窗簾等[2-3]。這些運動物體與環(huán)境的交互會嚴重影響相機位姿的計算,這給動態(tài)場景RGB-D SLAM帶來了重大挑戰(zhàn)。
為了解決這一難題,動態(tài)場景RGB-D SLAM往往結(jié)合二維實例分割網(wǎng)絡(luò)分析場景中物體的語義信息,或結(jié)合光流檢測運動物體,最后利用三維重建技術(shù)生成場景的三維地圖[4]。首先,現(xiàn)有的SLAM方法中具有代表性的是ORBSLAM系列工作[5-7],ORB-SLAM2[5]在ORBSLAM[6]的基礎(chǔ)上添加全局優(yōu)化模塊,使相機位姿優(yōu)化更具魯棒性。ORB-SLAM3[7]在ORBSLAM2的基礎(chǔ)上引入Atlas[8]模塊,保存瑣碎的子地圖,進一步提高大場景中相機位姿優(yōu)化精度。其次,當前經(jīng)常與SLAM技術(shù)結(jié)合的實例分割方法中,主流的是基于候選框的R-CNN(Region-CNN)系列工作[9-11]和無候選框的SOLO系列工作[12-13],Mask R-CNN[10]在Faster R-CNN[11]網(wǎng)絡(luò)中添加預(yù)測物體掩碼信息的分支,實現(xiàn)了圖像的目標檢測和實例分割。SOLOv2[12]對SOLO[13]進行改進,動態(tài)地分割場景中每個實例,與Mask R-CNN相比實現(xiàn)了更高的分割精度。此外,近年來主流的光流方法研究中,PWC-net[14]在保證光流估計精度和速度的同時,極大地減少了光流網(wǎng)絡(luò)訓練的空間開銷。RAFT[15]采用了一種基于LSTM[16](Long Short-Term Memory)網(wǎng)絡(luò)的可逆映射方法,并且在不同的分辨率下處理圖像,從而提高光流估計的準確性和魯棒性,達到了更優(yōu)的效果。動態(tài)場景中RGB-D SLAM方法一般通過柵格化的方式表示三維場景。KinectFusion[17-18]率先使用TSDF(Truncated Signed Distance Function)實時重建三維場景,其利用高速的GPU線程計算每個柵格中的三維信息,Voxel Hashing[19]采用哈希索引策略管理GPU中每一個柵格,實現(xiàn)大場景三維地圖。
現(xiàn)有的動態(tài)場景RGB-D SLAM工作與二維實例分割結(jié)合。MaskFusion[20]將Mask R-CNN與ElasticFusion[21]結(jié)合,在動態(tài)場景中分割物體,追蹤動態(tài)剛性物體,并重建動態(tài)三維場景。DynaSLAM[22]將Mask R-CNN與ORB-SLAM2結(jié)合,剔除場景中動態(tài)區(qū)域,再通過靜態(tài)三維場景補全剔除的動態(tài)區(qū)域,獲得更高的相機位姿優(yōu)化精度。Mid-Fusion[23]使用Mask R-CNN提取場景中的實例信息,通過Point-Plane ICP[24]策略優(yōu)化相機位姿,追蹤運動的剛性物體,并重建動態(tài)三維場景。YOLO-SLAM[25]在YOLO[26]的基礎(chǔ)上提出一個輕量級Darknet19-YOLOv3模塊提取圖像中的實例信息,結(jié)合ORB-SLAM2計算相機位姿。雖然上述方法通過實例先驗信息能判斷和刪除動態(tài)物體,但卻忽略了運動物體也會有靜止的狀態(tài)。這樣的策略導(dǎo)致相機位姿優(yōu)化中,物體靜止時表面的特征沒有被充分利用。
為了解決上述問題,一些工作與光流結(jié)合,檢測物體的運動狀態(tài),為相機位姿優(yōu)化提供更多穩(wěn)定的特征。Alcantarilla[27]等人將SLAM技術(shù)與密集場景流結(jié)合,提高動態(tài)場景三維建模的精度和魯棒性。FlowFusion[28]引入PWC-net,通過光流殘差找到場景流中運動不一致的點云,并在追蹤相機和重建場景時去除這些點云。Occlu-sionFusion[29]利用RAFT提取場景中物體的運動信息,通過圖神經(jīng)網(wǎng)絡(luò)[30]推斷物體被遮擋區(qū)域的運動,獲得更精確的動態(tài)場景RGB-D三維重建結(jié)果。雖然上述工作可以檢測出場景中的動態(tài)物體,但往往存在動態(tài)物體邊界不清晰,部分動態(tài)物體上的特征點被用于相機位姿計算,導(dǎo)致相機位姿優(yōu)化不夠精準。此外,ACEFusion[31]結(jié)合基于DNN(Dynamic Neural Network)的實例分割模塊和光流,將場景中檢測的動態(tài)物體邊緣刻畫得更精確,但仍然忽略了運動物體靜止時表面的特征也可以用于相機位姿優(yōu)化。
針對上述問題,本文做了以下工作:
(1)基于先進的相機位姿優(yōu)化模塊、實例分割網(wǎng)絡(luò)和光流網(wǎng)絡(luò),提出一種新穎的動態(tài)場景RGB-D SLAM方法;
(2)考慮到場景中可能會包含運動的非剛性物體,利用實例分割結(jié)果剔除場景中非剛性物體,并根據(jù)剛性物體語義信息構(gòu)造語義地圖;
(3)針對運動的剛性物體,通過光流網(wǎng)絡(luò)估計相鄰幀之間的光流,利用光流計算語義地圖中物體的運動殘差,找到動態(tài)剛性物體并追蹤,再剔除動態(tài)剛性物體上的特征。通過前兩部分,可以得到用于計算相機位姿的穩(wěn)定特征點,實現(xiàn)更加精確的相機位姿估計和三維場景;
(4)本文在TUM[32]和Bonn[33]公開數(shù)據(jù)集共30個RGB-D序列中進行測試,結(jié)果顯示:本文方法較現(xiàn)有最優(yōu)的方法具有更高的相機位姿優(yōu)化精度;本文消融實驗結(jié)果顯示:本文方法較僅利用先驗信息剔除物體特征點的方法具有更高的相機位姿精度;本文稠密建圖實驗結(jié)果顯示:本文重建的場景模型較當前先進的工作具有更高的三維重建精度。此外,通過點云的方式實時顯示動態(tài)剛性物體,使得重建的場景更加完整。
圖1為系統(tǒng)框架,本文在ORB-SLAM3[7]相機追蹤、局部建圖和回環(huán)檢測三個模塊的基礎(chǔ)上,增加動態(tài)檢測模塊和稠密建圖模塊。動態(tài)檢測模塊包括非剛性物體檢測和剛性物體檢測與追蹤兩個部分。非剛性物體檢測部分識別場景中非剛性物體并剔除物體對應(yīng)區(qū)域的ORB特征點。剛性物體檢測與追蹤部分檢測場景中運動剛性物體,追蹤并剔除物體對應(yīng)區(qū)域的ORB特征點。稠密建圖模塊構(gòu)造語義地圖,并重建靜態(tài)背景和動態(tài)剛性物體。
圖1 系統(tǒng)框架圖Fig.1 System framework diagram
具體來說,方法將RGB-D圖像序列的每一幀輸入到動態(tài)檢測模塊。該模塊首先使用SOLOv2[12]進行非剛性物體檢測,提取場景中所有實例信息,并生成非剛性物體掩碼圖。接著,將非剛性物體外的實例信息融合到稠密建圖模塊構(gòu)造的地圖中,生成具有實例信息的語義地圖。然后,使用RAFT[15]光流網(wǎng)絡(luò)計算前后兩幀圖像之間的光流信息,并通過光流和自我流提取場景的運動殘差。再根據(jù)運動殘差提取實例點云并追蹤其6D位姿,實現(xiàn)動態(tài)剛性物體檢測與追蹤。
當動態(tài)檢測完成后,剔除非剛性物體掩碼區(qū)域和動態(tài)剛性物體在當前幀投影區(qū)域的ORB特征點,將剩余的ORB特征點輸入ORB-SLAM3的相機追蹤、局部建圖、回環(huán)檢測模塊優(yōu)化相機位姿。
最后,將優(yōu)化后的相機位姿輸入到稠密建圖模塊中構(gòu)造語義地圖,并管理地圖中的實例物體。使用帶符號截斷距離函數(shù)重建靜態(tài)背景,并以點云的形式重建動態(tài)剛性物體。
當?shù)趖幀It到達時,將RGB圖像輸入到SOLOv2[12]網(wǎng)絡(luò),預(yù)測二維實例掩碼圖Maskt,如圖2(a)所示。Maskt中記錄了每個像素所屬的實例類別,即Maskt(x,y)=m,其中m∈[0,w]為像素坐標(x,y)處的掩碼值,w為Maskt中的實例總數(shù)。設(shè)場景中非剛性物體的掩碼值為θ,提取Maskt中值為θ的部分,得到It初始非剛性物體掩碼圖Kt,如圖2(b)所示。由于網(wǎng)絡(luò)預(yù)測的實例結(jié)果會存在過分割和漏分割的情況,隨后該模塊將Kt腐蝕并膨脹,得到處理后掩碼圖Kt′,結(jié)果如圖2(c)所示。最后將非剛性物體外的實例信息融合到語義地圖M中,如圖2(d)所示,同時在M中分割實例物體Oj(?j∈{0,1,…,N},N為物體的總數(shù)),具體分割算法見第3節(jié)。
圖2 非剛性物體檢測效果Fig.2 Effect diagram of non rigid object detection
3.2.1 運動剛性物體檢測
非剛性物體檢測完成后,先通過光流和自我流計算M中每一個實例的2D運動殘差。光流、自我流關(guān)系如圖3所示。
圖3 光流與自我流關(guān)系Fig.3 Diagram of relationship between optical flow and self flow
其中xp為t-1幀中運動物體三維點p對應(yīng)的像素坐標,xq為t幀中三維點q對應(yīng)的像素坐標,q為p在t時刻的位置。xp′為xp投影到t幀中對應(yīng)的像素坐標,2D運動殘差即為
具體來說,首先通過RAFT[15]光流網(wǎng)絡(luò)計算出It和It-1之間的光流值為任意像素點),描述了x在It與It-1之間的運動,其中包含了相機運動與物體自身運動。
接著,設(shè)x對應(yīng)的2D運動殘差為并將非剛性物體像素區(qū)域的運動殘差置為0,x0∈Kt。
隨后,根據(jù)相機位姿Tt和Tt-1,將It中非剛性物體外的像素xt?Kt投影到It-1,計算出相機自我流用于描述xt在It與It-1之間的相機運動,如公式(1)所示:
公式(1)中,π-1將xt反投影到三維空間,π將三維空間中的點投影到二維平面為It-1相機位姿的逆。
3.2.2 剛性物體追蹤
檢測出運動的剛性物體Lj后,通過非線性優(yōu)化估計Lj從t-1時刻到t時刻變化的6D位姿
具體來說,先根據(jù)Tt-1將Lj任意三維點為三維點索引)投影到It-1中得到對應(yīng)的像素坐標的光流值計算在It-1相機空間下坐標計算在It中對應(yīng)的像素坐標再將反投影到It相機空間下,即
然后構(gòu)造能量函數(shù),優(yōu)化Lj從t-1時刻到t時刻的6D位姿,如公式(3)所示:
Etotal為非線性最小二乘問題的能量函數(shù),其中Eflow為光流項,如公式(4)所示:
其中:公式(5)為Point-Plane ICP[24]項為對應(yīng)法線向量,其使得在優(yōu)化中的預(yù)測值與在法線方向上對齊。
在It中完成動態(tài)檢測后,得到非剛性物體掩碼圖Kt以及追蹤的動態(tài)剛性物體點云Lj。將投影到It,得到動態(tài)剛性物體掩碼圖然后剔除Kt和區(qū)域的ORB特征點,接著將剩余的特征點輸入到ORB-SLAM3[5]相機追蹤模塊、局部建圖模塊和回環(huán)檢測模塊進行相機位姿優(yōu)化。
RGB-D圖像It、相機位姿Tt和二維實例掩碼Maskt作為稠密建圖模塊的輸入,構(gòu)造基于Voxel Hashing[19]的語義地圖M。M內(nèi)任意體素v包含SDF值dv、權(quán)重wv、顏色值cv和物體編碼mv。
隨著相機運動,視野范圍內(nèi)可見體素中dv,wv,cv,mv的值被不斷更新。假設(shè){v}t為M在It視野范圍內(nèi)可見的體素集合,vi∈{v}t。vi中dvi,wvi,cvi采用Voxel Hashing的方法進行更新。為了分割背景和每一個實例物體,本文先給Maskt中每一個實例賦予物體編碼值,再將Maskt融合到M中更新mvi,具體算法步驟如下:
輸入:二維實例掩碼圖Maskt、It的相機位姿Tt、語義地圖M。
輸出:體素的物體編碼值mv。
Step1:將Maskt中二維實例w為Maskt實例總數(shù))的每個像素反投影到M中,找到其對應(yīng)的體素集合{v}l。
Step2:若M中存在實例物體Oj,Oj對應(yīng)體素與{v}l重合數(shù)量大于σ(σ為重合閾值),則將物體編碼置為j;若不存在或重合數(shù)量小于σ,賦予新的物體編碼。
Step3:根據(jù)It的相機位姿將vi投影到Maskt,找到與投影點歐式距離最小的像素坐標xvi,將Maskt對應(yīng)的物體編碼賦值給mvi。
此外,對于運動的剛性物體,通過3.2.2節(jié)中的方法追蹤Oj并更新Lj,更新方法如公式(6)所示:
本文實驗平臺為Intel Xeon Silver 4214 CPU、32 G內(nèi)存、RTX2080TiGPU的PC,操作系統(tǒng)采用Ubuntu18.04。實例分割與光流網(wǎng)絡(luò)的訓練與測試均使用Python編寫,SLAM部分、非剛性物體檢測、動態(tài)剛性物體檢測與追蹤部分使用C++編寫。
Bonn[33]數(shù)據(jù)集與TUM[32]數(shù)據(jù)集均為動態(tài)RGB-D SLAM領(lǐng)域廣泛使用的公開數(shù)據(jù)集。Bonn中共有24個RGB-D序列,其中包含了人體走動、人與箱子交互、人與氣球交互等多個動態(tài)場景,并提供了每一幀相機位姿真值。TUM數(shù)據(jù)集中有6個動態(tài)序列,其可根據(jù)人體的運動程度劃分為3個低動態(tài)場景和3個高動態(tài)場景。低動態(tài)場景中,人坐在椅子上進行辦公和交流;高動態(tài)場景中,人在辦公室內(nèi)走動。TUM同樣提供了每一幀對應(yīng)的相機位姿真值。
為了識別到場景中存在的語義,文章在Bonn數(shù)據(jù)集中選取900張圖片并標注,其中包含人體、椅子、桌子、氣球、小車、柜子和箱子共7個類別。使用SOLOv2[12]訓練,迭代600次,主干網(wǎng)絡(luò)使用Resnet[35]。RAFT[15]光流網(wǎng)絡(luò)采用其預(yù)訓練模型raft-sintel。
相機位姿精度是衡量RGB-D SLAM工作的重要指標,文章采用絕對軌跡誤差(ATERMSE)評估相機位姿精度,絕對軌跡誤差通常用于評估相機軌跡的全局一致性,表明了每一幀相機位姿估計值與真值之間的差值,數(shù)值越小,相機位姿精度越高。
在Bonn數(shù)據(jù)集24個動態(tài)序列上,將本文方法與StaticFusion[36],DynaSLAM[22],ReFusion[33]和ACEFusion[31]對比,分別用SF,DS,RF和AF表示。
實驗結(jié)果如表1所示,文章提出的方法在14個動態(tài)序列中達到了最先進的相機位姿優(yōu)化精度。其中,Kidnapping2,Moving No Box,Moving O Box2,Placing No Box等序列均有顯著提升。經(jīng)研究發(fā)現(xiàn),這些序列均為人與箱子交互的場景,而本文方法將箱子處于靜態(tài)時穩(wěn)定的特征點用于相機位姿優(yōu)化。
表1 Bonn數(shù)據(jù)集絕對軌跡誤差對比Tab.1 Comparison of absolute trajectory error of Bonn dataset(m)
在TUM數(shù)據(jù)集上,將本文方法與DynaSLAM,ReFusion,RigidFusion[37]和ACEFusion對比,分別用DS,RF,Rigid和AF表示。
實驗結(jié)果如表2所示,其中Sitting Static,Sitting XYZ,Sitting Halfsphere,Walking Static,Walking XYZ等序列中,本文方法比現(xiàn)有的方法精度更高,這得益于文章將SOLOv2實例分割網(wǎng)絡(luò)和ORB-SLAM3相結(jié)合,將非剛性物體分割得更精確,參與相機位姿優(yōu)化的特征點更可靠。
表2 TUM數(shù)據(jù)集絕對軌跡誤差對比Tab.2 Comparison of absolute trajectory error of TUM dataset(m)
表3 Bonn數(shù)據(jù)集不同策略的絕對軌跡誤差對比Tab.3 Comparison of Absolute Trajectory Errors for Different Strategies in the Bonn Dataset (m)
此外,文章選取部分實驗中的相機軌跡結(jié)果與真值對比,如圖4所示。
圖4 絕對軌跡誤差對比圖Fig.4 Diagram of Absolute trajectory error comparison
圖4中直觀地展示了文章提出的方法在Bonn和TUM數(shù)據(jù)集中相機絕對軌跡誤差對比。圖4共有9個子圖,每個子圖中黑色線代表數(shù)據(jù)集中真實軌跡,藍色線代表算法估計的相機位姿,紅色線代表兩者誤差(彩圖見期刊電子版)。從圖中可以看出,在大多數(shù)序列中,算法估計的相機位姿與真實軌跡的偏差較小,再次證明本文所提出方法在各個場景中都有優(yōu)越表現(xiàn)。
如前文所述,當動態(tài)剛性物體處于靜止狀態(tài)時,其表面特征較為穩(wěn)定,能夠很好的輔助相機位姿優(yōu)化。為了證明這一點,文章選取Bonn數(shù)據(jù)集中含有動態(tài)剛性物體的序列,對比計算全程剔除和動態(tài)剔除兩種策略下的絕對估計誤差。
其中11個序列本文提出的動態(tài)剔除方法性能更好,其他4個序列Balloon,Balloon2,Moving O Box與Moving O Box2均未有提升,這是由于場景中的動態(tài)剛性物體如氣球、箱子始終處于運動狀態(tài),無靜止狀態(tài)。
在稠密建圖系統(tǒng)將RGB-D序列幀和優(yōu)化后的相機位姿輸入到稠密建圖模塊中,使用TSDF模型重建靜態(tài)背景,重建結(jié)果如圖5所示。
圖5 背景重建Fig.5 Background reconstruction map
圖5中5(a)為Bonn數(shù)據(jù)集中Person Tracking序列的背景重建結(jié)果,此序列中僅包含非剛性物體,即行走的人。5(b)為Bonn數(shù)據(jù)集中Moving No Box序列的背景重建結(jié)果,此序列包含非剛性物體和運動剛性物體, 即被人搬動的箱子。圖6中展示了本文方法與ReFusion在Bonn數(shù)據(jù)集Moving No Box序列的重建結(jié)果對比。
圖6 重建結(jié)果對比Fig.6 Comparison of reconstruction results
本文方法與ReFusion均可重建出背景模型,但ReFusion平均重建誤差為0.066 m,在墻面和桌面上誤差較大。本文方法平均重建誤差為0.042 m,與ReFusion相比重建精度更高。
此外,場景中動態(tài)剛性物體以點云的形式重建,如圖7所示。
圖7 動態(tài)剛性物體融合Fig.7 Dynamic rigid object fusion
圖7為Bonn數(shù)據(jù)集中Moving No Box序列動態(tài)剛性物體融合結(jié)果,圖中以時間戳的形式展示方法在230,240,250和260幀時動態(tài)剛性物體融合效果。場景中采用藍色點云凸顯追蹤的動態(tài)剛性物體,從圖中看出方法可將融合動態(tài)物體的三維場景重建完整(彩圖見期刊電子版)。
為了提高RGB-D SLAM方法在室內(nèi)動態(tài)場景中的精度,文章提出一種基于實例分割與光流的RGB-D SLAM方法,在TUM和Bonn數(shù)據(jù)集上測試表明與當前最先進的工作ACEFusion相比相機精度提升約43%。本文通過語義信息和光流信息,檢測出場景中的非剛性物體和動態(tài)剛性物體,剔除非剛性物體和動態(tài)剛性物體特征點,重建靜態(tài)背景以及動態(tài)剛性物體,本文方法最終平均重建誤差為0.042 m。
但方法仍存在的局限性,首先,僅僅通過光流檢測出場景中動態(tài)剛性物體,沒有將光流信息用于靜態(tài)部分的相機位姿優(yōu)化中。其次,直接剔除場景中非剛性物體,沒有追蹤和重建非剛性物體。在下一階段的工作中,進一步使用光流信息用于相機位姿優(yōu)化,以提升SLAM系統(tǒng)的相機位姿精度,進一步的考慮非剛性物體追蹤和重建方法,提高動態(tài)場景模型重建精度。