李 寶 根
(復(fù)旦大學(xué)計算機科學(xué)技術(shù)學(xué)院 上海 201210)
計算機視覺技術(shù)是基于感知圖像做出對客觀對象和場景有用的決策。關(guān)鍵點檢測又被稱為特征點或興趣點檢測,是計算機視覺領(lǐng)域的關(guān)鍵性技術(shù),被應(yīng)用于很多任務(wù),如圖像匹配[1]、圖像檢索[2]和視覺同時定位與建圖[3]等。關(guān)鍵點通常是指圖像中較為突出的、有著很強的可區(qū)分性的像素點或者圖像區(qū)域塊,其作為圖像中最重要的局部特征之一,具備旋轉(zhuǎn)不變性、視角不變性、尺度不變性等多種優(yōu)異性質(zhì),因此被廣泛應(yīng)用于各種計算機視覺任務(wù)中。
盡管在過去的十年里對關(guān)鍵點檢測這一問題的研究已經(jīng)取得了巨大的進展,但由于環(huán)境中各種因素的影響,仍然面臨著巨大的挑戰(zhàn),需要不斷尋求更加魯棒的關(guān)鍵點檢測算法,來使得視覺系統(tǒng)更加有效和可靠。針對光照、旋轉(zhuǎn)、尺度、模糊及視角變換等不利因素,一個魯棒的關(guān)鍵點檢測算法應(yīng)該具備一些優(yōu)良特質(zhì),如可重復(fù)、可區(qū)分、數(shù)量合理、準確及高效等。
傳統(tǒng)的基于手工設(shè)計的關(guān)鍵點檢測算法大都利用圖像的局部梯度信息來檢測關(guān)鍵點,例如經(jīng)典的Hessian特征點檢測算子[4]使用Hessian矩陣來計算關(guān)鍵點響應(yīng)函數(shù)。后續(xù)的許多算法如LoG(Laplacian of Gaussian)[5]、SURF[6]、KAZE[7]、AKAZE(Accelerated-KAZE)[8]等也都沿用了這一思想。另一類關(guān)鍵點檢測算法則從模式識別的角度出發(fā),認為關(guān)鍵點及其周圍鄰域應(yīng)該具有特殊性和可區(qū)分性,所以存在某種特定的模式,讓算法可以通過機器學(xué)習(xí)的方式去學(xué)習(xí)這些模式。這些算法是基于某種特定環(huán)境而手工設(shè)計的,因此缺乏一定的泛化性,不能很好地適應(yīng)環(huán)境的變換。近年來,深度學(xué)習(xí)技術(shù)發(fā)展迅速,相比于人工設(shè)計的低層次特征,深度卷積神經(jīng)網(wǎng)絡(luò)可以通過層次性的非線性模型從大量的訓(xùn)練樣本中提取更抽象更具有表征性的特征,利用這種特征可以有效地提高關(guān)鍵點檢測算法的性能。
基于此,本文提出一種基于圖像特征金字塔網(wǎng)絡(luò)(Feature Pyramid Network,F(xiàn)PN)[9]的關(guān)鍵點檢測算法,能夠提取穩(wěn)定的可重復(fù)檢測的關(guān)鍵點,該算法充分利用了深度卷積神經(jīng)網(wǎng)絡(luò)提取高表征性特征的能力,對尺度、視角幾何變換、光照、模糊等都具備魯棒性。此外本文還提出了一種簡單有效的方法來生成適用于關(guān)鍵點檢測的訓(xùn)練數(shù)據(jù)集,數(shù)據(jù)集中包含了各種復(fù)雜的變換情況如相機視角變換、模糊、光照變化及室內(nèi)室外等復(fù)雜的場景。
本文主要貢獻如下:(1) 本文在特征金字塔網(wǎng)絡(luò)的基礎(chǔ)上構(gòu)建了一個檢測圖像關(guān)鍵點的卷積網(wǎng)絡(luò)模型,能夠提取穩(wěn)定的可重復(fù)檢測的關(guān)鍵點,對尺度、視角幾何變換、光照、模糊等都具備魯棒性。(2) 本文提出了一種有效的算法來生成適用于關(guān)鍵點檢測任務(wù)的訓(xùn)練數(shù)據(jù)集,大大提高了算法的性能。(3) 在網(wǎng)絡(luò)訓(xùn)練階段,本文提出了一種實用的損失函數(shù),該損失函數(shù)能夠有效平衡正樣本與負樣本之間的數(shù)量差距,更易于網(wǎng)絡(luò)模型的收斂。(4) 將本文算法在多個公開數(shù)據(jù)集上進行測試,并與幾種目前主流的關(guān)鍵點檢測算法進行對比,實驗表明,本文算法在性能上有良好的表現(xiàn)。
關(guān)于關(guān)鍵點檢測領(lǐng)域的研究可以追溯到20世紀70年代,到目前為止已經(jīng)有上百種基于不同原理的優(yōu)秀的檢測方法,并且目前仍有許多研究者致力于此?;谄洳煌臋z測原理,本文將這些檢測算法大致分為三類,分別為基于手工設(shè)計的關(guān)鍵點檢測算法、基于模式或經(jīng)典機器學(xué)習(xí)的關(guān)鍵點檢測算法,以及近年來大熱的基于深度學(xué)習(xí)的關(guān)鍵點檢測算法。
最早的手工設(shè)計的關(guān)鍵點檢測算法通過尋找角點和分析圖像局部梯度來檢測關(guān)鍵點。這類算法試圖找到某些具備唯一性和穩(wěn)定性的區(qū)域,其中較為經(jīng)典的有Hessian檢測器[4]和Harris檢測器[10]。Hessian特征點檢測算子中采用的Hessian矩陣對角點和很強的紋理區(qū)域有著較好的響應(yīng)。SURF通過引入積分圖像對Hessian角點檢測進行了加速處理,提高其檢測效率。Harris檢測器則利用圖像局部區(qū)域的灰度二階矩矩陣計算關(guān)鍵點響應(yīng)值,其對亮度變化和對比度的仿射變換具備一定的魯棒性,且特征值在圖像轉(zhuǎn)動后保持不變,從而具備旋轉(zhuǎn)不變性,但對尺度變化比較敏感。Mikolajczyk等[11-12]因此對Harris和Hessian方法進行了擴展,提出了具備尺度不變性和仿射不變性的Harris-Affine和Hessian-Affine檢測算法。同樣對仿射變換具備魯棒性的算法還包括MSER(Maximally Stable Extremal Regions)[13]、WADE(Wave Detector)[14]和ASIFT(Affine-SIFT)[15]。另外一個非常著名的關(guān)鍵點檢測算法則是SIFT(Scale Invariant Feature Transform)[16],其通過使用高斯差分算子(Difference of Gaussian,DoG)在尺度空間中檢測局部極值來提取關(guān)鍵點,對光照、旋轉(zhuǎn)、尺度與仿射變化都具有較好的魯棒性。
基于模式或經(jīng)典機器學(xué)習(xí)的關(guān)鍵點檢測算法認為關(guān)鍵點區(qū)域相比于非關(guān)鍵點區(qū)域應(yīng)該具有強烈的可區(qū)分性,并且具有某種能夠被重復(fù)檢測的模式。利用模式識別的思想可以通過機器學(xué)習(xí)的方法去提取或者定義這類模式特征,然后將這些模式特征應(yīng)用于任意圖像中的像素從而檢測關(guān)鍵點。在1997年,Smith等[17]提出了基于最小核值相似區(qū)(Smallest Univalue Segment Assimilating Nucleus, SUSAN)的角點檢測算法。在此基礎(chǔ)上,文獻[18]提出了一種更為簡便且有效的角點檢測算法FAST(Features from Accelerated Segment Test),其通過比較核心點與其周圍鄰域圓上像素點的灰度值大小來判別該核心點是否為關(guān)鍵點。Rosten等[19]利用機器學(xué)習(xí)中的統(tǒng)計原理與ID3決策樹算法對FAST進行了改進。Verdie等[20]提出了一種基于學(xué)習(xí)的具備時間不變性的關(guān)鍵點檢測器(Temporally invariant learned detector,TILDE),該算法對天氣、季節(jié)和一天中的光照變化等具有高度的敏感性,即使在這樣的環(huán)境中也能夠檢測出較多可重復(fù)性較高的關(guān)鍵點。
深度學(xué)習(xí)是機器學(xué)習(xí)的一種方法,它通過一系列非線性處理層將輸入映射生成輸出[21-22]。這種跨越多層學(xué)習(xí)特征的方式,讓系統(tǒng)可以學(xué)習(xí)到更復(fù)雜的擬合函數(shù)來將原始數(shù)據(jù)映射為輸出,而無須依賴手工設(shè)計的特征。文獻[23]將檢測視作一個回歸任務(wù),提出了一種具備協(xié)變性的關(guān)鍵點檢測算法CovDet。Zhang等[24]在CovDet的基礎(chǔ)上進行擴展而提出了TCovDet,通過學(xué)習(xí)一個變換預(yù)測網(wǎng)絡(luò)將圖像塊映射為變換矩陣,并且基于變換的投票分值檢測關(guān)鍵點。文獻[25]提出了一種端到端的點匹配深度卷積網(wǎng)絡(luò)MagicPoint,該算法能夠檢測出分布均勻、性能穩(wěn)定的角點,這種性質(zhì)可能會讓它更適用于SLAM[3]。SuperPoint[35]則是對MagicPoint的進一步改進,包括特征點檢測和描述子提取。文獻[26]則提出了一種基于排序思想的無監(jiān)督關(guān)鍵點檢測算法QuadNet。LIFT[36]實現(xiàn)了端到端的特征點檢測和描述子提取,包括每個特征點的方向估計。LF-Net[37]通過聯(lián)合優(yōu)化檢測器和描述子來估計特征點的位置、尺度和方向。
關(guān)鍵點檢測算法的主要目的是從圖像中提取可重復(fù)檢測的、稀疏的興趣點。為此,本文需要一個包含各種復(fù)雜場景的有效的可訓(xùn)練數(shù)據(jù)集,并且在每幅訓(xùn)練圖像上都確定了一組可以在不同圖像上一致找到的特征點位置,即關(guān)鍵點標簽。圖1為本文算法的大致流程。
圖1 本文算法流程
如圖1所示,對于一幅新輸入的灰度圖像,本文構(gòu)建了一種表征性能優(yōu)異的深度網(wǎng)絡(luò)用于檢測關(guān)鍵點。本質(zhì)上來說,該網(wǎng)絡(luò)模型類似于擬合一個非線性函數(shù)f(I),將圖像映射為一幅熱度圖,那些響應(yīng)值高的圖像區(qū)域即為關(guān)鍵點所在區(qū)域。為了保證提取的關(guān)鍵點具備尺度不變性,本文模型引入了特征表示能力優(yōu)秀的FPN[9]網(wǎng)絡(luò)結(jié)構(gòu),然后通過上采樣和卷積操作將特征圖重組為同輸入圖像相同尺度的概率圖(熱度圖),概率圖中的值越大表明其對應(yīng)的像素點是關(guān)鍵點的可能性更高,最后通過非極大值抑制NMS方法搜索局部最大值并且自適應(yīng)地設(shè)置閾值篩選出好的關(guān)鍵點。
幾乎所有的神經(jīng)網(wǎng)絡(luò)模型對數(shù)據(jù)集都具有強烈的依賴,一個干凈的具有大量樣本的數(shù)據(jù)集能夠讓模型的訓(xùn)練事半功倍。TILDE雖然提出了一種可用于關(guān)鍵點檢測的數(shù)據(jù)集構(gòu)建方法,篩選出了那些可重復(fù)檢測的魯棒的關(guān)鍵點,但其仍然有著很大的局限性,固定的相機視角使得數(shù)據(jù)集缺乏視角變換容易導(dǎo)致算法對視角變換高度敏感。因此本文提出了一種簡單有效的方法來生成適用于關(guān)鍵點檢測的訓(xùn)練數(shù)據(jù)集,數(shù)據(jù)集中包含了各種復(fù)雜的變換情況如相機視角變換、模糊、光照變化及室內(nèi)室外等復(fù)雜的場景。
考慮到關(guān)鍵點檢測任務(wù)對訓(xùn)練數(shù)據(jù)集場景、清晰度和多視角等要求較高,本文首先選擇了ETH3D[27]中的3D重建數(shù)據(jù)集作為基礎(chǔ)數(shù)據(jù)集,其包括操場、森林、工廠和建筑等多種室內(nèi)和室外的復(fù)雜場景。需要注意的是,在每一個場景中,ETH3D數(shù)據(jù)集會通過高精度的激光掃描儀為每幀圖像提供精準的相機位姿及對應(yīng)的深度圖。
選取初始數(shù)據(jù)集后,需要在這些圖像上篩選出魯棒的關(guān)鍵點作為訓(xùn)練過程中的正樣本標簽。本文使用SIFT算法[16]提取初步的比較粗糙的關(guān)鍵點。不同于TILDE[20],本文利用數(shù)據(jù)集提供的真實相機位姿對初始的關(guān)鍵點進行篩選,篩選后的關(guān)鍵點對相機視角變換具備更強的魯棒性,使得網(wǎng)絡(luò)可以通過學(xué)習(xí)更新模型參數(shù)繼承這一特性。假設(shè)數(shù)據(jù)集中同一場景下有圖像I1、I2、…、In,篩選算法具體描述如下:
(1) 使用SIFT算法對每幅圖像Ii分別檢測關(guān)鍵點,這里只選擇最小尺度上的關(guān)鍵點,得到初始關(guān)鍵點集Ki。
(2) 利用數(shù)據(jù)集提供的相機位姿和激光掃描深度圖,可以計算出Ki點集中每個關(guān)鍵點在3D世界下的坐標。記Ki中關(guān)鍵點的3D世界坐標為Gi。
(3) 將G1中的關(guān)鍵點全局世界坐標分別與G2,G3,…,Gn比較,如果存在g1j與gik距離小于5 cm,則保存g1j為候選關(guān)鍵點世界坐標并放入集合S1,其中g(shù)1j表示集合G1中第j個點的世界坐標,gik表示集合Gi中第k個點的世界坐標,這里i不等于1。
(4) 重復(fù)步驟(3),分別將G2,G3,…,Gn中的初步關(guān)鍵點世界坐標與其余集合比較,得到集合{S2,S3,…,Sn}。
(5) 利用相機位姿和相機內(nèi)參將集合Si中的3D點重新投影其對應(yīng)的圖像Ii中,把這些關(guān)鍵點作為訓(xùn)練數(shù)據(jù)集的正樣本,圖像中的其他像素點作為負樣本。
圖2(a)展示了使用SIFT算法在圖像中提取的初始關(guān)鍵點,使用篩選算法剔除那些低質(zhì)量、不可重復(fù)檢測的點,結(jié)果如圖2(b)所示。這種簡單的方法主要有兩方面的優(yōu)勢,一方面篩選出了那些經(jīng)常被重復(fù)檢測的關(guān)鍵點,并且丟棄了那些不會被頻繁檢測的關(guān)鍵點;另一方面利用數(shù)據(jù)集中復(fù)雜的環(huán)境變化如光照、視角和尺度等,可以有效地從SIFT算法提取的粗糙的關(guān)鍵點中篩選出相對可靠的關(guān)鍵點。后續(xù)為了增加正樣本點數(shù)量,本文又利用TILDE算法[20]提取關(guān)鍵點并用相同算法進行篩選,且與SIFT相疊加。為了增強模型泛化性,我們采用高斯模糊、噪聲和圖像旋轉(zhuǎn)進行圖像增強。
(a) SIFT算法提取初始關(guān)鍵點
(b) 篩選后圖像關(guān)鍵點
本文所提出的網(wǎng)絡(luò)模型主要由自底向上模塊(bottom-up)、自頂向下模塊(top-down)和上采樣模塊(upsample)三個模塊構(gòu)成。整個網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
圖3 網(wǎng)絡(luò)結(jié)構(gòu)圖
自底向上模塊主要是卷積網(wǎng)絡(luò)在圖像最小尺度上的前向計算,其不同的特征層級隱射圖像的不同尺度,縮放步長為2。自頂向下模塊則對更抽象、語義更強的高層特征圖進行上采樣,并通過橫向連接將上采樣結(jié)果和自底向上模塊每層金字塔輸出的相同大小的特征圖進行融合。橫向連接通過雙線性插值上采樣方法將低分辨率的特征圖放大兩倍,然后和自底向上模塊輸出的特征圖按元素相加,生成最終的融合后的特征圖。這樣做的好處是能夠?qū)D像低層次的定位信息豐富的特征與高層次語義強的特征融合,使得網(wǎng)絡(luò)檢測的關(guān)鍵點定位更加精確。不同于FPN,本文沒有使用每一層融合后的特征來分別預(yù)測關(guān)鍵點,而是構(gòu)建了上采樣模塊,其通過雙線性插值上采樣和卷積層搭配使用將最后一層融合后的特征圖恢復(fù)為原圖大小。
如圖3所示,網(wǎng)絡(luò)模型以灰度圖像作為輸入,“Conv1”表示第一個卷積層。“max pooling”表示最大池化層,池化大小為2×2,步長為2。其后的“Conv block2、Conv block3、Conv block4、Conv block5”表示卷積塊,每個塊中由不同數(shù)量的卷積層堆疊而成。在具體實現(xiàn)中,本文使用了ResNets[38]中對應(yīng)的四個不同階段的殘差塊作為網(wǎng)絡(luò)的四個卷積塊,并將這些殘差塊的輸出特征表示為{C2,C3,C4,C5},其相對于原始輸入圖像分別具有{4,8,16,32}的步長。在自底向上模塊,對{C2,C3,C4,C5}分別應(yīng)用一個1×1的卷積層“Conv6”,目的是使其特征通道數(shù)統(tǒng)一為256。通過上采樣將上層特征尺寸擴大為和下一層特征尺寸相同,最后通過按元素相加的方式得到融合特征圖{M1,M2,M3}。為了提高關(guān)鍵點檢測算法的性能,我們利用同樣的方法將第一層卷積“Conv1”的輸出特征與特征圖M3進行融合,使網(wǎng)絡(luò)能夠保存圖像更低層次的特征圖像更低層的特征。上采樣模塊使用上采樣層搭配卷積層將特征圖恢復(fù)到輸入圖像尺寸,并利用Sigmoid函數(shù)將特征映射為概率圖,通過非極大值抑制NMS和設(shè)置閾值檢測出稀疏有效的關(guān)鍵點。
輸入一幅圖像I,本文模型輸出一幅和原圖相同大小特征圖。本文將“Conv9”的輸出特征記為D,公式表達為:
D=fθ(I)=W×I+b
(1)
式中:fθ表示檢測器本身也就是關(guān)鍵點檢測網(wǎng)絡(luò);θ表示網(wǎng)絡(luò)模型參數(shù),由卷積濾波參數(shù)W和偏差b組成。根據(jù)提取的特征圖D,可以通過Sigmoid函數(shù)得到概率圖P:
(2)
式中:y表示特征圖D中的一個位置坐標。
(3)
關(guān)鍵點檢測本質(zhì)上來說就是一個特殊的二分類任務(wù),類似于圖像分割,圖像中的每個像素點都有一個類屬性:是否為關(guān)鍵點。因此本文使用二進制交叉熵函數(shù)構(gòu)建目標函數(shù)來優(yōu)化模型,正樣本損失函數(shù)和負樣本損失函數(shù)如下:
(4)
(5)
式中:P表示網(wǎng)絡(luò)輸出的概率圖;L表示訓(xùn)練圖像的標簽;y表示訓(xùn)練圖像中的像素點位置坐標。
從零開始訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)模型需要花費大量的計算資源和時間成本,因此大多數(shù)網(wǎng)絡(luò)都會采用基于預(yù)訓(xùn)練模型的方法初始化網(wǎng)絡(luò)本身參數(shù)。這種遷移學(xué)習(xí)的方法不僅可以加快新任務(wù)建模的速度,并且可能提高模型性能,必要條件是預(yù)訓(xùn)練模型中的特征與本身任務(wù)需求的特征具有相通性。這種性質(zhì)同樣適用于關(guān)鍵點檢測任務(wù),因此本文使用ResNet[38]在ImageNet圖像分類任務(wù)上預(yù)訓(xùn)練過的參數(shù)來初始化本文網(wǎng)絡(luò)中的自底向上模塊,并將該模塊的學(xué)習(xí)率固定為0.000 1,其余模塊正常訓(xùn)練。
模型使用的訓(xùn)練數(shù)據(jù)集通過第3節(jié)介紹的方法構(gòu)造,包含大約5 000幅灰度圖像。使用小批隨機梯度下降方式進行訓(xùn)練,每批訓(xùn)練數(shù)據(jù)包含8幅圖像。本文將最大訓(xùn)練輪數(shù)(epoch)設(shè)置為300,且每輪訓(xùn)練圖像的輸入順序隨機。網(wǎng)絡(luò)自底向上模塊(Conv1,Conv block2,Conv block3,Conv block4,Conv block5)使用預(yù)訓(xùn)練模型初始化,設(shè)置固定的學(xué)習(xí)率為0.000 1,其余可訓(xùn)練模塊統(tǒng)一使用學(xué)習(xí)率計劃表:前30輪學(xué)習(xí)率為0.1,第31到80輪學(xué)習(xí)率為0.01,第81到180輪學(xué)習(xí)率為0.001,后面120輪學(xué)習(xí)率為0.000 1。這樣可以保證模型較快的收斂速度,也避免訓(xùn)練過程過早進入局部最優(yōu)。
訓(xùn)練優(yōu)化算法使用Adam優(yōu)化器[28],本文網(wǎng)絡(luò)使用Python語言實現(xiàn),基于PyTorch[29]神經(jīng)網(wǎng)絡(luò)框架,且整個系統(tǒng)的訓(xùn)練流程在NVIDIA GeForce GTX 1080 顯卡上完成。
本文分別在公開數(shù)據(jù)集VGG-Affine[30]和EF[31]上對本文算法進行測試評估。這兩個數(shù)據(jù)集都是關(guān)鍵點檢測領(lǐng)域最為經(jīng)典且被廣泛使用的測試數(shù)據(jù)集,其中涵蓋了光照、尺度、視角變換等干擾情況。
本文使用可重復(fù)率[32]作為實驗的評價指標。此外,文獻[32]中的可重復(fù)率計算方法仍存在一些缺點,一方面圖像中可能存在多個關(guān)鍵點映射到相關(guān)聯(lián)圖像中的同一個點,也就是說同一個關(guān)鍵點可能會被多次計入可重復(fù)點中,這會導(dǎo)致可重復(fù)率的不公平增長;另一方面當(dāng)提取的關(guān)鍵點數(shù)量過于巨大時,即使是簡單的隨機采樣也能獲得很高的可重復(fù)率,極端情況就是當(dāng)圖像中所有點都被提取為關(guān)鍵點,那么可重復(fù)率就是100%。對此本文對可重復(fù)率計算方法做了一些改進。首先只將關(guān)鍵點之間距離最近的那對點計入可重復(fù)點,也就是說一個關(guān)鍵點只能被計入可重復(fù)點一次;其次限制了算法提取的關(guān)鍵點數(shù)量,對于一幅圖像,算法分別提取200個關(guān)鍵點和1 000個關(guān)鍵點用于計算可重復(fù)率。
為了驗證本文算法在關(guān)鍵點檢測任務(wù)中的性能優(yōu)劣,將其與傳統(tǒng)的手工設(shè)計關(guān)鍵點算法(SIFT[16]、SURF[5]、MSER[18]、SFOP[34])、基于模式或經(jīng)典機器學(xué)習(xí)的關(guān)鍵點檢測算法(FAST[18]、TILDE[20])和基于深度學(xué)習(xí)的關(guān)鍵點檢測算法(SuperPoint[35]、LIFT[36]、LF-Net[37]、QuadNet[26])進行比較,結(jié)果如表1所示,和TILDE一樣,使用角點評價指標可重復(fù)率[32]作為度量,其中T-p24表示TILDE中表現(xiàn)最好的版本。本文將距離閾值設(shè)置為5個像素。
表1 不同關(guān)鍵點檢測算法在VGG-Affine和EF數(shù)據(jù)集上的可重復(fù)率 (%)
可以看出,在提取1 000個關(guān)鍵點時,本文算法在兩個數(shù)據(jù)集EF和VGG-Affine上的表現(xiàn)都優(yōu)于其他算法;在提取200個關(guān)鍵點時略差于SuperPoint,原因可能是SuperPoint訓(xùn)練時使用模擬數(shù)據(jù)且僅將角點設(shè)置為正樣本,所以在提取點數(shù)量少的情況下表現(xiàn)優(yōu)秀。
表2展示了本文算法與QuadNet[26]、LIFT[36]、LF-Net[37]和SuperPoint[35]等算法在VGG-Affine數(shù)據(jù)集中不同場景下的可重復(fù)率,加粗表示最高值?!癟”欄表示數(shù)據(jù)集中不同的變換,“VP”表示視角變換,“Z+R”表示尺度和旋轉(zhuǎn)變換,“L”表示光照變換,“Blur”表示圖像模糊程度變換,“JPEG”表示不同的圖像壓縮比。QN-NL表示QuadNet[26]中使用卷積神經(jīng)網(wǎng)絡(luò)的非線性模型。
表2 不同關(guān)鍵點檢測算法在VGG-Affine數(shù)據(jù)集中不同場景下的可重復(fù)率 (%)
由表2可知,本文算法在各項屬性上都有著良好的表現(xiàn),其中在視角變換類場景中,本文算法明顯優(yōu)于其他算法。在提取關(guān)鍵點數(shù)量較低時,本文算法略低于SuperPoint[35];在提取關(guān)鍵點數(shù)量處于600~2 400時,本文算法在各項屬性上優(yōu)于其他算法;在提取關(guān)鍵點數(shù)量為3 000時,本文算法略低于QuadNet[26],可能原因是QuadNet基于排序思想,在檢測關(guān)鍵點數(shù)量較大時有一定優(yōu)勢;另外本文算法在圖像陰影變化嚴重時性能表現(xiàn)不佳,原因之一可能是訓(xùn)練集中缺乏明顯的光照變化和遮擋。
為了驗證本文改進方法的有效性,表3展示了本文算法分別針對每部分改進策略改進前后性能的對比,測試數(shù)據(jù)集為VGG-affine,關(guān)鍵點數(shù)量為1 000。
表3 不同改進策略組合對照實驗
由表3可知,單純使用VGG-16作為網(wǎng)絡(luò)主體框架,訓(xùn)練數(shù)據(jù)集使用TILDE[20]和SIFT[16]提取的初始關(guān)鍵點作為正樣本時,算法檢測的關(guān)鍵點可重復(fù)率較低;利用本文算法剔除那些低質(zhì)量、不被重復(fù)檢測的點后,算法性能得到顯著提升;在VGG-16模型的基礎(chǔ)上,借鑒FPN思想將網(wǎng)絡(luò)模型中低尺度弱語義特征和高尺度強語義特征融合,有助于模型獲取更多信息從而提高算法性能;最后使用Resnet50替換VGG-16作為網(wǎng)絡(luò)主體框架,增強模型擬合特征能力以及非線性表達能力,可以進一步提升算法性能。
如表4所示,在模型、策略等其他因素固定時,本文提出的點損失函數(shù)相比于正常的二進制交叉熵損失函數(shù)更有利于算法性能的提升。二進制交叉熵損失函數(shù)沒有考慮訓(xùn)練集樣本不均衡問題,容易導(dǎo)致網(wǎng)絡(luò)輸出偏好于數(shù)量多的一方,比如在圖像關(guān)鍵點檢測任務(wù)中其更傾向于輸出較低的響應(yīng)值,從而不利于網(wǎng)絡(luò)學(xué)習(xí),導(dǎo)致可重復(fù)率較低;而本文提出的點損失函數(shù)則通過平衡正負樣本間數(shù)量差距,極大地提高了算法性能。
表4 不同損失函數(shù)對照實驗(測試數(shù)據(jù)集為VGG-affine,關(guān)鍵點數(shù)量為1 000)
圖4展示了本文算法檢測的可重復(fù)關(guān)鍵點和SIFT[16]算法檢測的可重復(fù)關(guān)鍵點。需要注意的是,圖中只顯示左右兩幅圖像中的可重復(fù)點,即同時在兩幅圖像中被檢測到的關(guān)鍵點。圖4中選取的測試圖像都來源于VGG-Affine[30]數(shù)據(jù)集,其中圖4(a)和(c)為graf場景中的第1幅圖像,圖4(b)和(d)為graf場景中的第2幅圖像,其相比于第1幅圖像,由相機側(cè)面旋轉(zhuǎn)了30°的視角所拍攝;圖4(e)和(g)為ubc場景中的第3幅圖像,圖4(f)和(h)為ubc場景中的第6幅圖像,兩幅圖像的壓縮率有所不同。每幅圖像都分別使用SIFT算法和本文算法檢測關(guān)鍵點。
(a) SIFT,graf-1 (b) SIFT, graf-3
可以看出,本文提出的關(guān)鍵點檢測算法提取的關(guān)鍵點分布相比于SIFT更為均勻,檢測出的可重復(fù)點數(shù)量也高于SIFT算法。另外,針對圖像的壓縮比變化,本文算法明顯可以準確檢測出可重復(fù)性高的關(guān)鍵點,對圖像的視角變換也有著不錯的魯棒性。
本文對圖像關(guān)鍵點檢測算法進行了深入的研究與分析,提出了一種基于特征金字塔網(wǎng)絡(luò)的關(guān)鍵點檢測算法。該算法充分利用了深度卷積神經(jīng)網(wǎng)絡(luò)提取高表征性特征的能力,并使用特征金字塔融合多尺度圖像特征,使得算法提取的關(guān)鍵點具備尺度不變性。另外本文針對關(guān)鍵點檢測任務(wù)提出了一種簡單有效的方法來生成訓(xùn)練數(shù)據(jù)集,數(shù)據(jù)集中包含了各種復(fù)雜的變換情況如相機視角變換、模糊、光照變化以及室內(nèi)室外等復(fù)雜的場景,利用數(shù)據(jù)集中提供的相機真實位姿和深度圖篩選出可重復(fù)檢測的關(guān)鍵點作為訓(xùn)練集中的標簽信息。
實驗表明,本文算法有效地提高了檢測關(guān)鍵點的可重復(fù)率。但其實時性還有待進一步提升。此外,關(guān)鍵點檢測通常與描述子提取算法密不可分,基于本文的關(guān)鍵點檢測算法,如何設(shè)計一種魯棒性強的描述子提取算法或者利用深度學(xué)習(xí)提出一種完全端到端的點匹配算法,還有待進一步的研究。