郭旭達(dá) 宋勇磊
(南京理工大學(xué) 南京 210094)
智能機(jī)器人在陌生環(huán)境中進(jìn)行同時(shí)定位和建圖(SLAM)的課題已經(jīng)被持續(xù)研究了幾十年,并且學(xué)者門提出了許多卓有成效的SLAM 算法框架。SLAM 技術(shù)廣泛應(yīng)用于掃地機(jī)器人、服務(wù)機(jī)器人、巡檢機(jī)器人、廠房運(yùn)輸機(jī)器人等場(chǎng)景。
SLAM 技術(shù)主要基于激光雷達(dá)和視覺攝像機(jī)兩類感知設(shè)備,由于單目相機(jī)、雙目相機(jī)和RGB-D相機(jī)相對(duì)較低的硬件成本,近年來視覺SLAM 逐步成為研究熱點(diǎn)。圖像存儲(chǔ)了豐富的紋理信息,可同時(shí)用于其他基于視覺的應(yīng)用,如語義分割、目標(biāo)檢測(cè)等。當(dāng)前視覺SLAM 算法的框架通常由特征提取前端、狀態(tài)估計(jì)后端、地圖構(gòu)建和回環(huán)檢測(cè)等幾個(gè)基本模塊組成。一些具有代表性的SLAM 算法已經(jīng)取得了令人滿意的性能,如MonoSLAM[1]、ORB-SLAM2[2]、LSD-SLAM[3]等,這些方法主要側(cè)重于優(yōu)化機(jī)器人的位姿估計(jì)。在機(jī)器人對(duì)周圍環(huán)境進(jìn)行地圖構(gòu)建方面的研究,傳統(tǒng)的SLAM 方法大多僅建立包含稀疏特征點(diǎn)的地圖或只具有幾何信息的三維地圖[4]。機(jī)器人執(zhí)行高級(jí)別任務(wù)時(shí)需要理解物體的語義信息與周圍的場(chǎng)景進(jìn)行交互。隨著深度學(xué)習(xí)技術(shù)的發(fā)展,一些神經(jīng)網(wǎng)絡(luò)模型[5]在語義分割方面取得了良好的性能。因此,可以嘗試將神經(jīng)網(wǎng)絡(luò)模型與SLAM 結(jié)合構(gòu)建語義地圖,從而提高機(jī)器人的環(huán)境描述能力。
語義信息作為物體的外在屬性,對(duì)于機(jī)器人理解周圍環(huán)境可以起到至關(guān)重要的作用。SLAM++[6]利用物體級(jí)別對(duì)象輔助SLAM 中的相機(jī)定位,并增量構(gòu)建面向物體級(jí)別對(duì)象的三維語義地圖。但他們的方法需要提供物體的幾何模型,并且需要提前建立物體幾何信息數(shù)據(jù)庫(kù),因此算法只能檢測(cè)在數(shù)據(jù)庫(kù)中出現(xiàn)的物體,無法提供整個(gè)場(chǎng)景的密集語義標(biāo)注。SemanticFusion[7]基于ElasticFusion[4]跟蹤相機(jī)位姿并建立面元(surfels)地圖,在該過程中同步進(jìn)行回環(huán)檢測(cè)優(yōu)化整個(gè)地圖。利用卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型輸出RGB 圖像的像素級(jí)語義分割結(jié)果后,基于貝葉斯概率更新surfels 的語義類別標(biāo)簽。Co-fusion[8]同樣基于ElasticFusion[4]提出物體級(jí)別語義SLAM 方法,該算法基于運(yùn)動(dòng)分割和語義分割進(jìn)行運(yùn)動(dòng)物體的檢測(cè),使用多種模型擬合方法跟蹤物體并重建物體形狀,最終維護(hù)一個(gè)背景模型和多物體模型。
DS-SLAM[9]基于ORB-SLAM2[2]提出了動(dòng)態(tài)環(huán)境中的語義SLAM 框架,結(jié)合語義信息和移動(dòng)一致性檢查來濾除每一幀中的動(dòng)態(tài)物體,從而提高位姿估計(jì)的準(zhǔn)確性。能夠減少動(dòng)態(tài)環(huán)境下,移動(dòng)物體對(duì)于位姿估計(jì)的影響,最后構(gòu)建稠密的3D 語義八叉樹地圖。但也存在不足,語義分割僅能識(shí)別20 種物體類別,并且只認(rèn)為人是移動(dòng)的類別。文獻(xiàn)[10]提出了一種適用于無人機(jī)平臺(tái)的輕量級(jí)、實(shí)時(shí)語義SLAM 框架。該方法將視覺/視覺慣性里程計(jì)(VO/VIO)信息與從檢測(cè)到的語義對(duì)象中提取的平面幾何信息相結(jié)合。創(chuàng)建由質(zhì)心和法線方向以及類標(biāo)簽和平面類型(即水平或垂直)表示的平面組成的稀疏語義地圖。
本文提出一種將語義信息結(jié)合到SLAM 過程中的新方法并最終構(gòu)建三維語義地圖。算法整理流程如圖1 所示。首先使用語義分割模型對(duì)RGB-D 相機(jī)輸入的RGB 圖像進(jìn)行語義信息提取,然后進(jìn)行時(shí)間序列上的語義分割結(jié)果關(guān)聯(lián)對(duì)比,將存在誤差的分割結(jié)果過濾后,與深度圖像進(jìn)行數(shù)據(jù)關(guān)聯(lián)生成帶有語義標(biāo)簽的點(diǎn)云數(shù)據(jù),最后通過增量融合的方法集成當(dāng)前幀的點(diǎn)云數(shù)據(jù),構(gòu)建基于TSDF的三維語義地圖。
圖1 三維語義地圖構(gòu)建流程
近年來,深度學(xué)習(xí)在目標(biāo)檢測(cè)與圖像分割領(lǐng)域的研究成果層出不窮。Bowen Cheng等提出的Panoptic-DeepLab[11]模型是目前全景分割研究方向的佼佼者,性能和實(shí)時(shí)性基本可以滿足SLAM 的需求。并且在COCO 數(shù)據(jù)集上訓(xùn)練的模型可以識(shí)別大約130 個(gè)事物和種類,因此選擇Panoptic-Deep-Lab用于本文方法的語義信息提取模塊。
通過實(shí)驗(yàn)發(fā)現(xiàn),在連續(xù)多幀圖像進(jìn)行分割時(shí),往往會(huì)出現(xiàn)某一兩幀圖像中會(huì)有物體被識(shí)別為錯(cuò)誤的語義類別。針對(duì)此問題,本文提出一種新方法進(jìn)行錯(cuò)誤數(shù)據(jù)過濾。
相機(jī)的輸出頻率為30Hz,相鄰兩幀間的位移差很小,因此可以借助幀間關(guān)聯(lián)對(duì)比過濾錯(cuò)誤的識(shí)別。在得到當(dāng)前幀的識(shí)別結(jié)果Lt后,本文方法選擇與之前四幀的分割結(jié)果Lt-1、Lt-2、Lt-3和Lt-4進(jìn)行關(guān)聯(lián)對(duì)比計(jì)算,如式(1),只保留五幀中相同的語義標(biāo)簽,如果不同則刪除,經(jīng)過上述處理后,得到語義標(biāo)簽的交集。
本文最終目的是建立完整的帶有語義信息的三維地圖。因此,需要使點(diǎn)云圖中的每一個(gè)點(diǎn)具有相應(yīng)的語義類別。本文所使用的模型可識(shí)別種類數(shù)量約為130 種,而8-bit 灰度圖像的灰度值范圍為0~255。因此,可以將0~255 的灰度范圍值與語義類別一一對(duì)應(yīng)建立LUT 表。在將深度圖轉(zhuǎn)為點(diǎn)云時(shí),與LUT表結(jié)合,將語義類別關(guān)聯(lián)到點(diǎn)云中。
由于彩色圖像與深度圖像尺寸大小不同,因此需要根據(jù)相機(jī)的內(nèi)、外參計(jì)算深度圖像中每一個(gè)像素對(duì)應(yīng)中的語義類別值。首先根據(jù)相機(jī)的外參計(jì)算彩色圖像到深度圖像的旋轉(zhuǎn)矩陣R 和平移向量T。外參矩陣由一個(gè)旋轉(zhuǎn)矩陣和一個(gè)平移向量構(gòu)成,彩色和深度攝像頭的旋轉(zhuǎn)矩陣分別為Rrgb和Rdepth,平移向量分別為Trgb和Tdepth。那么根據(jù)式(2)和式(3)即可得到旋轉(zhuǎn)矩陣R和平移向量T。
為將深度圖像中的每一個(gè)像素匹配到對(duì)應(yīng)的語義標(biāo)簽,則需要通過相機(jī)的內(nèi)參矩陣、彩色圖像到深度圖像的旋轉(zhuǎn)矩陣R 和平移向量T 進(jìn)行關(guān)聯(lián)計(jì)算。通過式(4)計(jì)算得到深度圖像中某點(diǎn)Pxy的對(duì)應(yīng)的語義類別lxy。
Pxy=(x,y,z)為某點(diǎn)的空間坐標(biāo)值,z 為深度值,Irgb和Idepth分別為彩色相機(jī)和深度相機(jī)的內(nèi)參矩陣。
通過以上公式就可以在將深度圖像轉(zhuǎn)為點(diǎn)云時(shí)進(jìn)行數(shù)據(jù)關(guān)聯(lián),使每一個(gè)三維點(diǎn)都具有語義標(biāo)簽。
完整算法如Algorithm 1所示。
本文選擇以截?cái)喾?hào)距離函數(shù)算法(Truncated Signed Distance Function,TSDF[12])為基礎(chǔ)建立三維語義地圖。本文在Voxblox[13]的啟發(fā)之下,使用前端位姿估計(jì)的結(jié)果,將當(dāng)前幀生成的帶有語義信息的三維點(diǎn)云融合到全局地圖中。
TSDF通過存儲(chǔ)每個(gè)體素(voxel)到最近物體表面的有符號(hào)距離sdf 來進(jìn)行地圖構(gòu)建,體素在物體之外為正數(shù),在物體之內(nèi)則為負(fù)數(shù)。同時(shí)每個(gè)體素由一個(gè)權(quán)重w 來評(píng)估相應(yīng)的距離。本文方法中,每個(gè)體素包含一個(gè)有符號(hào)16 位浮點(diǎn)型距離值sdf、一個(gè)無符號(hào)8位權(quán)重值w 和一個(gè)8位語義類別標(biāo)簽值l,共4個(gè)字節(jié)。
Voxblox[13]中提出了基于RayCasting[14]的分組射線衍射方法,將處于同一個(gè)體素中的點(diǎn)分為一組,計(jì)算組內(nèi)所有點(diǎn)的平均坐標(biāo)值作為體素的坐標(biāo),這樣在保持精度的同時(shí)加快了地圖構(gòu)建速度。本文方法同樣根據(jù)點(diǎn)的坐標(biāo)將處于同一個(gè)體素voxelid(x,y,z)中的點(diǎn)points(m)={p1,p2,…,pm}分為一組。通過式(5)可以計(jì)算得到每一個(gè)點(diǎn)所在體素的坐標(biāo),ε為體素大小。
而與Voxblox[13]中分組射線衍射方法所不同的是,本文方法對(duì)于同一個(gè)體素中的點(diǎn)points={p1,p2,…,pm},分別計(jì)算各語義類別點(diǎn)的權(quán)重和,計(jì)算方式如式(6),選擇權(quán)重和最大的作為當(dāng)前體素的語義類別,將所選擇語義類別點(diǎn)的坐標(biāo)加權(quán)平均值作為體素的中心坐標(biāo)值,如式(7)所示。
本文中采用Voxel Hashing[15]方法,只在相機(jī)測(cè)量到的物體表面劃分體素,而不是將整個(gè)空間都劃分成體素。在此基礎(chǔ)之上將8×8×8 的體素劃分為一個(gè)體素塊(voxel block),通過式(8)即可計(jì)算得到體素voxelid所在的體素塊坐標(biāo)block(x,y,z),η為體素塊大小。
將體素塊的坐標(biāo)值通過哈希函數(shù)(9)映射到一個(gè)哈希表中,方便體素塊的查詢,p1、p2、p3為常數(shù),n為哈希表大小。
在將新的一幀點(diǎn)云數(shù)據(jù)融合到全局地圖中時(shí),通常是從傳感器原點(diǎn)向點(diǎn)云中的每一點(diǎn)投射射線,在射線方向上計(jì)算每一個(gè)與之相交的體素的距離D 和權(quán)重W,從而構(gòu)建TSDF。本文中使用RayCasting[14]方法將經(jīng)過語義分組后的點(diǎn)云數(shù)據(jù)進(jìn)行融合,Voxblox[13]提出了結(jié)合相機(jī)模型的權(quán)重計(jì)算方法,將相機(jī)測(cè)量的深度信息和點(diǎn)與表面的距離結(jié)合來計(jì)算權(quán)重。本文同樣采取Voxblox[13]中的方法進(jìn)行體素的距離D 和權(quán)重W 的更新,計(jì)算公式如式(10~13)所示。
p(x,y,z)為當(dāng)前幀中的點(diǎn),o 為傳感器原點(diǎn),v(x,y,z)為與之相交的體素中心坐標(biāo),d(v,p,o)為點(diǎn)p 與物體表面的距離,w(v,p)為當(dāng)前點(diǎn)權(quán)重,δ、ε為截?cái)嗑嚯x閾值,δ=4s,ε=s,s為體素大小。
本文選擇在數(shù)據(jù)集ScanNet(v2)[16]中進(jìn)行實(shí)驗(yàn),以驗(yàn)證所提出方法的有效性。ScanNet(v2)是一個(gè)用于室內(nèi)場(chǎng)景理解的大規(guī)模數(shù)據(jù)集,它使用消費(fèi)級(jí)RGB-D 相機(jī)進(jìn)行圖像數(shù)據(jù)采集。每個(gè)場(chǎng)景序列中包含采集的RGB 圖像和深度圖像、相機(jī)軌跡、每個(gè)場(chǎng)景的3D重建模型以及語義標(biāo)注。
本文從ScanNe(tv2)中選擇了多組場(chǎng)景數(shù)據(jù)進(jìn)行實(shí)驗(yàn),其中RGB 圖像大小為1296×968,深度圖像大小為640×480。所有的實(shí)驗(yàn)均是在一臺(tái)配備英特爾i7-7800X 處理器、主頻3.50GHz、64G 內(nèi)存和一塊Nvidia GeForce GTX 1080Ti 顯卡,顯存8GB 的計(jì)算機(jī)上進(jìn)行的。
由于目前語義分割模型的分割準(zhǔn)確率達(dá)不到百分之百,部分物體可能會(huì)識(shí)別錯(cuò)誤。或由于在數(shù)據(jù)采集過程中,某一時(shí)刻相機(jī)視角中物體重疊或光照影響,導(dǎo)致相機(jī)某一幀分割錯(cuò)誤。如圖2(b)中所示,語義分割模型將窗簾的某一部分錯(cuò)誤的識(shí)別為人,將桌子的一部分錯(cuò)誤的識(shí)別為柜子。如果不加以處理,直接與深度圖像進(jìn)行數(shù)據(jù)關(guān)聯(lián),就會(huì)產(chǎn)生錯(cuò)誤數(shù)據(jù),如圖3(a)中所示,在建圖時(shí)則會(huì)將錯(cuò)誤的語義數(shù)據(jù)融合到地圖中。
圖2 語義分割結(jié)果
圖3 語義點(diǎn)云對(duì)比
圖2(c)為后續(xù)相機(jī)幀的正確識(shí)別結(jié)果,通過本文的方法,可以將窗簾和桌子識(shí)別錯(cuò)誤的部分去除,只將正確的語義數(shù)據(jù)關(guān)聯(lián)到點(diǎn)云中,如圖3(b)所示。由于語義分割識(shí)別錯(cuò)誤導(dǎo)致去除的環(huán)境信息將在后續(xù)相機(jī)幀中補(bǔ)充融合,結(jié)果如圖3(c)所示,窗簾和桌子均完整準(zhǔn)確的融合到地圖中。直接使用Panoptic-DeepLab 的分割結(jié)果構(gòu)建的地圖如圖4(b)所示,可以看到,存在多處錯(cuò)誤的語義關(guān)聯(lián),本文方法所構(gòu)建地圖如圖4(c)所示,可以看到,語義數(shù)據(jù)關(guān)聯(lián)更加準(zhǔn)確,去除了大多數(shù)錯(cuò)誤分割數(shù)據(jù)。
圖4 語義地圖對(duì)比
如圖5 所示,(a)為ScanNet 數(shù)據(jù)集中場(chǎng)景scene0000_01,(b)為場(chǎng)景scene0000_01 的三維地圖語義標(biāo)注,(c)為本文的方法所構(gòu)建的語義地圖,深度圖像轉(zhuǎn)為點(diǎn)云數(shù)據(jù)后進(jìn)行了體素降采樣,降采樣閾值為5cm。
圖5 場(chǎng)景scene0000_01三維語義地圖
由于目前沒有可行的方法從量化角度對(duì)地圖數(shù)據(jù)進(jìn)行對(duì)比,因此在圖6 和圖7 中分別從多個(gè)角度將本文方法所構(gòu)建地圖與數(shù)據(jù)集中所標(biāo)注的語義地圖進(jìn)行細(xì)節(jié)之處的對(duì)比。本文方法所標(biāo)注語義類別顏色與數(shù)據(jù)集中所使用語義類別顏色不同。
圖6 scene0000_01局部對(duì)比1
圖7 scene0000_01局部對(duì)比2
如圖6 所示,(a)、(b)為場(chǎng)景scene0000_01 中局部細(xì)節(jié),(a1)、(b1)為數(shù)據(jù)集中對(duì)場(chǎng)景scene0000_01 標(biāo)注的語義地圖,(a2)、(b2)為本文方法所構(gòu)建的語義地圖。對(duì)比(a1)與(a2),(a1)對(duì)場(chǎng)景中的吉他、垃圾桶與廚房用具沒有進(jìn)行語義區(qū)分,而本文方法所構(gòu)建地圖中對(duì)垃圾桶與廚房用具均準(zhǔn)確標(biāo)注,由于所使用的語義分割模型沒有將吉他識(shí)別,所以地圖中缺少對(duì)吉他的標(biāo)注,這個(gè)問題需要后期對(duì)分割模型進(jìn)行優(yōu)化。對(duì)比圖(b1)與(b2),(b1)中的對(duì)桌子、書包與儲(chǔ)物筐沒有進(jìn)行語義區(qū)分,而本文方法均進(jìn)行了準(zhǔn)確的標(biāo)注。
如圖7 所示,(c)、(d)為場(chǎng)景scene0000_01 中剩余細(xì)節(jié),(c1)、(d1)為數(shù)據(jù)集中標(biāo)注的語義地圖,(c2)、(d2)為本文方法所構(gòu)建的語義地圖。通過對(duì)比可以看出,(c1)中雖然識(shí)別出墻上的鐘表,但邊界模糊,基本丟失幾何信息,而本文方法構(gòu)建結(jié)果要更加精確。(d1)中沒有標(biāo)注書柜中的書籍信息,而本文方法準(zhǔn)確識(shí)別、分割出書籍信息,并融合到地圖中。
本文提出了一個(gè)使用RGB-D 數(shù)據(jù)進(jìn)行三維語義地圖構(gòu)建的方法。相機(jī)中RGB 圖像經(jīng)過語義分割模型后得到其中物體的語義數(shù)據(jù),通過前后幀關(guān)聯(lián)將錯(cuò)誤數(shù)據(jù)濾除,提高語義關(guān)聯(lián)魯棒性;與深度圖像進(jìn)行數(shù)據(jù)關(guān)聯(lián)生成帶有語義信息的點(diǎn)云數(shù)據(jù),結(jié)合語義類別權(quán)重增量融合構(gòu)建完整的三維語義地圖,可用于機(jī)器人的導(dǎo)航和規(guī)劃任務(wù)。綜上所述,本文所提出方法具有較高的實(shí)用價(jià)值。