DBoW2 詞袋模型筆記


DBoW算法用於解決Place Recognition問題,ORB-SLAM,VINS-Mono等SLAM系統中的閉環檢測模塊均采用了該算法。來源於西班牙的Juan D. Tardos課題組。

主要是基於詞袋模型(BoW)https://en.wikipedia.org/wiki/Bag-of-words_model_in_computer_vision。在10000張train image圖像數據庫中找到query image的匹配圖像耗時<39ms,並有較高的召回率和較低的false positive。

理解詞袋模型最重要的是要明白什么叫特征向量?什么叫一個視覺單詞?又是什么叫詞袋向量?

特征向量 - 單個視覺特征描述子

視覺單詞 - 詞典中的聚類中心,帶有權重的單個視覺特征描述子

詞袋向量 - 一張圖片用詞袋中每個單詞是否出現(+ 出現的次數 + TF-DF)組合而成的向量(體現多個視覺特征描述子)

沒看懂?請看下面

一. 主要步驟:

構建字典(Vocabulary):將圖像數據庫轉換為索引圖(k叉樹)

template<class TDescriptor, class F>
class TemplatedDatabase
{
  ...
};

近似最近鄰(ANN)搜索:將一張圖片中特征的描述子通過在k叉樹種搜索轉換為視覺單詞(visual word),多個視覺單詞組成詞袋向量(BoW Vector)

template<class TDescriptor, class F>
class TemplatedVocabulary
{
  ...
};

二. 具體算法:

1. 離線步驟 - 構建字典(聚類問題,也稱為無監督分類):

  • 主要采用K-means算法,將用於訓練的圖像數據庫中的視覺特征(DBoW3中支持ORB和BRIEF兩種二進制描述子)歸入k個簇(cluster)中,每一個簇通過其質心(centroid)來描述,聚類的質量通常可以用同一個簇的誤差平方和(Sum of Squared Error,SSE)來表示,SSE越小表示同一個簇的數據點越接近於其質心,聚類效果也越好。這里的“接近”是使用距離度量方法來實現的,不同的距離度量方法也會對聚類效果造成影響(后面會提到)。K-means優點是容易實現,缺點是在大規模數據集上收斂較慢,並且可能收斂到局部最小,造成該簇沒有代表性。對於描述子這種高維空間的大規模聚類,粗暴使用K-means會有問題。因此會使用其變種Hierarchical K-means或者K-means++。

將訓練圖像數據庫中所有N個描述子分散在一個k分支,d深度的k叉樹的葉子節點上,如下圖,分支數為3,深度為Lw,這樣一個樹結構有葉子結點3Lw個。可以根據場景大小,需要達到的效果修改k和d的數值。這樣query image進來檢索時,可以通過對數時間的復雜度(d次 = logN)找到其對應的聚類中心,而不是使用O(n)的時間復雜度的暴力檢索。

然后,為了提高檢索時的效率、成功率以及准確率,還采用了下述算法

  • 倒排索引(Inverse Index)
  • 正排索引(Direct Index)
  • TF-IDF(Term Frequency - Inverse Document Frequency)

2. 在線步驟 - 近似最近鄰檢索(ANN Retrieval)

由於ORB和BRIEF描述子均為二進制,因此距離度量采用漢明距離(二進制異或計算)。query image的描述子通過在字典的樹上檢索(找到最近鄰的葉子節點)視覺單詞,組成一個詞袋向量(BoW vector),然后進行詞袋向量之間的相似度計算,得到可能匹配的ranking images。最后還需要利用幾何驗證等方法選出正確(只是概率最大。。。)的那張圖片。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM