李 昂 阮曉鋼,2 黃 靜,2* 朱曉慶,2
1(北京工業(yè)大學信息學部 北京 100124) 2(計算智能與智能系統(tǒng)北京市重點實驗室 北京 100124)
目前,閉環(huán)檢測已經(jīng)成為了移動機器人導航領域的關鍵問題和研究熱點,是視覺同時定位與地圖構(gòu)建(SLAM)的重要環(huán)節(jié)。視覺SLAM主要由視覺里程計、后端圖優(yōu)化、閉環(huán)檢測和建圖四個部分組成[1]。其中閉環(huán)檢測也稱為位置識別,指機器人在導航過程中使用視覺傳感器提供的圖像來識別是否經(jīng)過了先前到達的位置[2]。假設在當前時刻和較早時刻相機捕獲了兩幅圖像,那么閉合檢測的任務就是根據(jù)這兩幅圖像的相似性來判斷這兩個時刻的位置是否相同。正確的閉環(huán)檢測可以為后端優(yōu)化的姿態(tài)圖中增加邊緣約束,進一步優(yōu)化機器人的運動估計,消除視覺里程計產(chǎn)生的累計位姿誤差,而錯誤的閉環(huán)檢測會導致地圖繪制失敗。因此,一個好的閉環(huán)檢測算法對于構(gòu)建全局一致性地圖乃至整個SLAM系統(tǒng)都至關重要。
近年來,學者們在閉環(huán)檢測方面做了大量的研究。經(jīng)典的閉環(huán)檢測算法大致可以分為兩類:詞袋模型(BoW)算法[2]和全局描述子算法。BoW從圖像中提取局部特征,然后聚類形成不同的單詞,最終用單詞向量的形式來描述圖像,將閉環(huán)檢測轉(zhuǎn)化成了圖像單詞向量的相似性度量問題。詞袋模型算法的關鍵在于如何選擇最優(yōu)的局部特征,目前多采用傳統(tǒng)的SIFT[3]、SURF[4]和ORB[5]等特征作為圖像的表達。而全局描述子算法的主要思想是直接計算整幅圖像的描述子,從而表達圖像的整體屬性。GIST是一種非常有效的常規(guī)圖像描述子,它能夠以緊湊的方式去捕捉不同類型場景的基本結(jié)構(gòu)。在此基礎上,Liu等[6]使用GIST提取圖像的全局特征,并采用PCA對描述子進行降維,提高了閉環(huán)檢測的計算效率和圖像描述子的識別能力。但以上兩種方法各有優(yōu)缺點。Furgale等[7]證明了BoW相較于全局描述子能更好地應對相機視角變化,而Milfold等[8]和Naseer等[9]提出全局描述子方法在光照變化的情況下更魯棒。McManus等[10]將這兩種方法結(jié)合起來,提出了一種使用場景標簽的無監(jiān)督系統(tǒng),該系統(tǒng)可以為不同的視覺元素產(chǎn)生廣域檢測器,提高了閉環(huán)檢測的準確性。然而,這些方法所使用的都是低層特征,是人為設計的,它們對光照、天氣等因素的影響很敏感,缺乏必要的魯棒性。
隨著大規(guī)模數(shù)據(jù)集的公開(如Imagenet)以及各種硬件的升級(如GPU),深度學習[11-12]得到了迅速發(fā)展。深度學習能夠通過多層神經(jīng)網(wǎng)絡對輸入的圖像提取抽象的高層特征,從而更好地應對環(huán)境的變化[13],這種優(yōu)勢使其在圖像分類和圖像檢索中得到了廣泛應用??紤]到閉環(huán)檢測問題與圖像檢索十分相似,學者們開始嘗試將深度學習應用于閉環(huán)檢測。Gao等[14]利用自編碼器提取圖像特征并采用相似性度量矩陣對閉環(huán)進行檢測,但忽略了圖像的空間特性。何元烈等[15]設計了一種快速、精簡的卷積神經(jīng)網(wǎng)絡(FLCNN),在保證閉環(huán)檢測準確率的情況下提高了算法的計算效率。Xia等[16]利用PCANet對圖像進行特征提取,證明了該網(wǎng)絡提取的特征優(yōu)于傳統(tǒng)的手工設計特征,但限制了輸入圖像的尺寸。Hou等[17]利用PlaceCNN進行閉環(huán)檢測,該方法即使在光照變化時也具有較高的檢測精度,但算法運算時間較長。
為了進一步提高閉環(huán)檢測算法的準確率和魯棒性,本文采用了融合VGG16與VLAD的網(wǎng)絡結(jié)構(gòu)VGG-NetVLAD。該網(wǎng)絡采用了基于VLAD[18]思想的NetVLAD池化層,充分考慮了圖像的局部空間特性,以提高閉環(huán)檢測的準確性和魯棒性。不同于典型的CNN,VGG-NetVLAD訓練數(shù)據(jù)的標簽僅為各自的地理位置,能夠進行弱監(jiān)督學習。
局部聚合描述符向量(VLAD)是一種常用于實例檢索和圖像分類的描述子池化方法,可以捕獲局部特征在圖像中聚合的統(tǒng)計信息。詞袋模型保存了圖像中不同種類單詞的數(shù)量信息,而VLAD儲存的是每個單詞與對應聚類中心的殘差和。
假設VLAD算法的輸入為單幅圖像的N個D維特征向量xi,參數(shù)為K個聚類中心ck,則VLAD會輸出一個K×D維的圖像特征向量,將其寫成矩陣的形式,并記作V,計算公式如下:
(1)
式中:xi(j)和ck(j)分別代表第i個特征向量和第k個聚類中心的第j個元素;ak(xi)表示第i個特征向量對應第k個聚類中心的權重,當該特征屬于這個聚類中心時,權重為1,否則為0。由此看出,矩陣V的第k個D維列向量代表所有特征向量對應第k個聚類中心的殘差和(xi-ck)。因此,VLAD方法提取的圖像特征表達了聚類中心周圍的特征分布,包含了一定的語義信息。
在VLAD中權重ak(xi)只有兩種取值,并且特征向量在不同聚類中心的權重之和為1,是一個離散函數(shù),所以無法通過反向傳播進行訓練。為了將VLAD的思想引入到CNN,本文采用了Arandjelovic等[19]提出的NetVLAD池化層。它采用了一種近似的方式,將ak(xi)軟分配到多個聚類中心,使其可微:
(2)
將式(2)中的平方項展開,分子分母同時約掉e-α‖xi‖2,得到如下的軟分配(soft-assignment)形式:
(3)
式中:wk′=2αck;bk=-α‖ck‖2,將式(3)代入式(1)最終得到NetVLAD層輸出的特征向量:
(4)
圖1 NetVLAD相對于VLAD的自適應性
圖1中圓圈和三角形分別代表兩個不同圖像的特征描述符,被分配到同一個集群,聚類中心為ck。當采用余弦距離計算圖像相似度時,在VLAD編碼下,由于VLAD的特征向量進行了L2歸一化,所以相似性得分等價于兩幅圖像殘差向量(xi-ck)的點積,聚類中心ck位于“×”處是為了均勻分布所有的殘差。而在NetVLAD編碼下,如果兩幅圖像并不相似,它會學習到一個更優(yōu)的聚類中心“☆”,使得殘差向量間的點積更小,從而得到更加準確的相似度。
為了使卷積神經(jīng)網(wǎng)絡提取到的圖像特征更適用于閉環(huán)檢測,本文對VGG16網(wǎng)絡進行了裁剪,去掉了最后一個卷積層(conv5_3)之后的池化層和全連接層,包括ReLU激活函數(shù),并將NetVLAD層連接到卷積層conv5_3之后,作為新的池化層。將圖像輸入到VGG-NetVLAD網(wǎng)絡中,提取Layer_5層的特征作為池化層NetVLAD的輸入。網(wǎng)絡結(jié)構(gòu)如圖2所示。
圖2 融合VGG16與VLAD的網(wǎng)絡模型
為了獲得VGG-NetVLAD的最優(yōu)參數(shù),便于進行閉環(huán)檢測,使用Pittsburgh(Pitts250k)數(shù)據(jù)集[19]進行訓練。它包含了250 000幅從Google街景下載的數(shù)據(jù)庫圖像和24 000幅與數(shù)據(jù)庫拍攝時間不同(間隔為幾年)的測試圖像,可用于地點識別。將Pitts250k平均分為三部分用于訓練、驗證和測試,每部分包含83 000幅數(shù)據(jù)庫圖像和8 000幅查詢圖像。通過對拍攝于不同季節(jié)但地點相同的圖像進行描述,能夠使算法學習到更優(yōu)的特征表達,以準確地識別圖像所處的位置。
(5)
(6)
在三元組的基礎上,定義弱監(jiān)督排序損失函數(shù)的形式為:
(7)
式中:l為hinge loss函數(shù),l(x)=max(x,0);m為一個附加常數(shù);Lθ代表了所有負樣本圖像的損失之和,對于每一個負樣本圖像,當其與查詢圖像的距離大于查詢與最佳匹配圖像的距離與m之和,則損失為0,否則其損失值與m成正比。
VGG-NetVLAD在反向傳播過程中,使用隨機梯度下降法對參數(shù)進行優(yōu)化,設置每個訓練批次的樣本數(shù)量為4個三元組,K值設為64,初始學習速率設為0.000 1,m設為0.1,沖量系數(shù)設為0.9,每迭代5次學習速率減半,共迭代30次。用訓練好的VGG-NetVLAD模型在Pitts250k數(shù)據(jù)集上進行實驗,結(jié)果顯示:當準確率為100%時,該算法可以達到85%的召回率。
閉環(huán)檢測的任務是識別當前時刻位置是否曾經(jīng)到達過,算法流程可分為圖像特征提取與相似性度量兩個步驟,具體流程如圖3所示。本文將在Pittsburgh數(shù)據(jù)集上訓練好的VGG-NetVLAD模型作為圖像的特征提取器,將提取到的特征用于閉環(huán)檢測。
圖3 閉環(huán)檢測算法流程
圖像的原始尺寸為640×480,為了減小算法的計算復雜度,將圖像大小縮小為224×224,并進行減均值處理后輸入到網(wǎng)絡中。從圖4所示的特征圖可以看出,VGG-NetVLD中池化層NetVLAD輸出的特征圖更加關注靜態(tài)的建筑物,而不是汽車這種有利于圖像分類的物體,因此更適合應用于閉環(huán)檢測。因此,將NetVLAD層提取的特征作為圖像的最終表述,每個圖像的特征向量的維度為4 096。
圖4 兩種算法生成的特征圖
假設當前圖像為In,之前某一時刻圖像為IP,分別輸入到VGG-NetVLAD模型中得到特征向量vn和vp。為了計算兩圖像的相似程度,采用向量間的余弦距離作為度量標準,余弦相似度計算公式如下:
(8)
式中:S為圖像In與IP的相似性得分,也是特征向量vn和vp夾角的余弦值。在閉環(huán)檢測時,對數(shù)據(jù)中所有圖像兩兩分別進行相似性比較,最終得到一個相似性矩陣,矩陣中第i行第j列的值代表圖像Ii與圖像Ij的相似性得分。設定相似性閾值,當圖像間的相似性得分超過閾值時,認為兩圖像為同一地點,產(chǎn)生了閉環(huán),否則就判定不是閉環(huán)。
在進行閉環(huán)檢測時,輸入的圖像是由相機在連續(xù)時間內(nèi)拍攝的,因此相鄰圖像的內(nèi)容重復性很高,容易被檢測成同一位置,但實際的運動軌跡并未形成閉環(huán)。為了避免產(chǎn)生大量的錯誤結(jié)果,需考慮圖像相似度對比的時間閾值,對于當前圖像,不考慮與其拍攝的間隔時間小于閾值的圖像進行比較。由于難以獲取每個圖像具體的拍攝時間,所以采取設定圖像比較范圍的方式,假設當前檢測的圖像為It,在時間閾值內(nèi)與It相鄰的圖像數(shù)量為d,則圖像It的相似性比較范圍為第1幀至第t-d幀。
為了驗證基于VGG-NetVLAD的閉環(huán)檢測算法的性能,與其他閉環(huán)檢測算法進行對比,其中包括經(jīng)典的BoW方法(在訓練詞典時提取ORB特征),以及三種基于深度學習的方法:自編碼器(Autoencoder)、Inception和VGG16[22],均通過ImageNet數(shù)據(jù)集進行訓練。評價算法的性能指標為準確性和計算時間。實驗采用的環(huán)境為:Ubuntu16.04,Tensorflow。計算機配置為:內(nèi)存32 GB,一塊GTX1080顯卡,處理器為Intel Xeon E5-2603 V3。
閉環(huán)檢測實驗在NewCollege和City Center兩個數(shù)據(jù)集上進行,它們是由牛津大學發(fā)布,應用最廣泛的閉環(huán)檢測驗證數(shù)據(jù)集。NewCollege數(shù)據(jù)集主要為自然物體的圖像序列,如公園里的花草樹木,而CityCenter數(shù)據(jù)集則主要為城市環(huán)境的圖像序列,如在街道上行走的人和車。這兩個數(shù)據(jù)集的共同點是在同一個地點存在左右兩個不同視角的圖像,其獲取方式為:在移動機器人的云臺上放置左右兩個相機,當機器人每移動1.5 m時采集一次圖像。表1為兩個數(shù)據(jù)集的詳細信息,圖5為數(shù)據(jù)集的部分示例圖。
表1 數(shù)據(jù)集詳細信息
(a) New College left (b) New College right
(c) City Center left (d) City Centerright圖5 數(shù)據(jù)集部分示例圖
數(shù)據(jù)集沒有將左右兩個相機拍攝的圖片進行劃分,而是分別以奇偶序號命名。兩個數(shù)據(jù)集都提供了圖像對是否形成閉環(huán)的真實標注,分別儲存為2 146×2 146、2 474×2 474的二維矩陣形式。當圖像i和圖像j為同一地點時(形成閉環(huán)區(qū)域),矩陣中(i,j)處的數(shù)值為1,否則為0。由圖5可以看出,左右兩個相機在同一地點拍攝的兩幅圖像完全不同,而真實的標注數(shù)據(jù)將很多同一地點拍攝但場景完全不同的圖像對(i,j)也歸類為閉環(huán)區(qū)域,這種情況下僅僅通過比較圖像間的相似性很難獲得與真實標注數(shù)據(jù)一樣的結(jié)果。為了解決上述問題,首先對兩個數(shù)據(jù)集各自進行歸類,將數(shù)據(jù)集中左相機采集的圖像和右相機采集的圖像分為兩部分,對標注數(shù)據(jù)也采取相同的操作,然后再分別進行4組閉環(huán)檢測實驗。參照文獻[23]中d值的設置方式,將分類后New College兩個數(shù)據(jù)集的d值設為50,City Center兩個數(shù)據(jù)集的d值設為400。
在四組實驗中,分別按照3.1節(jié)和3.2節(jié)的方法提取輸入圖像的特征向量,以余弦距離作為度量標準計算每對圖像間的相似性得分,最終生成整個數(shù)據(jù)集的相似度矩陣。圖6對四組實驗的相似度矩陣進行了可視化,左側(cè)為真實標注數(shù)據(jù)的熱力圖,右側(cè)為基于VGG-NetVLAD方法生成的熱力圖。圖中顏色越亮的地方代表圖像的相似度越高,顏色越暗的地方圖像相似度越低,其中對角線的值為圖像對(i,i)的相似性得分,因此對角線的顏色最亮??梢钥闯?,基于VGG-NetVLAD的閉環(huán)檢測方法可以檢測出大部分的真實閉環(huán)區(qū)域,并且與非閉環(huán)區(qū)域有一定的區(qū)分度。
(a) New College left
為了驗證算法的準確性,將算法的預測值與真實值進行比較,分為4種結(jié)果,如表2所示。
表2 閉環(huán)檢測的結(jié)果分類
準確性指標主要為準確率(pression)和召回率(recall),準確率代表算法預測出的所有閉環(huán)中正確閉環(huán)所占的比例;而召回率則代表算法預測出的正確閉環(huán)占所有真實閉環(huán)的比例。分別統(tǒng)計表2中TP、FP、FN的預測個數(shù),根據(jù)式(9)-式(10)可以計算準確率P和召回率R。通過不斷改變閾值大小,獲得不同的預測結(jié)果,最終繪制準確率-召回率曲線。
(9)
(10)
實驗的準確率-召回率比較結(jié)果如圖7所示。當召回率接近0時,五種算法的準確率都等于1。隨著閾值的減小,算法能夠檢測到更多的閉環(huán)數(shù)量,因此召回率不斷上升,但同時算法的準確率隨之下降。從圖7(a)、圖7(c)和圖7(d)可以看出,當召回率分別小于0.43、0.24和0.17時,VGG16(fc6層的輸出)的準確率均低于傳統(tǒng)的BoW,而VGG-NetVLAD要優(yōu)于其他四種算法。在圖7中,當準確率為100%時,VGG-NetVLAD的召回率依次達到0.284、0.247、0.258和0.274,在保證高準確率的情況下提高了召回率,有效地增加了檢測出真實閉環(huán)的數(shù)量。
(a) New College left
另一個衡量算法準確性的指標為平均準確率:
(11)
式中:N代表數(shù)據(jù)集中圖像的總個數(shù);P(k)表示檢測到K個閉環(huán)區(qū)域時的準確率;Δr(k)表示當調(diào)整閾值時,檢測到的閉環(huán)區(qū)域從K個增加到K+1時召回率的變化值。不同閉環(huán)檢測算法在四組實驗下的平均準確率如表3所示,結(jié)果顯示無論是在New College left、New College right數(shù)據(jù)集還是City Center left、City Center right數(shù)據(jù)集進行實驗,VGG-NetVLAD的平均準確率均高于BoW、VGG16和其他兩種深度學習方法。由于VGG-NetVLAD使用的訓練數(shù)據(jù)集為Pitts250k,其獲取的場景中人、汽車和道路出現(xiàn)的次數(shù)更多,所以算法在CityCenter數(shù)據(jù)集下的平均準確率相對更高。
表3 不同數(shù)據(jù)集上算法的平均準確率 %
除了對算法的準確性進行比較,還通過計算不同算法的特征提取時間來衡量算法的實時性。實驗在New College數(shù)據(jù)集上計算提取單幅圖像特征的平均時間,基于深度學習算法的提取過程均在GPU下實現(xiàn)。從表4的時間性能比較可以看出,本文模型在特征提取時間上要遠小于傳統(tǒng)的BoW,但由于VGG-NetVLAD需要對特征進行降維,略高于VGG16,但大體上滿足了閉環(huán)檢測的實時性的需求。
表4 時間性能比較
本文提出了一種融合VGG16與NetVLAD池化層的閉環(huán)檢測方法。NetVLAD層將VLAD的思想引入到了卷積神經(jīng)網(wǎng)絡,其參數(shù)可以通過端到端的學習獲得。本文使用Pittsburgh數(shù)據(jù)集作為網(wǎng)絡的訓練集,并采用弱監(jiān)督排序損失函數(shù)訓練網(wǎng)絡,將訓練好的網(wǎng)絡作為圖像的特征提取器,在New College和City Center數(shù)據(jù)集上進行閉環(huán)檢測實驗。實驗結(jié)果表明,本文的閉環(huán)檢測算法與傳統(tǒng)的BoW以及其他三種深度學習方法相比,在保證高召回率的情況下提升了準確率,同時基本滿足了閉環(huán)檢測的實時性。下一步研究會著重考慮機器人在移動過程中視角變化、光照變化對閉環(huán)檢測的影響,對算法進行改進以達到更好的魯棒性。