秦大勇,林玉娥,梁興柱,2
(1.安徽理工大學 計算機科學與工程學院,安徽 淮南 232001;2.安徽理工大學 環(huán)境友好材料與職業(yè)健康研究院(蕪湖),安徽 蕪湖 241003)
目標檢測是計算機視覺領(lǐng)域的重要研究內(nèi)容之一,廣泛應用于人們的生產(chǎn)生活中[1-2]。近年來,隨著深度學習的發(fā)展和大規(guī)模數(shù)據(jù)集的出現(xiàn),極大地提高了目標檢測的性能,許多學者提出了很多基于深度神經(jīng)網(wǎng)絡的檢測器,用以提高檢測的速度和精度。
基于深度學習的目標檢測算法主要分為兩類:兩階段(two-stage)算法和單階段(one-stage)算法。Two-stage算法準確率高但速度較慢,代表算法包含R-CNN[3]、Faster R-CNN[4]等。One-stage的目標檢測算法具有更快的檢測速度,代表算法包含Yolo[5-6]系列、SSD[7]等。為了能夠檢測到尺度不同的目標,SSD使用多個特征層去進行目標檢測,由此產(chǎn)生了另外一個缺點:每個具有獨立檢測器的有效特征層限制了感受野的大小,SSD網(wǎng)絡在檢測小目標物體時僅使用了Cov4_3這一淺層特征層,導致小目標檢測的準確率較低,對最終檢測的準確率有著極大影響。
針對SSD算法,許多學者在提升模型的檢測能力方面進行了相應的研究。如Fu等提出了DSSD模型[8],增加了反卷積模塊來融合上下文信息,但是由于網(wǎng)絡結(jié)構(gòu)比較復雜,使計算量過大,導致檢測速度降低幅度明顯。Jeong等人提出了RSSD模型[9],對特征融合的方式進行了改進,增加了更多用于檢測的有效特征圖,將模型特征更加充分的進行利用,檢測性能與DSSD 持平。Li等將FocalLoss損失函數(shù)用于SSD[10],減少了易分類樣本的權(quán)重,讓模型更關(guān)注于含有信息更加豐富的難分類樣本,提高訓練效率,但計算速度相對較慢。Li等人提出了 FSSD模型[11],將SSD和FPN的思想結(jié)合在一起,構(gòu)建了一組新的有效特征層,速度得到了提高,但是精度提高有限。
基于此,本文以SSD為理論基礎(chǔ),提出了一種基于特征融合和注意力機制的SSD模型,該模型具有以下特點:
1) 修改并使用了強大的特征提取網(wǎng)絡ResNet50,提高了主干網(wǎng)絡的特征提取能力;
2) 在采用更為強大的特征提取網(wǎng)絡的基礎(chǔ)上,加入了特征融合模塊,將含有不同信息的特征層融合在一起,增強單一特征圖的語義信息和判別能力;
3) 利用注意力機制,增強特征圖中關(guān)鍵信息的權(quán)重,緩解了融合特征圖產(chǎn)生的冗余信息帶來的負面影響,如混疊效應、位置偏移等。
本文提出一種特征融合與注意力機制的SSD目標檢測算法,改進的算法將ResNet50作為特征提取網(wǎng)絡用于特征提取,在此基礎(chǔ)上融入了特征融合與注意力機制。改進的模型設(shè)計結(jié)構(gòu)如圖1所示。
圖1 基于特征融合和注意力機制的改進SSD網(wǎng)絡
改進的模型主要包括三大模塊。
1) 通過修改Resnet50網(wǎng)絡,構(gòu)建新的特征提取網(wǎng)絡(圖中紅色框線所示)得到有效特征層;
2) 特征融合模塊(包含深度特征融合模塊),將有效特征層通過特征融合模塊,得到擁有更強判別能力的新的有效特征層,增加針對小目標的檢測能力;
3) ECA注意力模塊,將融合后的有效特征層經(jīng)過ECA注意力模塊,使有效特征層中關(guān)鍵信息的權(quán)重進行增大。
為了取得更好的效果,已有很多學者對SSD的特征提取網(wǎng)絡進行研究,如常見的將VGG替換為Mobile-net等,但是已有的研究中很少對細節(jié)部分進行詳細介紹,本文提出的基于ResNet50特征提取網(wǎng)絡模塊如圖2所示,有兩種構(gòu)造方式。
圖2(a)依據(jù)ResNet50的結(jié)構(gòu)基礎(chǔ),進行了簡單的網(wǎng)絡結(jié)構(gòu)調(diào)整,將ResNet50中的3個block塊Con3_x、Con4_x、Con5_x的輸出結(jié)果作為淺層有效特征圖,并且仿照VGG在其后增加了額外添加層作為深層有效特征層;圖2(b)相比于圖2(a),使用了ResNet50更深的block塊Con4_x的輸出結(jié)果作為第一層有效特征層,使得第一層有效特征層可以提取到更多的有效信息,但刪除了最后一個block塊Con5_x,用以減少參數(shù)量,然后在Con4_x后增加了額外添加層作為有效特征層,使得總體參數(shù)變得更少且最終的檢測精度得到了提升,后續(xù)實驗中將采用圖2(b)的策略作為SSD的特征提取網(wǎng)絡。
由于反卷積增大特征層的方法存在不可避免的問題,在本文改進的SSD模型中,使用通過上采樣增大特征層分辨率的方法,使用深層特征層增強淺層特征層的語義信息,從而提高模型的檢測效果。
對于SSD中的6層有效特征層(C1,C2,C3,C4,C5,C6),從高到低使用特征融合模塊,將深層特征層中的有效信息融合到低層特征層,但是對尺度過小的深層特征層進行融合,幾乎不會提高檢測精度,反而會降低檢測速度,故對于尺度過小的深層特征層C4、C5、C6不能簡單的使用特征融合模塊,為此我們設(shè)計了深度特征模塊進行特征融合;并且額外引入包含大量邊緣和形狀等細節(jié)信息的Conv3_x,將其作為C0融合到C1中(C0與C1分辨率相同,因此將C0融合到C1的過程中跳過特征融合模塊中的上采樣環(huán)節(jié))使得C1中的細節(jié)信息更為豐富。
特征融合模塊如圖3所示。Layer A代表待增強的特征層,Layer B代表被融合的特征層。首先,將Layer B的特征層進行上采樣,若特征層尺寸已經(jīng)一致,如圖1中將Conv3_x融合到Conv4_6,則跳過上一個采樣環(huán)節(jié),然后經(jīng)過卷積、BN操作和激活函數(shù),與經(jīng)過卷積、BN和激活函數(shù)的Layer A進行concat操作;接下來利用卷積核大小為1的卷積操作對融合后得到的特征層進行通道數(shù)轉(zhuǎn)換,將通道數(shù)轉(zhuǎn)換為與Layer A的通道數(shù)相同,最后經(jīng)過激活函數(shù)得到融合后的特征層Layer A*,將Layer A*替換為Layer A作為新的有效特征層,對其進行后續(xù)的檢測操作。
圖3 特征融合模塊
深度特征模塊如圖4所示,其借鑒SE注意力機制的思想,對C4和C5進行全局平均池化得到1x1大小的特征圖與C6進行Add操作后再與C4進行全乘,最終得到C4_2。如式(1)所示,其中GAP表示全局池化。
C4_2=((C6⊕GAP(C5)⊕GAP(C4))?C4.
(1)
圖4 深度特征融合模塊
特征融合一方面可以生成更具有判別能力的特征層,另一方面也可能會產(chǎn)生冗余信息,帶來負面影響。為解決這一問題,本文引用了一種高效的通道注意力模塊(Efficient Channel Attention for Deep Convolutional Neural Networks, ECA)[12],在增加性能的同時并沒有使模型的復雜度增大,僅僅通過少量的參數(shù),便可以實現(xiàn)更理想的效果。
ECA模塊的結(jié)構(gòu)如圖5所示, 將上一層卷積的輸出記為X∈RH×W×C(H、W、C表示的是特征圖的長度、寬度和通道數(shù),)作為注意力機制的輸入(令X=[x1,x2,…,xc],其中xc表示的是第c個卷積核的參數(shù)),隨后進行全局平均池化操作(令全局平均池化過程為Pavg,其輸出為Aavg∈R1×1×C),計算如式(2)所示。
(2)
圖5 注意力機制(ECA)模塊
然后通過進行1維卷積和Sigmoid激活函數(shù)得到1×1×C的通道注意力權(quán)重,最終得到通道加權(quán)之后的特征圖,其中一維卷積的卷積核大小K由通道自適應參數(shù)決定,即
(3)
式中:C表示通道數(shù);|·|odd表示取離結(jié)果最近的奇數(shù);γ和b表示常量,用于改變通道數(shù)C與卷積核大小和之間的比例,這里分別取值為2和1。
經(jīng)過特征融合后的特征層再經(jīng)過ECA模塊后得到最終用于目標檢測的有效特征圖,此時有效特征圖的特征信息更加豐富且有效,并且緩解了特征圖融合過程中產(chǎn)生的冗余信息帶來的負面影響,可以使模型更加關(guān)注于重要的特征。
數(shù)據(jù)集:本文采用公開數(shù)據(jù)集PASCAL VOC[13]2007+2012進行實驗,PASCAL VOC數(shù)據(jù)集包含了20種類別(不含背景類),使用VOC 2007訓練集和VOC 2012的訓練集合并作為此次實驗的訓練集,VOC 2007測試集作為此次實驗的測試集。
評價指標:mAP(mean average precision)是目標檢測領(lǐng)域非常重要的性能評價指標,綜合考慮了所有的類別以及定位精度等問題,mAP越大代表模型的檢測性能越好。計算方法如式(4)~(5)所示。
(4)
mAP=sum(AP)/N,
(5)
式中:r表示選取回歸的閾值;P表示各個閾值下的數(shù)值;N表示類別的總數(shù)目。
實驗使用2個Tesla P100 16G進行訓練,模型輸入圖片為300×300 dpi。訓練時,為了防止過擬合現(xiàn)象的發(fā)生,在訓練前先對輸入圖片進行數(shù)據(jù)增強,包括對圖片隨機水平翻轉(zhuǎn)、灰度變換等操作,增強了模型的魯棒性,盡量避免過擬合現(xiàn)象的發(fā)生。訓練參數(shù)方面,batch size設(shè)置為32,epoch設(shè)置為250,動量為0.937,權(quán)值衰減為0.000 5,學習率下降方式采用余弦退火衰減, 最大學習率設(shè)置為0.002,最小學習率設(shè)置為0.000 02,網(wǎng)絡的優(yōu)化采用隨機梯度下降法(stochastic gradient descent, SGD),模型訓練過程中損失以及mAP如圖6所示。
圖6 訓練損失函數(shù)和mAP
為了更直觀的展示改進算法的有效性,分別采用改進前后算法部分檢測結(jié)果,如圖7所示。
(a) 漏檢
圖7(a)和(b)分別對比展示了原始SSD和改進后的SSD在檢測結(jié)果上對于漏檢和多檢情況的提升,可以看出本文提出的改進后的SSD算法,相對于傳統(tǒng)的SSD300目標檢測算法,模型可以更好的區(qū)分出不同的目標,檢測結(jié)果顯示改進后的方法可以檢測出更多的小目標物體以及減少了誤檢的發(fā)生。總體來說,改進后的算法使得目標檢測中的分類和定位任務均得到了提升。
為了驗證本文提出算法的有效性,將本文算法和已有的算法在相同的數(shù)據(jù)集上進行對比,結(jié)果如表1所示。
表1 PASCAL VOC 數(shù)據(jù)集下各算法性能對比
表1中,SSD300*代表本文改進的模型,改進后的SSD300*模型對比于原始的SSD300模型在檢測精度上提高了3.9%,并且可以看出本文算法在檢測準確率和檢測速度上均優(yōu)于兩階段算法Faster R-CNN和R-FCN,與YOLOv3相比,mAP提升了1.6%,但由于增加了模型參數(shù)量導致檢測速度有所下降。與SSD以及其改進的RSSD和DSSD相比,提升效果顯著,證明了本文通過更換特征提取網(wǎng)絡,以及特征融合模塊和注意力機制模塊的有效性。
本文選擇在VOC數(shù)據(jù)集上進行消融實驗,在SSD模型上逐步添加各個模塊,分析每個模塊的性能,從而證明各個模塊的有效性,消融實驗結(jié)果如表2所示。
表2 消融實驗結(jié)果
從表2中可以看出,Resnet-50-A和Resnet-50-B兩種修改后的特征提取網(wǎng)絡的mAP相差不大,但是由于Resnet-50-B具有更少的網(wǎng)絡參數(shù),使得FPS有小幅度提升;并且本文提出的每個模塊都對mAP有著不同程度的提高,當所有模塊同時使用時,檢測精度達到了最高值81.2%。
本文提出了SSD網(wǎng)絡的改進算法,提出了兩種將ResNet50網(wǎng)絡作為特征提取網(wǎng)絡的方案,以及在SSD網(wǎng)絡中加入了特征融合模塊和注意力機制模塊。對比實驗結(jié)果表明,改進后算法的檢測精度有明顯提升;不足之處:由于采用了更大的特征提取網(wǎng)絡ResNet50以及引入了特征融合模塊和注意力機制模塊,使得整體網(wǎng)絡結(jié)構(gòu)較大,檢測速度較原SSD網(wǎng)絡有所下降。未來的工作主要針對于模型簡化來展開,在保證精度的基礎(chǔ)上提高速度。