近期在調研關於RGBD在室內移動機器人下的語義導航的研究。目前帝國理工的Andrew Davison在這邊有兩個團隊在研究,目前最新的分別是Fusion++ 和 這篇 MaskFusion( 還有MID-Fusion, 之前的SemanticFusion 以及各類Fusion屬於這倆分支) 。這篇是我閱讀文章時的筆記,整理一下發上來和大家一起分享。文章末尾有關於到移動機器人應用rgbd語義slam的一些小想法,有想法歡迎在評論區一起探討.
這篇文章在上傳到axiv的時候即被Fusion++引用,並被其做了一些蒼白的比較:"雖然其能支持動態環境,但該文章並沒有完成精細的物體重建,未來二者融合會是不錯的方向。"
這句話也可以表述為,支持動態環境的定位系統,畢竟重建不是slam的目的,所以這篇或許更適合來做室內rgbd語義導航。
發表在ISMAR2018. 帝國理工.
本文之前作者還有一篇 《Co-fusion》在ICRA2017. (本文提到帶分割的co-fusion無法實時)
輸出純幾何的靜態場景地圖。
前端使用了image-based的instance-level語義分割。
與之前的recoginition-based slam系統不同,它不需要任何已知模型,而且可以處理多個獨立運動。
代碼開源:
還處於幼兒期的兩個slam方向:
本文貢獻 提出一種實時的SLAM系統,能夠提供物體級的場景描述。
整合了兩個輸出:
注意這裡用的分割是實例級的,要比pixel-level還高一級。
與其他實時slam系統的比較:
[ related works的筆記,找一些系統特性然後從已有提出的系統中篩選一下即可。比如light-weight localization可以挑選地圖大小、定位精度、實時性等.]
Dense RGB-D SLAM KinectFusion中提出 TSDF 模型。然而該模型在建圖和跟蹤之間轉換時需要開銷。而surfel-based的RGBD系統,每個element存儲了局部表面特徵,即半徑和法向量,具有高效運算。
…
Semantic SLAM 融合標記的圖像數據到分割的3D地圖中。由於沒有考慮物體實例,所以無法單獨跟蹤多個物體。
Dynamic SLAM 動態SLAM中有兩個主要的場景:非剛體表面重建和多獨立運動剛體。
值得注意的文獻:
(表格居然無法粘過來..只好放圖)
【圖片解析: 即說明用一個隊列來解決mask network耗時較長的問題。讓整體系統相對實際世界的時間犧牲一定的延時來等待第一幀mask 產生】 ( 5hz說明200ms一幀 )
每一幀獲取之後,執行下列步驟:
跟蹤 以surfels表示每個物體的3D幾何。最小化一個energy,包括幀內物體和存儲的3D模型之間的ICP error,以及考慮光度一致性(類似直接法?),與前一幀的位姿聯合。為了高效運算,僅跟蹤非靜態物體。用兩個不同策略判斷是否為靜態:
分割 綜合了語義和幾何信息來做分割。Mask-RCNN有兩個缺點:
用幾何分割來彌補,基於深度不連續和法向量。幾何分割可以實時,而且提供準確的物體邊界。
幾何邊界和幾何成分圖。
說說幾何分割缺點:它傾向於過分割物體。聯合兩個方法:每一幀進行幾何分割,而語義分割則盡量often,於是實現:
融合 surfels會不斷隨時間融合。類似之前提出的幾套三維重建方法。如[23, 50 ElasticFusion]
正文來了!
3d模型的表示用surfel模型。
對於每個物體,即如上的u,其中包括位置,法向量,顏色,權重,半徑和兩個時間戳。此外,每個模型賦予一個類別ID( 0..80 ),以及一個物體標籤。對於每個時間戳,給定是否靜態的標籤,以及存儲剛體位姿R和t。
4.1 Tracking
幀間位姿跟蹤純粹基於Intensity以及ICP的幾何深度點雲匹配。
其中各誤差項的具體表述為:
v表示各個節點,如何理解將上一幀的節點轉換到當前幀做空間差並投影到法向量位置呢。從目的上理解是不是要讓同一個物體的觀測距離盡量小?
v應該是surfel模型中的v,對於每一個面盡量重疊,而重疊的方式則是讓面間距離最小。因此該公式就比較直觀了。
即將上一幀對應位置的強度通過變換投影到當前幀,構造一個基於intensity的BA。(為何當前的BA過程都只考慮intensity呢。顏色都被壓縮為一個通道)
CUDA加速的應用基於開源的codes of [ElasticFusion 和 Co-Fusion]
4.2 Fusion
該部分目的是更新surfels。通過與當前幀進行投影的數據關聯。該步驟來自[23],但基於分割的模具用於物體邊界。因而每個新增加的surfel屬於確定的一個模型。同時,對於模具之外的surfels我們引入了一個置信懲罰,對於不完美的分割是必須的。
該部分是最重要的部分了。跟蹤是一板一眼毫無創新地解決了,即融合已有的ElasticFusion面元,結合surfel的表達和intensity構造優化。重建也可以按照elasticfusion和[23]的框架來做更新surfels。那麼本文的重點,分割是如何實現的呢。
數據關聯的構建 基於Co-Fusion,不是在3D完成數據關聯,而是在2D下進行model-to-segment的關聯。給定這些關聯後,新的幀被masked,僅僅數據的子集被fused到已有的模型中,
pipeline的設計基於以下觀測:.. 復讀機了上面內容。
RGBD的分割是基於object convexity假設的。
雙線程的工程實現。 由於分割平行與tracking和fusion線程,於是需要有同步機制。
設計了一個隊列。 最終有一個400ms delay。 實現30fps。
對於沒有語義分割的幀,用mask-less 幀的邊界與已有的模型做關聯,將在Section 5.3中討論。
Mask-rcnn等提供了專註於實例級別的物體分割演算法。 (非常好奇這類演算法如何實現的分割,真實效果如何,以及背後理論的限制和前景如何,當前發展方向如何。——並不深入去工程細節,而是從數學宏觀上來理解這些東西,一定要不陷入天坑中去。)
基於幾何的分割感覺也很有前景。對於人類來說大部分的分割實際是幾何完成的。在人類知道該物體是獨立的物體之前,並不需要該物體的語義信息。相反,語義信息是建立在分割的基礎上的。
[13, 22, 42, 45, 47] 專門研究了 RGBD幀的幾何分割問題。 基本上在2013-2015年的文章。該部分已經成熟。
即它與語義的結合纔是現在比較好的方向,同時結合上動態過程。
分割參考的論文
[45] K. Tateno, F. Tombari, and N. Navab. Real-time and scalable incremental segmentation on dense slam. In IEEE/RSJ International Conference
on Intelligent Robots and Systems, 2015
分割過程如下,定義兩個參數分別考慮深度的連通和凹的程度,定義一個閾值和它們兩的權重:
示例分割結果提出的邊界:
然後對其去除back-ground得到
當沒有語義masks的時候,幾何標籤直接與存在的模型做關聯,於是下面討論的會被跳過。
即判斷二者重疊區域最高的作為關聯。 在實驗裏設定 65%的重複度。
多個components可以被mapped到同一個mask,然而一個component只map到一個mask。
將物體labels投影到相機視野中,如f)圖所示。然後將其與幾何分割的components之間做5.3.1中同樣的重合度比較。上圖通過OpenGL渲染所有模型來生成。( 如何渲染? ) 然後選取一個 5%的閾值( 為何這麼小) ,驗證了物體模型的類別ID和mask是一致的。
對於沒有成功匹配上的剩餘的components,如5.3.1中直接與labels做overlap.
此處特意設定了一個值255來去除如手臂一樣不想考慮的區域。
(這裡兩者分開考慮,很類似我的ob-map, map-ob的 pole data association, 所以我也應該分別考慮二者。)
評估部分。建圖和跟蹤部分都基於 co-fusion和elasticfusion. 專門挑選了動態環境,使用AT[全局]、RP[忽略drift] RMSE來評估。
首先對比人多的環境。由於MaskFusion無法處理可變形部分,所以我們忽略掉有人的關聯。
Co-Fusion的介紹是一種通過運動來分割物體的SLAM系統。可以仔細看看。
基於rgbd的benchmark,提出文獻:
[43] Jurgen Sturm, Nikolas Engelhard, Felix Endres, Wolfram Burgard, ¨
and Daniel Cremers. A benchmark for the evaluation of rgb-d slam
systems. In Intelligent Robots and Systems (IROS), 2012 IEEE/RSJ
International Conference on, pages 573–580. IEEE, 2012.
實驗數據
其實挑了三段 TUM數據集,用5個系統跑了一下,同時將其中部分人為拆成 slightly dynamic和highly dynamic。(這裡是實驗者自己來規定的部分嗎?)
感覺該文獻的核心還是重建。
YCB Object and Model Set [4]裡面提供了常用物體的資料庫,可以用來做重建的評估。(厲害了還有這種東西。或許可以3d列印再重建?)
就找了個瓶子跑了一下試試,也沒有跟其他的比。
將重建的3D模型投回來作為groundtruth去與聯合方法得到的區域做IoU的比較。
這裡出現了一個ours和 geometry+semantic的兩個,不知道區別。
這裡三維重建能夠為機械手臂的抓持提供抓持點的分析。
2塊GPU Titan X+cpu core i7 3.5GHz! 1塊做實時分割,一塊做slam。 ( 實際測試的時候可以先分割好然後跑數據集.. )
三個限制:recognition, reconstruction and tracking.
Mask-RCNN : https://github.com/matterport/Mask_RCNN
整個系統某種程度上更專註於三維重建。它對多物體的跟蹤,不過是融合了icp和強度的增加誤差項的方式。
這裡將地圖中的物體存放了位置信息,那麼跟蹤的時候若物體也在動,如何保證優化得到正確的相機和物體位姿?
該系統在結果中在高動態環境下效果比較好,而在低動態環境下反而沒有staticFusion效果好,為何會有這種狀況出現?
實驗部分考慮了多個應用:AR環境的示意、與人手的交互(顯示卡路里)、以及動態晃動瓶子狀態下對其的重建。而我認為更有用的定位部分評估不是很多,它並不是一個很合格的為移動機器人準備的動態語義slam系統。
對於移動機器人來說,分割是很必要的東西,當在環境中發現了某種物體,應該附有基本屬性 ( static/not static ),若是 not static的,應該能對其運動進行跟蹤和預測。該部分的核心是能夠定位自身( 過濾掉動態之後 ), 然後對其進行跟蹤。 作為機器人並不在乎其重建效果。 所以機器人能夠在動態環境下在動態物體潛在運動軌跡上添加costfunction完成路徑規劃。
對於室內環境,先完成分割。 語義分割+幾何分割的點子是很好的。 然後將該信息融合到已有的靜態地圖中去,輔助機器人完成路徑規劃。
思考有沒有相關最新文章研究。 語義級的slam(檢測人即可, 包括一些不在類別內的移動物體(球、機器人等) ),同時路徑規劃,路徑規劃的同時完成對動態物體的分割和追蹤。
即該slam系統的目的,不再僅僅停留於剔除掉動態物體完成定位。而是將動態物體作為地圖的一個layer,即動態層。
傳統靜態層用於定位,而動態層用於估計動態物體相對自身位置,並輔助路徑規劃。
第一步、完成動態層的構建(即多物體跟蹤 - 深入,更多物體的跟蹤。(盡量收縮室內的定位要求,如天花板、線面等幾何信息)
第二步、基於該系統完成路徑規劃(根據第一步地圖來高幀率預測動態物體的潛在路徑,建立路徑規劃模型)
第三步、徹底意義的主動探索(挑選合適的下一步主動slam位置,並在高動態環境完成主動探索!)
這三步完成之後,一個徹底的室內物流機器人就完成了,它可以在室內動態環境運動到任何地方去。
認為這裡準確的物體邊界非常重要。應用考慮目前2d圖像的檢
測無法做到很準確的邊界提取,而3d下來做邊界提取則變得異常簡單。
這也是感測器融合的一個點。slam輔助語義識別。
目前語義slam的點不是那麼好找了,想在室內移動機器人上做一做,拋磚引玉吧。
論文鏈接:
我之前寫的SemanticFusion的解析