本文做者任旭倩,公衆號:計算機視覺life成員,因爲格式緣由,公式顯示可能出問題,建議閱讀原文連接:綜述 | SLAM迴環檢測方法
在視覺SLAM問題中,位姿的估計每每是一個遞推的過程,即由上一幀位姿解算當前幀位姿,所以其中的偏差便這樣一幀一幀的傳遞下去,也就是咱們所說的累積偏差。一個消除偏差有效的辦法是進行迴環檢測。迴環檢測判斷機器人是否回到了先前通過的位置,若是檢測到迴環,它會把信息傳遞給後端進行優化處理。迴環是一個比後端更加緊湊、準確的約束,這一約束條件能夠造成一個拓撲一致的軌跡地圖。若是可以檢測到閉環,並對其優化,就可讓結果更加準確。html
在檢測迴環時,若是把之前的全部幀都拿過來和當前幀作匹配,匹配足夠好的就是迴環,但這樣會致使計算量太大,匹配速度過慢,並且沒有找好初值的狀況下,須要匹配的數目很是巨大。所以迴環檢測是SLAM問題的一個難點,針對這個問題,在這裏咱們總結幾種經典的方法供你們參考。python
簡介:現有的SLAM系統中比較流行的迴環檢測方法是特徵點結合詞袋的方法(如ORB-SLAM,VINS-Mono)等。基於詞袋的方法是預先加載一個詞袋字典樹,通知這個預加載的字典樹將圖像中的每一局部特徵點的描述子轉換爲一個單詞,字典裏包含着全部的單詞,經過對整張圖像的單詞統計一個詞袋向量,詞袋向量間的距離即表明了兩張圖像之間的差別性。在圖像檢索的過程當中,會利用倒排索引的方法,先找出與當前幀擁有相同單詞的關鍵幀,並根據它們的詞袋向量計算與當前幀的類似度,剔除類似度不夠高的圖像幀,將剩下的關鍵幀做爲候選關鍵幀,按照詞袋向量距離由近到遠排序[1]。linux
字典、單詞、描述子之間的關係是:
\[ 字典\supset單詞 \supset 差距較小的描述子的集合 \]
所以,可將基於詞袋模型的迴環檢測方法分爲如下三個步驟[2]:c++
1.提取特徵git
2.構建字典(全部單詞的集合)
\[ D=\left(\omega_{1}, \omega_{2}, \omega_{3} \dots \omega_{n-1}, \omega_{n}\right) \]
3.肯定一幀中具備哪些單詞,造成詞袋向量 (1表示具備該單詞,0表示沒有)
\[ F=1 \cdot \omega_{1}+0 \cdot \omega_{2}+0 \cdot \omega_{3}+\ldots+1 \cdot \omega_{n-1}+0 \cdot \omega_{n} \]
4.比較兩幀描述向量的差別。github
下面分模塊逐個介紹:算法
構建字典數據庫
至關於描述子聚類過程,能夠用K近鄰算法,或者使用已經探索過的環境中的特徵在線動態生成詞袋模型[3]。編程
(1)k近鄰算法windows
根據已經離線採集的圖像,提取特徵描述子,用k近鄰算法造成字典的流程是:
1.在字典中的多個描述子中隨機選取k箇中心點:
\[ c_{1}, \dots, c_{k} \]
2.對於每個樣本,計算它與每一箇中心點之間的距離,取最小的中心點做爲它的歸類。
3.從新計算每一個類的中心點。
4.若是每一箇中心點都變化很小,則算法收斂,退出,不然繼續迭代尋找。
每一個歸好的類就是一個單詞,每一個單詞由聚類後距離相近的描述子組成。
其餘相似方法還有層次聚類法、K-means++等。
Kmeans++算法是基於Kmeans改進而來,主要改進點在於中心點的初始化上,不像原始版本算法的隨機生成,它經過一些策略使得k個初始中心點彼此間距離儘可能地遠,以期得到這些中心點具備更好的表明性,有利於後面的分類操做的效果[8]。
Kmeans++算法中中心點初始化的流程以下:
1.從n個樣本中隨機選取一個點做爲第一個中心點;
2.計算樣本中每一個點和距離它最近的中心點之間的距離\(D_{i}\),根據策略選擇新的中心點
3.重複2直至獲得k箇中心點。
(2)在線動態生成詞袋模型:
傳統的BOW模型生成離線的字典,更靈活的方法是動態地建立一個字典,這樣沒有在訓練集中出現地特徵能夠被有效地識別出來。典型論文有[4],[5]。
在論文中將圖像識別中詞袋模型進行了擴展,並用貝葉斯濾波來估計迴環機率。迴環檢測問題涉及識別已建圖區域的困難,而全局定位問題涉及在現有地圖中檢索機器人位置的困難。當在當前圖像中找到一個單詞時,以前看到過這個單詞的圖片的tf-idf 分數將會更新。該方法根據探索環境時遇到的特徵動態地構建字典,以即可以有效識別訓練集中未表示的特徵的環境。
字典樹
由於字典太過龐大,若是一一查找匹配單詞,會產生很大的計算量,所以能夠用k叉樹的方式來表達字典,創建字典樹流程是這樣的[6]:
對應用場景下的大量訓練圖像離線提取局部描述符(words)(每張圖像可能會有多個描述符)
將這些描述符KNN聚成k類;
對於第一層的每一節點,繼續KNN聚成k類,獲得下一層;
按這個循環,直到聚類的層次數達到閾值d,葉子節點表示一個word,中間節點則是聚類的中心。
(圖源:視覺SLAM十四講)
然而創建詞袋的一個主要缺點是,它須要預先載入一個訓練好的詞袋字典樹,這個字典樹通常包含大量的特徵單詞,爲了保證有良好的區分能力,不然對圖像檢索結果有較大影響,可是這會致使這個字典文件比較大,對於一些移動應用來講會是一個很大的負擔。爲了解決這個問題,能夠經過動態創建k-d樹來避免預載入字典的麻煩。在添加關鍵幀的過程當中維護一個全局的k-d樹,將每一個特徵點以幀爲單位添加到這個k-d樹中。在圖像檢索過程當中,尋找最接近的節點進行匹配,根據匹配結果對每一個關鍵幀進行投票,得到的票數便可做爲該幀的分數,從而生成與當前幀類似的關鍵幀候選集[1]。
詞袋向量
關鍵幀和查詢幀的類似度是經過詞袋向量之間的距離來衡量的。假定一幅圖像I的局部描述符集合是[6]
\[ D_{I}=\left\{d_{1}, d_{2}, \cdots, d_{n}\right\} \]
每一個描述符\(d_{i}\)在字典樹中查找距離最近的word,假定其word_id爲\(j\),其對應的權重爲\(w_{j}\)。查找過程從字典樹的根節點開始,每一層都找距離最近的節點,而後下一層中繼續,直至到達葉子節點。
記詞表的大小爲\(|V|\),定義這個在字典樹中查找的映射爲
\[ V T(\cdot) : D \rightarrow\{1,2, \cdots,|V|\} \]
若是兩個描述符映射到同一個word,則權重相加,獲得一個定長的向量:
\[ V_{I}=\left\{v_{1}, v_{2}, \cdots, v_{j}, \cdots, v_{|V|}\right\} \]
其中
\[ v_{j}=\sum_{i, V T\left(d_{i}\right)=j} w_{j} \]
這樣在根據word查找關鍵幀時,就不用遍歷全部的關鍵幀,只要把查詢幀描述符映射的那些words索引的關鍵幀找到便可。
類似度計算
一些詞在用來識別兩個圖像是否顯示同一個地方比其餘詞更加有用,而有一些詞對識別貢獻不大,爲了區分這些詞的重要性,能夠爲每一個詞分配特定權重,常見方案是TF-IDF。它綜合了圖像中的詞的重要性(TF-Term Frequency)和收集過程當中詞的重要性(IDF-Inverse Document Frequency),用以評估一個詞對於一個文件或者一個語料庫中的一個領域文件集的重複程度。
對於單幅圖像,假設在單幅圖像中一共出現的單詞次數爲\(n\),某個葉子節點單詞\(w_{i}\)出現了\(n_{i}\)次,則TF爲[7]:
TF:某個特徵在單幅圖像中出現的頻率,越高則它的區分度就越高
\[ T F_{i}=\frac{n_{i}}{n} \]
在構建字典時,考慮IDF,假設全部特徵數量爲\(n\),葉子節點 \(w_{i}\)的數量爲\(n_{i}\),則IDF爲
IDF:某單詞在字典中出現的頻率越低,則區分度越低
\[ I D F_{i}=\ln \left(\frac{n}{n_{i}}\right) \]
則\(w_{i}\)的權重等於TF和IDF的乘積:
\[ \eta_{i}=T F_{i} \times I D F_{i} \]
考慮權重後,對於某個圖像\(A\),它的特徵點能夠對應不少單詞,組成它的詞袋:
\[ A=\left\{\left(w_{1}, \eta_{1}\right),\left(w_{2}, \eta_{2}\right), \ldots,\left(w_{N}, \eta_{N}\right)\right\} \triangleq v_{A} \]
這樣便用單個向量\(v_{A}\)描述了一個圖像\(A\),這個向量是一個稀疏向量,非零部分表明含有哪些單詞,這些值即爲TF-IDF的值。
獲得\(A\) 、\(B\) 兩幅圖像的\(v_{A}\)和\(v_{B}\)後,能夠經過\(L_{1}\)範式形式計算差別性:
\[ s\left(v_{A}-v_{B}\right)=2 \sum_{i=1}^{N}\left|v_{A i}\right|+\left|v_{B i}\right|-\left|v_{A i}-v_{B i}\right| \]
其中,\(v_{A i}\)表示只在\(A\)中有的單詞,\(v_{B i}\)表示只在\(B\)中有的單詞,\(v_{A i}-v_{B i}\)表示在\(A\)、\(B\)中都有的單詞。\(s\)越大,類似性越大,當評分\(s\)足夠大時便可判斷兩幀可能爲迴環。
此外,若是隻用絕對值表示兩幅圖像的類似性,在環境原本就類似的狀況下幫助並不大,所以,能夠取一個先驗類似度\(\boldsymbol{S}\left(\boldsymbol{v}_{t}, \boldsymbol{v}_{t-\Delta t}\right)\),它表示某時刻關鍵幀圖像與上一時刻關鍵幀的類似性,而後,其餘分之都參照這個值進行歸一化:
\[ s\left(\boldsymbol{v}_{t}, \boldsymbol{v}_{t_{j}}\right)^{\prime}=s\left(\boldsymbol{v}_{t}, \boldsymbol{v}_{t_{j}}\right) / s\left(\boldsymbol{v}_{t}, \boldsymbol{v}_{t-\Delta t}\right) \]
所以,能夠定義若是當前幀與以前某關鍵幀的類似度,超過當前幀與上一關鍵幀類似度的3倍,就認爲可能存在迴環。
此外,還有其餘的方法,分爲局部(Squared TF, Frequency logarithm, Binary,BM25 TF等等)和全局(Probabilistic IDF, Squared IDF)等,感興趣能夠繼續搜索。
迴環驗證
詞袋模型的另外一個問題是它並不徹底精確,會出現假陽性數據。在迴環檢測檢索的後期階段須要用其餘方法加以驗證。若是當前跟蹤已經徹底丟失,須要重定位給出當前幀的位姿來調整。在重定位的驗證中,使用空間信息進行篩選,可使用PnP進行後驗校訂,或者使用條件隨機場。這個驗證能夠去掉那些和參考圖像不符合幾何一致性的圖像[3]。獲得準確的圖像匹配後,能夠根據匹配結果去求解相機位姿。
若是系統跟蹤正常,發現了以前訪問過的場景,須要進行迴環檢測添加新約束。基於詞袋的迴環檢測方法只在意單詞有無,不在意單詞的排列順序,會容易引起感知誤差,此外,詞袋迴環徹底依賴於外觀而沒有利用任何的幾何信息,會致使外觀類似的圖像容易被看成迴環,所以須要加一個驗證步驟,驗證主要考慮如下三點[1]:
1)不與過近的幀發生迴路閉合若是關鍵幀選得太近,那麼致使兩個關鍵幀之間的類似性太高,檢測出的迴環意義不大,因此用於迴環檢測的幀最好是稀疏一些,彼此之間不太相同,又能涵蓋整個環境[7]。且爲了不錯誤的迴環,某一位姿附近連續屢次(ORB-SLAM中爲3次)與歷史中某一位姿附近出現迴環才判斷爲迴環;迴環候選幀仍然要匹配,匹配點足夠才爲迴環。
2)閉合的結果在必定長度的連續幀上都是一致的。若是成功檢測到了迴環,好比說出如今第1 幀和第\(n\) 幀。那麼極可能第\(n+1\) 幀,\(n+2\) 幀都會和第1 幀構成迴環。可是,確認第1 幀和第\(n\) 幀之間存在迴環,對軌跡優化是有幫助的,但再接下去的第\(n + 1\) 幀,\(n + 2\) 幀都會和第1 幀構成迴環,產生的幫助就沒那麼大了,由於已經用以前的信息消除了累計偏差,更多的迴環並不會帶來更多的信息。因此,咱們會把「相近」的迴環聚成一類,使算法不要反覆地檢測同一類的迴環。
3)閉合的結果在空間上是一致的。便是對迴環檢測到的兩個幀進行特徵匹配,估計相機的運動,再把運動放到以前的位姿圖中,檢查與以前的估計是否有很大出入。
這個庫已經很舊了,簡要介紹:DBow庫是一個開源C ++庫,用於索引圖像並將圖像轉換爲詞袋錶示。它實現了一個分層樹,用於近似圖像特徵空間中的最近鄰並建立可視詞彙表。DBow還實現了一個基於逆序文件結構的圖像數據庫,用於索引圖像和快速查詢。DBow不須要OpenCV(演示應用程序除外),但它們徹底兼容。
源碼地址:https://github.com/dorian3d/DBow
DBoW2是DBow庫的改進版本,DBoW2實現了具備正序和逆序指向索引圖片的的圖像數據庫,能夠實現快速查詢和特徵比較。與之前的DBow庫的主要區別是:
DBoW2須要OpenCV和Boost::dynamic_bitset
類才能使用BRIEF版本。
DBoW2和DLoopDetector已經在幾個真實數據集上進行了測試,執行了3毫秒,能夠將圖像的簡要特徵轉換爲詞袋向量量,在5毫秒能夠在數據庫中查找圖像匹配超過19000張圖片。
源碼地址:https://github.com/dorian3d/DBoW2
DBoW3是DBow2庫的改進版本,與之前的DBow2庫的主要區別是:
源碼地址:https://github.com/rmsalinas/DBow3
FBOW(Fast Bag of Words)是DBow2 / DBow3庫的極端優化版本。該庫通過高度優化,可使用AVX,SSE和MMX指令加速Bag of Words建立。在加載詞彙表時,fbow比DBOW2快約80倍(參見tests目錄並嘗試)。在使用具備AVX指令的機器上將圖像轉換爲詞袋時,它的速度提升了約6.4倍。
源碼地址:https://github.com/rmsalinas/fbow
是一種基於外觀識別場所問題的機率方法。咱們提出的系統不只限於定位,而是能夠肯定新觀察來自之前看不見的地方,從而增長其地圖。實際上,這是一個外觀空間的SLAM系統。咱們的機率方法容許咱們明確地考慮環境中的感知混疊——相同但不明顯的觀察結果來自同一地點的可能性很小。咱們經過學習地方外觀的生成模型來實現這一目標。經過將學習問題分紅兩部分,能夠僅經過對一個地方的單個觀察來在線學習新地點模型。算法複雜度在地圖中的位置數是線性的,特別適用於移動機器人中的在線環閉合檢測。
源碼地址:https://github.com/arrenglover/openfabmap
c++版本
博客介紹:https://nicolovaligi.com/bag-of-words-loop-closure-visual-slam.html
源碼地址:https://github.com/nicolov/simple_slam_loop_closure
python版本
Loop Closure Detection using Bag of Words
源碼地址:https://github.com/pranav9056/bow
matlab:
博客介紹:http://www.jaijuneja.com/blog/2014/10/bag-words-localisation-mapping-textured-scenes/
源碼地址:https://github.com/jaijuneja/texture-localisation-matlab
ORB-SLAM
源碼地址:https://github.com/raulmur/ORB_SLAM
ORB-SLAM2
源碼地址:https://github.com/raulmur/ORB_SLAM2
VINS-Mono
https://github.com/HKUST-Aerial-Robotics/VINS-Mono
kintinous
https://github.com/mp3guy/Kintinuous
[1] 鮑虎軍,章國峯 ,秦學英.加強現實:原理、算法與應用[M].科學出版社:北京,2019:114-115.
[2] https://zhuanlan.zhihu.com/p/45573552
[3] J. Fuentes-Pacheco, J. Ruiz-Ascencio, and J. M. Rendón-Mancha, 「Visual simultaneous localization and mapping: a survey,」 Artif Intell Rev, vol. 43, no. 1, pp. 55–81, Jan. 2015.
[4] A. Angeli, S. Doncieux, J.-A. Meyer, and D. Filliat, 「Real-time visual loop-closure detection,」 in 2008 IEEE International Conference on Robotics and Automation, Pasadena, CA, USA, 2008, pp. 1842–1847.
[5] T. Botterill, S. Mills, A. Ltd, and C. St, 「Bag-of-Words-driven Single Camera Simultaneous Localisation and Mapping,」 p. 28.
[6] https://www.zhihu.com/question/49153462
[7] 高翔,張濤.視覺SLAM十四講[M].電子工業出版社,2017:306-316.
[8] https://blog.csdn.net/lwx309025167/article/details/80524020
這種重定位方法將相機的每一幀壓縮編碼,而且有效的對不一樣幀之間類似性進行評估。而壓縮編碼的方式採用隨機蕨法。在這個基於關鍵幀的重定位方法中,採用基於fern的幀編碼方式:輸入一個RGB-D圖片,在圖像的隨機位置評估簡單的二進制測試,將整個幀進行編碼,造成編碼塊,每一個fern產生一小塊編碼,而且編碼鏈接起來能夠表達一個緊湊的相機幀。每個編碼塊指向一個編碼表的一行,和具備等效的編碼、存儲着關鍵幀id的fern關聯起來,編碼表以哈希表的形式存儲。
當不斷採集新的圖片時,若是不類似性大於閾值,新進來的幀的id將會被添加到行中。在跟蹤恢復的時候,從哈希表中檢索姿態,將最類似的關鍵幀關聯起來。一個新的幀和以前全部編碼幀之間的不類似程度經過逐塊漢明距離(BlockHD)來度量。
\[ \operatorname{BlockHD}\left(b_{C}^{I}, b_{C}^{J}\right)=\frac{1}{m} \sum_{k=1}^{m} b_{F_{k}}^{I} \equiv b_{F_{k}}^{J} \]
當返回值是0時,兩個編碼塊是類似的。當返回值是1時,表明至少有一位不一樣。所以,BlockHD表明不一樣編碼塊的個數。塊的長短不一樣,會直接影響到BlockHD在找類似幀時的精度/召回性質。判斷一張圖片是否知足足夠的類似性須要設定一個最小BlockHD, 對於每一張新來的幀,計算
\[ \kappa_{I}=\min _{\forall J} \mathrm{B} \operatorname{lockHD}\left(b_{C}^{I}, b_{C}^{J}\right)=\min _{\forall J}\left(\frac{m-q_{I J}}{m}\right) \]
\(\kappa_{I}\)表示新的一個幀提供了多少有用的信息,若是新的一幀\(\kappa_{I}\)值很低,表明該幀和以前的幀很類似,若是\(\kappa_{I}\)值高,表示這個姿態是從一個新的視角拍攝的,理應被存爲關鍵幀。經過這樣的觀測,能夠試試捕獲追蹤幀,而且自動決定哪些應該被存爲關鍵幀。經過值\(\kappa_{I}\)和一個實現肯定好的閾值\(t\),能夠決定新來的一幀是應該添加到哈希表中,仍是被剔除。這種找到關鍵幀並檢索位姿的方法能夠有效的減小三維重建的時間,而且適用於目前開源的slam算法。
Random Fern在VSLAM中的應用
kinect fusion
https://github.com/Nerei/kinfu_remake
elastic fusion
https://github.com/mp3guy/ElasticFusion
PTAM
PTAM中的重定位方法和random ferns很像。PTAM是在構建關鍵幀時將每一幀圖像縮小並高斯模糊生成一個縮略圖,做爲整張圖像的描述子。在進行圖像檢索時,經過這個縮略圖來計算當前幀和關鍵幀的類似度。這種方法的主要缺點是當視角發生變化時,結果會發生較大的誤差,魯棒性不如基於不變量特徵的方法。
https://github.com/Oxford-PTAM/PTAM-GPL
[1] B. Glocker, S. Izadi, J. Shotton, and A. Criminisi, 「Real-time RGB-D camera relocalization,」 in 2013 IEEE International Symposium on Mixed and Augmented Reality (ISMAR), Adelaide, Australia, 2013, pp. 173–179.
[2] B. Glocker, J. Shotton, A. Criminisi, and S. Izadi, 「Real-Time RGB-D Camera Relocalization via Randomized Ferns for Keyframe Encoding,」 IEEE Trans. Visual. Comput. Graphics, vol. 21, no. 5, pp. 571–583, May 2015.
[3] https://blog.csdn.net/fuxingyin/article/details/51436430
基於深度學習的圖像檢索方法是全局檢索方法,須要大量的數據進行預訓練,但對場景變化容忍度好。一些端到端的相機位姿估計方法取得了不錯的成果。深度學習和視覺定位結合的開創性工做PoseNet就使用的是神經網絡直接從圖像中獲得6自由度的相機位姿。相較於傳統的視覺定位方法,省去了複雜的圖像匹配過程,而且不須要對相機位姿進行迭代求解,可是輸入圖像必須在訓練場景中。後來在此基礎上,他們又在偏差函數中使用了投影偏差,進一步提升了位姿估計的精度。一樣,MapNet使用了傳統方法求解兩張圖象的相對位姿,與網絡計算出來的相對位姿對比獲得相機的相對位姿偏差,將相對位姿偏差添加到網絡的損失函數中,使得求解出來的相機位姿更加平滑,MapNet還能夠將連續多幀的結果進行位姿圖優化,使得最終估計出的相機位姿更爲準確。
基本都是用周博磊的Places365
原理介紹:Places365是Places2數據庫的最新子集。Places365有兩個版本:Places365-Standard和Places365-Challenge。Places365-Standard的列車集來自365個場景類別的約180萬張圖像,每一個類別最多有5000張圖像。咱們已經在Places365-Standard上訓練了各類基於CNN的網絡,並將其發佈以下。同時,一系列的Places365-Challenge列車還有620萬張圖片以及Places365-Standard的全部圖片(總共約800萬張圖片),每一個類別最多有40,000張圖片。Places365-Challenge將與2016年的Places2挑戰賽一塊兒舉行ILSVRC和COCO在ECCV 2016上的聯合研討會。
Places3-標準版和Places365-Challenge數據在Places2網站上發佈。
Places365-Standard上通過預先培訓的CNN模型:
源碼地址:https://github.com/CSAILVision/places365
在大型實時SLAM中採用無監督深度神經網絡的方法檢測迴環能夠提高檢測效果。該方法建立了一個自動編碼結構,能夠有效的解決邊界定位錯誤。對於一個位置進行拍攝,在不一樣時間時,因爲視角變化、光照、氣候、動態目標變化等因素,會致使定位不許。卷積神經網絡能夠有效地進行基於視覺的分類任務。在場景識別中,將CNN嵌入到系統能夠有效的識別出類似圖片。可是傳統的基於CNN的方法有時會產生低特徵提取,查詢過慢,須要訓練的數據過大等缺點。而CALC是一種輕量級地實時快速深度學習架構,它只須要不多的參數,能夠用於SLAM迴環檢測或任何其餘場所識別任務,即便對於資源有限地系統也能夠很好地運行。
這個模型將高維的原始數據映射到有旋轉不變性的低維的描述子空間。在訓練以前,圖片序列中的每個圖片進行隨機投影變換,從新縮放成120×160產生圖像對,爲了捕捉運動過程當中的視角的極端變化。而後隨機選擇一些圖片計算HOG算子,採用固定長度的HOG描述子能夠幫助網絡更好地學習場景的幾何。將訓練圖片的每個塊的HOG存儲到堆棧裏,定義爲\(X_{2}\)維度爲\(N \times D\),其中\(N\)是塊大小,\(D\)是每個HOG算子的維度。網絡有兩個帶池化層的卷積層,一個純卷積層,和三個全鏈接層,同時用ReLU作卷積層的激活單元。在該體系結構中,將圖片進行投影變換,提取HOG描述子的操做僅針對整個訓練數據集計算一次,而後將結果寫入數據庫以用於訓練。在訓練時,批量大小N設置爲1,而且僅使用boxed區域中的層。
[1] N. Merrill and G. Huang, 「Lightweight Unsupervised Deep Loop Closure,」 in Robotics: Science and Systems XIV, 2018.
CALC
原理介紹:用於迴環檢測的卷積自動編碼器。它該代碼分爲兩個模塊。TrainAndTest用於訓練和測試模型,DeepLCD是一個用於在線迴環檢測或圖像檢索的C ++庫。
源碼地址:https://github.com/rpng/calc
關注公衆號,點擊「學習圈子」,「SLAM入門「」,從零開始學習三維視覺核心技術SLAM,3天內無條件退款。早就是優點,學習切忌單打獨鬥,這裏有教程資料、練習做業、答疑解惑等,優質學習圈幫你少走彎路,快速入門!
如何從零開始系統化學習視覺SLAM?
從零開始一塊兒學習SLAM | 爲何要學SLAM?
從零開始一塊兒學習SLAM | 學習SLAM到底須要學什麼?
從零開始一塊兒學習SLAM | SLAM有什麼用?
從零開始一塊兒學習SLAM | C++新特性要不要學?
從零開始一塊兒學習SLAM | 爲何要用齊次座標?
從零開始一塊兒學習SLAM | 三維空間剛體的旋轉
從零開始一塊兒學習SLAM | 爲啥須要李羣與李代數?
從零開始一塊兒學習SLAM | 相機成像模型
從零開始一塊兒學習SLAM | 不推公式,如何真正理解對極約束?
從零開始一塊兒學習SLAM | 神奇的單應矩陣
從零開始一塊兒學習SLAM | 你好,點雲
從零開始一塊兒學習SLAM | 給點雲加個濾網
從零開始一塊兒學習SLAM | 點雲平滑法線估計
從零開始一塊兒學習SLAM | 點雲到網格的進化
從零開始一塊兒學習SLAM | 理解圖優化,一步步帶你看懂g2o代碼
從零開始一塊兒學習SLAM | 掌握g2o頂點編程套路
從零開始一塊兒學習SLAM | 掌握g2o邊的代碼套路
從零開始一塊兒學習SLAM | 用四元數插值來對齊IMU和圖像幀
零基礎小白,如何入門計算機視覺?
SLAM領域牛人、牛實驗室、牛研究成果梳理
我用MATLAB擼了一個2D LiDAR SLAM
可視化理解四元數,願你再也不掉頭髮
最近一年語義SLAM有哪些表明性工做?
視覺SLAM技術綜述
彙總 | VIO、激光SLAM相關論文分類集錦
研究SLAM,對編程的要求有多高?
2018年SLAM、三維視覺方向求職經驗分享
2018年SLAM、三維視覺方向求職經驗分享
深度學習遇到SLAM | 如何評價基於深度學習的DeepVO,VINet,VidLoc?
AI資源對接需求彙總:第1期
AI資源對接需求彙總:第2期