李志強(qiáng), 朱 明
(中國科學(xué)技術(shù)大學(xué) 信息科學(xué)技術(shù)學(xué)院, 合肥 230027)
圖像特征點(diǎn)及描述子提取是計(jì)算機(jī)視覺方向研究核心問題之一, 提取圖像特征點(diǎn)可以將大量的圖像信息稀疏化, 從而更好地進(jìn)行信息壓縮, 而提取描述子則是對(duì)特征點(diǎn)周圍信息進(jìn)行描述, 生成特征向量, 用以和其他區(qū)域進(jìn)行區(qū)分.圖像特征點(diǎn)及描述子提取正被廣泛應(yīng)用于圖像匹配[1], 3D重建[2]和SLAM[3]等諸多領(lǐng)域, 優(yōu)秀的圖像特征點(diǎn)及描述子提取算法可以對(duì)計(jì)算機(jī)視覺的發(fā)展發(fā)揮巨大的作用.
自2012年以來, 深度學(xué)習(xí)[4]以其提取特征更豐富、魯棒性更強(qiáng)、精度更高和不需要手工設(shè)計(jì)特征等優(yōu)點(diǎn)在圖像分類[5]、目標(biāo)檢測(cè)[6]和圖像分割[7]等領(lǐng)域有了飛速發(fā)展.近些年來, 深度學(xué)習(xí)與特征點(diǎn)及描述子提取的結(jié)合也是該領(lǐng)域研究的一大熱點(diǎn)問題.
目前的特征點(diǎn)及描述子提取算法主要有以下兩類:完全手工設(shè)計(jì)特征和通過深度學(xué)習(xí)提取特征.
完全手工設(shè)計(jì)特征指的是特征點(diǎn)及描述子提取的算法完全通過手工設(shè)計(jì)獲得, 圖像信息獲取完全依靠手工設(shè)計(jì)的算法獲取, 如SIFT和SURF算法.Lowe[1]提出的SIFT算法是通過構(gòu)建圖像高斯金字塔進(jìn)而構(gòu)建DOG金字塔, 在DOG金字塔中尋找滿足條件的極值點(diǎn)作為特征點(diǎn).SIFT算法是通過統(tǒng)計(jì)特征點(diǎn)鄰域梯度分布信息提取出特征點(diǎn)主方向, 將坐標(biāo)軸旋轉(zhuǎn)到主方向, 計(jì)算以特征點(diǎn)為中心16×16窗口內(nèi)像素梯度的幅度和方向, 歸一化后形成128維特征向量作為描述子.而Bay等人[8]針對(duì)SIFT算法計(jì)算量較大的缺點(diǎn)進(jìn)行改進(jìn)提出了SURF算法, 利用Hessian矩陣提取特征點(diǎn), 減少了圖像下采樣的時(shí)間消耗.SURF算法通過統(tǒng)計(jì)特征點(diǎn)鄰域內(nèi)的Harr小波特征獲取特征點(diǎn)主方向,在沿著特征點(diǎn)主方向的鄰域內(nèi), 提取Harr特征形成64維特征向量作為描述子.完全手工設(shè)計(jì)的特征點(diǎn)和描述子提取算法是通過數(shù)學(xué)公式對(duì)圖片進(jìn)行進(jìn)化和抽象來提取信息, 其魯棒性和泛化性較大規(guī)模數(shù)據(jù)集驅(qū)動(dòng)的深度學(xué)習(xí)具有天然劣勢(shì).
通過深度學(xué)習(xí)提取特征點(diǎn)或描述子的過程不依靠手工設(shè)計(jì)的算法獲得, 是通過卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練和推理獲得.由于深度學(xué)習(xí)魯棒性和泛化性較好, 因此這種方式獲得的特征點(diǎn)或描述子也較手工設(shè)計(jì)的方式泛化性能更好.Tian等人[9]提出的L2-Net利用卷積神經(jīng)網(wǎng)絡(luò)在歐幾里得空間學(xué)習(xí)圖像塊描述子的特征.網(wǎng)絡(luò)輸入是圖像塊, 輸出是128維向量, 網(wǎng)絡(luò)以L2范數(shù)描述圖像特征之間的距離, 用損失函數(shù)約束匹配上的圖像塊對(duì)的描述子距離盡可能近, 不匹配上的圖像塊對(duì)的描述子距離盡可能遠(yuǎn).Mishchuk等人[10]提出的HardNet在L2-Net基礎(chǔ)上改進(jìn)了損失函數(shù).HardNet參照SIFT算法, 使用損失函數(shù)最大化最近鄰正樣本和負(fù)樣本之間的距離.Barroso-Laguna等人[11]提出的Key.Net則是將手工設(shè)計(jì)和卷積神經(jīng)網(wǎng)絡(luò)結(jié)合形成新的多尺度特征點(diǎn)檢測(cè)網(wǎng)絡(luò).DeTone等人[12]的SuperPoint、Ono等人[13]的LF-Net和Dusmanu等人[14]的D2-Net等均是端到端學(xué)習(xí)特征, 輸入一張圖片, 輸出特征點(diǎn)和描述子.其中SuperPoint提出一種自監(jiān)督方式訓(xùn)練網(wǎng)絡(luò)提取特征點(diǎn)和描述子.SuperPoint網(wǎng)絡(luò)有兩個(gè)分支分別進(jìn)行特征點(diǎn)和描述子的提取, 共享相同的編碼器.LF-Net由兩部分組成: 全卷積網(wǎng)絡(luò)生成特征點(diǎn)和通過可微采樣器在獲取特征點(diǎn)附近圖像生圖像塊并將圖像塊輸入描述子提取網(wǎng)絡(luò)生成描述子.D2-Net與之前完全手工設(shè)計(jì)特征算法的先生成特征點(diǎn)再提取描述子過程和SuperPoint算法的特征點(diǎn)與描述子并行生成過程均不相同, D2-Net只生成描述子, 再根據(jù)當(dāng)前點(diǎn)的描述子在最大響應(yīng)通道中是否為局部最大值判斷當(dāng)前的是否為特征點(diǎn).
大數(shù)據(jù)驅(qū)動(dòng)的深度學(xué)習(xí)能夠比完全手工設(shè)計(jì)的算法提取更深層次的圖像特征, 魯棒性和泛化能力更強(qiáng).而端到端學(xué)習(xí)特征的網(wǎng)絡(luò)減少了工程的復(fù)雜度也減少了誤差的累計(jì).在端到端提取特征點(diǎn)和描述子網(wǎng)絡(luò)中SuperPoint是其中效果較好的網(wǎng)絡(luò), SuperPoint網(wǎng)絡(luò)輸出的特征點(diǎn)和描述子精度較高, 網(wǎng)絡(luò)結(jié)構(gòu)較其他網(wǎng)絡(luò)更為簡(jiǎn)單, 因此本文選擇在SuperPoint網(wǎng)絡(luò)上進(jìn)行進(jìn)一步優(yōu)化.SuperPoint網(wǎng)絡(luò)雖然網(wǎng)絡(luò)結(jié)構(gòu)較為簡(jiǎn)單, 但是對(duì)于計(jì)算能力較低的設(shè)備, 如嵌入式設(shè)備, SuperPoint網(wǎng)絡(luò)參數(shù)量和運(yùn)算量仍較大, 不能實(shí)現(xiàn)實(shí)時(shí)運(yùn)行, 因此本文在SuperPoint網(wǎng)絡(luò)基礎(chǔ)上進(jìn)行優(yōu)化, 構(gòu)造效果接近SuperPoint網(wǎng)絡(luò), 但參數(shù)量和運(yùn)算量更低的輕量型網(wǎng)絡(luò), 實(shí)現(xiàn)在計(jì)算能力較低的設(shè)備上實(shí)時(shí)運(yùn)行的目標(biāo).
為了實(shí)現(xiàn)SuperPoint網(wǎng)絡(luò)的輕量化, 本文首先更改SuperPoint網(wǎng)絡(luò)的卷積方式、卷積層數(shù)和下采樣方式, 將普通卷積改成深度可分離卷積[15]并且減少了網(wǎng)絡(luò)層數(shù), 然后對(duì)網(wǎng)絡(luò)進(jìn)行進(jìn)一步剪枝, 進(jìn)一步減少網(wǎng)絡(luò)參數(shù)和運(yùn)算量.
SuperPoint是端到端的特征點(diǎn)及描述子提取網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)是類似語義分割網(wǎng)絡(luò)的編碼器-解碼器結(jié)構(gòu),輸入一張完整的圖片, 經(jīng)過共享的編碼器提取圖像深層特征, 再分別經(jīng)過特征點(diǎn)和描述子兩個(gè)解碼器, 分別輸出特征點(diǎn)和描述子, 與完全手工設(shè)計(jì)算法的先檢測(cè)特征點(diǎn), 再計(jì)算描述子不同, 特征點(diǎn)和描述子并行生成.SuperPoint網(wǎng)絡(luò)結(jié)構(gòu)如表1所示, 表中每一行為一個(gè)卷積通道, 第一個(gè)數(shù)字是輸入通道, 中間兩個(gè)數(shù)字是卷積核大小, 最后一個(gè)數(shù)字是卷積核數(shù)目, “+池化”是指在卷積后進(jìn)行最大池化操作.共享編碼器結(jié)構(gòu)類似與VGG網(wǎng)絡(luò)[16]的卷積結(jié)構(gòu), 前6層每經(jīng)過兩次3×3卷積后緊跟著進(jìn)行2×2最大池化, 共享編碼器經(jīng)過卷積池化等操作后, 進(jìn)行了圖片降維, 提取了深層特征, 減少了后續(xù)的計(jì)算量.經(jīng)過特征點(diǎn)解碼器和描述子解碼器輸出的特征圖大小為原圖的大小的1/8, 為了輸出了原圖一樣大小的特征圖, 特征點(diǎn)解碼器輸出的特征圖進(jìn)行8倍的子像素卷積, 描述子解碼器輸出特征圖進(jìn)行8倍上采樣.
表1 SuperPoint網(wǎng)絡(luò)結(jié)構(gòu)
SuperPoint網(wǎng)絡(luò)是使用自監(jiān)督方式進(jìn)行訓(xùn)練, 訓(xùn)練過程如下所示: (1)構(gòu)建包含基礎(chǔ)圖形的虛擬圖片, 如線、多邊形和立方體等組成的圖片.已知虛擬圖片的角點(diǎn), 訓(xùn)練編碼器和特征點(diǎn)解碼器提取特征點(diǎn).(2)使用訓(xùn)練好的編碼器和特征點(diǎn)解碼器輸出真實(shí)圖片及其N個(gè)經(jīng)過隨機(jī)單應(yīng)性變換圖片的特征點(diǎn), 將N個(gè)經(jīng)過隨機(jī)單應(yīng)性變換圖片的特征點(diǎn)通過逆向單應(yīng)性變換還原到原圖上, 與原圖的特征點(diǎn)合并為增強(qiáng)的特征點(diǎn)數(shù)據(jù)集.(3)將真實(shí)圖片及其經(jīng)過單應(yīng)性變換后的圖片輸入SuperPoint網(wǎng)絡(luò)中, 根據(jù)特征點(diǎn)的位置和特征點(diǎn)的對(duì)應(yīng)關(guān)系訓(xùn)練網(wǎng)絡(luò)生成特征點(diǎn)及描述子.
本文使用的損失函數(shù)與SuperPoint網(wǎng)絡(luò)的損失函數(shù)保持一致.損失函數(shù)由特征點(diǎn)損失和描述子損失兩部分組成, 如式(1)所示:
其中,X,D分別為原圖輸入網(wǎng)絡(luò)后輸出的特征點(diǎn)特征圖和描述子特征圖,Y為原圖特征點(diǎn)的的標(biāo)簽值,X',D'和Y'對(duì)應(yīng)輸入圖片為原圖經(jīng)過單應(yīng)性變換后的圖片, 其余含義與X,D和Y相同,S由式(5)說明.Lp和Ld分別表示特征點(diǎn)損失和描述子損失, 超參數(shù)λ用來平衡特征點(diǎn)檢測(cè)損失和描述子損失.Lp具體公式如下所示:
其中,Hc,Wc分別表示特征點(diǎn)特征圖的高和寬.xhw,yhw分別表示X,Y在(h,w)處的值.lp具體公式如下所示:
其中,xhwk表示為xhw在第k個(gè)通道的值.lp使得xhw在標(biāo)簽值y對(duì)應(yīng)的通道上盡可能大.
其中,dhw,dh′w′分別表示D,D′在 (h,w), (h′,w′)處的值.由于共享編碼器經(jīng)過8倍下采樣, 因此輸出的描述子特征圖中的點(diǎn)對(duì)應(yīng)輸入圖片中一個(gè)8×8像素點(diǎn)的圖片單元.shwh′w′用來判斷dhw對(duì)應(yīng)輸入圖片單元的中心位置經(jīng)過與原圖一致的單應(yīng)性變換后, 是否在d′h′w′對(duì)應(yīng)輸入圖片單元的中心位置的鄰域內(nèi),shwh′w′是用來判斷dhw,d′h′w′在原圖中對(duì)應(yīng)位置是否相近.shwh′w′=1 表示在原圖中對(duì)應(yīng)位置相近, 為正向?qū)?yīng), 反之為反向?qū)?yīng).shwh′w′和ld具體公式如下所示:
其中,phw,ph′w′分別表示dhw,d′h′w′對(duì)應(yīng)的輸入圖片單元的位置中心.Hphw是對(duì)phw, 進(jìn)行與原圖相同的單應(yīng)性變換.
其中, 超參數(shù)λd用來平衡描述子內(nèi)部正向?qū)?yīng)損失和負(fù)向?qū)?yīng)損失值, 超參數(shù)mp為正向?qū)?yīng)閾值,mn為負(fù)向?qū)?yīng)閾值.
為了降低運(yùn)算量和參數(shù)量, 本文將SuperPoint網(wǎng)絡(luò)中除共享編碼器第一層以外的其余卷積更換成深度可分離卷積.深度可分離卷積將傳統(tǒng)的卷積方式分成逐層卷積和逐點(diǎn)卷積兩部分, 如圖1所示, 左側(cè)為逐層卷積過程, 右側(cè)為逐點(diǎn)卷積過程.假設(shè)輸入特征圖大小為H×W, 通道數(shù)是Cin, 逐層卷積是對(duì)每一個(gè)通道使用S×S大小的1個(gè)通道的卷積核進(jìn)行卷積, 逐層卷積對(duì)通道內(nèi)的特征信息進(jìn)行處理.逐點(diǎn)卷積是使用1×1大小的卷積核進(jìn)行傳統(tǒng)方式卷積, 處理通道間的特征信息.假設(shè)輸入特征圖大小為H×W, 通道數(shù)是Cin, 卷積核大小是S×S, 卷積核數(shù)目是Cout, 對(duì)傳統(tǒng)卷積來說參數(shù)量為Cin×S×S×Cout, 運(yùn)算量為H×W×Cin×S×S×Cout, 對(duì)逐層卷積來說, 參數(shù)量為Cin×S×S×1, 為傳統(tǒng)卷積的 1/Cout,運(yùn)算量為H×W×Cin×S×S×1, 為傳統(tǒng)卷積的 1/Cout.對(duì)逐點(diǎn)卷積來說, 參數(shù)量為Cin×1×1×Cout, 為傳統(tǒng)卷積的1/S2, 運(yùn)算量為H×W×Cin×1×1×Cout, 為傳統(tǒng)卷積的 1/S2.因此深度可分離卷積的參數(shù)量和運(yùn)算量均為傳統(tǒng)卷積的1/Cout+1/S2.通常來說, 卷積核大小S為3, 卷積核數(shù)目Cout遠(yuǎn)遠(yuǎn)大于9, 因此深度可分離卷積的參數(shù)量和運(yùn)算量大概是傳統(tǒng)卷積的1/9.深度可分離卷積既處理了通道內(nèi)的特征信息也處理了通道間的特征信息, 可以替代傳統(tǒng)卷積進(jìn)行, 減少了網(wǎng)絡(luò)的參數(shù)量和運(yùn)算量.
圖1 深度可分離卷積的卷積和剪枝過程
為了進(jìn)一步減少網(wǎng)絡(luò)參數(shù)量和運(yùn)算量, 本文將原始共享編碼器的卷積層數(shù)和下采樣方式進(jìn)行更改.具體操作如下所示: (1)原始編碼器的8層卷積改成6卷積; (2)將卷積+最大池化的下采樣方式更改為步長(zhǎng)為2卷積, 這樣卷積的運(yùn)算量變?yōu)樵瓉淼?/2, 并且省去了最大池化的計(jì)算; (3)為了彌補(bǔ)這些操作帶來的特征信息損失, 本文將共享編碼器的輸出維度設(shè)置成256維.
為了進(jìn)一步對(duì)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行優(yōu)化, 本文進(jìn)一步對(duì)網(wǎng)絡(luò)進(jìn)行剪枝, 尋找更優(yōu)的網(wǎng)絡(luò)結(jié)構(gòu).Liu等人[17]提出的通道剪枝算法是一種效果較好的算法, 該算法對(duì)VGG參數(shù)量壓縮20倍, 運(yùn)算量壓縮5倍, 而沒有影響精度.但是算法是根據(jù)傳統(tǒng)卷積設(shè)計(jì)的, 本文將其進(jìn)行改進(jìn)應(yīng)用于深度可分離卷積中, 壓縮本文的網(wǎng)絡(luò).
Liu等人的通道剪枝算法是通過批歸一化中γ參數(shù)衡量通道的重要程度, 刪除低于某個(gè)閾值的通道,進(jìn)而刪除與之關(guān)聯(lián)的卷積核, 重新訓(xùn)練進(jìn)行微調(diào), 完成剪枝過程.批歸一化的過程如式(7)所示, 其中xi是批歸一化的輸入的一個(gè)通道的特征,yi是批歸一化的輸出的一個(gè)通道的特征, μB和 σB分別為批特征的均值和方差, γ和 β 為批歸一化中的參數(shù).對(duì)于某個(gè)通道而言, 若其批歸一化中的參數(shù) γ較小, 其歸一化輸出值也較小, 可認(rèn)為該通道不重要, 則可以刪除生成這個(gè)通道的卷積核與下一層卷積核中對(duì)應(yīng)的該通道的通道.具體衡量標(biāo)準(zhǔn)是將網(wǎng)絡(luò)中所有的批歸一化參數(shù) γ進(jìn)行升序排序, 根據(jù)需要將前面一定比例較小的 γ對(duì)應(yīng)通道進(jìn)行刪除.中間層的卷積核剪枝應(yīng)該包括兩部分:(1)輸入通道的刪除導(dǎo)致卷積核中對(duì)應(yīng)通道的刪除;(2)輸出通道的刪除導(dǎo)致對(duì)應(yīng)卷積核的刪除.卷積核剪枝意味著尋找到一個(gè)較優(yōu)的網(wǎng)絡(luò)結(jié)構(gòu), 再進(jìn)行訓(xùn)練進(jìn)行微調(diào)提升其精度.
Liu等人的通道剪枝算法是刪除所有批歸一化中γ中較小的值對(duì)應(yīng)的通道.在深度可分離卷積中, 逐層卷積后續(xù)操作也是批歸一化, 但是逐層卷積的輸入輸出通道數(shù)應(yīng)該相同, 因此深度可分離卷積中只能通過逐點(diǎn)卷積中的批歸一化衡量通道重要程度.逐層卷積剪枝是通過輸入通道的刪除而進(jìn)行剪枝, 具體流程參見算法1.
算法1.深度可分離網(wǎng)絡(luò)剪枝算法images/BZ_317_1898_3031_1923_3064.png1) 將所有非逐層卷積后的批歸一化參數(shù) 進(jìn)行升序排序, 刪除前a%對(duì)應(yīng)的通道;
2) 如圖1所示, 圖中白色部分代表特征圖和核卷積核被刪除.輸入通道的刪除導(dǎo)致逐層卷積核中對(duì)應(yīng)通道的刪除以及逐點(diǎn)卷積核中對(duì)應(yīng)通道的刪除;3) 輸出通道的刪除導(dǎo)致逐點(diǎn)卷積中對(duì)應(yīng)卷積核的刪除;4) 對(duì)剪枝后的網(wǎng)絡(luò)重新訓(xùn)練進(jìn)行微調(diào).
本文中a設(shè)置為20, 剪枝前共享編碼器的輸出通道為[64, 64, 128, 128, 256], 特征點(diǎn)解碼器輸出通道為[256, 65], 描述子解碼器輸出通道為[256, 256], 剪枝后共享編碼器的輸出通道變?yōu)閇35, 47, 94, 86, 147], 特征點(diǎn)解碼器輸出通道變?yōu)閇256, 65], 描述子解碼器輸出通道變?yōu)閇256, 256].可以發(fā)現(xiàn), 共享編碼器相對(duì)于解碼器結(jié)構(gòu)更為復(fù)雜, 存在較多冗余信息, 被刪除較多.
本文實(shí)驗(yàn)過程中使用操作系統(tǒng)為Ubuntu 18.04, 深度學(xué)習(xí)框架為PyTorch 1.3.在測(cè)試FPS時(shí)使用的硬件環(huán)境為NVIDIA Jetson TX2開發(fā)板和AMD Ryzen 5 4600U CPU, 其他情況下硬件環(huán)境為Intel Core i7-7800X CPU+ NVIDIA GeForce GTX 1080 Ti GPU.本文實(shí)驗(yàn)過程中超參數(shù)設(shè)置與SuperPoint網(wǎng)絡(luò)保持一致,損失函數(shù)中λ=0.000 1,λd=250, 正向?qū)?yīng)閾值mp=1, 負(fù)向?qū)?yīng)閾值mn=0.2.訓(xùn)練過程中批處理大小為32, 使用ADAM優(yōu)化器,lr=0.001,β=(0.9, 0.999).
本文分析了改進(jìn)后的網(wǎng)絡(luò)和SuperPoint網(wǎng)絡(luò)在參數(shù)量、運(yùn)算量以及HPatches數(shù)據(jù)集[18]評(píng)估效果對(duì)比.
參數(shù)量和運(yùn)算量對(duì)比如表2所示, SuperPoint+2.1代表使用2.1節(jié)中的優(yōu)化方法, 即將傳統(tǒng)卷積改成深度可分離卷積, 改變卷積層數(shù)和下采樣方式, SuperPoint+2.1+2.2代表在2.1節(jié)優(yōu)化方法的基礎(chǔ)上使用2.2節(jié)的優(yōu)化方法, 即進(jìn)一步進(jìn)行網(wǎng)絡(luò)剪枝.浮點(diǎn)運(yùn)算數(shù)代表運(yùn)行網(wǎng)絡(luò)所需要的浮點(diǎn)運(yùn)算次數(shù)用來表示網(wǎng)絡(luò)計(jì)算量.實(shí)驗(yàn)結(jié)果表明, 使用2.1的優(yōu)化方式后, 參數(shù)量被壓縮為原始網(wǎng)絡(luò)的22%, 運(yùn)算量被壓縮為原始網(wǎng)絡(luò)的8%.使用本文最終的優(yōu)化方法(2.1+2.2節(jié)優(yōu)化方式)后, 參數(shù)量被壓縮為原始網(wǎng)絡(luò)的15%, 運(yùn)算量被壓縮為原始網(wǎng)絡(luò)的5%, 大大降低了網(wǎng)絡(luò)參數(shù)量和運(yùn)算量.
表2 參數(shù)量與運(yùn)算量對(duì)比
FPS表示網(wǎng)絡(luò)每秒鐘處理圖片幀數(shù), 反應(yīng)網(wǎng)絡(luò)運(yùn)行速度.FPS對(duì)比如圖表3所示, 480×640_tx2表示實(shí)驗(yàn)硬件環(huán)境為嵌入式NVIDIA Jetson TX2開發(fā)板, 使用其配置GPU進(jìn)行推理, 圖片分辨率為480×640.240×320_cpu和480×640_cpu則表示實(shí)驗(yàn)硬件環(huán)境均為筆記本小新PRO13 2020, 使用其配置的CPU AMD Ryzen 5 4600U進(jìn)行推理, 圖片分辨率分別為240×320和480×640.可以看出本文優(yōu)化后網(wǎng)絡(luò)的FPS在3次對(duì)比中分別提升5.07, 7.19和7.68倍, 均值為6.65倍,FPS 提升較大.在 480×640_tx2和 240×320_cpu條件下, 本文網(wǎng)絡(luò)近似實(shí)現(xiàn)了實(shí)時(shí)運(yùn)行的目標(biāo).
表3 FPS對(duì)比
本文參照發(fā)布SuperPoint論文中的評(píng)估方式, 在Hatches數(shù)據(jù)集進(jìn)行評(píng)估, Hatches數(shù)據(jù)集是2017年發(fā)布的特征點(diǎn)及描述子評(píng)估數(shù)據(jù)集.Hatches數(shù)據(jù)集內(nèi)部包含屬于116的696張照片, 其中57個(gè)場(chǎng)景屬于大幅度的光照變化, 59個(gè)場(chǎng)景屬于大幅度的視角變化.本文接下來分別對(duì)比SuperPoint和本文方法在特征點(diǎn)檢測(cè)和特征點(diǎn)匹配效果的對(duì)比, 對(duì)比實(shí)現(xiàn)過程中網(wǎng)絡(luò)使用的超參數(shù)設(shè)置均相同.
本文使用可重復(fù)率和定位誤差來判斷特征點(diǎn)檢測(cè)效果.可重復(fù)率指是: 在視角或者光照變化的兩張圖片中, 同時(shí)出現(xiàn)的特征點(diǎn)對(duì)占總的特征點(diǎn)數(shù)的比率.定位誤差指的是: 同時(shí)出現(xiàn)的特征點(diǎn)對(duì)的像素點(diǎn)距離的均值.本文中同時(shí)出現(xiàn)的特征點(diǎn)對(duì)指的是在相同視角下特征點(diǎn)間距離小于3個(gè)像素點(diǎn), 視角不同的特征點(diǎn)對(duì)需對(duì)其中一張照片經(jīng)過逆向變換, 從而到相同視角.SuperPoint和SuperPoint+2.1的對(duì)比顯示: 經(jīng)過將傳統(tǒng)卷積改成深度可分離卷積、改變卷積層數(shù)和改變下采樣方式后, 雖然使得網(wǎng)絡(luò)模型變得更簡(jiǎn)單, 但是可重復(fù)率上表現(xiàn)更好, 增加了1.12%, 定位誤差也僅僅增加0.11.SuperPoint+2.1和SuperPoint+2.1+2.2的對(duì)比顯示: 進(jìn)行網(wǎng)絡(luò)剪枝后, 可重復(fù)率降低0.32%, 定位誤差降低0.02, 網(wǎng)絡(luò)剪枝帶來的特征點(diǎn)檢測(cè)效果損失可以忽略不記.表4證明, 本文的優(yōu)化方法(SuperPoint+2.1+2.2)在大幅度降低運(yùn)算量和參數(shù)量的情況下, 并沒有導(dǎo)致特征點(diǎn)檢測(cè)效果大幅度下降, 甚至可重復(fù)率表現(xiàn)上更優(yōu).
表4 特征點(diǎn)檢測(cè)效果對(duì)比
要實(shí)現(xiàn)特征點(diǎn)匹配效果對(duì)比, 首先要通過特征點(diǎn)和描述子獲得兩幅輸入圖片的單應(yīng)性變化矩陣.獲取單應(yīng)矩陣的過程如下所示: 首先圖片1和圖片1經(jīng)過單應(yīng)性變換產(chǎn)生的圖片2分別送入網(wǎng)絡(luò)中生成特征點(diǎn)和描述子, 描述子通過暴力方式進(jìn)行最近鄰匹配進(jìn)行配對(duì), 配對(duì)的特征點(diǎn)和描述子調(diào)用OpenCV中find-Homography()函數(shù), 方法選擇RANSAC算法, 生成兩個(gè)圖片之間的估計(jì)的單應(yīng)性變換矩陣.表5中單應(yīng)估計(jì)準(zhǔn)確率指的是: 圖片1經(jīng)過真實(shí)的單應(yīng)變換矩陣的圖片邊界角點(diǎn)和經(jīng)過圖2流程產(chǎn)生的估計(jì)的單應(yīng)變換矩陣的圖片邊界角點(diǎn)的距離在一定的容忍距離差e下的數(shù)目占總的數(shù)量比例, 單應(yīng)估計(jì)準(zhǔn)確率可以反映圖片間特征點(diǎn)匹配效果.表5中對(duì)比SuperPoint和SuperPoint+2.1, 可以發(fā)現(xiàn): 本文使用的方法, 在e=1時(shí)下降0.03, 在e=3時(shí)下降0.02, 在e=5時(shí)下降0.02, 僅用輕微的降幅, 在可以接受范圍內(nèi).SuperPoint+2.1和SuperPoint+2.1+2.2的對(duì)比表明: 剪枝算法幾乎沒有降低單應(yīng)估計(jì)準(zhǔn)確率, 僅在e=1時(shí)下降0.02.表5證明,本文使用的方法并沒有導(dǎo)致的特征點(diǎn)匹配效果大幅降低, 匹配精度仍然較高.
表5 單應(yīng)估計(jì)準(zhǔn)確率對(duì)比
圖2展示的為原始SuperPoint網(wǎng)絡(luò)、使用2.1節(jié)優(yōu)化后的網(wǎng)絡(luò)和最終優(yōu)化后的網(wǎng)絡(luò)的在同一幅圖片上特征點(diǎn)檢測(cè)和匹配的效果圖對(duì)比圖, 紅色點(diǎn)為檢測(cè)到的特征點(diǎn), 綠色線為匹配特征點(diǎn).對(duì)比3幅圖片可以發(fā)現(xiàn)3個(gè)網(wǎng)絡(luò)檢測(cè)到的特征點(diǎn)數(shù)和匹配的特征點(diǎn)數(shù)都比較相近, 說明本文最終優(yōu)化后的網(wǎng)絡(luò)在參數(shù)量壓縮為原來的15%, 運(yùn)算量運(yùn)算量壓縮為原來的5%和FPS提升6.64倍的同時(shí), 特征點(diǎn)檢測(cè)和匹配的效果幾乎沒有降低.
圖2 特征點(diǎn)檢測(cè)與特征點(diǎn)匹配效果圖
本文針對(duì)SuperPoint網(wǎng)絡(luò)的參數(shù)量和運(yùn)算量較大,在嵌入式設(shè)備上不能實(shí)現(xiàn)實(shí)時(shí)運(yùn)算的缺點(diǎn), 對(duì)其網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行精簡(jiǎn)和優(yōu)化.首先, 本文將深度可分離卷積應(yīng)用于SuperPoint網(wǎng)絡(luò)中并且改變了網(wǎng)絡(luò)的層數(shù)和下采樣方式.然后本文將Liu的通道剪枝算法進(jìn)行改進(jìn), 使其可以應(yīng)用于深度可分離卷積中.實(shí)驗(yàn)結(jié)果表明, 最終優(yōu)化后的網(wǎng)絡(luò)網(wǎng)絡(luò)參數(shù)量被壓縮為原始網(wǎng)絡(luò)的15%,運(yùn)算量被壓縮為原始網(wǎng)絡(luò)的5%, 運(yùn)行的FPS較原始網(wǎng)絡(luò)提升6.64倍, 在計(jì)算資源有限的嵌入式和CPU上也能近似實(shí)現(xiàn)實(shí)時(shí)運(yùn)行, 網(wǎng)絡(luò)特征點(diǎn)檢測(cè)和匹配效果較原始網(wǎng)絡(luò)僅有輕微幅度下降.
下一步的研究工作在于將本文的網(wǎng)絡(luò)與SLAM等算法進(jìn)行結(jié)合, 用本文提出的特征點(diǎn)和描述子提取算法代替?zhèn)鹘y(tǒng)的特征點(diǎn)和描述子提取算法, 構(gòu)建一個(gè)更魯棒的SLAM算法.