基于激光點云語義信息的閉環(huán)檢測
GOSMatch: Graph-of-Semantics Matching for Detecting Loop Closures in 3D LiDAR data
摘要
利用激光雷達的點云信息檢測閉環(huán)是一件很不容易的事情,因為激光雷達的數(shù)據(jù)是不穩(wěn)定的。本文提出了一種叫做GOSMatch的方法依靠語義級別的信息做場景重識別,本文的方法利用語義物體之間的空間關(guān)系產(chǎn)生新穎的描述符。本文還設(shè)計了一種由粗到細(xì)的測量來有效的找到閉環(huán)。此外, 一旦確定找到了閉環(huán)幀,系統(tǒng)就會給出準(zhǔn)確的六自由度的位姿估計結(jié)果,本文在kitti做了測試取得了不錯的效果。
介紹
當(dāng)前傳統(tǒng)的激光閉環(huán)檢測方法是利用局部的特征點或者其他全局的特征,這種方法太注意局部的細(xì)節(jié)而忽略了更高層的特征約束。本文提出了一種利用語義信息來檢測閉環(huán)的方法。本文利用語義信息構(gòu)建了局部和全局的描述子。全局的描述子來高效的查找最相似的前K個閉環(huán)候選幀,局部的描述子用來計算當(dāng)前幀和閉環(huán)候選幀之間的距離。本文的主要貢獻如下:
提出了GOSMatch,一個在城市道路場景下僅利用雷達觀測的基于物體級語義信息來可靠場景識別的方法。
通過編碼語義物體之間的空間關(guān)系來構(gòu)建全局和局部描述符以高效的進行兩步閉環(huán)搜索。
開源了GOSMatch到https://github.com/zhuyachen/GOSMatch,但是代碼是m文件
相關(guān)工作
A.傳統(tǒng)的基于雷達的場景識別
從點云中隨機選擇特征點提取區(qū)域形狀描述符。隨后,使用投****策略在特征點中找到最近鄰。
在range image中檢測每個特征點的描述向量,利用kdtree來管理高維向量。為了達到更好的效果,可以利用Normal Aligned RadialFeature (NARF)描述符和詞袋匹配的方法。
其他的方法關(guān)注點云的表示,如直方圖;基于外觀的方法如NDT;還有很有名的Scan Context,把點云分成2D的小方塊并編碼為點云高度的最大值。由于匹配這種矩陣類型的描述子需要很大的計算量,Kim改進Scan Context,利用ring key來構(gòu)建kd tree來加速搜索。
B. 基于high-level描述子的場景重識別
提取點云中的線面特征,然后基于ICP去找閉環(huán)
可以利用聚類的方法得到更魯棒的描述子
C. 利用圖表示的數(shù)據(jù)關(guān)聯(lián)
圖匹配對于成對的數(shù)據(jù)關(guān)聯(lián)問題很重要。圖表示是描述對象及其拓?fù)涞某S梅椒?。在這種情況下,找到兩個場景之間的對象的關(guān)聯(lián)轉(zhuǎn)換為計算圖之間的頂點和邊的對應(yīng)關(guān)系。但是,找到解決此問題的精確方法始終是NP-hard。有工作生成一個對應(yīng)圖,然后搜索圖中最大的clique來得到兩個圖中頂尖和邊的對應(yīng)關(guān)系。但是這種方法只適合圖中頂點少的情況。
為了減少計算的復(fù)雜度,一種有效的方法是找到問題可以容忍的近似解。其中一個工作X-view: Graph-based semantic multi-view localization是基于隨機游走技術(shù)的圖像核。圖中的每個節(jié)點,產(chǎn)生一定數(shù)量的游走序列作為節(jié)點的描述子,然后執(zhí)行匹配的過程來得到節(jié)點和節(jié)點之間的對應(yīng)關(guān)系。還有Characterizing structural relationships in scenes using graph kernels和Image classification with segmentation graph kernels也是相似的工作。
本文的方法
本文的方法如下圖所示,主要包含四個主要的模塊:語義信息獲取,圖描述子生成,節(jié)點匹配和幾何校驗。
A. 語義檢測
有用的語義特征應(yīng)該是穩(wěn)定的,容易區(qū)分的,可重復(fù)的。本文專注于檢測停著的車輛,卡車,桿以及在城市道路場景中常見的特征。盡管停著的車輛是潛在運動的物體,這意味著舊的車可能會開走,新的車停在那,實際中的閉環(huán)經(jīng)常時間間隔是很短的。因此在本文的試驗中作者認(rèn)為停放的車輛與任何其他語義特征一樣重要,并且假設(shè)在兩次觀測期間,停放的車輛在同一位置的位置變化不大。(這里如果是基于穩(wěn)定圖層的閉環(huán)策略,這個假設(shè)應(yīng)該就不成立了,但是可以利用潛在運動的物體去匹配,只不過需要給他一個比較小的權(quán)重)
本文采用RangNet++來檢測3D激光數(shù)據(jù)的語義信息。這個端到端的神經(jīng)網(wǎng)絡(luò)檢測原始點云中每個點的語義信息。需要注意的是,我們不能通過一個點云的語義信息知道這個卡車是在運動還是在停著,所以利用前端的里程計來估計車輛的速度來辨別是停著的還是移動的。
(最近查閱資料的時候大概了解到,基于激光點云的語義分割方法很難達到實時,而且目前類別的標(biāo)簽只有六類左右,但是基于視覺的語義分割方法很成熟,所以我們完全可以基于視覺得到標(biāo)簽,投影到點云上得到每個點云的標(biāo)簽,這樣不僅可以保證速度,而且可以保證類別的多樣性。)
獲得了點云的語義標(biāo)簽后,利用歐式聚類來檢索對象。對于所有的對象,通過計算他們的質(zhì)心來表示他們在點云中的位置。
B. 圖描述子的生成
單次激光雷達的掃描可以由無向圖G=<V, E>表示,其中V和E分別代表頂點和邊的集合。把利用語義分割網(wǎng)絡(luò)得到的物體的位置作為頂點G,圖中的每個邊表示兩個頂點之間的歐氏距離。根據(jù)語義分割的結(jié)果,圖中有三種頂點(vehicle, trunk and pole),六種邊(vehicle-vehicle, trunk-trunk, pole-pole,vehicle-trunk, trunk-pole and pole-vehicle)。(這里如果類別比較多,計算量應(yīng)該就會很大,所以我們應(yīng)該選擇比較好的特征作為頂點和邊)。
基于直方圖的圖描述子由六部分組成,代表著上邊提到的六種邊。這里以pole-trunk邊為例介紹一下邊的計算流程。我們假設(shè)一個連續(xù)的bin標(biāo)號為b,這個頂點最短的邊為l_min,最長的邊為l_max
每次掃描得到的圖描述符都存儲在數(shù)據(jù)庫中,當(dāng)需要查詢點云的時候,利用構(gòu)建kd樹來執(zhí)行k近鄰算法來快速得到最相似的N個候選閉環(huán)幀。
C. 頂點匹配
在本節(jié),我們介紹頂點描述符來描述圖中的頂點。和圖描述符相似,頂點描述符也是基于直方圖的。和邊的描述符不同的是,頂點描述符中考慮的邊不再是整個圖中全部的邊,而是連接到所描述頂點v的邊。為了給頂點v(pole)構(gòu)建一個描述符,只有三種邊需要考慮,因為構(gòu)成邊的兩個端點之一已經(jīng)被確定為pole。和圖描述子相似,一種邊可以形成頂點描述符的三個部分之一,可以描述為:
然后我們利用歐式距離找到當(dāng)前點云中頂點的描述符和候選幀中頂點描述符的匹配關(guān)系。
D. 幾何驗證
該步驟為每個閉環(huán)候選幀選擇一組幾何一致的對應(yīng)點。利用RANSAC來優(yōu)化選取選取的對應(yīng)點。在每次RANSAC迭代的時候,利用SVD方法為絕對旋轉(zhuǎn)問題找到最近的六自由度的變換矩陣。如果在這個矩陣下可以得到更多的內(nèi)點,我們就更新變換矩陣。對于每個候選幀,我們用下邊這個公式來評估閉環(huán)的loss:
C代表當(dāng)前掃描和閉環(huán)候選幀優(yōu)化后的對應(yīng)點的集合,T表示變換矩陣,c_iq和c_ic代表第i個C中的屬于當(dāng)前掃描和閉環(huán)候選幀的3D點。候選幀中l(wèi)oss最小的會利用閾值判斷是不是真正的存在一個閉環(huán)。只有在loss小于b的時候采認(rèn)為存在一個閉環(huán)。一旦閉環(huán)被確定,我們把這個變換矩陣作為6自由度的初始位姿。
實驗設(shè)備:
Intel Core i7-6820HQ with 16 GB RAM,Nvidia TitanX with 12 GB RAM。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。