(八)ORBSLAM回環檢測之位置識別



 ORBSLAM2回環檢測簡介

  由於回環檢測模塊包含兩個部分的內容:其一是位置識別,即外觀驗證,通過圖像間的相似度信息進行判斷;其二是幾何驗證,通過回環候選幀與當前關鍵幀的幾何關系來做進一步驗證。

  由於兩部分內容都較為繁瑣,因此筆者將回環檢測模塊拆分成兩講,今天這一講主要介紹外觀驗證,下一講則繼續幾何驗證。

  外觀驗證,或者叫位置識別,實際上是一個圖像檢索的問題,即輸入圖像與地圖存儲的所有關鍵幀進行相似度比較,找出相似度分數最高的即是最優匹配。由於還有幾何驗證,因此在外觀驗證階段,通常會留下幾個相似度分數比較高的回環候選幀,以便幾何驗證選擇最合適的回環幀。

  這一講,我們主要分下面幾個部分來介紹外觀驗證:

  1. 詞袋模型;

  2. 圖像檢索; 


 詞袋模型

  在講圖像匹配的時候,我們曾提及詞袋模型,因為ORBSLAM2中的圖像匹配用到的詞袋模型,如果不稍微介紹一下,擔心大家不太理解它們是怎么匹配的。值得注意的是,如何能保證高效且准確地找到正確匹配是一個檢索問題的主要難題,而詞袋模型基本上能滿足這個要求。因此,本節將主要講講詞袋模型,之后再利用詞袋模型來介紹圖像檢索。

  詞袋的目的是用圖像的某些特征來描述一幅圖像。從我們人的直觀感覺來看圖像,我們會說這張照片里有一個人,一張桌子這些特征;而另一張照片里有一只狗,一張凳子和一張桌子等特征來描述。根據這些特征描述,我們就可以判斷這兩張圖像的相似性了。如果我們將上述這些描述內容整合成字典,讓他們形成一一映射的關系,比如:

  $v_{1}$ 表示人,$v_{2}$ 表示桌子,$v_{3}$ 表示凳子,$v_{4}$ 表示狗。那么這字典的形式可以表示成 $D = [ v_{1}, v_{2}, v_{3}, v_{4} ]$。

  而對於第一張照片,我們會表示成 $I_{1} = 1\cdot v_{1} + 1\cdot v_{2} + 0\cdot v_{3} + 0\cdot v_{4}$,於是我們就可以用一個向量來描述這個照片 $I_{1} = [ 1, 1, 0, 0 ]^{T}$;

  同理,第二張照片表示成 $I_{2} = 0\cdot v_{1} + 1\cdot v_{2} + 1\cdot v_{3} + 1\cdot v_{4}$,描述成向量形式 $I_{2} = [ 0, 1, 1, 1 ]^{T}$。

  對待這兩個向量,我們可以設定度量方式,就能得到兩張照片的相似度了。

  在這里,我們提到了字典的概念,也用到了字典的方法,但是它是怎么定義的,怎么生成的?我們需要再稍微介紹一下。

  ----------字典------------

  按照前面的介紹,字典是由很多單詞組成,每一個單詞代表一個概念。一個單詞代表的不單單是一個特征點,他是一類具有相似性的特征的組合,或者更明確的說是它們的聚類中心。因此,字典的生成問題就類似於一個聚類問題。

  聚類問題在無監督機器學習中非常常見,詞袋模型主要使用經典的K-means算法來進行特征的聚類,假設有 $N$ 個特征點,我們需要將他分成 $k$ 類,下面的樣本就表示特征點,具體流程如下:

  1. 隨機選取 $k$ 個中心點:$c_{1}, \cdots, c_{k}$;

  2. 對每個樣本,計算它和每個中心點之間的距離,取最小的作為它的歸類;

  3. 重新計算每個類的中心點;

  4. 如果每個中心點都變化很小,則算法收斂,退出;否則返回第2步。

  但是在SLAM問題中,需要面對的場景非常多,特征的種類也非常多,如果只是非常籠統地將其分成幾大類,這種做法顯然是不夠准確地。因此有學者提出了 $k$ 叉樹的概念,類似於層次聚類,是K-means的直接拓展。同樣,假設我們有 $N$ 個特征點,希望構建一個深度為 $d$,每次分叉為 $k$ 的樹,那么做法如下:

  1. 在根節點,即 $N$ 個特征點的集合,用K-means把所有樣本聚成 $k$ 類,這樣就得到了第一層;

  2. 對第一層的每個節點,把屬於把節點的樣本再聚成 $k$ 類,得到下一層;

  3. 以此類推,最后得到葉子層,葉子層即為所謂的詞匯。

  這些詞匯就跟我們前面所講的那個例子差不多,比如桌子只是其中一個詞匯。當然,這里只是舉例說明而已,這里的每一個詞匯都是多個相似特征聚類而成的聚類中心,直接表征多個相似特征。更直觀一些可以看下面這個圖,盡管我們在圖像匹配的時候看過,但是加上這里的描述,相信你可以更好地理解 $k$ 叉樹是個什么東西。

  

   我們在葉子層構建了單詞,樹結構中的中間節點僅供快速查找時使用。實際上,我們構造了一個深度為2,3個分支的樹,可以容納 $3^{2}$ 個單詞。我們可以通過增加樹的深度和分支來增加字典的規模,達到更好的分類效果,這可以達到我們需要的准確率。此外,在檢索時,一個特征會與逐層的中間節點的聚類中心比較,最終找到最優的匹配詞匯,這個檢索過程能達到對數級別的查找效率。


 圖像檢索

  在介紹了詞袋模型這個工具以后,我們的圖像檢索問題就簡單很多了。

  檢索問題的描述其實很簡單:

  輸入一幀圖像,和已有的數據庫圖像逐一對比,找到一個最合適的或者說匹配分數最高的圖像。

  筆者這里直接介紹ORBSLAM2的外觀識別流程,因為它的意義是如此直觀,只是在實現的時候加了一些小技巧,筆者將其羅列出來,以便大家參考:

  1. 利用一范數來度量當前幀與共視圖關鍵幀之間的相似度分數,假設共視圖中一個關鍵幀的BOW向量為 $w$,當前幀的BOW向量為 $v$,則相似度分數的度量方式為:

    $s(w-v) = 2\sum\limits_{i=1}^{N}\left|w_{i}\right| + \left|v_{i}\right| - \left|w_{i}-v_{i}\right|$

  將所有相似分數進行排序,取最小的匹配分數 $S_{min}$ 作為參考值,用於查找回環候選幀。

  2. 確定最小匹配分數后,排除當前幀共視圖的所有關鍵幀,我們回環的意義是確定當前相機看到的場景,在很久之前是不是見過。而近期看到的,比如當前幀的共視圖關鍵幀,我們通常是不考慮的,因為這對校正整個場景的誤差,實際上作用不大。

  3. 對當前幀的BOW向量中的詞匯逐個逆向索引在地圖中找到相關聯的關鍵幀,參考下圖。並統計各個關鍵幀中與當前幀相似的詞匯數量。排序確定最大的相似詞匯數量 $M$,並篩選相似詞匯數量大於$0.8\times M$的關鍵幀作為候選幀 $KF_{can}^{1}$;

  

  4. 將當前幀與步驟3的候選幀進行BOW向量計算匹配分數,取匹配分數高於步驟1計算的最小匹配分數 $S_{min}$的候選幀作為新的候選幀 $KF_{can}^{2}$;

  5. 統計候選幀集中 $KF_{can}^{2}$ 每個候選幀的共視圖關鍵幀與當前幀的BOW匹配分數總和 $S_{total}$,並取分數總和大於 $0.75\times S_{total}$的候選幀組成新的候選幀 $KF_{can}^{3}$。筆者理解這也是為了確保在一個范圍里都能檢測到回環,增強回環的可靠性。

  6. 在上述候選幀 $KF_{can}^{3}$ 的基礎上,我們檢測連續三幀都識別到同一個回環,那么就可以進一步縮小候選幀集,形成最終的候選幀集 $KF_{can}^{final}$ ,這在ORBSLAM2中叫一致性驗證。

  至此,我們的外觀驗證已經完成了。從步驟1開始到步驟6,ORBSLAM2都是在不斷提高篩選條件進而縮小候選幀集。可以想見,這是在利用詞袋模型檢索和匹配效率極高的優勢,快速完成粗檢索,精細化的部分再交由幾何驗證去進一步確定最終的候選幀。


 總結:

  在這一講中,我們概述了ORBSLAM2中采用的回環檢測方法,並着重講解了其中的外觀驗證方法,包括:

  詳細介紹了詞袋模型的結構,以及生成方法;

  詳細羅列了ORBSLAM2中的視覺驗證中所采用的檢索方法;

  下一講,我們將繼續回環檢測方法中的另一部分——幾何驗證。

碎碎念:  

  筆者這種記錄綱領的方法,在很多讀者看來可能是一個記流水賬的過程,十分枯燥。但是筆者還是同其他博主一樣,優先寫出對應模塊的關鍵技術,再進一步分析ORBSLAM2中用這種關鍵技術,怎么樣做優化,怎么樣完成它想要完成的功能。

  筆者認為這種列提綱的方式,可以幫助大家對這些細小的方法有一個清晰的認識。筆者之前就困惑於如何提高位置識別的准確性,而ORBSLAM2中這多種篩選方法可以給筆者提供多種參考方案。因此,筆者想傳遞給大家的也是這樣一個信息,羅列提綱的方式可以為大家提供的是ORBSLAM2中某個模塊采用的各種方法,讀者可以根據實際需要選擇提綱中的任意一個或多個組合的方法完成自己想要的功能。若是本文能對讀者產生一兩點幫助,那筆者將是十分欣慰的。

PS:

  如果您覺得我的博客對您有所幫助,歡迎關注我的博客。此外,歡迎轉載我的文章,但請注明出處鏈接。

  對本文有任何問題可以在留言區進行評論,也可以在泡泡機器人論壇:http://paopaorobot.org/bbs/index.php?c=cate&fid=1中的SLAM技術交流模塊發帖提問。

  我的github鏈接是:https://github.com/yepeichu123/orbslam2_learn

  

    


免責聲明!

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



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