胡朝海 李自勝 王露明
(1.西南科技大學(xué)制造科學(xué)與工程學(xué)院 綿陽 621000)
(2.制造過程測(cè)試技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室 綿陽 621010)
目標(biāo)檢測(cè)是計(jì)算機(jī)視覺領(lǐng)域研究熱點(diǎn)和難點(diǎn)之一,廣泛應(yīng)用于人機(jī)交互、智能導(dǎo)航等領(lǐng)域[1],其主要任務(wù)是精確定位圖像中一個(gè)或多個(gè)目標(biāo),并判斷其類別[2]。傳統(tǒng)的目標(biāo)檢測(cè)算法如HOG[3]、SIFT[4]等,主要通過滑動(dòng)窗口生成大量的候選區(qū)域,隨后提取每個(gè)區(qū)域的圖像特征,再將提取到的特征傳遞給(SVM)[5]或Adaboost[6]等傳統(tǒng)分類器。雖然這些方法能夠取得較好檢測(cè)效果,但特征提取過程中計(jì)算開銷大,實(shí)時(shí)性差,從而在應(yīng)用場景中受到極大的限制。
近年來,研究人員將卷積神經(jīng)網(wǎng)絡(luò)CNN[7](Convolutional Neural Network)應(yīng)用于目標(biāo)檢測(cè),CNN 強(qiáng)大的特征提取能力大幅度提升了目標(biāo)檢測(cè)的檢測(cè)速度和精度?;贑NN 的目標(biāo)檢測(cè)方法主要有兩類:基于候選區(qū)域的檢測(cè)方法和基于回歸的檢測(cè)方法。2014 年,Girshick 等[8]將CNN 應(yīng)用于目標(biāo)檢測(cè),提出了R-CNN(Region with Convolutional Neural Network)算法。R-CNN 算法通過selective search 獲取2000 個(gè)候選區(qū),隨后逐個(gè)輸入CNN 進(jìn)行特征提取,因其候選區(qū)域多計(jì)算開銷等,該算法未能得到很好的應(yīng)用。2015 年,Girshick 等受到SPP-Net[9](Spatial Pyramid Pooling-Net)的啟發(fā),將ROI pooling 融入R-CNN 提出Fast R-CNN[10]網(wǎng)絡(luò),但該算法仍依賴selective search 來生成候選區(qū)域。同年Ren 等[11]將RPN(Region proposal network)網(wǎng)絡(luò)融入Fast R-CNN 提出了Faster R-CNN,用RPN代替Selective search 生成候選區(qū)域,進(jìn)一步加快了檢測(cè)速度并提升了精度,使網(wǎng)絡(luò)達(dá)到實(shí)時(shí)目標(biāo)檢測(cè)效果。
基于回歸的檢測(cè)方法,主要代表有YOLO(You Only Look Once)系列和SSD(Single Shot Multi Detector)系列算法。2017 年Liu 等[12]提出了SSD 算法,以VGG-16[13]為Backbone,將具有豐富幾何信息的淺層特征用于小目標(biāo)檢測(cè),具有豐富語義信息的深層特征用于大目標(biāo)檢測(cè)。2017 年Hu 等[14]提出了DSSD(Deconvolutional Single Shot Multi Detector)網(wǎng)絡(luò),此網(wǎng)絡(luò)在SSD 的基礎(chǔ)上加入了Deconvolutional layer 和殘差結(jié)構(gòu)提升了精度。2015 年后,Redmon 等[15~16,21]相繼提出了YOLOv1、YOLOv2 和YOLOv3 算法,YOLOv1 算法一步完成圖像中目標(biāo)定位、檢測(cè)和分類,實(shí)現(xiàn)實(shí)時(shí)目標(biāo)檢測(cè)。YOLOv2是YOLOv1 的改進(jìn)版,受到ResNet[17]啟發(fā),該算法重新設(shè)計(jì)特征提取網(wǎng)絡(luò)DarkNet-19 網(wǎng)絡(luò)。YOLOv3 改進(jìn)YOLOv2 的DarkNet-19 網(wǎng)絡(luò),設(shè)計(jì)了DarkNet-53 網(wǎng)絡(luò)作為YOLOv3 的特征提取網(wǎng)絡(luò)。得益于DarkNet-53 和多尺寸訓(xùn)練,使得目標(biāo)檢測(cè)性能得以提升。YOLOv3 由于檢測(cè)速度快和精度高的優(yōu)勢(shì)在各個(gè)行業(yè)中被廣泛使用,然而在精度要求更高的目標(biāo)檢測(cè)任務(wù)中,YOLOv3 精度還有待提升。
嵌入注意力機(jī)制是改進(jìn)目標(biāo)檢測(cè)算法性能常用方法之一。Hu 等[18]提出了SENet(Squeeze and Excitation Net)網(wǎng)絡(luò),該算法將特征圖的高和寬都?jí)嚎s為1,得到(C×1×1)的特征數(shù)據(jù),再與原維度的特征數(shù)據(jù)相乘實(shí)現(xiàn)注意力機(jī)制,即通道注意力機(jī)制。Woo 等[19]提出卷積注意模塊CBAM(Convolutional Block Attention Module),和SENet 相比,增加了實(shí)現(xiàn)空間注意力的功能。向YOLOv3 嵌入注意力機(jī)制后取得較好的效果,如2019年Xu等[20]將Attention 嵌入YOLOv3 算法提出了Attention-YOLO算法,但Attention 權(quán)值較為單一,注意力效果有限。本文提出了類注意力機(jī)制(Attention-Like),在YOLOv3 的DarkNet-53 中嵌入Attention-Like 類注意力,實(shí)現(xiàn)了AL-YOLO(Attention-Like YOLO)算法。實(shí)驗(yàn)表明,嵌入此Attention-Like后YOLOv3的性能得到了一定的提升。
YOLOv3 模型的特征提取網(wǎng)絡(luò)是DarkNet-53網(wǎng)絡(luò)。其結(jié)構(gòu)如圖1 所示。圖中Conv 表示卷積層(Convolutional layer),BN 表示BatchNorm,對(duì)數(shù)據(jù)進(jìn)行批正則處理,LeakyRelu 表示激活函數(shù)。YOLOv3的預(yù)測(cè)結(jié)構(gòu)如圖2所示,將特征提取網(wǎng)絡(luò)的后三個(gè)不同尺寸的特征圖用于目標(biāo)檢測(cè),圖中的(n×c×13×13),其中n表示batch size,c表示通道數(shù),13和13 分別表示特征圖的高和寬。Conv 表示卷積層,對(duì)特征圖進(jìn)行卷積操作,Concat 表示將兩條支路上的特征圖在c維度上進(jìn)行堆疊。對(duì)Concat 操作后的特征圖分別進(jìn)行卷積操作調(diào)整其通道數(shù)為(256,512,1024)。
圖1 DarkNet-53網(wǎng)絡(luò)結(jié)構(gòu)
圖2 YOLOv3 預(yù)測(cè)結(jié)構(gòu)
Attention-Like 能更好地關(guān)注圖像中有目標(biāo)存在的區(qū)域,抑制沒有目標(biāo)的區(qū)域。本文提出的Attention-Like 是將前一個(gè)特征圖上的幾何信息在后一個(gè)特征圖中凸顯出來,通過學(xué)習(xí),增強(qiáng)有目標(biāo)部分的特征圖權(quán)重,抑制沒有目標(biāo)的特征圖權(quán)重,來降低沒有目標(biāo)部分特征圖對(duì)目標(biāo)檢測(cè)造成的影響。如圖3 所示,Attention-Like 模塊的輸入為FA和FB。
圖3 Attention-Like網(wǎng)絡(luò)結(jié)構(gòu)
其中C*、H*、W*分別表示特征圖的通道數(shù)、高度和寬度。
C'=2C'',H'=2H'',W'=2W'',令ω=[ω1,ω2,…,ωc],c表示第c個(gè)特征圖通道,ωc表示第c個(gè)特征圖通道上的卷積核參數(shù),?表示卷積。整個(gè)卷積過程可由下式(5)表示:
在卷積過程中,進(jìn)行Padding 補(bǔ)0,使得FB1和FA的高度和寬度相等。緊接著將卷積后的特征圖通過Sigmoid 函數(shù),再與FA特征圖逐元素相乘再相加,可由如下公式表示:
上式中⊙表示逐元素相乘,⊕表示逐元素相加,下同。得到NF后,對(duì)NF進(jìn)行步長為2 的卷積操作,使特征圖的高和寬為原來的一半。將NF通過Sigmoid 函數(shù),再將NF與特征圖FB逐元素相乘和相加,最后輸出可由如下公式表示:
YOLOv3 將原圖和標(biāo)注進(jìn)行訓(xùn)練,很大幅度上提升了網(wǎng)絡(luò)的訓(xùn)練速度和預(yù)測(cè)速度。該網(wǎng)絡(luò)模型又為全卷積網(wǎng)絡(luò),且采用回歸算法,進(jìn)一步提升了該算法的訓(xùn)練和預(yù)測(cè)速度。本文提出的Attention-Like需要兩個(gè)輸入值,可嵌在任意兩個(gè)或多個(gè)卷積操作之后。向DarkNet-53 中嵌入Attention-Like,如圖4 所示,分別在DarkNet-53 的第一個(gè)模塊和第二個(gè)模塊之后嵌入Attention-Like,得到AL-YOLO 算法。其中第一個(gè)Attention-Like 的輸入分別為DarkNet-53 的第一個(gè)模塊的Con(3,1,1)的輸出和Con(3,2,1)的輸出,Con(3,1,1)的輸出對(duì)應(yīng)圖3的FA,Con(3,2,1)的輸出對(duì)應(yīng)圖3中的FB。第二個(gè)Attention-Like 的輸入分別為第一個(gè)Attention-Like 的輸出和DarkNet-53 的第二個(gè)模塊Con(3,2,1)的輸出,分別對(duì)應(yīng)圖3中的FA和FB。
圖4 Attention-Like嵌入DarkNet-53
YOLOv3 將DarkNet-53 網(wǎng)絡(luò)的后三個(gè)模塊的輸出用于檢測(cè),以分辨率為416×416 的輸入圖像為例,后三個(gè)大小不同的特征圖經(jīng)過Concat和卷積以后,分別得到(13×13×75)、(26×26×75)和(52×52×75)的特征圖,特征圖的高和寬取決于輸入圖像的大小,75 取決于數(shù)據(jù)集有多少個(gè)目標(biāo)類。75=3×(4+1+20),其中3表示特征圖的每個(gè)網(wǎng)格上生成三個(gè)檢驗(yàn)框,4 表示每個(gè)檢測(cè)框的中心位置坐標(biāo)值和高寬值的數(shù)目個(gè)數(shù),1 表示每個(gè)檢驗(yàn)框中包含目標(biāo)的置信度,20 表示數(shù)據(jù)集PASCAL VOC 數(shù)據(jù)集中的20個(gè)類,AL-YOLO沿用此檢測(cè)方法。
通過DarkNet-53 網(wǎng)絡(luò)對(duì)輸入圖像提取特征后,將最后三個(gè)大小不同的特征圖用于目標(biāo)檢測(cè),若輸入圖像的分辨率為416×416,最后三個(gè)特征圖的分辨率分別為52×52、26×26、13×13。在檢測(cè)階段,根據(jù)特征圖的大小生成網(wǎng)格,再在每個(gè)網(wǎng)格中生成三個(gè)邊界框,共生成(52×52+26×26+13×13)×3=10647 個(gè)邊界框,其中3 表示每個(gè)網(wǎng)格上生成3個(gè)檢測(cè)框。在每個(gè)網(wǎng)格上,網(wǎng)絡(luò)預(yù)測(cè)了25 個(gè)值,其中前兩個(gè)值是邊界框的中心坐標(biāo),用tx和ty表示,第三和第四個(gè)值表示邊界框的寬度和高度,用tw和t?表示,第五個(gè)值表示邊界框中有無目標(biāo)的置信度,用t0表示。用(cx,cy)表示邊界框相對(duì)于圖像左上角的偏移量,在圖像坐標(biāo)中,設(shè)置左上角為圖像的坐標(biāo)原點(diǎn)。用pw和p?表示先驗(yàn)邊界框的寬度和高度。目標(biāo)的邊界框預(yù)測(cè)值可如下表示:
其中Pr(object)表示目標(biāo)是否處于預(yù)測(cè)框中,若有目標(biāo)存在,則Pr(object)=1,反之Pr(object)=0,表示預(yù)測(cè)框和真實(shí)框之間的交并比,其中g(shù)t表示真實(shí)框,object表示預(yù)測(cè)框。剩余的20 個(gè)值用來預(yù)測(cè)框中目標(biāo)的類別,最大值對(duì)應(yīng)的索引即為目標(biāo)所屬類別。
實(shí)驗(yàn)采用公開的PASCAL VOC數(shù)據(jù)集,該數(shù)據(jù)集由20 個(gè)類別的圖像組成,如aero、bike、bird、boat等。使用VOC2007 train+val 和VOC2012 train+val(共計(jì)16551 張圖像)訓(xùn)練模型,使用VOC2007 test(共計(jì)4952張圖像)測(cè)試模型。
實(shí)驗(yàn)硬件配置:雙核Intel(R)Xeon(R)CPU Gold 5115,內(nèi)存大小為32GB,一塊Quadro P4000顯卡,顯存為8GB。軟件配置為Windows10,編程語言為Python3.7,使用Pytorch-1.7.1+cu101 框架構(gòu)建網(wǎng)絡(luò)。在訓(xùn)練過程中,先將DarkNet-53在ImageNet上進(jìn)行預(yù)訓(xùn)練,嵌入Attention-Like 模塊后加載預(yù)訓(xùn)練好的網(wǎng)絡(luò)模型。訓(xùn)練160 個(gè)epoch,每個(gè)epoch從(320~640)中以32 為間隔隨機(jī)抽取一個(gè)數(shù)作為輸入圖像的高和寬,實(shí)現(xiàn)多尺寸訓(xùn)練。本文設(shè)置初始學(xué)習(xí)率為0.001,動(dòng)量momentum 為0.9,權(quán)重衰減系數(shù)為0.0005,batch size 為4,交并比閾值為0.5。通過水平翻轉(zhuǎn)、隨機(jī)裁剪和隨機(jī)仿射實(shí)現(xiàn)數(shù)據(jù)增強(qiáng)。
在測(cè)試階段,采用mAP(mean Average Precision)平均精確率均值評(píng)價(jià)檢測(cè)性能。交并比IOU的閾值為0.5,通過IOU 計(jì)算出精準(zhǔn)率P(Precision)和召回率(Recall),然后畫出PR 曲線圖(Precision-Recall),在峰值點(diǎn)向左畫一條線和上一個(gè)峰值的垂線相交,與橫軸和縱軸形成封閉的圖形,計(jì)算出此面積即為AP(Average Precision)。用此方法計(jì)算出所有類別的AP,然后求其均值即為mAP,可由如式(13)表示:
其中C為類別數(shù),本文C=20。
4.3.1 Faster-RCNN、SSD512和AL-YOLO對(duì)比
將AL-YOLO 和主流的目標(biāo)算法進(jìn)行對(duì)比,F(xiàn)aster-RCNN[11]、SSD512[12](輸入圖像高和寬為512)以及AL-YOLO的實(shí)驗(yàn)結(jié)果如表1所示。
表1 三種算法在PASCAL VOC測(cè)試集上的檢測(cè)精度(單位:%)
從檢測(cè)結(jié)果可以看出,AL-YOLO 在每個(gè)類別上的檢測(cè)精度幾乎都高于另外兩個(gè)算法每個(gè)類別上的檢測(cè)精度,三個(gè)算法對(duì)比如圖5所示。
圖5 三種算法在PASCAL VOC測(cè)試集上每個(gè)類別的檢測(cè)精度對(duì)比
三種算法在PASCAL VOC 測(cè)試集上的mAP 對(duì)比如表2 所示,AL-YOLO 算法精度均高于其余兩種算法,分別高出12.4%和7.9%。
表2 三種算法在PASCAL VOC測(cè)試集上的平均精確度均值(mAP)對(duì)比
4.3.2 AL-YOLO和其他改進(jìn)的YOLO算法對(duì)比
AL-YOLO 和其他基于YOLOv3 改進(jìn)的算法進(jìn)行對(duì)比,如表3 所示,AL-YOLO 精度均高于該兩種算法,分別高出1.1%和0.9%。
表3 AL-YOLO與其他基于YOLO v3改進(jìn)的算法在PACSCAL VOC測(cè)試集上對(duì)比
AL-YOLO 和Attention-YOLO-A 和Attention-YOLO-B 相比較,AL-YOLO 的權(quán)值在數(shù)量上遠(yuǎn)大于Attention-YOLO的權(quán)值數(shù)量,更能關(guān)注圖像中每個(gè)目標(biāo)存在的位置及目標(biāo)的語義信息和幾何信息,從而提升目標(biāo)檢測(cè)精度。
本文提出了Attention-Like 類注意力機(jī)制,將之嵌入到Y(jié)OLOv3 的骨干網(wǎng)絡(luò)DarkNet-53 中實(shí)現(xiàn)了AL-YOLO 算法。實(shí)驗(yàn)結(jié)果表明,Attention-Like不斷學(xué)習(xí)特征圖中有目標(biāo)存在區(qū)域的權(quán)重,增強(qiáng)了小分辨率特征圖的幾何信息,從而提升了模型目標(biāo)檢測(cè)的性能。由于設(shè)計(jì)的模型結(jié)構(gòu)簡單,嵌入Attention-Like 后網(wǎng)絡(luò)復(fù)雜度和浮點(diǎn)運(yùn)算量的增量分別不超過1%,實(shí)時(shí)性能和YOLOv3 相當(dāng)。下一步工作將研究更進(jìn)一步優(yōu)化Attention-Like,力求再次提升模型的目標(biāo)檢測(cè)性能。