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