蔣雪源,陳青梅,黃初華
(貴州大學計算機科學與技術學院,貴陽 550025)
實現移動設備實時精確的定位是移動增強現實技術的基本要求[1]。由于GPS、北斗等方式難以穿透建筑物,移動設備在建筑密集區域的定位比較困難,而利用超寬帶、紅外、超聲波等設備接收信號實現定位,需要在場景中部署設備[2]。以上兩類方法在實際應用時均有不足,而視覺定位方法不存在上述問題,因此受到眾多學者的關注[3]。
針對從場景圖像中估計查詢圖像位姿的問題,SARLIN 等[4]提出了層次定位方法。該方法利用卷積神經網絡在場景圖像中找到候選幀,候選幀聚類后與查詢圖像進行特征點匹配,建立特征點的2D-3D對應關系,使用PnP 算法估計相機位姿。之后,SARLIN 等[5]在層次定位方法的基礎上提出了分層特征網絡(Hierarchical Feature Network,HFNet),進一步改善了層次定位的性能。該方法聯合估計圖像的全局描述符與局部特征點,使層次定位方法具有出色的魯棒性。HFNet 將基于SIFT[6]的局部特征描述符替換為基于學習的局部特征描述符,引入了多任務知識蒸餾方法,使層次定位方法對計算資源的需求進一步減小。但是HFNet 估計全局描述符的效果仍需提升,這導致層次定位方法查找候選幀的失敗率較高同時,同時層次定位方法的聚類步驟計算量也比較大。
本文在HFNet 的基礎上,提出結合動態遍歷與預聚類的視覺定位方法。利用動態遍歷方式搜索候選幀,對粗略檢索步驟的候選幀數量做動態調整。在此基礎上,根據場景地圖進行圖像預聚類,引入壓縮-激勵模塊和h-swish 激活函數改進分層特征網絡。
目前視覺定位技術主要分為基于圖像檢索、基于場景地圖、基于學習3 類方法[5]。基于圖像檢索的方法通過在場景圖像中檢索查詢圖像,從場景圖像返回與查詢圖像最相似的圖像,近似得到查詢圖像的位姿[7-8]。該類方法可以應用到大型數據集中,但只能估計查詢圖像的近似位姿。基于場景地圖的方法[9-10]通過直接匹配查詢圖像與場景地圖建立查詢圖像特征點的2D-3D 對應關系,從而得到查詢圖像的相機位姿。在大型場景中,由于場景地圖規模龐大,該方法可靠性不高。基于學習的方法通過神經網絡學習方法獲得相機位姿,如KENDALL 等[11]提出的PoseNet,通過訓練室內與室外場景圖像和圖像對應的相機位姿,預測出查詢圖像的相機位姿。該方法在大規模變化場景下具有出色的魯棒性,但定位精度不能達到增強現實應用的要求。
作為一種結合圖像檢索與場景地圖的視覺定位方法,層次定位方法可在大型數據集中估計查詢圖像的精確位姿,但其需要提取場景圖像的特征點構建場景地圖。首先在場景圖像中根據全局描述符對查詢圖像進行粗略檢索,得到由場景圖像組成的候選幀集合;然后將有共同特征點的候選幀聚類為一組,查詢圖像與各組候選幀進行局部特征點匹配,匹配的特征點可以從場景地圖得到三維坐標,構建特征點的2D-3D 對應關系;最后使用PnP 算法估計查詢圖像的相機位姿。針對層次定位中全局描述符與局部特征點的提取,HFNet 進行聯合估計。該方法以MobileNetV2[12]為編碼器,以NetVLAD[8]和SuperPoin[13]為解碼器。其中,NetVLAD 解碼器輸出圖像的全局描述符,SuperPoint 解碼器輸出圖像的局部特征點。然而,HFNet 存在全局描述符檢索率低的問題,且聚類步驟的速度仍需提升。本文通過分析相機位姿恢復失敗的查詢圖像,發現大部分恢復失敗的圖像并沒有搜索出正確的候選幀。如圖1 所示,Query.jpg為查詢圖像,其余圖像為粗略檢索得到的候選幀。可以看出,查詢圖像與候選幀并不在同一地點,在候選幀數量有限的情況下會出現粗略檢索候選幀失敗的現象,導致恢復相機位姿失敗。增加候選幀的數量可以緩解這個問題,但會增加聚類與局部特征點匹配的圖像數量,導致運算量成倍增加。

圖1 相機位姿估計失敗的查詢圖像與候選幀Fig.1 The query images and candidate frames where camera pose estimation fails
本文提出了基于動態遍歷與預聚類的層次定位方法,算法框架如圖2 所示,其中上半部分為場景圖像預處理,構建場景地圖與聚類信息;下半部分為相機位姿估計。

圖2 本文方法框架Fig.2 Framework of the proposed method
本文方法主要步驟如下:
1)利用基于MobileNetV3[14]的分層特征網絡(簡稱HFNet-Mv3)提取全局描述符與局部特征點,全局描述符用于查詢圖像與場景圖像的粗略檢索,局部特征點用于構建場景稀疏地圖Q。
2)通過場景地圖Q 對場景圖像進行預聚類。層次定位方法先在場景圖像中找到候選幀,再將這些候選幀按照是否為同一地點進行聚類,將有共同特征點的候選幀分為一組。筆者發現參與聚類步驟的圖像均為場景圖像,利用場景地圖對場景圖像進行預聚類處理,使得上述步驟可以直接對候選幀分組,降低了聚類步驟的運算量,且聚類結果不變。以場景圖像L為例,預聚類步驟如下:記圖像L的特征點為集合F,F={α1,α2,…,αn},α為集合F中的特征點,記I=P(αk)為擁有特征點αk的場景圖像,αk?F。遍歷特征點集合F,將擁有這些特征點的場景圖像記為圖像L的聚類隊列M,即M=(I|I=P(αk),αk?F)。查找所有場景圖像的聚類隊列并保存,就能得到場景圖像的聚類信息。
3)動態遍歷搜索候選幀。如圖3 所示,查詢圖像與場景圖像進行全局描述符匹配,得到m張場景圖像組成的候選幀,這些候選幀選取前n張進行層次定位。聚類信息包含每個場景圖像擁有共同特征點的圖像序列,與候選幀匹配可直接完成聚類步驟。算法對參與層次定位的候選幀數量進行動態調整,若前n張候選幀層次定位失敗,視為選中的候選幀沒有查詢圖像所在的地點,則動態增加候選幀數量,候選幀向后選取n張圖片繼續進行層次定位。以n張圖片為動態查詢窗口,直到計算出查詢圖像的相機位姿。候選幀數量對粗略檢索的速度影響不大,對聚類和局部特征點匹配的速度影響很大。動態遍歷搜索候選幀的方法使聚類與局部特征點匹配的候選幀數量保持不變,對粗略檢索步驟的候選幀數量進行動態調整,從而以較小的計算量代價緩解了查詢圖像定位失敗的問題。

圖3 動態查詢流程Fig.3 Procedure of dynamic query
本文算法使用基于MobileNetV3 的HFNet-Mv3提取查詢圖像的全局描述符與局部特征參與層次定位過程。MobileNetV3 使用神經網絡搜索算法構建全局的網絡結構,利用NetAdapt[15]算法對每層卷積核數量進行優化。在網絡結構上引入了壓縮-激勵模塊[16](Squeeze-and-Excite,SE),網絡根據損失函數學習特征權重,增大有效的特征圖權重,減小無效或效果小的特征圖權重,從而達到更好的訓練效果。
HFNet 使用ReLU 激活函數,swish 激活函數在深層模型上的效果優于ReLU,但計算量大。MobileNetV3 引入了h-swish 激活函數,在降低計算量的同時對swish 激活函數進行了擬合,其定義如式(1)所示:

為提升分層特征網絡的性能,本文以MobileNetV3-Large[14]作為分 層特征網 絡的編 碼器,以NetVLAD 和SuperPoin 作為解碼器,提出了改進的分層特征網絡HFNet-Mv3,其網絡結構如圖4所示。

圖4 HFNet-Mv3 的網絡結構Fig.4 Network structure of HFNet-Mv3
HFNet-Mv3 的編碼器由op-hard_swish、mbv3_op、mbv3_op_se 等6 個模塊組成,其 中:mbv3_op_se 與mbv3_op_se-hard_swish 引入了壓縮-激勵模塊;op-hard_swish、mbv3_op-hard_swish 和mbv3_op_se-hard_swish 使 用了h-swish 激活函數。除op-hard_swish 外編碼器以深度可分離卷積[17]作為卷積核的基本單位。
SuperPoint解碼器需要更高的分辨率來保留特征,因此,在mbv3_op_se層之后,即在HFNet-Mv3的第7層引入了SuperPoint解碼器,用來輸出圖像像素的特征點概率和局部特征描述符。由于NetVLAD 解碼器需要更多的語義信息用于輸出圖像的全局描述符,因此在HFNet-Mv3 的最末端引入了NetVLAD 解碼器。
損失函數如式(2)所示:

其中:ωi為優化變量,用于避免手動調節各個損失函數的權重[18];為HFNet-Mv3 的全局描述符輸出;為教師網絡的全局描述符輸出;為HFNet-Mv3的局部特征描述符輸出為教師網絡的局部特征描述符輸出;ps為HFNet-Mv3 的局部特征點輸出;pt3為教師網絡的局部特征點輸出,局部特征點采用交叉熵計算損失。
基于TensorFlow1.14.0 和pytorch0.4.1 框架進行實驗,訓練實驗的硬件配置如下:IntelXeon?CPUE5-2620v42.10 GHz,NVIDIATITANXp12 GB;定位實驗的硬件配置如下:IntelCorei58300H2.30 GHz,NVIDIAGTX10606 GB。
采 用GoogleLandmarks 和Berkeley DeepDrive 數 據集訓練HFNet-Mv3。Google Landmarks 數據集包括世界各地的城市場景,選取其中的185 000 張圖片進行訓練;BerkeleyDeepDrive 數據集由黃昏與夜間的道路場景組成,選取其中的37 681 張圖片參與訓練。所有圖片都預處理為480 像素×640 像素的灰度圖。采用SuperPoint與NetVLAD 作為HFNet-Mv3 的教師網絡,分別估計GoogleLandmarks 數據集和Berkeley DeepDrive 數據集的局部特征點、局部特征描述符和全局描述符作為圖像標簽。對HFNet-Mv3 進行多任務知識蒸餾訓練[19],batch_size 為16,通道乘數[12]為0.75,總迭代次數為85 000 次,初始學習率設置為10-3,隨迭代進行,微調學習率。
在AachenDay-Night 和CMUSeasons 數據集上評估HFNet-Mv3 對HFNet 的提升效果,每個數據集由稀疏的場景地圖和圖像組成。AachenDay-Night數據集包含了4 328 張來自Aachen 舊城區白天的場景圖像、824 張白天查詢圖像和98 張夜間的查詢圖像。CMUSeasons 數據集記錄了不同季節的圖像,由17 個子集組成,包含了市區與郊區的7 159 張場景圖像和75 335 張查詢圖像,由于季節、光照和天氣的變化導致環境條件的變化,該數據集具有挑戰性。由數據集作者提供的場景地圖并不適用于分層特征網絡定位,因此,本文利用HFNet-Mv3 在場景圖像中提取特征點,利用COLMAP[20]軟件對特征點進行匹配與三角測量,得到該數據集的場景地圖。
選用通用的基準數據集AachenDay-Night 和CMUSeasons 進行測試,并將測試結果與ActiveSearch(AS)[21]、CityScaleLocalization(CSL)[9]、DenseVLAD[22]、NetVLAD、DIFL+FCL[23]和HFNet 作為定位精度基準進行對比。AS 和CSL 是基于場景地圖的視覺定位方法,DenseVLAD、NetVLAD 和DIFL+FCL 是基于圖像檢索的視覺定位方法,本文方法使用HFNet-Mv3 提取圖像的全局描述符與局部特征點,使用基于預聚類與動態遍歷的視覺定位方法估計相機位姿。
通過相機位姿的估計值與真實值之間的偏差來評估算法的精度。將定位結果上傳到數據集作者的網站(https://www.visuallocalization.net/submission/),由數據集作者對算法的位姿精度進行評估。數據集作者設定3 個位姿精度區間,即高精度(0.25 m,2°)、中精度(0.5 m,5°)和低精度(5 m,10°),通過比較在不同精度條件下的召回率來比較算法的精度。
通過記錄算法在不同步驟的運行時間,比較本文算法與HFNet 的運行速度。由于實驗硬件配置差異的原因,實驗結果與原文獻數據會略有不同。
表1 為視覺定位方法在不同距離與角度閾值下的召回率,從左到右依次為高精度、中精度和低精度的召回率,算法性能已在數據集網站公開(本文方法名稱為Dynamic retrieval and pre-clustering for HFNet-Mv3),其中DIFL+FCL 的作者只在CMUSeasons 數據集上做了測試。由表1 可以看出,本文方法在不同距離與角度閾值下的召回率均大于其他算法,在Aachen 夜間與CMU 公園場景的精度上,相對HFNet 提升5%以上。夜間圖像粗略檢索正確的候選幀比較困難,公園場景圖像的季節、光照和植物的變化更明顯,導致層次定位失敗。對比HFNet,本文方法緩解了這個問題,因此,Aachen 的夜間圖像與CMU 的公園場景圖像估計相機位姿精度的提升效果更明顯。

表1 在AachenDay-Night 和CMUSeasons 數據集上的定位精度對比Table 1 Localization accuracy comparison on AachenDay-Night and CMUSeasons datasets %
表2 為視覺定位方法在不同步驟的運行時間,從左到右依次為特征提取、全局檢索候選幀、聚類、局部特征點匹配、PnP 求解相機位姿和總耗時,CMUslice2、CMUslice9、CMUslice25 分別為CMUSeasons在市區、郊區與公園場景的子集。由表2 可以看出,本文方法在特征提取與全局檢索候選幀步驟的耗時與HFNet 幾乎一致。由于本文方法采用了預聚類策略,聚類步驟的耗時縮短為HFNet 的10%。針對HFNet 檢索正確候選幀失敗的查詢圖像,本文方法動態增加候選幀的數量,導致局部特征點匹配與PnP 求解相機位姿的平均耗時增加。由于聚類步驟耗時的大幅縮短,本文方法總耗時與HFNet 幾乎一致。

表2 在AachenDay-Night 和CMUSeasons 數據集上的定位速度對比Table 2 Localization speed comparison on AachenDay-Night and CMUSeasons datasets ms
本文提出的動態遍歷方法有2 個關鍵參數,即候選幀數量m和動態查詢圖像數量n。候選幀數量決定了分層特征網絡獲取正確候選幀的能力,隨著候選幀數量的提升,定位精度的提升變得不明顯,而速度明顯降低。動態查詢圖像數量決定了聚類圖像數量,太小會減少匹配的特征點數量,影響定位精度,太大會導致下一窗口得不到充足的聚類圖像,并降低運行速度。
表3 和表4 為不同動態遍歷參數下本文方法在AachenDay-Night 數據集中的定位精度與速度。由于動態遍歷參數不影響特征提取,因此特征提取步驟耗時相同。候選幀數量m設為80,定位精度最高,但速度降低幅度過大。由實驗結果可得,候選幀數量m設為40,動態查詢圖像數量n設為10 的情況下,定位精度與速度最優。

表3 不同參數情況下本文方法在AachenDay-Night數據集上的定位精度Table 3 Localization accuracy of the proposed method on AachenDay-Night dataset under different parameters %

表4 不同參數情況下本文方法在AachenDay-Night數據集上的定位速度Table 4 Localization speed of the proposed merthod on AachenDay-Night dataset under different parameters ms
本文針對層次定位方法粗略檢索失敗率高和聚類耗時長的問題,在分層特征網絡中引入壓縮-激勵模塊與h-swish 激活函數,提出基于動態遍歷與預聚類的視覺定位方法。在2 個通用基準數據集上的實驗結果表明,本文方法通過對粗略檢索步驟的候選幀數量進行動態調整,有效降低了檢索候選幀的失敗率,與HFNet 方法相比,高精度、中精度和低精度的召回率均有所提升,其中夜間與公園場景的精度提升達到5%以上。同時該方法采用了預聚類策略,使得運行速度與HFNet 基本一致。本文方法適用于城市和郊區等室外場景,下一步將針對室內環境訓練優化HFNet-Mv3,并對室內環境下的層次定位方法進行改進。