尹群杰,楊文柱+,冉夢影,宋姝潔
(1.河北大學 網絡空間安全與計算機學院,河北 保定 071002;2.河北大學 機器視覺工程研究中心,河北 保定 071002)
目標檢測是當今計算機視覺領域中最活躍的研究課題之一,其本質是找出圖片中物體的位置信息并判斷出它的類別[1]。如今,隨著視頻監控、人臉識別、交通運輸等方面在日常生活中的廣泛應用,小目標檢測已成為了目標檢測中的難題之一,近年來,基于深度學習的方法在小目標檢測等方面取得了明顯進展[2-5]。
由于小目標本身在圖像中所占像素相對較少,包含的特征也少,因而很難提取到足夠多的有效特征,容易出現漏檢問題,使得小目標的檢測效果較差。早些年的目標檢測器主要是基于手工設計的特征構建的,人們直接利用特征化的圖像金字塔(如圖1(a)所示)來檢測各個比例的物體[6]。隨著卷積神經網絡的深入發展,Liu等提出了SSD[7],直接提取多個尺度的特征圖,利用較淺層特征來檢測較小的目標,利用較深層特征來檢測較大的目標。但淺層特征缺乏足夠的語義信息和上下文信息,直接利用其進行小目標檢測效果不佳。基于此,目前常用的一種方法是將融合后的特征圖直接進行預測(如圖1(b)所示),如ION[8]、HyperNet[9]等。結合圖1(a)、圖1(b)的優點,Lin等[10]構建了特征金字塔網絡(FPN),如圖1(c)所示,利用自上而下的橫向連接結構,提升低層特征圖的語義信息,提高小目標檢測的檢測效果。但是多次下采樣會丟失很多細節信息,于是Yu等[11]引入空洞卷積在不增加額外計算量的同時增強特征的語義信息。本文提出了一種結合多特征融合與殘差空洞卷積的小目標檢測算法。與SSD等近期的經典模型進行對比,實驗結果表明,所提算法具有更高的準確率。

圖1 多尺度特征學習模型
SSD是一種端到端的單階段目標檢測算法,它不像兩階段目標檢測算法那樣先生成區域建議,再進行分類回歸,而是采用卷積神經網絡直接分辨出物體的類別,并對邊界框進行回歸。
原始的SSD使用VGG16作為骨干網絡,并結合YOLO的回歸思想和Faster RCNN中的Anchor boxes機制,提取多個尺度的特征圖以實現多尺度特征檢測,選取Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2卷積層作為特征圖,并在這些特征圖上分布不同尺度和比例的默認框,利用低層特征檢測小目標,利用高層特征檢測大目標。SSD在特征圖上的每個錨點生成固定的且包括類別概率和定位信息的預測結果,然后再經過非極大值抑制(NMS)去除冗余的邊界框。SSD低層特征圖具有較高的分辨率,高分辨率特征會包含物體的位置信息,這對小目標檢測有重大意義,但高層特征圖所包含的位置信息不足,導致小目標檢測效果不好,存在漏檢問題。
基于此,本文結合SSD淺層特征圖分辨率高、目標位置信息準確的優勢,首先通過對低層特征圖和高層特征圖融合,進一步增強淺層特征圖的語義信息。然后引入多分支殘差空洞卷積模塊,增強特征的多尺度上下文信息,以提高小目標檢測性能。
最初提出空洞卷積是為了解決圖像分割問題,在深度神經網絡中為了增加感受野進行下采樣,這樣雖然能夠增大感受野,但降低了空間分辨率的同時,丟失了小目標的部分細節信息,對小目標檢測非常不利。后來Yu等發現空洞卷積可以在不增加參數的同時增大小目標特征的感受野,增強小目標特征。Li等[12]證實了增大感受野有利于開展目標分類任務。Tian等[13]和Liu等[14]的研究表明空洞卷積能夠提升卷積層感受野大小,同時可以為網絡提供更強的特征語義信息。文獻[15,16]的研究表明通過空洞卷積可以提升對淺層特征的利用,實現多尺度的感受野,獲得更高的檢測精度,但這些框架對小目標檢測仍然不盡人意。空洞卷積的基本原理是在傳統卷積核的每個像素點之間插入值為0的像素,以改變卷積核大小,然后再進行正常卷積操作。其操作可以使模型學習到更多有效的語義信息,以解決外界因素對檢測小目標的干擾,更好地識別小目標。于是本文利用空洞卷積的優勢,構建多分支殘差空洞卷積,每個分支采用不同空洞率的空洞卷積,使得單個特征圖上具有多尺度特征信息,且在不增加額外參數計算的同時實現不同分支卷積的共享,提高小目標的性能。
本文提出的結合多特征融合與殘差空洞卷積的小目標檢測算法的整體結構框架,如圖2所示。該方法延續SSD的骨干提取網絡VGG16,利用多個尺度特征圖進行預測的優點,引入多層特征融合模塊(multi-layer feature fusion module,MFFM),首先將Conv7_2、Conv8_2與Conv4_3進行通道拼接(圖中大寫C表示通道拼接),將Conv8_2、Conv9_2與Conv7_2進行通道拼接,將Conv9_2、Conv10_2與Conv8_2進行通道拼接,以增強淺層特征的語義信息,進而得到具有豐富的細節信息和語義信息的淺層特征圖。然后將融合后的特征圖引入多分支殘差空洞卷積模塊(multi-branch residual dilated convolution module,MRDM),以增強特征的多尺度上下文信息,接著將多分支殘差空洞卷積模塊的輸出和Conv9_2、Conv10_2、Conv11_2進行最終預測。由于更深層的特征圖經過較多的下采樣會產生大量噪聲,不適用于小目標檢測,因此這里只將前3個特征圖進行特征增強。

圖2 結合多特征融合與殘差空洞卷積的小目標檢測算法的整體網絡框架
SSD淺層特征的語義信息較弱,因而小目標特征表達不充分,而以往的特征融合方式將所有的特征圖經過上采樣與之前特征圖進行融合的方式不僅會引入大量不利于小目標檢測的噪聲還會影響算法的檢測速度。
為解決這些問題,本文提出了多層特征融合模塊,將第n+1個特征圖、第n+2個特征圖和第n個特征圖進行通道拼接,有效地結合了相鄰特征層的語義信息,且減少了連續上采樣所帶來的不利噪聲。多層特征融合模塊的結構如圖3所示,先對第n個特征圖進行一個3×3的卷積,以保證當前特征圖和后兩個特征圖具有相同的特征表示能力,同時將通道數減少為原來的四分之一,以減少模型的計算量,然后對第n+1個特征圖和第n+2個特征圖進行一個1×1的卷積,降低通道數,以減少計算量,接著將卷積后的特征圖通過Relu層,對第n+1和n+2個特征圖經過上采樣,由于反卷積所采用的時間復雜度較大,因此本文采用雙線性插值法將后兩個特征圖的尺寸變成和第n個特征圖尺寸大小相同,最后對操作后的3個特征圖進行通道拼接,傳到下一個模塊。該融合操作用數學公式表示為
fn=Cn{Un(fn+1,fn),Un(fn+2,fn),fn}
(1)
式中:fn表示第n個特征圖; Cn(x1,x2,x3) 表示第x1個特征圖、第x2個特征圖和第x3個特征圖進行通道拼接; Un(y1,y2) 表示特征圖y1經過雙線性插值法的上采樣后和特征圖y2尺寸大小相同。
多層特征融合模塊的具體做法為:將Conv7_2、Conv8_2與Conv4_3融合,將Conv8_2、Conv9_2與Conv7_2融合,將Conv9_2、Conv10_2與Conv8_2融合。融合后特征圖的維度大小分別為38×38×512、19×19×448、10×10×256。

圖3 多層特征融合模塊結構
由于SSD淺層特征未經過下采樣,感受野大小受到了限制,無法捕獲到豐富的細節信息和上下文信息,不利于小目標檢測。而空洞卷積可以在不增加參數的同時增大特征圖上每個點的感受野,捕獲更多的多尺度上下文信息。
本文結合空洞卷積的優勢,借鑒ResNet[17],設計了一個多分支殘差空洞卷積模塊,其結構如圖4所示,首先每一個分支會先經過一個1×1的卷積,將通道數從t變為t/2(t為輸入通道數),其目的是減少模型的計算量。其次采用不同擴張率對其進行卷積操作,其中,空洞卷積的卷積核大小在本研究中都設置為3×3,每個分支的擴張率從上到下設置為1、3、5,在不增加參數的情況下捕獲不同尺度特征的上下文信息。接著利用1×1的卷積調整通道數的大小,與輸入層進行跳躍連接,使得多分支殘差空洞卷積模塊更優化。然后將這3個經操作后的特征進行通道拼接,以整合不同尺度的上下文信息;最后再經過一個1×1的卷積將通道數恢復至t,傳入最終的分類預測。

圖4 多分支殘差空洞卷積模塊結構
經過空洞卷積后的卷積核實際大小和感受野大小的計算公式如式(2)、式(3)所示
k′=k+(k-1)(r-1)
(2)
(3)
其中,k′是經過空洞卷積后的卷積核實際大小;k為原始卷積核大小,在本研究中都將其設置為3×3;r為擴張率,其中r=1,2,3,…,n;Rn為第n層的每個像素點的感受野,si為第i層的步長,在本研究中步長都設為1,其中i=1,2,…,n。
表1展示的是多分支殘差空洞卷積的結構設計,即各層加空洞卷積后卷積核及感受野的大小。其中,Layer表示層數;Kernel表示卷積核大小,k表示經過空洞卷積前卷積核大小,在本研究中將其設置為3×3,k′表示經過空洞卷積后卷積核的實際大小,第n層空洞卷積的卷積核實際大小為(4n-1)×(4n-1); Stride表示步長,本文都設置為1;Dilated rate表示擴張率;Padding表示特征像素點邊框的填充個數,本文Padding設置為和擴張率相同大小;RF表示感受野大小,第n層經過空洞卷積后特征圖上每個像素點的感受野變為(2n2+1)2。 隨著n的不斷增長,在不引入額外參數的同時,空洞卷積的卷積核大小在逐漸變大,感受野也在不斷擴展。

表1 多分支殘差空洞卷積的結構設計
在本文中,每一個分支采用不同擴張率,即1,3,5,可以循序漸進地捕獲圖像不同區域內的信息,得到多尺度特征信息,避免同一個擴張率造成的信息冗余或丟失,該模塊可以實現不同分支卷積的共享,從而降低模型的復雜度。
本文算法采用深度學習框架PyTorch-1.3.0,編程語言為Python_3.7,在Windows10操作系統下實現,GPU型號為NVIDIA GTX 1080,CUDA版本為10.1。先在ImageNet數據庫上對骨干網絡VGG16進行預訓練,然后在PASCAL VOC2007和PASCAL VOC2012的訓練集和驗證集上進行訓練,最后在VOC2007數據集上進行測試,本研究采用平均精度(mAP)指標進行評估。為了能夠更好地展示出本文算法的性能,將本網絡模型與當前流行的網絡模型進行比較,同時將各個模塊的組合進行比較,以展示出本網絡模型更好的檢測性能。
本網絡模型在PASCAL VOC數據集[18]上進行評估。該數據集共有兩個版本,PASCAL VOC2007和PASCAL VOC2012,VOC2007包含2501個訓練圖像、2510個驗證圖像和5011個測試圖像;VOC2012包含5717個訓練圖像,5823個驗證圖像和10 991個測試圖像。數據集總共分4個大類、20個小類(加上背景共21類),具體類別如圖5所示,預測時輸出20個類別,分別為飛機、自行車、鳥、狗、公共汽車、火車、汽車、奶牛、盆栽、船、人、羊、椅子、馬、沙發、餐桌、摩托車、瓶子、電視監視器、貓。PASCAL VOC數據集可以在http://host.robots.ox.ac.uk/pascal/VOC/公開獲取,輸入圖像都固定為300×300像素大小。本文選取PASCAL VOC2007和VOC2012數據集中16 551張訓練圖像和驗證圖像作為訓練集,并在VOC2007數據集的4952張測試圖像上驗證模型性能。

圖5 PASCAL VOC數據集的類別樣本
本文使用兩個評價指標來評估模型性能,分別為mAP、FPS。mAP是計算小目標檢測算法檢測精度的指標,mAP即對測試集進行評估,是測試集中的真實框和預測框是否被檢測出來的指標。
mAP值是多個類別平均精確度(AP)的均值,AP是指利用精確率和召回率組成的PR曲線下面的面積,用公式表示為

(4)
式中: p(r) 為利用精確率為縱軸和召回率為橫軸的點所畫的PR曲線。
精確率和召回率的計算公式如式(5)、式(6)所示
(5)
(6)
其中,Pr表示正確識別出物體類別的邊界框數量與識別到物體類別的邊界框總數量的比值;Re為正確識別出物體類別的邊界框數量與Ground Truth中邊界框總數量的比值;PTP表示真實框和預測框IoU值大于設定閾值(本文設定為0.5)的邊界框數量;PFP表示真實框和預測框的IoU值小于設定閾值的邊界框數量;PFN表示未被檢測到的Ground Truth的數量。
FPS(frames per second)是小目標檢測算法中檢測速度的指標,指網絡模型每秒處理多少張圖片。例如,某小目標檢測算法平均處理一張圖片所需的時間為0.02 s,則檢測速度為1/0.02=50 FPS。
本文將PASCAL VOC2007和PASCAL VOC2012的訓練集作為訓練樣本,且在PASCAL VOC2007測試集上進行測試。在本實驗中,本文算法所采用的損失函數和數據增強策略與SSD算法相同,在訓練過程中預測框的IoU設置為0.5,總迭代次數為200K次,采用10-3的初始學習率進行120K次迭代,隨后在120K~160K次迭代使用10-4的學習率,對剩下的40K次迭代降低學習率到10-5,權重衰減和動量分別為0.0005、0.9,批次大小設置為16,輸入圖片大小為300×300。
表2展示的是本文所改進的方法和目前具有較好性能的目標檢測算法的檢測精度和檢測速度,可以看出本文方法的檢測精度已達到了78.6%mAP,每秒可以檢測57.2幀圖像。表中前3個為兩階段目標檢測算法,剩下的為單階段目標檢測算法。從表中可以看出,本文方法的檢測精度比使用VGG16骨干網絡的Fast R-CNN高了8.6%mAP,檢測速度快了51.2 FPS;比使用VGG16骨干網絡的Faster R-CNN高5.4%mAP,檢測速度快了50.2 FPS;比使用ResNet-50骨干網絡的R-FCN高1.2%mAP,檢測速度快了48.2 FPPS。所提算法的檢測速度均遠遠高于兩階段目標檢測算法。本文方法的檢測精度比使用Darknet-19骨干網絡的YOLOv2高5.2%mAP,比使用VGG16骨干網絡的SSD300高1.4%mAP,比使用DS/64-192-48-1骨干網絡的DSOD高0.9%mAP,但是檢測速度高了39.8 FPS,和使用ResNet-101骨干網絡的DSSD算法的檢測精度雖然相同,但是檢測速度高出了47.7 FPS。和使用相同骨干網絡的DSSD相比,檢測精度高了0.3%mAP,檢測速度高出了53 FPS。可見本文方法要優于當前目標檢測性能較好的算法模型。

表2 不同小目標檢測算法性能的對比
為了能夠直觀地顯示出所提算法的優越性,對本文算法及當前性能優異的小目標檢測算法畫出散點,如圖6所示,橫坐標表示為各個算法的檢測速度,縱坐標表示為各個算法的檢測精確度,性能越好的小目標檢測算法越靠近右上角。由此可見,本文算法要比其它的目標檢測算法的檢測性能好。

圖6 不同檢測算法的檢測速度和檢測精度的散點圖對比
為了更清楚地看出SSD、DSSD和本文方法在PASCAL VOC2007數據集上對各個類別精確度的差距,本文設計了一個柱狀圖,如圖7所示,橫軸表示數據集的類別,縱軸表示相應類別的精確度,圖上所顯示的精確度為本方法各個類別的精確度。從圖中可知,本文方法與SSD相比,有15個類別遠遠超過了SSD,如飛機、奶牛等,提高了5個百分點以上,有3個類別的精確度和SSD相近,如自行車、公共汽車、盆栽,只有2個類別低于SSD,如綿羊和電視監視器。相對于具有相同骨干網絡的DSSD,本文方法有12個類別的精確度大于DSSD,如飛機、鳥、船等。本文方法是在淺層特征圖上進行改進,使其同時包含高分辨率圖像和強語義信息,對小目標例如飛機、鳥、瓶子的檢測均有大幅度提升。因此,本算法檢測小目標的性能要比SSD算法和DSSD算法好。
為了驗證本文所設計的多層特征融合模塊和多分支殘差空洞卷積模塊在SSD算法上的有效性,在PASCAL VOC數據集上進行模型簡化實驗,實驗結果見表3。傳統SSD算法的淺層特征缺乏足夠的語義信息和上下文信息,檢測精度可以達到77.2%mAP;在僅添加多層特征融合模塊時,淺層特征得到了豐富的語義信息,檢測精度提升了1個百分點;在僅添加多分支殘差空洞卷積模塊時,淺層特征增強了上下文信息,檢測精度提升了0.4個百分點;當將兩個模塊同時添加時,增強了淺層特征的語義信息和上下文信息,檢測精度達到78.6%mAP。檢測精度的提升證實了本算法中多層特征融合模塊和多分支殘差空洞卷積模塊的有效性。

表3 在VOC2007測試集上的模型簡化實驗結果
為了更直觀地看出本文方法的優勢和細節,選取VOC2007測試集上8張包含不同類別的小目標圖片,對分類分數高于0.5的類別進行可視化,如圖8所示。圖片中(a)、(c)列為SSD的可視化結果,(b)、(d)列為本文方法的可視化結果。將分類分數高于0.5的目標用邊界框框住,同時在圖片上方寫出邊界框所框物體的類別和得分情況。第一行圖像給出了對動物的檢測結果;第二行給出了對人和騎行工具的檢測結果;第三行給出了對小船的檢測結果;第四行給出了對物品的檢測結果。從圖8可以看出,第一行本文方法比SSD多檢測出5個鳥和2個羊,且得分比原始的高;第二行本文方法比SSD多檢測出3個人和2個自行車,且得分情況比SSD好;第三行本文方法比SSD多檢測出4個船,且分類分數明顯優于原始SSD;第四行本文方法比SSD多檢測出3個盆栽和3個瓶子,且得分情況比SSD好。從圖中可以看出傳統的SSD算法在小船、羊等中小尺寸目標上檢測效果較差,大部分目標還未檢測出來,而改進后的方法對于在圖像中所占比例較小的目標和被遮擋的物體都有所改善,而且物體得分情況明顯要優于原始的SSD算法。這是因為本文方法提升了淺層特征的表示能力,得到了特征的強語義信息和多尺度上下文信息,將原本只包含高分辨率圖像的淺層特征圖融入了細節信息,在一定程度上降低了小目標的漏檢率,提高小目標檢測的魯棒性。

圖8 SSD和本文方法在PASCAL VOC2007測試集上的檢測結果
本文提出了一種結合多特征融合與殘差空洞卷積的小目標檢測算法,設計了一個多層特征融合模塊,將相鄰的淺層特征進行融合,以增強特征圖的語義信息,設計了一個多分支殘差空洞卷積模塊,通過建立多個不同擴張率的空洞卷積分支,在不丟失原始分辨率的同時增大特征圖的感受野和上下文信息。實驗結果表明,所提出的網絡模型在保持實時速度的同時,精度亦優于當前目標檢測性能較好的算法模型,可用于實時目標檢測任務。但是該算法的檢測精度和檢測速度仍可以有所提升,在以后的工作中將對骨干網絡VGG16進行修改,把DenseNet[23]引入上下文信息增強模塊,同時收集包含更多小目標的數據集,以便進行訓練和預測,進一步提高算法的檢測效果。