什么是回環(huán)檢測? 在講解回環(huán)檢測前,我們先來了解下回環(huán)的概念。在視覺SLAM問題中,位姿的估計往往是一個遞推的過程,即由上一幀位姿解算當(dāng)前幀位姿,因此其中的誤差便這樣一幀一幀的傳遞下去,也就是我們所說的累計誤差。 我們的位姿約束都是與上一幀建立的,第五幀的位姿誤差中便已經(jīng)積累了前面四個約束中的誤差。但如果我們發(fā)現(xiàn)第五幀位姿不一定要由第四幀推出來,還可以由第二幀推算出來,顯然這樣計算誤差會小很多,因為只存在兩個約束的誤差了。像這樣與之前的某一幀建立位姿約束關(guān)系就叫做回環(huán)。回環(huán)通過減少約束數(shù),起到了減小累計誤差的作用。 那么我們怎么知道可以由第二幀推算第五幀位姿呢?也許第一幀、第三幀也可以呢。確實,我們之所以用前一幀遞推下一幀位姿,因為這兩幀足夠近,肯定可以建立兩幀的約束,但是距離較遠的兩幀就不一定可以建立這樣的約束關(guān)系了。找出可以建立這種位姿約束的歷史幀,就是回環(huán)檢測。
回環(huán)檢測的意義 有了前端的視覺里程計及后端優(yōu)化的SLAM系統(tǒng),似乎已經(jīng)比較好用了。但其在提高實時性的同時精度卻降低了,一旦精度降低,又會面臨長時間累計誤差的問題,特別是像ORB-SLAM那樣只做局部地圖優(yōu)化的方案。我們該如何平衡這個矛盾呢? 我們不妨先思考下,在一個陌生的環(huán)境中,我們?nèi)祟愂侨绾芜M行環(huán)境地圖的建立?在局部區(qū)域,人不斷的移動從而在腦海中建造增量式地圖,時間長了大部分人也分不清東南西北了,與起始點的關(guān)系又如何。假如人正巧回到了之前路過的位置,在對環(huán)境足夠敏感的情況下,他就能發(fā)現(xiàn)這個事實,從而修正自己之前對方位的判斷。我們說,此時檢測到了一個回環(huán),顯然,人可以通過面前看到的景象與腦海中殘缺的印象來對比從而檢測到回環(huán)的,對于SLAM來說也可以通過對比當(dāng)前幀與過去關(guān)鍵幀的相似度,如相似度超過某一閥值時就可以被認為是檢測到回環(huán)。 現(xiàn)在,問題的關(guān)鍵就在于如何判斷兩幀圖片的相似度。最直觀的做法是特征匹配,比較匹配的數(shù)量是否足夠多。但由于特征匹配非常耗時,回環(huán)檢測需要與過去所有關(guān)鍵幀匹配,這個運算量是絕對無法承受的。因此,有人提出了詞袋模型,用來加速特征匹配。
什么是詞袋模型? 詞袋模型就是把特征看成是一個個單詞,通過比較兩張圖片中單詞的一致性,來判斷兩張圖片是否屬于同一場景。 為了能夠把特征歸類為單詞,我們需要訓(xùn)練一個字典。所謂的字典就是包含了所有可能的單詞的集合,為了提高通用性,需要使用海量的數(shù)據(jù)訓(xùn)練。 字典的訓(xùn)練其實是一個聚類的過程。假設(shè)所有圖片中共提取了10,000,000個特征,可以使用K-means方法把它們聚成100,000個單詞。但是,如果只是用這100,000個單詞來匹配的話效率還是太低,因為每個特征需要比較100,000次才能找到自己對應(yīng)的單詞。為了提高效率,字典在訓(xùn)練的過程中構(gòu)建了一個k個分支,深度為d的樹,如下圖所示。直觀上看,上層結(jié)點提供了粗分類,下層結(jié)點提供了細分類,直到葉子結(jié)點。利用這個樹,就可以將時間復(fù)雜度降低到對數(shù)級別,大大加速了特征匹配。
1.jpg (26.78 KB, 下載次數(shù): 58)
下載附件
2018-10-23 17:35 上傳
DBoW3庫 DBoW3庫為我們提供了非常方便的訓(xùn)練詞典和使用詞典的方法。 訓(xùn)練詞典時,只需要把所有訓(xùn)練用的圖片的描述符傳給DBoW3::Vocabulary的create方法就可以了。訓(xùn)練好的詞袋模型保存在vocabulary.yml.gz文件中。
2.png (38.41 KB, 下載次數(shù): 68)
下載附件
2018-10-23 17:35 上傳
接下來,使用訓(xùn)練好的詞袋模型對圖片計算相似性評分。DBoW3為我們提供了兩種計算相似性的方式,第一種是直接對兩張圖片比較;第二種是把圖片集構(gòu)造成一個數(shù)據(jù)庫,再與另一張圖片比較。
3.png (52.59 KB, 下載次數(shù): 60)
下載附件
2018-10-23 17:35 上傳
4.png (41.61 KB, 下載次數(shù): 72)
下載附件
2018-10-23 17:35 上傳
可以看出,圖片越相似,評分越接近1。我們可以根據(jù)這個評分來判斷兩張圖片是否是同一場景。但是直接給定一個絕對的閾值并不合適。通常,如果當(dāng)前幀與之前某幀的相似度超過當(dāng)前幀與上一個關(guān)鍵幀相似度的3倍,就認為可能存在回環(huán)。不過,這種做法要求關(guān)鍵幀之間的相似性不能太高,否則無法檢測出回環(huán)。
|