1. 程式人生 > >SLAM筆記(七)迴環檢測中的詞袋BOW

SLAM筆記(七)迴環檢測中的詞袋BOW

1.詞頻

(摘自阮一峰部落格,參見附錄參考)
如果某個詞很重要,它應該在這篇文章中多次出現。於是,我們進行”詞頻”(Term Frequency,縮寫為TF)統計。考慮到文章有長短之分,為了便於不同文章的比較,進行”詞頻”標準化。一般分母設定為文章總的詞數或者出現最頻繁的那個詞的出現次數。比如:

TF=

對於一篇《中國的蜜蜂養殖》
但 出現次數最多的詞—-“的”、”是”、”在”—-這一類最常用的詞。它們叫做”停用詞”(stop words),表示對找到結果毫無幫助、必須過濾掉的詞。

另一個問題,我們可能發現”中國”、”蜜蜂”、”養殖”這三個詞的出現次數一樣多。這是不是意味著,作為關鍵詞,它們的重要性是一樣的?
顯然不是這樣。因為”中國”是很常見的詞,相對而言,”蜜蜂”和”養殖”不那麼常見。如果這三個詞在一篇文章的出現次數一樣多,有理由認為,”蜜蜂”和”養殖”的重要程度要大於”中國”,也就是說,在關鍵詞排序上面,”蜜蜂”和”養殖”應該排在”中國”的前面。

最常見的詞(”的”、”是”、”在”)給予最小的權重,較常見的詞(”中國”)給予較小的權重,較少見的詞(”蜜蜂”、”養殖”)給予較大的權重。這個權重叫做”逆文件頻率”(Inverse Document Frequency,縮寫為IDF),它的大小與一個詞的常見程度成反比。

IDF=log+1

知道了”詞頻”(TF)和”逆文件頻率”(IDF)以後,將這兩個值相乘,就得到了一個詞的TF-IDF值:

TFIDF=TFIDF
如果某個詞相對來說不是很常見的詞,但是它在這篇文章中多次出現,那麼它很可能就反映了這篇文章的特性,正是我們所需要的關鍵詞。

評價(阮一峰)


TF-IDF演算法的優點是簡單快速,結果比較符合實際情況。缺點是,單純以”詞頻”衡量一個詞的重要性,不夠全面,有時重要的詞可能出現次數並不多。而且,這種演算法無法體現詞的位置資訊,出現位置靠前的詞與出現位置靠後的詞,都被視為重要性相同,這是不正確的。(一種解決方法是,對全文的第一段和每一段的第一句話,給予較大的權重。)

2.詞袋

2.1 普通詞袋

1:Bob likes to play basketball, Jim likes too.

2:Bob also likes to play football games.

基於這兩個文字文件,構造一個詞典:

Dictionary = {1:”Bob”, 2. “likes”, 3. “to”, 4. “play”, 5. “basketball”, 6. “also”, 7. “football”, 8. “games”, 9. “Jim”, 10. “too”}

這個詞典一共包含10個不同的單詞,利用詞典的索引號,上面兩個文件每一個都可以用一個10維向量表示(用整數數字0~n(n為正整數),元素表示某個單詞在文件中出現的次數):
1:[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]
2:[1, 1, 1, 1 ,0, 1, 1, 1, 0, 0]
實際處理時,每個單詞的元素是其逆文字頻率。
度量兩袋詞的相似度
兩篇文章的相似度一般用其餘弦相似度來衡量

2.2視覺詞袋

詞袋則是將該處的單詞換成特徵描述子表示。
對描述子聚類(如K類)後,可以用一個K維度向量表示該圖:
每個單詞的元素是其逆文字頻率。
構建視覺詞袋的步驟:

  • 1.先對一影象集合 檢測特徵,形成特徵描述量。2.通過對描述子進行聚類來形成詞典,比如用層次Kmeans來形成一個詞彙樹(Vocabulary Tree),每個節點下的描述子集相近,可以認為同一個節點下的這些描述子是一個視覺單詞(當然更頂層的表示越的影象越複雜)。如一個三層的每層聚類4的詞彙樹,可以形成4個維度的詞向量,也可以形成16個維度的詞向量,我們這兒只使用4個維度的粗表示。
  • 對影象集中的每張影象,提取其對應特徵描述量進行分類,然後得到分別屬於四個類的描述子個數。即得到一個四維度的向量,歸一化該向量,則將該影象表示成一個4維的向量。
  • 將張影象都如上述表示成4維向量,則可以根據向量相似度知道每兩張影象之間的相似度。

3.利用視覺詞袋做迴環檢測SLAM

3.1 迴環檢測中的視覺詞向量資料庫

一般提前訓練好詞典,設計成單詞樹,每個樹節點包含一個逆序索引資訊包,每幀影象包含一個順序索引資訊包。對一新進來的影象幀,將其中每個特徵點都從單詞樹根節點往下遍歷,取漢明距離最小的節點接著往下遍歷直到葉節點。最終同上,計算各個葉節點上的數目並形成第影象表達向量v。同時得到影象的順序索引,以便用於之後的迴環檢測。
這裡寫圖片描述
逆序索引:
對每個單詞節點,它儲存了逆序索引。所謂逆序索引,儲存的是影象的索引號,以及該單詞在對應影象中的權重(即逆文字頻率),這樣更容易找到該單詞最相關的影象。(由於對應影象多少差別,逆序索引序列有長有短)
容易想到,每進來一張影象,該資料庫包括逆序索引就需要更新。
如上圖,分成Lw層,0層代表葉子節點即單詞word所在的節點。該節點可能包含好多個特徵點。節點1的逆序索引的表示在圖68的逆文字頻率(權重)為0.79,在圖82的逆文字頻率為0.73

順序索引:
順序索引對於每張影象,儲存出現在影象中的每個特徵(word)對應的父節點;找到父節點後再把父節點下邊所有特徵也加入順序索引中。這樣在最後的幾何驗證階段就可以迅速找到兩幀之間的特徵匹配點對。需要為每張圖建立0-Lw所有層的順序索引。
如上圖,第l層中,圖1的順序索引有節點3,節點3下邊的所有特徵點在本影象中出現的只有本影象中第65個特徵點,其他順序索引同理。

3.2 迴環檢測中的影象比較與度量

兩影象的相似度為其向量的L1範數([0,1]):
這裡寫圖片描述
差異越大得分越小趨近於0;相似則趨近於1
當新的一幀到來,先計算其表達向量vt,隨後憑藉逆序索引得到一連串的相似影象,分別與每一張相似影象vtj的歸一化相似度:
這裡寫圖片描述
其中分母為當前幀與上一幀的L1範數。跳過整個分母不滿足最小閾值或上一幀的特徵點數目不滿足最小閾值的情況,來避免(諸如旋轉時)當前幀與上一幀差異度太大(差異度越大得分越小)
對這些歸一化相似度取一個合適的最小閾值取得

組匹配(Match grouping)
我們知道時間相近的幀在一定程度上是相似的,為了防止迴環檢測時與一大堆時間相近的幀匹配的相似度相差極小,因此當ni,ni+1,…,mi兩兩之間的時間都小於閾值時,幀相似度進一步轉變成組相似度:
如果組相似度得分高於閾值,則選為組匹配並流入下一時間一致性步驟:
這裡寫圖片描述
如果Vt’是最佳,則檢查:
這裡寫圖片描述
即如果該組相似度成立,那麼當前幀的前一幀和最佳匹配的前一幀也應該成立….前k幀和最佳匹配前k幀也成立的話,則取出則k幀中最佳的一對(應該就是當前幀與最佳匹配)

幾何一致有效性
對迴環檢測到的影象對進行幾何約束校驗。具體細節論文[3]沒有細說,但基本邏輯應該是先計算一個基礎矩陣F,再根據F驗證滿足d(x1,F,x2)小於某閾值(即滿足集合約束)的點對(x1,x2)佔所有特徵點的比例是否足夠高。
上述過程中,首先需要得帶特徵點對。先提取當前幀It的特徵,再由順序索引查找出匹配幀It’中所有l(l由所需特徵數目決定)層中的節點,將這兩張影象相同節點下的特徵分別進行匹配。

在這些匹配點挑選12個點對生成一個基礎矩陣,並利用RANSAC演算法不斷優化這個基礎矩陣。最後利用這個基礎矩陣來驗證

有時也採用投票機制選取候選者,加速搜尋。

參考並致謝:

1.TF-IDF與餘弦相似性的應用(一):自動提取關鍵詞
2.淺談迴環檢測中的詞袋模型(bag of words)
3. Gálvez-López D, Tardós J D. Real-time loop detection with bags of binary words[C]// Ieee/rsj International Conference on Intelligent Robots and Systems. IEEE, 2011:51-58.