日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

SLAM闭合回环————视觉词典BOW小结

發(fā)布時(shí)間:2023/11/27 生活经验 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SLAM闭合回环————视觉词典BOW小结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在目前實(shí)際的視覺(jué)SLAM中,閉環(huán)檢測(cè)多采用DBOW2模型https://github.com/dorian3d/DBoW2,而bag?of?words?又運(yùn)用了數(shù)據(jù)挖掘的K-means聚類算法,筆者只通過(guò)bag?of?words?模型用在圖像處理中進(jìn)行形象講解,并沒(méi)有涉及太多對(duì)SLAM的閉環(huán)檢測(cè)的應(yīng)用。

PART ONE 1.Bag-of-words模型簡(jiǎn)介

Bag-of-words模型是信息檢索領(lǐng)域常用的文檔表示方法。在信息檢索中,BOW模型假定對(duì)于一個(gè)文檔,忽略它的單詞順序和語(yǔ)法、句法等要素,將其僅僅看作是若干個(gè)詞匯的集合,文檔中每個(gè)單詞的出現(xiàn)都是獨(dú)立的,不依賴于其它單詞是否出現(xiàn)。?也就是說(shuō),文檔中任意一個(gè)位置出現(xiàn)的任何單詞,都不受該文檔語(yǔ)意影響而獨(dú)立選擇的。舉個(gè)例子就好理解:

例如有如下兩個(gè)文檔:

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

2:Bob?also?likes?to?play?football?games.

基于這兩個(gè)文本文檔,構(gòu)造一個(gè)詞典:

Dictionary?=?{1:”Bob”,?2.?“l(fā)ikes”,?3.?“to”,?4.?“play”,?5.?“basketball”,?6.?“also”,?7.?“football”,?8.?“games”,?9.?“Jim”,?10.?“too”}。

這個(gè)詞典一共包含10個(gè)不同的單詞,利用詞典的索引號(hào),上面兩個(gè)文檔每一個(gè)都可以用一個(gè)10維向量表示(用整數(shù)數(shù)字0~n(n為正整數(shù))表示某個(gè)單詞在文檔中出現(xiàn)的次數(shù)):

1:[1,?2,?1,?1,?1,?0,?0,?0,?1,?1]

2:[1,?1,?1,?1?,0,?1,?1,?1,?0,?0]

向量中每個(gè)元素表示詞典中相關(guān)元素在文檔中出現(xiàn)的次數(shù)。不過(guò),在構(gòu)造文檔向量的過(guò)程中可以看到,我們并沒(méi)有表達(dá)單詞在原來(lái)句子中出現(xiàn)的次序。

Bag-of-words模型應(yīng)用于圖像表示:

為了表示一幅圖像,我們可以將圖像看作文檔,即若干個(gè)“視覺(jué)詞匯”的集合,同樣的,視覺(jué)詞匯相互之間沒(méi)有順序。

?

視覺(jué)詞典的生成流程:

于圖像中的詞匯不像文本文檔中的那樣是現(xiàn)成的,我們需要首先從圖像中提取出相互獨(dú)立的視覺(jué)詞匯,這通常需要經(jīng)過(guò)三個(gè)步驟:(1)特征檢測(cè),(2)特征表示,(3)單詞本的生成。??下圖是從圖像中提取出相互獨(dú)立的視覺(jué)詞匯:

?

過(guò)觀察會(huì)發(fā)現(xiàn),同一類目標(biāo)的不同實(shí)例之間雖然存在差異,但我們?nèi)匀豢梢哉业剿鼈冎g的一些共同的地方,比如說(shuō)人臉,雖然說(shuō)不同人的臉差別比較大,但眼睛, 嘴,鼻子等一些比較細(xì)小的部位,卻觀察不到太大差別,我們可以把這些不同實(shí)例之間共同的部位提取出來(lái),作為識(shí)別這一類目標(biāo)的視覺(jué)詞匯。

構(gòu)建BOW碼本步驟:

利用K-Means算法構(gòu)造單詞表。用K-means對(duì)第二步中提取的N個(gè)SIFT特征進(jìn)行聚類,K-Means算法是一種基于樣本間相似性度量的間接聚類方法,此算法以K為參數(shù),把N個(gè)對(duì)象分為K個(gè)簇,以使簇內(nèi)具有較高的相似度,而簇間相似度較低。聚類中心有k個(gè)(在BOW模型中聚類中心我們稱它們?yōu)橐曈X(jué)詞),碼本的長(zhǎng)度也就為k,計(jì)算每一幅圖像的每一個(gè)SIFT特征到這k個(gè)視覺(jué)詞的距離,并將其映射到距離最近的視覺(jué)詞中(即將該視覺(jué)詞的對(duì)應(yīng)詞頻+1)。完成這一步后,每一幅圖像就變成了一個(gè)與視覺(jué)詞序列相對(duì)應(yīng)的詞頻矢量。

假定我們將K設(shè)為4,那么單詞表的構(gòu)造過(guò)程如下圖所示:

?

第三步:

利用單詞表的中詞匯表示圖像。利用SIFT算法,可以從每幅圖像中提取很多個(gè)特征點(diǎn),這些特征點(diǎn)都可以用單詞表中的單詞近似代替,通過(guò)統(tǒng)計(jì)單詞表中每個(gè)單詞在圖像中出現(xiàn)的次數(shù),可以將圖像表示成為一個(gè)K=4維數(shù)值向量。將這些特征映射到為碼本矢量,碼本矢量歸一化,最后計(jì)算其與訓(xùn)練碼本的距離,對(duì)應(yīng)最近距離的訓(xùn)練圖像認(rèn)為與測(cè)試圖像匹配。請(qǐng)看下圖:

?

我們從人臉、自行車和吉他三個(gè)目標(biāo)類圖像中提取出的不同視覺(jué)詞匯,而構(gòu)造的詞匯表中,會(huì)把詞義相近的視覺(jué)詞匯合并為同一類,經(jīng)過(guò)合并,詞匯表中只包含了四個(gè)視覺(jué)單詞,分別按索引值標(biāo)記為1,2,3,4。通過(guò)觀察可以看到,它們分別屬于自行車、人臉、吉他、人臉類。統(tǒng)計(jì)這些詞匯在不同目標(biāo)類中出現(xiàn)的次數(shù)可以得到每幅圖像的直方圖表示:

人臉:??[3,30,3,20]
自行車:[20,3,3,2]
吉他:??[8,12,32,7]

其實(shí)這個(gè)過(guò)程非常簡(jiǎn)單,就是針對(duì)人臉、自行車和吉他這三個(gè)文檔,抽取出相似的部分(或者詞義相近的視覺(jué)詞匯合并為同一類),構(gòu)造一個(gè)詞典,詞典中包含4個(gè)視覺(jué)單詞,即Dictionary?=?{1:”自行車”,?2.?“人臉”,?3.?“吉他”,?4.?“人臉類”},最終人臉、自行車和吉他這三個(gè)文檔皆可以用一個(gè)4維向量表示,最后根據(jù)三個(gè)文檔相應(yīng)部分出現(xiàn)的次數(shù)畫(huà)成了上面對(duì)應(yīng)的直方圖。一般情況下,K的取值在幾百到上千,在這里取K=4僅僅是為了方便說(shuō)明。

總結(jié)一下步驟:

第一步:利用SIFT算法從不同類別的圖像中提取視覺(jué)詞匯向量,這些向量代表的是圖像中局部不變的特征點(diǎn);

第二步:將所有特征點(diǎn)向量集合到一塊,利用K-Means算法合并詞義相近的視覺(jué)詞匯,構(gòu)造一個(gè)包含K個(gè)詞匯的單詞表;

第三步:統(tǒng)計(jì)單詞表中每個(gè)單詞在圖像中出現(xiàn)的次數(shù),從而將圖像表示成為一個(gè)K維數(shù)值向量。

具體的,假設(shè)有5類圖像,每一類中有10幅圖像,這樣首先對(duì)每一幅圖像劃分成patch(可以是剛性分割也可以是像SIFT基于關(guān)鍵點(diǎn)檢測(cè)的),這樣,每一個(gè)圖像就由很多個(gè)patch表示,每一個(gè)patch用一個(gè)特征向量來(lái)表示,咱就假設(shè)用Sift表示的,一幅圖像可能會(huì)有成百上千個(gè)patch,每一個(gè)patch特征向量的維數(shù)128。

?

接下來(lái)就要進(jìn)行構(gòu)建Bag of words模型了,假設(shè)Dictionary詞典的Size為100,即有100個(gè)詞。那么咱們可以用K-means算法對(duì)所有的patch進(jìn)行聚類,k=100,我們知道,等k-means收斂時(shí),我們也得到了每一個(gè)cluster最后的質(zhì)心,那么這100個(gè)質(zhì)心(維數(shù)128)就是詞典里德100個(gè)詞了,詞典構(gòu)建完畢。

詞典構(gòu)建完了怎么用呢?是這樣的,先初始化一個(gè)100個(gè)bin的初始值為0的直方圖h。每一幅圖像不是有很多patch么?我們就再次計(jì)算這些patch和和每一個(gè)質(zhì)心的距離,看看每一個(gè)patch離哪一個(gè)質(zhì)心最近,那么直方圖h中相對(duì)應(yīng)的bin就加1,然后計(jì)算完這幅圖像所有的patches之后,就得到了一個(gè)bin=100的直方圖,然后進(jìn)行歸一化,用這個(gè)100維德向量來(lái)表示這幅圖像。對(duì)所有圖像計(jì)算完成之后,就可以進(jìn)行分類聚類訓(xùn)練預(yù)測(cè)之類的了。

圖像的特征用到了Dense Sift,通過(guò)Bag of Words詞袋模型進(jìn)行描述,當(dāng)然一般來(lái)說(shuō)是用訓(xùn)練集的來(lái)構(gòu)建詞典,因?yàn)槲覀冞€沒(méi)有測(cè)試集呢。雖然測(cè)試集是你拿來(lái)測(cè)試的,但是實(shí)際應(yīng)用中誰(shuí)知道測(cè)試的圖片是啥,所以構(gòu)建BoW詞典我這里也只用訓(xùn)練集。

用BoW描述完圖像之后,指的是將訓(xùn)練集以及測(cè)試集的圖像都用BoW模型描述了,就可以用SVM訓(xùn)練分類模型進(jìn)行分類了。

在這里除了用SVM的RBF核,還自己定義了一種核:?histogram intersection kernel,直方圖正交核。因?yàn)楹芏嗾撐恼f(shuō)這個(gè)核好,并且實(shí)驗(yàn)結(jié)果很顯然。能從理論上證明一下么?通過(guò)自定義核也可以了解怎么使用自定義核來(lái)用SVM進(jìn)行分類。

?

PART ?THREE 2.詞袋模型在slam中的應(yīng)用?

DBoW3庫(kù)介紹

????????DBoW3是DBoW2的增強(qiáng)版,這是一個(gè)開(kāi)源的C++庫(kù),用于給圖像特征排序,并將圖像轉(zhuǎn)化成視覺(jué)詞袋表示。它采用層級(jí)樹(shù)狀結(jié)構(gòu)將相近的圖像特征在物理存儲(chǔ)上聚集在一起,創(chuàng)建一個(gè)視覺(jué)詞典。DBoW3還生成一個(gè)圖像數(shù)據(jù)庫(kù),帶有順序索引和逆序索引,可以使圖像特征的檢索和對(duì)比非???。

? ? ? ? DBoW3與DBoW2的主要差別:

????????1、DBoW3依賴項(xiàng)只有OpenCV,DBoW2依賴項(xiàng)DLIB被移除;

????????2、DBoW3可以直接使用二值和浮點(diǎn)特征描述子,不需要再為這些特征描述子重寫(xiě)新類;

????????3、DBoW3可以在Linux和Windows下編譯;

????????4、為了優(yōu)化執(zhí)行速度,重寫(xiě)了部分代碼(特征的操作都寫(xiě)入類DescManip);DBoW3的接口也被簡(jiǎn)化了;

????????5、可以使用二進(jìn)制視覺(jué)詞典文件;二進(jìn)制文件在加載和保存上比.yml文件快4-5倍;而且,二進(jìn)制文件還能被壓縮;

????????6、仍然和DBoW2yml文件兼容。

?

????????DBoW3有兩個(gè)主要的類:Vocabulary和Database。視覺(jué)詞典將圖像轉(zhuǎn)化成視覺(jué)詞袋向量,圖像數(shù)據(jù)庫(kù)對(duì)圖像進(jìn)行索引。

????????ORB-SLAM2中的ORBVocabulary保存在文件orbvoc.dbow3中,二進(jìn)制文件在Github上:https://github.com/raulmur/ORB_SLAM2/tree/master/Vocabulary

二、K-Means聚類的效率優(yōu)化

影響效率的一個(gè)方面是構(gòu)建詞典時(shí)的K-means聚類,我在用的時(shí)候遇到了兩個(gè)問(wèn)題:

1、內(nèi)存溢出。這是由于一般的K-means函數(shù)的輸入是待聚類的完整的矩陣,在這里就是所有patches的特征向量f合成的一個(gè)大矩陣,由于這個(gè)矩陣太大,內(nèi)存不頂了。我內(nèi)存為4G。

2、效率低。因?yàn)樾枰?jì)算每一個(gè)patch和每一個(gè)質(zhì)心的歐拉距離,還有比較大小,那么要是循環(huán)下來(lái)這個(gè)效率是很低的。

為了解決這個(gè)問(wèn)題,我采用一下策略,不使用整一個(gè)數(shù)據(jù)矩陣X作為輸入的k-means,而是自己寫(xiě)循環(huán),每次處理一幅圖像的所有patches,對(duì)于效率的問(wèn)題,因?yàn)閙atlab強(qiáng)大的矩陣處理能力,可以有效避免耗時(shí)費(fèi)力的自己編寫(xiě)的循環(huán)迭代。

三、代碼

代碼下載鏈接:PG_BOW_DEMO.zip

Demo中的圖像是我自己研究中用到的一些Action的圖像,我都采集的簡(jiǎn)單的一共6類,每一類60幅,40訓(xùn)練20測(cè)試。請(qǐng)注意圖像的版權(quán)問(wèn)題,自己研究即可,不能商用。分類器用的是libsvm,最好自己mex重新編譯一下。

如果libsvm版本不合適或者沒(méi)有編譯成適合你的平臺(tái)的,會(huì)報(bào)錯(cuò),例如:

Classification using BOW rbf_svm
??? Error using ==> svmtrain at 172
Group must be a vector.

下面是默認(rèn)的demo結(jié)果:

Classification using BOW rbf_svm
Accuracy = 75.8333% (91/120) (classification)

Classification using histogram intersection kernel svm
Accuracy = 82.5% (99/120) (classification)

Classification using Pyramid BOW rbf_svm
Accuracy = 82.5% (99/120) (classification)

Classification using Pyramid BOW histogram intersection kernel svm
Accuracy = 90% (108/120) (classification)

當(dāng)然結(jié)果這個(gè)樣子是因?yàn)槲乙呀?jīng)把6類圖像提前弄成一樣大了,而且每一類都截取了最關(guān)鍵的子圖,不太符合實(shí)際,但是為了demo方便,當(dāng)然圖像大小可以是任意的。

下圖就是最好結(jié)果的混淆矩陣,最好結(jié)果就是Pyramid BoW+hik-SVM:

?

圖6 分類混淆矩陣

這是在另一個(gè)數(shù)據(jù)集上的結(jié)果(7類分類問(wèn)題):

Classification using BOW rbf_svm
Accuracy = 34.5714% (242/700) (classification)

Classification using histogram intersection kernel svm
Accuracy = 36% (252/700) (classification)

Classification using Pyramid BOW rbf_svm
Accuracy = 43.7143% (306/700) (classification)

Classification using Pyramid BOW histogram intersection kernel svm
Accuracy = 55.8571% (391/700) (classification)

PART TWO ? ?一、單目視覺(jué)SLAM

1.環(huán)境特征

? ? 分類:自然特征和人工特征;

??????必要性:移動(dòng)SLAM機(jī)器人必須通過(guò)實(shí)時(shí)檢測(cè)周圍環(huán)境特征來(lái)對(duì)自身進(jìn)行一個(gè)定位。

2.面臨問(wèn)題:

既包括路標(biāo)位姿的估計(jì),也包括機(jī)器人位姿與軌跡的優(yōu)化。(在很多實(shí)際應(yīng)用中,環(huán)境地圖和移動(dòng)機(jī)器人的位置都是未知的,且定位和地圖構(gòu)建二者相互依賴、互為耦合,使得問(wèn)題求解非常復(fù)雜。)

3.解決方案

目前主要有兩種解決方案:基于濾波器的方法和基于圖的方法。

(2) 基于圖的SLAM(Graph-basedSLAM)

?

算法致力于尋找一個(gè)最大可能的節(jié)點(diǎn)結(jié)構(gòu),得到一個(gè)最優(yōu)位姿地圖(近年來(lái)隨著高效求解方法的出現(xiàn),基于圖的SLAM?方法重新得到重視,成為當(dāng)前?SLAM研究的一個(gè)熱點(diǎn))

二、自然特征提取及視覺(jué)詞典創(chuàng)建

2.1自然路標(biāo)

優(yōu)點(diǎn):不改變工作環(huán)境,不需要額外設(shè)施和額外信息,并且在環(huán)境中大量存在;

缺點(diǎn):受環(huán)境的影響較大,易受光線、遮擋、視角及環(huán)境相似度等變化的影響

2.2視覺(jué)詞典

視覺(jué)詞典是圖像分類檢索等領(lǐng)域的圖像建模方法,該方法源于文檔分析領(lǐng)域中的詞典表示,詞典表示將文檔描述為詞典中關(guān)鍵詞出現(xiàn)頻率的向量

2.3自然特征視覺(jué)詞典創(chuàng)建框架

2.4具體實(shí)施

(1)用SURF(SpeededUp Robust Features)算子提取圖像的自然局部視覺(jué)特征向量;(優(yōu)點(diǎn):保存了圖像原有的色彩,而且改進(jìn)了SIFT?算法計(jì)算數(shù)據(jù)量大、時(shí)間復(fù)雜度高、算法耗時(shí)長(zhǎng)等缺點(diǎn),可以用?64維向量建立特征點(diǎn)描述符,進(jìn)一步提高了快速性和準(zhǔn)確性)

(2)把相似的SURF?自然視覺(jué)特征向量劃分為相同的自然視覺(jué)單詞(采用?K-means算法對(duì)局部視覺(jué)特征集合進(jìn)行聚類,一個(gè)聚類中心即為一個(gè)視覺(jué)單詞);

(3)自然視覺(jué)詞典的每一自然視覺(jué)單詞采用GMM(GaussianMixture Model)方法進(jìn)行建模自然視覺(jué)單詞的概率模型,通過(guò)概率模型建立了更為精確的局部自然視覺(jué)特征與自然視覺(jué)單詞間的匹配

?

2.5實(shí)例

包括:室內(nèi)走廊和室外視覺(jué)詞典

三、視覺(jué)詞典的人工路標(biāo)模型創(chuàng)建


四、閉環(huán)檢測(cè)

? ? ?目前視覺(jué) SLAM 閉環(huán)檢測(cè)領(lǐng)域大部分算法都是首先準(zhǔn)確建立基于圖像外觀的場(chǎng)景模型,然后基于場(chǎng)景外觀進(jìn)行閉環(huán)檢測(cè)

???? BoVW(Bagof visual words)算法步驟:

???? ①用SIFT或SURF算子提取圖像的局部特征,每個(gè)局部特征用相同維數(shù)的特征向量表示;

???? ②將檢測(cè)到的局部特征集合進(jìn)行聚類,每個(gè)聚類中心對(duì)應(yīng)一個(gè)視覺(jué)單詞;

???? ③構(gòu)建表征圖像的視覺(jué)詞典,動(dòng)態(tài)調(diào)整視覺(jué)單詞數(shù)量以評(píng)估視覺(jué)詞典的大小;

???? ④圖像由視覺(jué)詞典中的視覺(jué)單詞權(quán)重向量表征。

BoVW(Bag of Visual Words)算法將一副圖像類比為一篇文檔

? ??①SLAM采集圖像具有時(shí)間連續(xù)性,利用時(shí)間連續(xù)性提升檢測(cè)的準(zhǔn)確性。

???? ②圖像匹配的相似度計(jì)算方法與視覺(jué)?SLAM?的時(shí)間連續(xù)特征,利用貝葉斯濾波融合當(dāng)前觀測(cè)量(也即當(dāng)前圖像匹配的相似度)和前一時(shí)刻的檢測(cè)信息計(jì)算當(dāng)前時(shí)刻閉環(huán)檢測(cè)的概率,由此設(shè)計(jì)一種基于貝葉斯濾波的閉環(huán)檢測(cè)跟蹤算法;

?

4.1基于人工視覺(jué)詞典的閉合檢測(cè)算法:

?

4.2基于貝葉斯濾波閉環(huán)檢測(cè)算法:

相似度

圖像內(nèi)存管理

五、混合人工自然特征的單目視SLAM

5.1算法整體框架

六、發(fā)展方向

借助Wifi或者偽衛(wèi)星信號(hào);三維場(chǎng)景地圖實(shí)時(shí)性構(gòu)建;機(jī)器人陌生環(huán)境內(nèi)學(xué)習(xí)(模擬人類學(xué)習(xí)過(guò)程)以及高效內(nèi)存管理模式;

設(shè)定室內(nèi)路標(biāo)的規(guī)范;POS系統(tǒng)微型化;

?

引用博客來(lái)自:

[1]https://blog.csdn.net/u011326478/article/details/52463556?locationNum=4&fps=1

[2]http://www.cnblogs.com/zjiaxing/p/5548265.html

[3]https://blog.csdn.net/chapmancp/article/details/80179765

個(gè)人學(xué)習(xí)使用,如有疑問(wèn),請(qǐng)聯(lián)系博主驚醒修正

總結(jié)

以上是生活随笔為你收集整理的SLAM闭合回环————视觉词典BOW小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。