李娟娟, 侯志強, 白 玉, 程環(huán)環(huán), 馬素剛, 余旺盛, 蒲 磊
(1.西安郵電大學計算機學院,西安,710121; 2.西安郵電大學陜西省網(wǎng)絡數(shù)據(jù)分析與智能處理重點實驗室,西安,710121;3.空軍工程大學信息與導航學院,西安,710077; 4.火箭軍工程大學作戰(zhàn)保障學院,西安,710025)
目標檢測作為計算機視覺領域的一個熱門研究課題,在行人識別[1]、自動駕駛[2]和人臉檢測[3]等諸多方面具有廣泛應用,近年來得到了迅速的發(fā)展。
傳統(tǒng)的目標檢測方法通常利用手工特征進行檢測,如HOG[4](histograms of oriented gradient)和SIFT[5](scale-invariant features transfer)等特征,但是這些特征處理過程復雜,檢測速度慢,在對不同場景的目標進行檢測時,算法的魯棒性不高?;谏疃葘W習的目標檢測算法根據(jù)有無建議區(qū)域生成階段分為單階段(one stage)目標檢測算法和兩階段(two stage)目標檢測算法:單階段檢測算法主要有SSD[6]和YOLO系列[7-10]等;兩階段檢測算法主要有R-CNN[11]、SPP-Net[12]和Faster R-CNN[13]等。由于有錨框的檢測算法在檢測時會帶來正負樣本不均衡等問題,近年來出現(xiàn)了無錨框(anchor-free)的目標檢測算法,主要算法有CornerNet[14]和CenterNet[15]等。CornerNet利用了左上角和右下角的兩個關鍵點來進行目標檢測;CenterNet將目標作為點的模型,只檢測目標的中心點,通過預測目標的中心點直接回歸對應目標的長和寬。
在上述算法中,單階段SSD算法的精度和兩階段Faster R-CNN算法的精度比較接近,但速度達到了實時性的要求,是目標檢測領域一個經(jīng)典的算法。因此,許多研究人員對SSD算法進行了改進,改進的算法有DSSD算法[16]、RSSD算法[17]、RefineDet算法[18]、RFBNet算法[19]和FSSD算法[20]等。
SSD算法克服了Faster R-CNN和YOLOv1算法的不足,提出了多尺度目標檢測,考慮了大目標和小目標,平衡了精度和速度。但是也存在一定的問題:SSD在對多尺度目標進行檢測時,使用淺層網(wǎng)絡檢測小目標,深層網(wǎng)絡檢測大目標,小目標往往更依賴淺層特征的空間信息,因為淺層特征有更高的分辨率,但是小目標在淺層表征力不足,缺乏語義信息,導致分類比較困難。
針對SSD在目標檢測過程中存在的目標漏檢和誤檢的問題,本文提出了一種融入多維空洞卷積和多尺度特征融合的目標檢測算法。
本文算法框架見圖1。
圖1 本文算法框架
本文算法是以SSD目標檢測算法為基礎,將特征層分為淺層和深層兩部分,淺層分別為:conv4_3層、conv7層和conv8層,深層分別為:conv9層、conv10層和conv11層。淺層分辨率高,具有豐富的細節(jié)信息,但特征表征力不足[16];深層分辨率低,具有豐富語義信息,能很好地表示中等目標和大目標,基于此,對淺層特征和深層特征分別進行改進。在淺層引入3個淺層特征增強模塊SFE和2個特征融合模塊(feature fusion block,F(xiàn)FB),處理conv4_3、conv7和conv8層的特征,3個淺層特征增強模塊使用不同維的空洞卷積,以擴大特征的感受野;FFB1模塊融合特征增強后的conv4_3和conv7,F(xiàn)FB2模塊融合特征增強后的conv7和conv8。對于conv9層、conv10層和conv11層引入通道注意力模塊,使網(wǎng)絡在全局范圍內(nèi)選擇更有用的目標信息,增強了特征的表達能力。下面對基準算法、特征增強模塊、特征融合模塊和通道注意力展開說明。
SSD算法的特征提取網(wǎng)絡是VGG16,SSD算法使用VGG16的conv4_3層,和將全連接fc7層轉(zhuǎn)化為的conv7層做檢測,并在VGG16基礎上,進一步延伸了4個卷積層conv8、conv9、conv10和conv11層用來做檢測,所以SSD算法共使用6個不同尺度的特征圖進行分類與回歸預測。
在深度網(wǎng)絡中,通常通過下采樣操作來增加特征圖感受野,但感受野增加的同時也造成特征圖分辨率降低,細節(jié)信息會減少??斩淳矸e可以增加特征圖的感受野,同時也不會損失圖像信息。許多研究人員在網(wǎng)絡中使用不同方式的空洞卷積[21],使性能有一定的提升。圖2分別給出了普通卷積和空洞卷積膨脹率為2的示意圖。
圖2 普通卷積和空洞卷積示意圖
本文使用SFE對特征圖擴大感受野,見圖3。
圖3 淺層特征增強模塊
設計了SFE1、SFE2和SFE3這3個具有多維空洞卷積的淺層特征增強模塊,對conv4_3層、conv7層和conv8層進行感受野擴大。本文淺層特征增強模塊采用殘差網(wǎng)絡結(jié)構(gòu),針對現(xiàn)有的Inception結(jié)構(gòu)進行改進,將不同膨脹率的空洞卷積代替原有卷積層,形成多分支空洞卷積。本文使用5種不同膨脹率(rate=1,2,3,4,5)的空洞卷積來對原始的特征提取信息,獲得5種不同語義信息的特征圖,使用不同膨脹率得到的特征圖進行融合,可以提取圖像中不同大小的目標信息,膨脹率較小的空洞卷積可以提取圖像中的小目標信息,有利于小目標的準確分類,增強了模型對于小目標的檢測能力。
目標的特征信息會隨著網(wǎng)絡的傳播由淺層的細節(jié)信息轉(zhuǎn)化為深層的語義信息,特征的感受野也會增大,且特征每層的尺寸是不同的,所以膨脹率的選擇應該與特征層尺寸大小和所具有的信息相關,才能保證目標可以被檢測到,不會造成丟失。通過實驗對比選擇不同淺層特征增強模塊和相同的淺層特征增強模塊的檢測結(jié)果,根據(jù)特征尺寸和感受野來選擇不同維的空洞卷積,對于中小目標的檢測較好一些。
下面對SFE1、SFE2和SFE3模塊分別進行說明:在conv4_3層添加SFE1模塊,使用1×1卷積將原始特征的通道數(shù)由C變?yōu)镃/6賦給每個分支,使用膨脹率為1,2,3,4,5的空洞卷積對原始特征進行處理。在conv7層添加SFE2模塊,使用1×1積將原始特征的通道數(shù)由C變?yōu)镃/5賦給每個分支,使用膨脹率為1,2,3,4的空洞卷積。在conv8層添加SFE3模塊,使用1×1卷積將原始特征的通道數(shù)由C變?yōu)镃/4賦給每個分支,使用膨脹率為1,2,3的空洞卷積。將各個分支按通道拼接融合,然后將原始特征和經(jīng)過多個不同膨脹率的空洞卷積的特征進行相加融合,保留原始特征信息。
不同的特征層經(jīng)過特征增強后的信息是不同的,將不同分辨率并行的特征層進行融合,提高了網(wǎng)絡的表征能力,增強了小目標的特征表達。常用的特征融合方式有相加(add)和拼接(concat),本文選用的特征融合方式是拼接,這樣融合特征通道具有一定的靈活性。FFB1模塊融合的是SFE1輸出特征圖經(jīng)過stride為2的下采樣變成19×19的特征圖,和當前SFE2輸出的特征圖;FFB2模塊融合的是SFE2輸出的特征圖經(jīng)過stride為2的下采樣變成10×10的特征圖,和當前SFE3輸出的特征圖。特征融合模塊(FFB)結(jié)構(gòu)如圖4所示。
圖4 特征融合模塊
通道注意力是通過對特征通道進行權重再配來提高特征表達能力。因為原始特征圖每個通道占比都是一樣的,所以在輸出檢測時,不能聚焦于重點信息,而是全局搜索,這樣會消耗訓練時間,且很難找到重點的部分。對特征使用通道注意力,能在圖像中更容易找到重點關注的區(qū)域,從而更好檢測到目標。本文采用的通道注意力模塊是SENet[22],由壓縮(squeeze)、激勵(excitaion)和權重重標定(reweight)3個部分組成。
本文算法使用的實驗平臺為Ubuntu16.04系統(tǒng),GPU為 1080Ti,深度學習框架為PyTorch1.2。實驗使用PASCAL VOC數(shù)據(jù)集和KITTI數(shù)據(jù)集。
為了更準確地衡量目標檢測的質(zhì)量,本文使用的指標為平均精度均值(mean average precision,mAP)和每秒幀率(FPS)來衡量目標檢測質(zhì)量,mAP是指所有類別的精度均值。
為了評估本文算法的檢測性能,在PASCAL VOC數(shù)據(jù)集和KITTI數(shù)據(jù)集上將SSD算法的檢測效果圖與本文算法的檢測效果圖進行對比。
2.3.1 PASCAL VOC數(shù)據(jù)
在PASCAL VOC數(shù)據(jù)集上檢測結(jié)果如圖5所示,從第1列可以看出,圖像中被遮擋的目標“cow”,SSD算法沒有檢測到,但是本文算法能檢測到,并且分類分數(shù)提高了。從第2列可以看出“person”SSD算法沒有檢測到,但是本文算法可以檢測到。從第3列可以看出SSD算法將石頭誤檢成“sheep”也有漏檢情況,本文算法對目標的漏檢和誤檢有一定的改善。從第4列可以看出,圖像中的“pottedplant”沒有被檢測到,本文算法能檢測到,“sofa”的分類分數(shù)提高了。從圖5檢測效果圖可以看出,在圖像中存在多目標的情況下,本文算法也可以檢測到,并且不會出現(xiàn)誤檢和漏檢的情況,且分類分數(shù)都有一定的提升,有效地改善了多目標的檢測效果。
圖5 在PASCAL VOC數(shù)據(jù)集上實驗結(jié)果對比
2.3.2 KITTI數(shù)據(jù)集
在KITTI數(shù)據(jù)集上檢測結(jié)果如圖6所示,在第1列中SSD算法沒有檢測到目標“pedestrian”,而本文算法能檢測到。在第2列SSD算法將目標“car”漏檢了,而本文算法則能檢測到,“car”的分類分數(shù)也提高了。本文算法對漏檢有一定的改善。
圖6 在KITTI數(shù)據(jù)集上實驗結(jié)果對比
2.4.1 PASCAL VOC數(shù)據(jù)集
在PASCAL VOC數(shù)據(jù)集上,本文算法與兩階段Faster R-CNN算法[13]和R-FCN算法[23]、單階段YOLOv3算法[9]、CenterNet算法[15]以及SSD改進算法,DSSD算法[16]、RSSD算法[17]和FSSD算法[20]等算法檢測結(jié)果對比,如表1所示。
表1 PASCAL VOC數(shù)據(jù)集上檢測結(jié)果對比
從表1中可以看出,本文算法的精度為79.7%,和原始SSD算法及其改進算法進行比較,本文算法的檢測精度最高。比原始SSD算法提高了2.4%,相比DSSD算法、RSSD算法、FSSD算法,本文算法分別提高了1.1%、1.2%、0.9%,相比文獻[24]提高了1.6%,在速度方面原始的SSD算法為42FPS,改進算法的速度為34FPS,達到了實時性的要求。和單階段經(jīng)典算法YOLOv3相比提高了0.4%,和無錨框算法CenterNet相比提高了1.0%。和兩階段算法Faster R-CNN、 R-FCN相比,分別提高了6.5%和0.2%,速度相比兩階段算法達到了實時性的要求。
2.4.2 KITTI數(shù)據(jù)集
在KITTI數(shù)據(jù)集上本文算法與SSD算法檢測結(jié)果進行對比,如表2所示。
表2中可以看出,本文算法的檢測精度為68.5%,比SSD算法提升了5.1%,單個類別“car”提升了3.2%,“cyclist”提升了8.4%,“pedestrian”提升了3.7%,F(xiàn)PS為45,滿足實時性檢測的要求。
表2 KITTI數(shù)據(jù)集上檢測結(jié)果對比
通過添加單個模塊和組合多個模塊測試,說明每個模塊在改進算法中的作用,在PASCAL VOC上實驗結(jié)果如表3所示。
表3 消融實驗
從表3中可以看出,將SFE模塊添加到SSD算法中,提高了原始算法的精度,mAP由77.3%提升到78.9%,提高了1.6%,證明了擴大感受野對于淺層特征圖的重要性。在加入SFE模塊的基礎上加入特征融合FFB模塊,提高了0.6%,證明了淺層特征信息對較深一層的信息是有補充作用的。在此基礎上添加了通道注意力模塊,提高了0.2%,對特征通道進行篩選,強調(diào)了重要的通道信息。
在SSD目標檢測算法的基礎上,針對不同層信息的差異,本文首先在特征圖上添加3個不同的多維空洞卷積SFE模塊;其次使用2個特征融合模塊融合不同層的特征,使特征層之間的信息可以互補,更好的檢測到目標;最后在網(wǎng)絡深層添加通道注意力模塊,對特征進行加權處理,強調(diào)有用的信息,增強特征的可分辨性。實驗結(jié)果表明,所提出算法有效地改善了目標漏檢和錯檢,在檢測速度滿足實時性的情況下,提升了目標的檢測精度。