常規(guī)的SLAM算法首先假設(shè)環(huán)境中所有物體均處于靜止的狀態(tài)。而一些能夠在動(dòng)態(tài)環(huán)境中運(yùn)行的SLAM系統(tǒng),只是將環(huán)境中的動(dòng)態(tài)物體視為異常值并將他們從環(huán)境中剔除,再使用常規(guī)的SLAM算法進(jìn)行處理。這嚴(yán)重影響SLAM在自動(dòng)駕駛中的應(yīng)用。
MonoDOS通過兩種方式對常規(guī)SLAM進(jìn)行擴(kuò)展。其一,具有對象感知功能,不僅可以檢測跟蹤關(guān)鍵點(diǎn),還可以檢測跟蹤具有語義含義的對象。其次,它可以處理帶有動(dòng)態(tài)對象的場景并跟蹤對象運(yùn)動(dòng)。
但小伙伴要注意一點(diǎn),并非所有OSLAM都是動(dòng)態(tài)的,也不是所有動(dòng)態(tài)SLAM系統(tǒng)都需要對象感知。SLAM ++?(CVPR 2013)完成了OSLAM的開創(chuàng)性工作,?但仍然需要一定的靜態(tài)場景。一些動(dòng)態(tài)SLAM系統(tǒng)通過假設(shè)剛體以及速度恒定,來約束和改善姿態(tài)估計(jì)結(jié)果,但其中并沒有明確的對象概念。
動(dòng)態(tài)對象SLAM的元素
DOS系統(tǒng)引入了對象的概念,這個(gè)概念具有以下幾個(gè)內(nèi)容。首先,需要從單個(gè)圖像幀中提取對象,就相當(dāng)于常規(guī)SLAM系統(tǒng)中的關(guān)鍵點(diǎn)(例如ORB-SLAM中的ORB特征點(diǎn))提取階段。該階段將給出2D或3D對象檢測結(jié)果?,F(xiàn)階段單目3D對象檢測取得了很大進(jìn)展。其次,它的數(shù)據(jù)關(guān)聯(lián)性更加復(fù)雜。靜態(tài)SLAM只關(guān)心圖像中的關(guān)鍵點(diǎn),因此靜態(tài)SLAM的數(shù)據(jù)關(guān)聯(lián)只是關(guān)鍵幀特征向量的匹配。對于動(dòng)態(tài)SLAM我們必須對幀中的關(guān)鍵點(diǎn)和對象之間執(zhí)行數(shù)據(jù)關(guān)聯(lián)。第三,作為傳統(tǒng)SLAM中Bundle Adjustment的拓展,我們必須為這個(gè)處理過程添加跟蹤對象(tracklet)和動(dòng)態(tài)關(guān)鍵點(diǎn),其次還可以利用運(yùn)動(dòng)模型中的速度約束。
我們制作了以下圖表來表示DOS的三個(gè)過程。綠色方框代表數(shù)據(jù)關(guān)聯(lián)過程,藍(lán)色方框代表BA過程,紅色方塊是BA調(diào)整的因子圖。
典型動(dòng)態(tài)對象SLAM的處理過程
為什么需要對象檢測?
考慮到這三個(gè)基本過程,我們可以提出一個(gè)問題:為什么在SLAM中引入動(dòng)態(tài)對象?首先,假定對象是具有固定形狀和大小的剛體。其次假定這些對象在物理上具有簡單且符合要求的運(yùn)動(dòng)模型,該模型最好可以隨時(shí)間推移進(jìn)行一定的調(diào)整。因此,可以通過少量參數(shù)來描述對象大小和姿態(tài)變化。另一方面,對象的引入可以為BA調(diào)整階段提供更多的約束條件。這將提高SLAM系統(tǒng)的魯棒性。
接下來我們將介紹近些年來較為優(yōu)秀的論文,我們將介紹篇論文中上述的的三個(gè)基本過程。
CubeSLAM:單目3D對象SLAM(TRO 2019)
這篇文章可以說是DOS中最全面的了。cubeSLAM的主要貢獻(xiàn)之一就是巧妙地將長方體的大小和位置集成到因子圖優(yōu)化中,并使用運(yùn)動(dòng)模型來限制長方體的可能運(yùn)動(dòng),優(yōu)化了物體的速度。在這種情況下,3D對象檢測和SLAM可以相互促進(jìn)。對象為BA和深度初始化提供了幾何約束。除此之外它還增加了泛化功能,使orb slam可以在低紋理環(huán)境中工作。mono3D結(jié)果通過BA優(yōu)化,并通過運(yùn)動(dòng)模型進(jìn)行約束。
對象提取
這篇文章將2D對象檢測和初級圖像特征點(diǎn)用于3D長方體的檢測和評分??此坪唵蔚姆椒▽σ巫雍推嚨臋z測都具有非常好的效果。但是基于深度學(xué)習(xí)的方法可以得到更加精確的結(jié)果。
長方體對象的生成和評分
數(shù)據(jù)關(guān)聯(lián)
如概述中所述,這篇文章在多個(gè)級別上執(zhí)行數(shù)據(jù)關(guān)聯(lián),包括點(diǎn)-點(diǎn)、點(diǎn)-對象和對象-對象。
點(diǎn)-點(diǎn)匹配:與標(biāo)準(zhǔn)ORB-SLAM方式相同,基于orb進(jìn)行特征點(diǎn)匹配。對于不滿足對極約束的匹配點(diǎn)對,我們將其歸類于動(dòng)態(tài)對象。對于動(dòng)態(tài)關(guān)鍵點(diǎn)采用稀疏光流法(KLT光流)直接對它們進(jìn)行跟蹤。完成跟蹤之后,使用三角測量確定動(dòng)態(tài)關(guān)鍵點(diǎn)的3D位置。
點(diǎn)-對象匹配:對于靜態(tài)關(guān)鍵點(diǎn),如果它們屬于同一邊界框,則它與該對象相關(guān)聯(lián)。這里會(huì)使用多種方法來確保匹配的正確性。例如,該點(diǎn)在連續(xù)2幀中必須處于同一個(gè)box內(nèi),并且距長方體中心小于1米。并且框之間重疊區(qū)域中的特征點(diǎn)將被忽略。
對象-對象匹配:對象匹配通過關(guān)鍵點(diǎn)匹配間接完成。如果連續(xù)幀中的兩個(gè)對象共享最多的特征點(diǎn)(且超過10個(gè)),則將它們作為同一對象進(jìn)行跟蹤。如果基于特征的匹配或KLT跟蹤失敗,則使用邊界框級別的可視對象跟蹤完成動(dòng)態(tài)對象跟蹤。
對象感知以及BA
靜態(tài)關(guān)鍵點(diǎn)與攝像機(jī)位姿一起進(jìn)行優(yōu)化,與ORB-SLAM一樣會(huì)存在攝像機(jī)點(diǎn)錯(cuò)誤或重投影錯(cuò)誤等問題。從每個(gè)幀中獲得對象最佳的3D位姿后,我們可以將其視為9DoF的3D“測量”,并確定BA問題。對于靜態(tài)對象,會(huì)存在以下幾種誤差。
3D相機(jī)對象誤差:跟蹤的地標(biāo)對象具有6DoF姿態(tài)+ 3DoF長方體尺寸,可以將其與9DoF 3D測量結(jié)果進(jìn)行比較,并形成第一個(gè)誤差項(xiàng)。
2D相機(jī)對象誤差:從3D測量中,我們可以將長方體的8個(gè)角投影到相機(jī)圖像中。這8個(gè)點(diǎn)的最小邊界框應(yīng)與每幀的2d檢測邊框一致。
我們要注意到,這種2D-3D一致的假設(shè)并不總是正確。但在大多數(shù)情況下,對于自動(dòng)駕駛中車載攝像頭的典型情況(水平或略微向下看)來說,這種假設(shè)可以成立。
對象點(diǎn)誤差:對于與框架中相關(guān)的點(diǎn),它應(yīng)基于長方體的中心和大小位于長方體內(nèi)。
對于動(dòng)態(tài)對象,curbSLAM假定動(dòng)態(tài)對象是遵循一定運(yùn)動(dòng)模型的剛體。這引入了兩個(gè)附加的誤差。
運(yùn)動(dòng)誤差:根據(jù)運(yùn)動(dòng)模型假設(shè)一段時(shí)間內(nèi)速度恒定,利用幀計(jì)算幀處的狀態(tài)。然后,與幀處觀察結(jié)果進(jìn)行比較。請注意,這涉及為每個(gè)動(dòng)態(tài)對象更新速度。
動(dòng)態(tài)點(diǎn)誤差:如果點(diǎn)在動(dòng)態(tài)對象上,則動(dòng)態(tài)點(diǎn)與該對象的相對位置不會(huì)隨著時(shí)間發(fā)生改變。
cubeSLAM因子圖(綠色方塊是與動(dòng)態(tài)對象相關(guān)的誤差)
效果
CubeSLAM有一些效果相當(dāng)不錯(cuò)的案例,比如對于KITTI動(dòng)態(tài)場景中的某些形狀大小不變是3D物體進(jìn)行檢測和跟蹤。然而,SLAM的結(jié)果可能并不總是最優(yōu),因?yàn)槭共捎梅侄魏愣ㄟ\(yùn)動(dòng)假設(shè),也可以在一定范圍內(nèi)估計(jì)動(dòng)態(tài)物體的速度曲線。要注意我們在計(jì)算里程表(相機(jī)姿勢)時(shí)會(huì)考慮對象約束。
通過SLAM進(jìn)行3D對象檢測、軌跡跟蹤以及速度估計(jì)
S3DOT:用于自動(dòng)駕駛的基于立體視覺的語義3D對象和自我運(yùn)動(dòng)跟蹤(ECCV 2018)
這篇文章的研究雖然是基于立體聲視頻流的,但該框架可以擴(kuò)展到單目SLAM中。這篇文章的主要貢獻(xiàn)是展示了利用視頻提取和跟蹤3D對象,而這些對象在單個(gè)圖像上很難檢測到。
S3DOT預(yù)測極端截?cái)嗟钠囎藨B(tài)、預(yù)測一致的軌道并估計(jì)被跟蹤汽車的速度
對象提取
這種對象提取方式的靈感來自Deep3DBox。它利用物體檢測得到的2D邊界框和8個(gè)視點(diǎn)進(jìn)行分類。它使用邊界框形狀尺寸來推斷物體距離。這種方法非常通用,可以在單目環(huán)境中使用。
2D框+視點(diǎn)= 3D邊界框
數(shù)據(jù)關(guān)聯(lián)
對象-對象匹配:跨幀的2D邊界框通過相似性評分投票進(jìn)行匹配。在補(bǔ)償相機(jī)旋轉(zhuǎn)后,相似度評分將會(huì)考慮邊界框形狀相似度以及中心距離。
點(diǎn)-點(diǎn)匹配:關(guān)鍵點(diǎn)與對象輪廓(凸包由2D圖像中的8個(gè)投影角對接)內(nèi)的ORB特征點(diǎn)匹配,同時(shí)與靜態(tài)背景匹配。
點(diǎn)-對象匹配:沒有明確說明,但是當(dāng)一個(gè)點(diǎn)在該對象的對象輪廓內(nèi)時(shí),應(yīng)將其與該對象關(guān)聯(lián)。這是一種簡單的關(guān)聯(lián)策略。
對象感知以及BA
對象輪廓之外的關(guān)鍵點(diǎn)被視為靜態(tài)關(guān)鍵點(diǎn)。靜態(tài)關(guān)鍵點(diǎn)空間位置和攝像機(jī)位姿求解同ORB-SLAM一樣,通過優(yōu)化解決。獲得相機(jī)位姿(或運(yùn)動(dòng))后,便可以解決了對象位姿問題。動(dòng)態(tài)對象BA具有以下四個(gè)誤差項(xiàng)。
動(dòng)態(tài)點(diǎn)(稀疏特征)誤差:剛性對象上的特征點(diǎn)在對象框架中具有固定坐標(biāo)。
2D相機(jī)對象誤差:跟蹤對象的投影應(yīng)滿足2D測量結(jié)果。
對象尺寸一致性誤差:對象形狀在框架之間保持一致。這是cubeSLAM中3D 相機(jī)對象誤差的一部分。
運(yùn)動(dòng)誤差:預(yù)測的位姿應(yīng)該與圖像幀中的3D位置保持一致。通過運(yùn)動(dòng)學(xué)模型可以進(jìn)行運(yùn)動(dòng)估計(jì)。它涉及車輛的3維位置,速度,轉(zhuǎn)向角。
動(dòng)態(tài)點(diǎn)云對準(zhǔn)誤差:在將上述誤差最小化之后,我們基于先驗(yàn)尺寸獲得了物體姿態(tài)的MPA估計(jì)。為了糾正先驗(yàn)中偏差,這里將3D長方體與跟蹤的點(diǎn)云對齊。
效果
S3DOT同樣也有不錯(cuò)的效果,該結(jié)果可以在KITTI的動(dòng)態(tài)場景中檢測和跟蹤3D對象。但是我們要注意,這里在計(jì)算相機(jī)姿勢時(shí)不會(huì)考慮對象約束。
ClusterVO:對移動(dòng)實(shí)例進(jìn)行聚類并估算自身和周圍環(huán)境的視覺里程計(jì)(CVPR 2020)
ClusterVO通過將對象表示為跟蹤的關(guān)鍵點(diǎn)(或本文中的地標(biāo))的群集,提出了一種更通用的動(dòng)態(tài)SLAM算法。
ClusterVO的總體流程
對象提取
ClusterVO使用YOLOv3作為2D對象檢測器,為每個(gè)幀中的對象提出語義2D邊界框。它不對描述對象進(jìn)行假定。因此,相較于上述兩篇文章沒有長方體的產(chǎn)生階段。
數(shù)據(jù)關(guān)聯(lián)
ClusterVO數(shù)據(jù)關(guān)聯(lián)方法相當(dāng)復(fù)雜,由兩大步驟組成。其一是多級概率關(guān)聯(lián),即將觀察到的關(guān)鍵點(diǎn)與跟蹤的地標(biāo)相關(guān)聯(lián),并將邊界框與跟蹤的聚類相關(guān)聯(lián)。其二是異構(gòu)CRF,該CRF將跟蹤的地標(biāo)與跟蹤的聚類相關(guān)聯(lián)。
點(diǎn)-點(diǎn)匹配:屬于多級概率。描述符匹配對于靜態(tài)關(guān)鍵點(diǎn)可能效果很好,但對于動(dòng)態(tài)關(guān)鍵點(diǎn)的效果則可能很差。因此,首先以其預(yù)測每個(gè)群集的位置、速度(僅線性,無旋轉(zhuǎn))。如果觀測點(diǎn)在經(jīng)過運(yùn)動(dòng)預(yù)測后地標(biāo)的投影范圍內(nèi),那么關(guān)鍵點(diǎn)觀察值與地標(biāo)相關(guān)的概率與描述符相似度成正比。
對象-對象匹配:同樣屬于多級概率。如果邊界框m包含來自群集的最多投影點(diǎn),則它將與該群集q(對象)相關(guān)聯(lián)。
點(diǎn)-對象匹配:這是最復(fù)雜的部分,并且使用了異構(gòu)條件隨機(jī)場(CRF)。它確定界標(biāo)是否與聚類相關(guān)聯(lián)。它具有多個(gè)能量項(xiàng)。一元能量項(xiàng)包括2D能量(如果點(diǎn)在與群集關(guān)聯(lián)的邊界框內(nèi),則它與該簇關(guān)聯(lián)的可能性很高。如果該點(diǎn)在多個(gè)邊界框內(nèi),則可以分配給多個(gè)群集)、3D能量(一個(gè)點(diǎn)與簇相關(guān)的可能性更高,如果該點(diǎn)靠近簇的中心,則由簇的大小進(jìn)行調(diào)制)和運(yùn)動(dòng)能量(地標(biāo)的投影可以通過群集的運(yùn)動(dòng)來解釋)。如果成對標(biāo)簽平滑度能量項(xiàng)與附近的地標(biāo)相關(guān)聯(lián),則會(huì)造成不利影響。
對象感知以及BA
在概率數(shù)據(jù)關(guān)聯(lián)之后,我們可以為靜態(tài)場景和動(dòng)態(tài)聚類制定BA。這里使用專門設(shè)計(jì)的雙軌滑動(dòng)窗口來管理關(guān)鍵幀。
相機(jī)點(diǎn)誤差:對于靜態(tài)場景,clusterVO與ORB-SLAM相似,可以同時(shí)優(yōu)化相機(jī)位姿和靜態(tài)關(guān)鍵點(diǎn)的位置。當(dāng)clusterVO選擇滑動(dòng)窗口狀態(tài)估計(jì)方法時(shí),它還會(huì)增加一個(gè)附加的邊緣化項(xiàng)。此邊緣化項(xiàng)捕獲了觀測結(jié)果,由于滑動(dòng)窗口的寬度有限,這些結(jié)果將被刪除。
運(yùn)動(dòng)誤差:運(yùn)動(dòng)方程預(yù)測得到的位姿應(yīng)該與從單個(gè)幀求解處的3D測量值一致。這里采用的運(yùn)動(dòng)模型通過高斯過程采樣得到,且這個(gè)運(yùn)動(dòng)模型具有加速度。
動(dòng)態(tài)點(diǎn)誤差:clusterVO也具有動(dòng)態(tài)點(diǎn)錯(cuò)誤,類似于cubeSLAM和S3DOT。如果點(diǎn)在動(dòng)態(tài)對象上,則其在動(dòng)態(tài)對象中的相對位置將隨時(shí)間而固定。
效果
ClusterVO是一種更通用的DOS方法。從KITTI動(dòng)態(tài)場景的結(jié)果來看,用長方體近似得到的的結(jié)果質(zhì)量不如ClusterVO。對于自動(dòng)駕駛,CubeSLAM和S3DOT似乎更實(shí)用。我們還要注意,優(yōu)化里程計(jì)(相機(jī)位姿)時(shí)會(huì)考慮對象約束。
MoMoSLAM:用于動(dòng)態(tài)環(huán)境的多對象單目SLAM(IV 2020)
“多體單目SLAM”的概念似乎來自“ 多體SfM ”,但其本質(zhì)上與動(dòng)態(tài)對象SLAM具有相同的含義。
對象提取
MoMoSLAM使用了非常復(fù)雜但準(zhǔn)確的3D對象提取過程。使用形狀先驗(yàn)和關(guān)鍵點(diǎn)將2D檢測提升為3D形狀。首先檢測車輛可區(qū)分特征上的36個(gè)有序關(guān)鍵點(diǎn),并檢測一系列基本形狀的變形系數(shù)。然后,通過最小化重投影誤差將2D檢測提升為3D,以獲得6個(gè)DoF姿態(tài)和形狀參數(shù)。這種方法與RoI -10D(CVPR 2019)非常相似。
從2D關(guān)鍵點(diǎn)到3D形狀
數(shù)據(jù)關(guān)聯(lián)
點(diǎn)-點(diǎn)匹配:基于描述符特征的關(guān)鍵點(diǎn)匹配,類似于ORB-SLAM。
對象-對象匹配:本文沒有明確提及,但對象與對象之間的匹配是必須的,任何2D對象跟蹤方法都可以使用。
點(diǎn)-對象匹配:未使用,通過檢測每個(gè)幀中每個(gè)對象的語義關(guān)鍵點(diǎn)來間接完成。
對象感知以及BA
相機(jī)-對象姿態(tài)圖和循環(huán)一致性
MoMoSLAM使用了不同的優(yōu)化公式。如上所述,MoMoSLAM沒有指定每個(gè)誤差項(xiàng)并使它們最小化,而是對位姿圖中創(chuàng)建的每個(gè)循環(huán)強(qiáng)制執(zhí)行一致性處理。但從本質(zhì)上講,這應(yīng)等效于平方誤差的最小化。
相機(jī)點(diǎn)誤差:與ORB-SLAM相同。由于單眼圖像的比例尺模糊,因此里程表按比例縮放。使用反透視映射(IPM)對地面區(qū)域進(jìn)行語義分割并在該區(qū)域中進(jìn)行特征點(diǎn)匹配,以估計(jì)3D深度,以此固定比例因子,并用于里程計(jì)中。
MoMoSLAM的公制里程估算
多對象姿態(tài)圖循環(huán)一致性誤差:姿態(tài)圖中的節(jié)點(diǎn)為估計(jì),姿態(tài)圖中的邊為度量。相機(jī)-相機(jī)邊緣是通過公制標(biāo)度里程限制的。攝像機(jī)車輛的邊緣通過2D到3D單幀提升來約束。車輛邊緣通過兩種不同的3D深度估算方法(IPM與2D到3D提升)進(jìn)行約束。但這里沒有顯式運(yùn)動(dòng)模型。
我覺得周期一致性存在人為的影響,尤其是車輛邊緣。添加一個(gè)錯(cuò)誤項(xiàng)以優(yōu)化IPM并提升2D到3D之間的距離估計(jì)一致性會(huì)更加直接。
效果
MoMoSLAM在固定單目度量標(biāo)準(zhǔn)的情況效果較好。這里在計(jì)算測距(相機(jī)姿勢)時(shí)不會(huì)考慮對象約束。
總結(jié)
DOS將對象檢測和跟蹤功能添加到3D SLAM中,并將對象的位姿和大小添加到后端優(yōu)化中。
CubeSLAM和ClusterVO共同優(yōu)化了相機(jī)姿態(tài)和物體姿態(tài)。恒定的對象大小和剛體運(yùn)動(dòng)作為附加約束可用于圖優(yōu)化。這將有助于在特征點(diǎn)較少的環(huán)境中計(jì)算相機(jī)姿態(tài)。相比之下,S3DOT和MoMoSLAM將在ORB-SLAM失敗的情況下失敗,因?yàn)樗鼈円蕾嘜RB-SLAM進(jìn)行相機(jī)姿態(tài)計(jì)算。
CubeSLAM和S3DOT將對象視為長方體,在自動(dòng)駕駛中更為實(shí)用。盡管ClusterVO非常通用,但是它并沒有運(yùn)用先驗(yàn)知識(shí),因此缺乏在3D對象檢測中實(shí)現(xiàn)SOTA性能的潛力。
當(dāng)無法獲取全球位置信息時(shí),CubeSLAM似乎是在自動(dòng)駕駛中執(zhí)行VIO的很好的選擇。
編輯:黃飛
?
評論