opengl 日地月运动模型_MaskFusion: 多运动目标实时识别、跟踪和重建
點擊“計算機視覺life”關(guān)注,置頂更快接收消息!
本文經(jīng)知乎作者原野尋蹤授權(quán)轉(zhuǎn)載
原文:https://zhuanlan.zhihu.com/p/62059382
近期在調(diào)研關(guān)于RGBD在室內(nèi)移動機器人下的語義導(dǎo)航的研究。目前帝國理工的Andrew Davison在這邊有兩個團隊在研究,目前最新的分別是Fusion++ 和 這篇 MaskFusion( 還有MID-Fusion, 之前的SemanticFusion 以及各類Fusion屬于這倆分支) 。這篇是我閱讀文章時的筆記,整理一下發(fā)上來和大家一起分享。文章末尾有關(guān)于到移動機器人應(yīng)用rgbd語義slam的一些小想法,有想法歡迎在評論區(qū)一起探討.
這篇文章在上傳到axiv的時候即被Fusion++引用,并被其做了一些蒼白的比較:"雖然其能支持動態(tài)環(huán)境,但該文章并沒有完成精細(xì)的物體重建,未來二者融合會是不錯的方向。"
這句話也可以表述為,支持動態(tài)環(huán)境的定位系統(tǒng),畢竟重建不是slam的目的,所以這篇或許更適合來做室內(nèi)rgbd語義導(dǎo)航。
發(fā)表在ISMAR2018. 帝國理工.
本文之前作者還有一篇 《Co-fusion》在ICRA2017. (本文提到帶分割的co-fusion無法實時)
Abstract
輸出純幾何的靜態(tài)場景地圖。
前端使用了image-based的instance-level語義分割。
與之前的recoginition-based slam系統(tǒng)不同,它不需要任何已知模型,而且可以處理多個獨立運動。
代碼開源:(https://github.com/martinruenz/maskfusion)
Introduction
還處于幼兒期的兩個slam方向:
slam的靜態(tài)假設(shè)。能夠處理任意動態(tài)運動和非剛體場景的魯棒slam系統(tǒng)仍然remain open challege.
大部分slam系統(tǒng)輸出純幾何地圖。語義信息的添加大部分限制于少數(shù)已知物體的實例,需要提前建好它們的3D模型。或者將3D地圖點聚類成固定的語義類別,而不區(qū)分實例。
本文貢獻(xiàn) 提出一種實時的SLAM系統(tǒng),能夠提供物體級的場景描述。
整合了兩個輸出:
Mask-RCNN. image-based的實例分割算法,能夠預(yù)測80多種物體類別。
一種基于幾何的分割算法[ yeah!], 通過深度和表面法向量線索來生成物體邊界地圖(object edge map) 增加物體邊界的準(zhǔn)確性。
注意這里用的分割是實例級的,要比pixel-level還高一級。
與其他實時slam系統(tǒng)的比較:
[ related works的筆記,找一些系統(tǒng)特性然后從已有提出的系統(tǒng)中篩選一下即可。比如light-weight localization可以挑選地圖大小、定位精度、實時性等.]
Related Works
Dense RGB-D SLAM KinectFusion中提出 TSDF 模型。然而該模型在建圖和跟蹤之間轉(zhuǎn)換時需要開銷。而surfel-based的RGBD系統(tǒng),每個element存儲了局部表面特征,即半徑和法向量,具有高效運算。
…
Semantic SLAM 融合標(biāo)記的圖像數(shù)據(jù)到分割的3D地圖中。由于沒有考慮物體實例,所以無法單獨跟蹤多個物體。
Dynamic SLAM 動態(tài)SLAM中有兩個主要的場景:非剛體表面重建和多獨立運動剛體。
值得注意的文獻(xiàn):
(表格居然無法粘過來..只好放圖)
3 System Overview
【圖片解析:即說明用一個隊列來解決mask network耗時較長的問題。讓整體系統(tǒng)相對實際世界的時間犧牲一定的延時來等待第一幀mask 產(chǎn)生】 ( 5hz說明200ms一幀 )
每一幀獲取之后,執(zhí)行下列步驟:
跟蹤 以surfels表示每個物體的3D幾何。最小化一個energy,包括幀內(nèi)物體和存儲的3D模型之間的ICP error,以及考慮光度一致性(類似直接法?),與前一幀的位姿聯(lián)合。為了高效運算,僅跟蹤非靜態(tài)物體。用兩個不同策略判斷是否為靜態(tài):
基于運動一致性,參考[39] Co-fusion.
認(rèn)為被人碰觸的物體為動態(tài).
分割 綜合了語義和幾何信息來做分割。Mask-RCNN有兩個缺點:
無法實時:5Hz.
物體邊界不完美,容易滲透到背景去
用幾何分割來彌補,基于深度不連續(xù)和法向量。幾何分割可以實時,而且提供準(zhǔn)確的物體邊界。
幾何邊界和幾何成分圖。
說說幾何分割缺點:它傾向于過分割物體。聯(lián)合兩個方法:每一幀進行幾何分割,而語義分割則盡量often,于是實現(xiàn):
完整系統(tǒng)實現(xiàn)實時。幾何分割用于沒有語義物體mask的幀,有語義mask的幀兩者都用。
有了幾何分割,語義物體邊界更好了。
融合 surfels會不斷隨時間融合。類似之前提出的幾套三維重建方法。如[23, 50 ElasticFusion]
正文來了!
4 Multi-object SLAM
3d模型的表示用surfel模型。
對于每個物體,即如上的u,其中包括位置,法向量,顏色,權(quán)重,半徑和兩個時間戳。此外,每個模型賦予一個類別ID( 0..80 ),以及一個物體標(biāo)簽。對于每個時間戳,給定是否靜態(tài)的標(biāo)簽,以及存儲剛體位姿R和t。
4.1 Tracking
幀間位姿跟蹤純粹基于Intensity以及ICP的幾何深度點云匹配。
其中各誤差項的具體表述為:
v表示各個節(jié)點,如何理解將上一幀的節(jié)點轉(zhuǎn)換到當(dāng)前幀做空間差并投影到法向量位置呢。從目的上理解是不是要讓同一個物體的觀測距離盡量小?
v應(yīng)該是surfel模型中的v,對于每一個面盡量重疊,而重疊的方式則是讓面間距離最小。因此該公式就比較直觀了。
即將上一幀對應(yīng)位置的強度通過變換投影到當(dāng)前幀,構(gòu)造一個基于intensity的BA。(為何當(dāng)前的BA過程都只考慮intensity呢。顏色都被壓縮為一個通道)
CUDA加速的應(yīng)用基于開源的codes of [ElasticFusion 和 Co-Fusion]
4.2 Fusion
該部分目的是更新surfels。通過與當(dāng)前幀進行投影的數(shù)據(jù)關(guān)聯(lián)。該步驟來自[23],但基于分割的模具用于物體邊界。因而每個新增加的surfel屬于確定的一個模型。同時,對于模具之外的surfels我們引入了一個置信懲罰,對于不完美的分割是必須的。
5 SEGMENTATION
該部分是最重要的部分了。跟蹤是一板一眼毫無創(chuàng)新地解決了,即融合已有的ElasticFusion面元,結(jié)合surfel的表達(dá)和intensity構(gòu)造優(yōu)化。重建也可以按照elasticfusion和[23]的框架來做更新surfels。那么本文的重點,分割是如何實現(xiàn)的呢。
數(shù)據(jù)關(guān)聯(lián)的構(gòu)建 基于Co-Fusion,不是在3D完成數(shù)據(jù)關(guān)聯(lián),而是在2D下進行model-to-segment的關(guān)聯(lián)。給定這些關(guān)聯(lián)后,新的幀被masked,僅僅數(shù)據(jù)的子集被fused到已有的模型中,
pipeline的設(shè)計基于以下觀測:.. 復(fù)讀機了上面內(nèi)容。
RGBD的分割是基于object convexity假設(shè)的。
雙線程的工程實現(xiàn)。由于分割平行與tracking和fusion線程,于是需要有同步機制。
設(shè)計了一個隊列。最終有一個400ms delay。實現(xiàn)30fps。
對于沒有語義分割的幀,用mask-less 幀的邊界與已有的模型做關(guān)聯(lián),將在Section 5.3中討論。
5.1 Semantic Instance segmentation
Mask-rcnn等提供了專注于實例級別的物體分割算法。(非常好奇這類算法如何實現(xiàn)的分割,真實效果如何,以及背后理論的限制和前景如何,當(dāng)前發(fā)展方向如何。——并不深入去工程細(xì)節(jié),而是從數(shù)學(xué)宏觀上來理解這些東西,一定要不陷入天坑中去。)
5.2 Geometric Segmentation
基于幾何的分割感覺也很有前景。對于人類來說大部分的分割實際是幾何完成的。在人類知道該物體是獨立的物體之前,并不需要該物體的語義信息。相反,語義信息是建立在分割的基礎(chǔ)上的。
[13, 22, 42, 45, 47] 專門研究了 RGBD幀的幾何分割問題。基本上在2013-2015年的文章。該部分已經(jīng)成熟。
即它與語義的結(jié)合才是現(xiàn)在比較好的方向,同時結(jié)合上動態(tài)過程。
分割參考的論文
[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
分割過程如下,定義兩個參數(shù)分別考慮深度的連通和凹的程度,定義一個閾值和它們兩的權(quán)重:
示例分割結(jié)果提出的邊界:
然后對其去除back-ground得到
5.3 Merged segmentation【該部分整體有點迷】
當(dāng)沒有語義masks的時候,幾何標(biāo)簽直接與存在的模型做關(guān)聯(lián),于是下面討論的會被跳過。
5.3.1 Mapping geometric labels to masks
即判斷二者重疊區(qū)域最高的作為關(guān)聯(lián)。在實驗里設(shè)定 65%的重復(fù)度。
多個components可以被mapped到同一個mask,然而一個component只map到一個mask。
5.3.2 Mapping masks to models
將物體labels投影到相機視野中,如f)圖所示。然后將其與幾何分割的components之間做5.3.1中同樣的重合度比較。上圖通過OpenGL渲染所有模型來生成。( 如何渲染? ) 然后選取一個 5%的閾值( 為何這么小) ,驗證了物體模型的類別ID和mask是一致的。
對于沒有成功匹配上的剩余的components,如5.3.1中直接與labels做overlap.
此處特意設(shè)定了一個值255來去除如手臂一樣不想考慮的區(qū)域。
(這里兩者分開考慮,很類似我的ob-map, map-ob的 pole data association, 所以我也應(yīng)該分別考慮二者。)
6 Evaluation
評估部分。建圖和跟蹤部分都基于 co-fusion和elasticfusion. 專門挑選了動態(tài)環(huán)境,使用AT[全局]、RP[忽略drift] RMSE來評估。
首先對比人多的環(huán)境。由于MaskFusion無法處理可變形部分,所以我們忽略掉有人的關(guān)聯(lián)。
Co-Fusion的介紹是一種通過運動來分割物體的SLAM系統(tǒng)。可以仔細(xì)看看。
基于rgbd的benchmark,提出文獻(xiàn):
[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.
實驗數(shù)據(jù)
其實挑了三段 TUM數(shù)據(jù)集,用5個系統(tǒng)跑了一下,同時將其中部分人為拆成 slightly dynamic和highly dynamic。(這里是實驗者自己來規(guī)定的部分嗎?)
6.1.2 Reconstruction
感覺該文獻(xiàn)的核心還是重建。
YCB Object and Model Set [4]里面提供了常用物體的數(shù)據(jù)庫,可以用來做重建的評估。(厲害了還有這種東西。或許可以3d打印再重建?)
就找了個瓶子跑了一下試試,也沒有跟其他的比。
6.1.3 Segmentation
將重建的3D模型投回來作為groundtruth去與聯(lián)合方法得到的區(qū)域做IoU的比較。
這里出現(xiàn)了一個ours和 geometry+semantic的兩個,不知道區(qū)別。
6.2 Qualitative results
這里三維重建能夠為機械手臂的抓持提供抓持點的分析。
6.3 Performance
2塊GPU Titan X+cpu core i7 3.5GHz!1塊做實時分割,一塊做slam。( 實際測試的時候可以先分割好然后跑數(shù)據(jù)集.. )
Conclusion
三個限制:recognition, reconstruction and tracking.
限制于mask-rcnn識別物體的種類。
限制于剛體的跟蹤
過小的物體提供不了足夠的幾何信息。
資源
Mask-RCNN : https://github.com/matterport/Mask_RCNN
思考
整個系統(tǒng)某種程度上更專注于三維重建。它對多物體的跟蹤,不過是融合了icp和強度的增加誤差項的方式。
這里將地圖中的物體存放了位置信息,那么跟蹤的時候若物體也在動,如何保證優(yōu)化得到正確的相機和物體位姿?
該系統(tǒng)在結(jié)果中在高動態(tài)環(huán)境下效果比較好,而在低動態(tài)環(huán)境下反而沒有staticFusion效果好,為何會有這種狀況出現(xiàn)?
實驗部分考慮了多個應(yīng)用:AR環(huán)境的示意、與人手的交互(顯示卡路里)、以及動態(tài)晃動瓶子狀態(tài)下對其的重建。而我認(rèn)為更有用的定位部分評估不是很多,它并不是一個很合格的為移動機器人準(zhǔn)備的動態(tài)語義slam系統(tǒng)。
關(guān)于移動機器人與物體級語義SLAM的應(yīng)用思路
對于移動機器人來說,分割是很必要的東西,當(dāng)在環(huán)境中發(fā)現(xiàn)了某種物體,應(yīng)該附有基本屬性 ( static/not static ),若是 not static的,應(yīng)該能對其運動進行跟蹤和預(yù)測。該部分的核心是能夠定位自身( 過濾掉動態(tài)之后 ), 然后對其進行跟蹤。作為機器人并不在乎其重建效果。所以機器人能夠在動態(tài)環(huán)境下在動態(tài)物體潛在運動軌跡上添加costfunction完成路徑規(guī)劃。
對于室內(nèi)環(huán)境,先完成分割。語義分割+幾何分割的點子是很好的。然后將該信息融合到已有的靜態(tài)地圖中去,輔助機器人完成路徑規(guī)劃。
思考有沒有相關(guān)最新文章研究。語義級的slam(檢測人即可, 包括一些不在類別內(nèi)的移動物體(球、機器人等) ),同時路徑規(guī)劃,路徑規(guī)劃的同時完成對動態(tài)物體的分割和追蹤。
即該slam系統(tǒng)的目的,不再僅僅停留于剔除掉動態(tài)物體完成定位。而是將動態(tài)物體作為地圖的一個layer,即動態(tài)層。
傳統(tǒng)靜態(tài)層用于定位,而動態(tài)層用于估計動態(tài)物體相對自身位置,并輔助路徑規(guī)劃。
第一步、完成動態(tài)層的構(gòu)建(即多物體跟蹤 - 深入,更多物體的跟蹤。(盡量收縮室內(nèi)的定位要求,如天花板、線面等幾何信息)
第二步、基于該系統(tǒng)完成路徑規(guī)劃(根據(jù)第一步地圖來高幀率預(yù)測動態(tài)物體的潛在路徑,建立路徑規(guī)劃模型)
第三步、徹底意義的主動探索(挑選合適的下一步主動slam位置,并在高動態(tài)環(huán)境完成主動探索!)
這三步完成之后,一個徹底的室內(nèi)物流機器人就完成了,它可以在室內(nèi)動態(tài)環(huán)境運動到任何地方去。
認(rèn)為這里準(zhǔn)確的物體邊界非常重要。應(yīng)用考慮目前2d圖像的檢
測無法做到很準(zhǔn)確的邊界提取,而3d下來做邊界提取則變得異常簡單。
這也是傳感器融合的一個點。slam輔助語義識別。
目前語義slam的點不是那么好找了,想在室內(nèi)移動機器人上做一做,拋磚引玉吧。
其他資料
論文鏈接:MaskFusion: Real-Time Recognition, Tracking and Reconstruction of Multiple Moving Objects(http://visual.cs.ucl.ac.uk/pubs/maskfusion/)
我之前寫的SemanticFusion的解析
原野尋蹤:(https://zhuanlan.zhihu.com/p/42713034)[論文]SemanticFusion CNN稠密3D語義建圖
推薦閱讀
如何從零開始系統(tǒng)化學(xué)習(xí)視覺SLAM?
從零開始一起學(xué)習(xí)SLAM | 為什么要學(xué)SLAM?
從零開始一起學(xué)習(xí)SLAM | 學(xué)習(xí)SLAM到底需要學(xué)什么?
從零開始一起學(xué)習(xí)SLAM | SLAM有什么用?
從零開始一起學(xué)習(xí)SLAM | C++新特性要不要學(xué)?
從零開始一起學(xué)習(xí)SLAM | 為什么要用齊次坐標(biāo)?
從零開始一起學(xué)習(xí)SLAM | 三維空間剛體的旋轉(zhuǎn)
從零開始一起學(xué)習(xí)SLAM | 為啥需要李群與李代數(shù)?
從零開始一起學(xué)習(xí)SLAM | 相機成像模型
從零開始一起學(xué)習(xí)SLAM?|?不推公式,如何真正理解對極約束?
從零開始一起學(xué)習(xí)SLAM | 神奇的單應(yīng)矩陣
從零開始一起學(xué)習(xí)SLAM | 你好,點云
從零開始一起學(xué)習(xí)SLAM | 給點云加個濾網(wǎng)
從零開始一起學(xué)習(xí)SLAM | 點云平滑法線估計
從零開始一起學(xué)習(xí)SLAM | 點云到網(wǎng)格的進化
從零開始一起學(xué)習(xí)SLAM | 理解圖優(yōu)化,一步步帶你看懂g2o代碼
從零開始一起學(xué)習(xí)SLAM | 掌握g2o頂點編程套路
從零開始一起學(xué)習(xí)SLAM | 掌握g2o邊的代碼套路
SLAM初識
SLAM技術(shù)框架
慣性導(dǎo)航系統(tǒng)簡介
視覺里程計:起源、優(yōu)勢、對比、應(yīng)用
視覺里程計:特征點法之全面梳理
SLAM領(lǐng)域牛人、牛實驗室、牛研究成果梳理
我用MATLAB擼了一個2D LiDAR SLAM
可視化理解四元數(shù),愿你不再掉頭發(fā)
IMU標(biāo)定 | 工業(yè)界和學(xué)術(shù)界有什么不同?
匯總 | VIO、激光SLAM相關(guān)論文分類集錦
最近一年語義SLAM有哪些代表性工作?
視覺SLAM技術(shù)綜述
研究SLAM,對編程的要求有多高?
深度學(xué)習(xí)遇到SLAM | 如何評價基于深度學(xué)習(xí)的DeepVO,VINet,VidLoc?
2018年SLAM、三維視覺方向求職經(jīng)驗分享
新型相機DVS/Event-based camera的發(fā)展及應(yīng)用
最近三年開源「語義SLAM/分割/建模」方案介紹超詳細(xì)干貨 | 三維語義分割概述及總結(jié)高翔:談?wù)務(wù)Z義SLAM/地圖歡迎關(guān)注公眾號:計算機視覺life,一起探索計算機視覺新世界~覺得有用,給個好看啦~??
總結(jié)
以上是生活随笔為你收集整理的opengl 日地月运动模型_MaskFusion: 多运动目标实时识别、跟踪和重建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据应用项目创新大赛_温州首届大数据应
- 下一篇: 创建二级索引_技术分享 | InnoDB