动态环境下的SLAM:DynaSLAM 论文学习笔记
動(dòng)態(tài)環(huán)境下的SLAM:DynaSLAM 論文學(xué)習(xí)筆記
- 這篇文章
 - 論文摘要
 - 系統(tǒng)流程
 - 相關(guān)環(huán)節(jié)的實(shí)現(xiàn)方法
 - 神經(jīng)網(wǎng)絡(luò)檢測(cè)圖中動(dòng)態(tài)物體(Mask R-CNN)
 - Low-Cost Tracking
 - 使用多視圖幾何的方法檢測(cè)圖中動(dòng)態(tài)物體(Multi-view Geometry)
 - 跟蹤與建圖(Tracking and Mapping)
 - 圖像背景修復(fù)(Background Inpainting)
 - 其他
 
- 實(shí)驗(yàn)
 - 結(jié)尾
 
這篇文章
?最近看了篇關(guān)于在動(dòng)態(tài)環(huán)境下工作的視覺(jué)SLAM論文–DynaSLAM,感覺(jué)論文中使用的方法還有點(diǎn)意思,所以就寫(xiě)篇博客來(lái)記錄一下。論文可以在百度學(xué)術(shù)中搜到,也能在這里下載。
 【轉(zhuǎn)載聲明】本篇文字均為原創(chuàng),如轉(zhuǎn)載請(qǐng)注明出處
論文摘要
?這篇論文提出了DynaSLAM。DynaSLAM是基于ORB-SLAM2建立的,它使用深度學(xué)習(xí)和多視圖幾何的方法檢測(cè)畫(huà)面中存在的動(dòng)態(tài)物體,并將他們從圖像中剔除,以降低動(dòng)態(tài)物體對(duì)相關(guān)算法的影響。之后使用圖像中剩余的靜態(tài)部分完成跟蹤定位和局部建圖。此外,作者還提出了一個(gè)背景修復(fù)的方法。該方法能修復(fù)圖中之前被動(dòng)態(tài)物體擋住的靜態(tài)背景,合成出只包含靜態(tài)物體的圖像。下面介紹系統(tǒng)中各方法的實(shí)現(xiàn)。
系統(tǒng)流程
?首先看 DynaSLAM 系統(tǒng)的流程圖:
 
 ?圖中黑色實(shí)線是使用單目或雙目相機(jī)時(shí)系統(tǒng)的工作流程,黑色虛線則是使用RGB-D相機(jī)時(shí)的處理流程。而紅色虛線表示“跟蹤和建圖”環(huán)節(jié)在工作時(shí)與稀疏地圖之間的數(shù)據(jù)交換(利用稀疏地圖進(jìn)行跟蹤,同時(shí)不斷更新地圖)。
 ?因?yàn)?strong>DynaSLAM系統(tǒng)的優(yōu)化之處在于添加了動(dòng)態(tài)物體檢測(cè)和圖像背景修復(fù),所以在整個(gè)流程圖重點(diǎn)體現(xiàn)了這兩個(gè)部分。系統(tǒng)其余部分與ORB-SLAM2相似,在流程圖中用簡(jiǎn)單的(Tracking and Mapping)表示。
 ?從圖中可以看出,系統(tǒng)會(huì)根據(jù)相機(jī)類(lèi)型使用不同工作方式,動(dòng)態(tài)對(duì)象檢測(cè)的方法也不同。系統(tǒng)用于動(dòng)態(tài)物體檢測(cè)的方法有兩種:1、卷積神經(jīng)網(wǎng)絡(luò),2、多視圖幾何。在使用單目或雙目相機(jī)時(shí),只有神經(jīng)網(wǎng)絡(luò)在工作;在使用RBG-D相機(jī)時(shí)兩種方法會(huì)同時(shí)工作。(個(gè)人認(rèn)為這樣做的原因在于多視圖幾何的方法需要知道像素點(diǎn)的深度信息,而三種相機(jī)中只有RGB-D能夠較精確地做到這一點(diǎn))
 ?上述就是整個(gè)系統(tǒng)的大致流程,下面介紹相關(guān)環(huán)節(jié)的實(shí)現(xiàn)。
相關(guān)環(huán)節(jié)的實(shí)現(xiàn)方法
神經(jīng)網(wǎng)絡(luò)檢測(cè)圖中動(dòng)態(tài)物體(Mask R-CNN)
?DynaSLAM使用Mask R-CNN來(lái)進(jìn)行圖像的語(yǔ)義分割(雖然Mask R-CNN還能完成實(shí)例分割,但是在這里不采用)。通過(guò)神經(jīng)網(wǎng)絡(luò)分割出圖片中的動(dòng)態(tài)物體,如:人、車(chē)、貓狗等。可以根據(jù)不同情況的需求,來(lái)訓(xùn)練網(wǎng)絡(luò),使其能判斷出自己認(rèn)為的實(shí)際環(huán)境中大概率會(huì)出現(xiàn)的動(dòng)態(tài)物體。
 ?采用這個(gè)方法所分割后的圖片是這個(gè)樣子的:
 
 ?從圖中可以看出,使用神經(jīng)網(wǎng)絡(luò)能夠?qū)D片中的“人”給分割出來(lái)。但圖中被人觸碰到的書(shū)本和椅子并沒(méi)有被準(zhǔn)確地分辨出。這是因?yàn)檫@些物體并不在神經(jīng)網(wǎng)絡(luò)的分辨范圍內(nèi)(在訓(xùn)練網(wǎng)絡(luò)時(shí)這些物體被認(rèn)定為靜態(tài)的)。這個(gè)不足使得圖的動(dòng)態(tài)物體沒(méi)有完全去除,會(huì)影響到之后工作的精度。所以作者又提出了多視圖幾何的判別方法。
Low-Cost Tracking
?這部分是一個(gè)耗時(shí)短,計(jì)算量少的跟蹤計(jì)算任務(wù),主要是為了獲得在多視圖幾何判斷時(shí)所需要的相機(jī)位姿估計(jì)值。這部分跟蹤使用是經(jīng)過(guò)之前神經(jīng)網(wǎng)絡(luò)處理,去除掉了動(dòng)態(tài)物體的圖像。此時(shí)圖像中的信息變少,所以在跟蹤定位時(shí)能使用的特征也變少,相應(yīng)的計(jì)算量也減少了。
使用多視圖幾何的方法檢測(cè)圖中動(dòng)態(tài)物體(Multi-view Geometry)
?這個(gè)方法為了分辨出之前神經(jīng)網(wǎng)絡(luò)方法漏掉的動(dòng)態(tài)物體。方法的步驟如下:
 ?1、選擇五個(gè)(這是作者在精度和計(jì)算量上做的權(quán)衡)與當(dāng)前幀共視程度最高的關(guān)鍵幀。
 ?2、將關(guān)鍵幀中的關(guān)鍵點(diǎn) Xkf 根據(jù)計(jì)算的相對(duì)位姿投影到當(dāng)前幀中,獲得匹配的關(guān)鍵點(diǎn) Xcur ,以及 Xcur 在當(dāng)前幀的深度 Zproj 。
 ?3、根據(jù)當(dāng)前幀對(duì)應(yīng)的深度圖獲得 Xcur 實(shí)際測(cè)得的深度值 Zcur。計(jì)算 ΔZ=Zproj-Zcur 。如果 ΔZ 大于某個(gè)閾值 threshold ,則認(rèn)為關(guān)鍵點(diǎn) Xcur 是在動(dòng)態(tài)物體上,需要將其剔除。(作者權(quán)衡了判斷的準(zhǔn)確率和召回率,將閾值 threshold 設(shè)為0.7)
 ?4、此外還有個(gè)判斷方法:如果關(guān)鍵點(diǎn) Xkf 和 Xcur 之間的視差角大于30°,則也會(huì)將 Xcur 從圖像中剔除。(這也是在TUM數(shù)據(jù)集上的普遍使用的判斷條件)
 ?使用這個(gè)方法完成的圖像分割結(jié)果如下:
 
 ?從圖中可以看出,格子衫男孩和他觸碰的物體都被很好的識(shí)別了。但后面的那位老哥逃過(guò)了這個(gè)算法。原因是這位老哥離相機(jī)太遠(yuǎn),或他那里沒(méi)有提取到特征點(diǎn)(大眾臉)。這是這個(gè)方法所存在的不足。此外,從步驟中可以看出,該方法需要至少兩幀來(lái)實(shí)現(xiàn)判斷,而神經(jīng)網(wǎng)絡(luò)只需一幀。所以這個(gè)方法還要考慮幀的選取和相對(duì)位姿精度的問(wèn)題。
 ?由于這兩種方法存在著互補(bǔ)的關(guān)系,所以作者將它們聯(lián)合在了一起。實(shí)際的效果圖如下:
 
 ?第三張圖就是兩種方法結(jié)合后的圖像分割結(jié)果。聯(lián)合后的方法能將圖中所有的動(dòng)態(tài)物體給分辨出來(lái)。為了方便,將這種聯(lián)合的方法記為N+G
跟蹤與建圖(Tracking and Mapping)
?這部分使用經(jīng)過(guò)N+G方法處理后的圖像完成跟蹤定位和建圖任務(wù)。實(shí)現(xiàn)方法和ORB-SLAM2是相似的(因?yàn)樘幚砗蟮膱D像只剩下了靜態(tài)部分)。
圖像背景修復(fù)(Background Inpainting)
?這個(gè)方法是基于幾何變換實(shí)現(xiàn)的。在完成動(dòng)態(tài)物體剔除后,整個(gè)圖片會(huì)出現(xiàn)一些窟窿。這樣的圖片既不美觀也不利于跟蹤定位等操作(因?yàn)榭赡軐?dǎo)致匹配特征點(diǎn)過(guò)少)。所以通過(guò)背景修復(fù)的方法,將這些窟窿填補(bǔ)好,修復(fù)出之前被動(dòng)態(tài)物體所擋住的背景圖像。這個(gè)方法的大致步驟如下:
 ?1、在獲得當(dāng)前幀位姿后,選取出部分(論文中使用最新的20個(gè)關(guān)鍵幀來(lái)做修復(fù)的參考)與當(dāng)前幀距離最近的關(guān)鍵幀。
 ?2、然后計(jì)算各關(guān)鍵幀與當(dāng)前幀的相對(duì)位姿,并在關(guān)鍵幀中尋找當(dāng)前幀里需要修復(fù)的背景圖像信息。
 ?3、最后使用關(guān)鍵幀觀測(cè)到的信息來(lái)修復(fù)當(dāng)前幀。如果使用RGB-D相機(jī),那么會(huì)在恢復(fù)當(dāng)前幀的深度圖之后,再修復(fù)彩色圖(因?yàn)橐剐迯?fù)的彩圖部分有對(duì)應(yīng)的深度信息)。
 ?但在修復(fù)之后還是會(huì)有一些缺口。原因在于兩點(diǎn):1、可能所有關(guān)鍵幀都未觀測(cè)到這些位置對(duì)應(yīng)的靜態(tài)背景;2、在修復(fù)時(shí)無(wú)法獲得此部分對(duì)應(yīng)的有效深度信息。
 ?下面是該方法的效果圖:
 
 ?可以看到圖中確實(shí)還留有一些空白。此外,在第三列效果圖中,那張被格子衫小伙擋住的墻紙?jiān)谛迯?fù)之后,它的邊界處發(fā)生了斷痕。這是因?yàn)樾迯?fù)十分依賴(lài)估計(jì)的位姿,如果估計(jì)的位姿不準(zhǔn)確,修復(fù)的結(jié)果和實(shí)際情況差距會(huì)很大。這點(diǎn)在后續(xù)的實(shí)驗(yàn)中也有體現(xiàn)。
 ?不過(guò)論文中沒(méi)提到這個(gè)問(wèn)題:在當(dāng)前幀中的一個(gè)待重建區(qū)域被多個(gè)關(guān)鍵幀觀察到時(shí),這個(gè)位置的像素值和深度值該如何選取(感覺(jué)可以通過(guò)取平均值的方法來(lái)選取)。
其他
?剩余的一些工作部分比如閉環(huán)檢測(cè)之類(lèi)的,都和ORB-SLAM2相似,所以論文中也就沒(méi)做詳細(xì)地講解。想了解這部分內(nèi)容,博友可以去參考ORB-SLAM2的原論文以及源代碼。(在這里安利一波自己寫(xiě)的ORB-SLAM2源碼注釋)
實(shí)驗(yàn)
?作者做了兩類(lèi)實(shí)驗(yàn):1、對(duì)比使用不同方法的DyanSLAM;2、對(duì)比DynaSLAM和ORB-SLAM2的跟蹤精度。
 ?第一個(gè)實(shí)驗(yàn)的結(jié)果如下:
 ?圖中N代表神經(jīng)網(wǎng)絡(luò),G代表多視圖幾何,BI代表背景修復(fù)。前三個(gè)方法不用介紹,最后一個(gè)是作者做的嘗試:使用修復(fù)后的圖進(jìn)行跟蹤和建圖(因?yàn)樾迯?fù)后的圖像中只包含了靜態(tài)背景,所以之后的定位、建圖工作會(huì)輕松很多)。這個(gè)方法的流程如下:
 
 ?從結(jié)果來(lái)看這個(gè)方法并不好。原因就是之前所說(shuō)的,修復(fù)的效果依賴(lài)于幀的估計(jì)位姿,可是只使用 Low-Cost Tracking 很難獲得精度較高的位姿。所以修復(fù)的圖與實(shí)際不符,導(dǎo)致最后定位效果不太理想。但是如果把 BI 放在最后,可以提高稠密點(diǎn)云地圖或八叉樹(shù)地圖的構(gòu)建效果。
 ?最后就是使用N+G的DynaSLAM和ORB-SLAM2的對(duì)比實(shí)驗(yàn)。結(jié)果當(dāng)然是裝備更加優(yōu)良的DynaSLAM獲勝:
 
結(jié)尾
?這篇博客介紹了針對(duì)動(dòng)態(tài)環(huán)境設(shè)計(jì)的DynaSLAM系統(tǒng)。其中多視圖幾何和圖像修復(fù)的方法是我覺(jué)得比較有意思的地方,所以想著寫(xiě)篇博客記錄下來(lái)。之后也會(huì)再寫(xiě)一些關(guān)于文獻(xiàn)理解的博客,以加深自己對(duì)文章的理解,同時(shí)和大家分享自己覺(jué)得有意思的論文。如果博客中有不足的地方,勞煩各位博友指出,十分感謝!
總結(jié)
以上是生活随笔為你收集整理的动态环境下的SLAM:DynaSLAM 论文学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: 个性签名唯美2019
 - 下一篇: SVO 学习笔记(深度滤波)