高 楊,肖 迪
(南京工業大學 電氣工程與控制科學學院,江蘇 南京 211816)
目標檢測主要可以劃分成兩個部分,一是找出圖像或視頻的中的感興趣區域,二是輸出檢測目標和位置,總的來說就是從視頻或者圖像中找到目標物體并且定位。
現在目標檢測的算法主要有兩種,一種是基于手工特征的傳統目標檢測算法,另一種是基于深度學習的目標檢測算法。傳統的目標檢測算法主要通過對目標提取手工特征,進行特征學習檢測來實現目標檢測。尺度不變特征變換(scale invariant feature transform,SIFT)[1]、方向梯度直方圖(histogram of oriented gradient,HOG)[2]、局部二值化(local binary patterns,LBP)[3]等是人們根據自身經驗所設計的經典的手工特征,它們在傳統目標檢測算法中有著優秀的表現。但在人們的研究中,基于手工特征的傳統目標檢測算法主要存在兩個問題,一個是滑動窗口的區域選擇方法會導致很多冗余窗口的出現,占用很多的目標檢測時間,同時會影響最后的檢測精度,另一個是這些手工特征大多數都是淺層特征,只能在某一方面或是特定的場景下表現出不錯的效果,面對通用的目標檢測時表現的不盡如人意,對于目標變化缺乏魯棒性。卷積神經網絡和深度學習推動目標檢測領域取得突破性進展,使得目標檢測不再局限于手工特征。深度學習在目標檢測算法中主要衍生出兩個方向,一方面是結合region proposal和CNN分類的“兩步”式深度學習目標檢測算法,主要代表為R-CNN[4]、FastR-CNN[5]、FasterR-CNN[6]。R-CNN算法在PASCALVOC2012測試集上的平均精度達到了53.3%,相比于傳統目標檢測方法在性能上提高了30%。隨后在 R-CNN 的基礎上進行不斷的改進,產生了FastR-CNN、FasterR-CNN等目標檢測算法。另一方面是基于回歸的“一步”式深度學習目標檢測算法,主要包括SSD[7]、YOLO[8]。這兩個方面的目標檢測算法在目標檢測上有著不同的表現形式,基于region proposal的“兩步”式深度學習目標檢測算法可以有很高的檢測精度,但由于候選框的生成需要耗費許多時間,導致這一類算法在檢測速度上沒有很好表現,基于回歸思想的目標檢測算法因為舍去了候選框這一步驟,這類算法在檢測速度上有很好的表現,能達到實時的目標檢測的效果,但在檢測精度上表現的不如上一類算法。因此提升目標檢測精度和檢測速度是現在目標檢測算法研究的主要方向。
目標檢測算法性能在深度學習的幫助下有了很大的提升,準確率(precision)、召回率(recall)和平均檢測精度(mean average precision)的表現越來越好。但是我們發現這些算法在小尺度目標上的檢測表現的不是太好,主要因為一些小尺度目標分辨率低,背景復雜,通過卷積神經網絡中的池化操作后,這些小目標的特征圖會出現模糊和分辨率不足的情況。本文針對Faster R-CNN目標檢測算法中小目標檢測精度不高和定位不準確的問題,提出運用特征融合的方法來豐富特征圖的信息,增強模型的檢測精度,尤其是提升模型對于小目標的檢測能力。FasterR-CNN運用RPN(region proposal network)來獲得目標候選區域,比之前R-CNN系列目標檢測模型有更快的速度和精度。在RPN網絡中對于錨框進行新的設定,在特征融合基礎上繼續加強小目標的檢測。本文通過運用多層特征融合增強特征表現形式,重新設定錨框增加小尺度的錨框,算法檢測速度沒有受到影響的基礎上進一步提高模型對目標的檢測精度,小目標定位不準確和識別困難的問題也得到了一定的改進。
卷積神經網絡(convolutional neural networks,CNN)[9]是深度學習中重要的組成部分,是由人工神經網絡發展而來,是一種深度前饋人工神經網絡。在目標檢測中主要用于特征提取部分,相比于手工特征不能很好地表達原始目標的特征信息,CNN可以通過優化算法獲得提取特征的合適參數,從而獲取目標更深層次的語義信息,有利于目標檢測中的分類。CNN在特征提取方面那么的受歡迎,不僅僅因為CNN提取的特征具有很強的表征能力和魯棒性,更因為CNN本身有著自己獨特的優勢:權值共享、局部感知野。CNN通過權值共享和局部感知野可以降低網絡參數的數量,網絡訓練因此不會那么復雜。卷積層、激活層、池化層、全連接層等是CNN的主要內容,卷積層和池化層主要用于目標的特征提取,通過這兩個結構進行特征提取后,特征分辨率減少但也增加了模型的不變性。在特征提取方面運用的卷積神經網絡是VGG16[9],VGG16主要由13層卷積層和3層全連接層組成,卷積層主要采用了3*3、1*1 的卷積核,池化層則運用了2*2的最大池化來進行網絡的降維,如圖1所示。采用多個小卷積核的卷積層可以實現卷積核較大的卷積層的效果,還能夠在網絡中加入更多的非線性映射,使得網絡有更強的表達能力。

圖1 VGG16網絡結構
在FasterR-CNN模型中,使用VGG16網絡來用于關鍵的特征提取部分,該模型運用了VGG16網絡的卷積層5的輸出特征。只采用卷積層5的輸出特征使得提取的特征具有豐富的語義信息,對于目標的分類有很好的提升效果,但卷積層5的輸出特征在經過pooling操作后導致輸出特征丟失了許多低層網絡包含的細節信息,如目標像素信息、邊緣信息等[10],對于一些像素較小的目標在經過4個pooling操作后,會使得小目標的特征圖比原目標減少了1/16,也就是說一些像素小的目標的特征圖的像素更小或者導致特征消失。因此,單單采用卷積層5的輸出特征不僅會影響模型的目標檢測準確度,而且對于小目標的檢測準確度影響更大。本文擬運用多層特征融合的方法來增強模型的目標檢測準確度,對于得到的多特征圖既利用了低層網絡的輸出特征,還擁有高層網絡的語義信息,使得目標檢測的準確度得到了提升。
VGG16網絡結構中主要包含5個卷積段,前面兩個卷積段中每個卷積段是采用兩個卷積層組合的形式,后面3個卷積段則是采用3個卷積層組合的形式。對于多層特征融合,采用合適的卷積層的輸出特征進行特征融合是很重要的。卷積層1的特征圖尺寸大,目標的特征數量也很多,對目標檢測的貢獻是不明顯的,對于檢測速度還會有影響,卷積層5的輸出特征包含了豐富的語義特征,對于目標檢測的影響很明顯。因此,在進行多層特征融合時,舍去了卷積層1的輸出特征,以卷積層5的輸出特征為主,聯合卷積層2、卷積層3、卷積層4進行特征融合研究,選擇合適的多層卷積特征進行融合。VGG16每個卷積層提取出的特征進行融合的前提是需要每一層特征在融合前具有相同的分辨率,本文主要以卷積層4為基礎,前面的卷積層需要進行下采樣,卷積層5則利用反卷積來使得所融合的特征具有相同的維度。在進行特征融合之前,再利用局部響應歸一化對特征圖的輸出進行處理,提高模型的魯棒性,增強目標檢測的準確度。本文設計了3種多層特征的融合方式,第一種是融合卷積層4和卷積層5,第二種是融合卷積層3、卷積層4和卷積層5,第三種是融合卷積層2、卷積層3、卷積層4、卷積層5。通過實驗來選取合適的多層特征融合方式,提高模型的檢測準確度。
候選區域的提取是目標檢測的主要內容之一,FasterR-CNN的核心就是提出了RPN網絡結構,將候選區域的提取和提取特征圖的方法聯系到一起,將候選區域的提取融入到卷積神經網絡當中,相比于FastR-CNN,目標檢測的速度加快了很多。本文將不采用conv5_3的輸出作為RPN網絡的輸入,使用多層融合的特征圖作為RPN網絡的輸入來提取候選區域。原RPN網絡中錨框的設計是在特征圖上產生9個錨框,這9個錨框包括3種不同的面積和3種不同的比例的預測框。錨框的設計可以根據需求改變,為了進一步提升目標檢測的精度以及加強模型對于小目標的檢測能力,對于錨框進行新的設定,采用了5種不同大小面積(322,642,1282,2562,5122),4種不同比例(1∶2,1∶1,2∶1,3∶1)。這樣的設定融入了很多像素較小的目標以及增添了不同的比例,對于一些小目標的檢測進行了提升。在候選區域提取過程中,會產生較多的候選框,對于重疊的目標檢測候選框,利用非極大值抑制(non maximum suppression,NMS)[11]算法來剔除掉,得到最好的候選框。
1.4.1 算法描述
目標檢測,實際上可以分為兩個部分,一是找出圖像或視頻的中的感興趣區域,二是輸出檢測目標和位置。針對Faster R-CNN目標檢測算法中小目標檢測精度不高和定位不準確的問題,提出多層特征融合的方法來豐富特征圖的信息,提升Faster R-CNN的檢測精度以及小目標的檢測能力。在提取候選框環節,本文重新設定了錨框,設置了更多大小和比例,進一步加強模型對于小目標的檢測能力。
1.4.2 算法步驟
算法流程如圖2所示。算法具體步驟如下:
(1)輸入目標圖像,利用深度卷積神經網絡提取每一卷積層目標特征;
(2)利用多層特征融合的方法融合不同卷積層的特征,生成融合特征圖;
(3)將融合特征圖作為RPN網絡的輸入進行候選區域提取,設置新的錨框增強不同目標的檢測性能,生成目標檢測候選框;
(4)運用NMS取出重疊的檢測候選框,尋找最優的候選框;
(5)將融合特征圖和獲得的候選框送到RoI pooling層;
(6)通過RoI pooling層之后送入后續網絡進行目標分類和判別。

圖2 基于多層特征融合的小目標檢測算法流程
為了驗證本文算法的有效性,本文采用PASCAL VOC 2007[12]測試數據集來對設計的3種融合方式進行實驗。VOC 2007數據集中包括20類目標,這些目標都是我們日常生活中常見的,也具有許多生活中的實際場景,其中也有現在一些目標檢測算法不容易解決的小目標,綜上考慮選擇了PASCAL VOC 2007測試數據集。本文算法所采用的運行環境為操作系統64位Ubuntu14.04,運用的深度學習框架為TensorFlow框架,所用編程語言是Python。在目標檢測算法中,通常采用的評價指標有準確率(precision)、召回率(recall)、AP(average precision)、mAP(mean average precision)、FPS(frame per second)等。本文提出的算法是保證FasterR-CNN檢測速度基礎上提升目標的檢測精度,因此本文采用的評價指標為mAP和FPS。mAP是種類不一樣的目標的AP取平均值,其定義如式(1),式(2)所示。評價指標FPS主要代表目標檢測模型的檢測速度

(1)
(2)
為了驗證本文所提方法的有效性,對3種不同的融合方式進行實驗,將3種不同的融合方式與FastR-CNN和FasterR-CNN作比較。通過與優秀的目標檢測算法比較,驗證得出多層特征融合對于目標檢測的準確度是有所提升的,再從3種不同融合方式中選擇最適合的多層特征融合方式。不同特征融合方式的目標檢測精度和速度實驗結果見表1。

表1 基于PASCAL VOC 2007的目標檢測精度和速度
由表1可知,多層特征融合可以有效地提升目標檢測的精度,不同的融合方式對于檢測精度的影響不同。卷積層4與卷積層5相融合的mAP比FastR-CNN提高了4.1%,比檢測精度已經很高的FasterR-CNN提升了0.9%。另外兩種融合方式在檢測精度上提升的更多,卷積層2、卷積層3、卷積層4和卷積層5的融合在精度上與卷積層3、卷積層4、卷積層5相差不多,但前一種融合方式檢測速度受影響較大,卷積層3、卷積層4、卷積層5在檢測速度影響不大情況下提升了更多的檢測精度,不同層特征融合可視化如圖3所示,特征融合可視化讓我們可以更好地去了解多層特征融合,從圖中不僅可以看出特征映射的響應強度,而且對于目標的位置信息也有良好的表現。

圖3 特征融合可視化
通過對于每個種類的具體分析,發現多層特征融合在一些形態多樣、較小目標檢測上提升了更多的檢測精度,如椅子、船只和植物等,具體見表2。
由表2可知,多層特征融合在小目標的檢測上比原模型表現的優秀的多,植物這一類別是原有優秀算法表現最差的一個類別,進行多層特征融合之后,植物這一類別的精確度提升了將近10%,多尺寸,多形態的椅子、瓶子和船只等在檢測精度上都有了很大的提升。因此多層特征融合和錨框的重新設定可以使目標檢測有更高的精度,在一些形態多樣,尺寸多樣的小目標上表現的更為突出。

表2 基于PASCAL VOC 2007中小目標的檢測精度
通過對于實驗結果的分析,3種多層特征融合方式都可以一定程度上提升目標檢測的精度,但第一種融合方式在精度上提升不是很明顯,第三種融合方式在精度上提升了很多,但檢測速度受到了一定的影響。本文得出卷積層3、卷積層4和卷積層5三層卷積特征相融合能夠在FasterR-CNN基礎上有效地提高檢測精度且不影響目標檢測速度。因此基于FasterR-CNN改進的目標檢測算法在多層特征融合方面選擇卷積層3、卷積層4和卷積層5的卷積特征,錨框的設定增添了不同的面積與不同的比例。為了比較兩種算法的性能,選取了一些代表性的實驗結果,FasterR-CNN目標檢測算法實驗結果如圖4所示,本文提出的改進算法如圖5所示。對比圖4(a)和圖5(a),本文算法能夠檢測出更遠處的目標小車,相比于FasterR-CNN算法提升小目標的檢測能力,從圖4(b)和圖5(b)可以看出對于椅子一類形態多樣的目標,本文算法有著更好的檢測效果,總體的檢測精度也有很好的提升,圖4(c)和圖5(c)則可以看出本文提出的基于特征融合的小目標檢測算法在目標定位上效果稍好一點。仔細分析后可以得出,基于FasterR-CNN的目標檢測算法在運用多層特征融合的方法后,不僅目標的檢測精度得到了提升,而且對于小目標的召回率也有不錯的提升,錨框的新設定增強了目標定位問題。通過完整的實驗,本文提出的基于改進的 FasterR-CNN 目標檢測算法的mAP為75.4%,相較于FasterR-CNN提高了2.2%,有效提升了FasterR-CNN的檢測精度,對于小目標的檢測能力有著明顯的提升,目標的定位效果也有很好的改善,在目標檢測速度上沒有明顯的影響。因此認為本文的改進算法的綜合性能比原有算法有著明顯的提升。

圖4 Faster R-CNN算法

圖5 本文算法
本文針對Faster R-CNN目標檢測算法中小目標檢測精度不高和定位不準確的問題,運用多層特征融合和錨框的重新設定來增強目標檢測的精度。利用多層特征融合生成融合特征圖,使得到的特征圖具有豐富的信息,有利于目標的檢測,對于錨框的重新設定能生成更多的候選框,有利于不同尺寸的目標檢測。本文提出的基于多層特征融合的小目標算法在不影響檢測速度的情況下能夠有效地提高目標檢測精度。如何在高檢測精度基礎上提高目標檢測速度將是我們之后研究的方向。