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