張海濤,張 夢
(遼寧工程技術大學 軟件學院,遼寧 葫蘆島 125105)
目標檢測是計算機視覺和數字圖像處理領域的熱門方向,其在車輛識別、行人檢測、無人駕駛等任務中均具有重要的研究價值[1-2],因此如何進一步提升目標檢測性能一直受到國內外學者的廣泛關注。早期的目標檢測算法多數是以特征提取結合分類的模式,利用梯度直方圖和支持向量機等分類器對特征進行分類。隨著深度學習中卷積神經網絡(Convolutional Neural Network,CNN)的提出和發(fā)展,學者們開始嘗試使用深度學習技術實現目標檢測[3],基于深度學習的目標檢測算法具有良好的魯棒性,且在檢測準確率與檢測速度上均有較大幅度的性能提升。
基于深度學習的目標檢測算法主要分為two-stage和one-stage兩類。two-stage檢測算法是在提取出候選檢測區(qū)域的基礎上,通過分類和回歸的方式進行目標檢測。one-stage檢測算法是直接通過回歸的方式實現目標檢測,其需要預先劃定默認框,根據預測框、默認框和真實框之間的對應關系進行訓練,典型代表為YOLO算法[4]和SSD(Signal Shot Multibox Detector)算法[5]。與two-stage檢測算法相比,one-stage檢測算法大幅提升了算法的時間性能。相比上述目標檢測算法,SSD算法具有更高的檢測精度和檢測速度,但其對于網絡的特征表達能力仍存在不足。為解決這一問題,文獻[6]提出一種DSSD算法,該算法利用反卷積模塊提高算法識別精度,雖然檢測精度稍有提高,但計算過程復雜、檢測速度慢,無法滿足實時性要求。文獻[7]提出DSOD算法,該算法利用DenseNet網絡代替VGG網絡,從預訓練的角度對SSD算法進行改進,但是仍然無法解決目標檢測精度較低的問題。
為解決原始SSD算法對于小尺度目標的檢測能力不足、魯棒性較差、定位效果不佳等問題,本文引入通道注意力機制,增強高層特征圖的語義信息。基于膨脹卷積結構,通過對低層特征圖進行下采樣擴大其感受野,增加細節(jié)與位置信息,提高小目標檢測精度。
深度學習中的注意力機制在本質上與人類的選擇性視覺注意力機制類似,即從眾多信息中選擇出對當前任務目標更關鍵的信息。在計算機視覺領域,注意力機制有多種表現形式,可以分為軟性注意力和硬性注意力機制。按照注意力作用的特征形式,注意力機制又可分為基于項[8]的注意力機制和基于位置[9]的注意力機制。兩種機制的輸入形式不同,基于項的注意力機制需要輸入包含明確項的序列,或者需要額外的預處理步驟來生成包含明確項的序列,該項可以是一個向量、矩陣或特征圖。而基于位置的注意力機制是針對輸入為一個單獨的特征圖,所有目標可以通過位置指定?;谖恢玫淖⒁饬C制因與任務相關,作用方法較直接并且已得到廣泛應用,而基于項的注意力機制能夠在不改變原有網絡結構的前提下進行端對端訓練,改進成本較低。
基于項的注意力機制在處理圖片時使用CNN提取原圖像特征,最后一個卷積層的輸出結果可以產生L個向量,該向量對應原圖中的維度區(qū)域D,即對應一個明確的序列a,具體為:
(1)
其中,L表示特征向量個數,D表示維度區(qū)域。采用基于項的注意力機制計算出當前時刻下每個特征向量ai所對應的權重,計算公式如下:
et,i=fatt(ai,ht-1)
(2)
(3)
其中,fatt表示使用多層感知機,ht-1表示上一個時刻的狀態(tài),et,i是一個中間變量,k是特征向量的下標。
在計算出權重后,基于項的注意力機制對輸入序列進行選擇得到選擇后的項序列z。
(4)
其中,參數?決定注意力機制是弱性還是強性。
SSD算法主要采用回歸思想和anchors機制[10],其檢測過程為在輸入的檢測圖片的不同位置均勻進行密集抽樣,獲得不同尺度和長寬比的樣本,然后經過特征提取后直接進行分類和回歸。SSD算法利用不同卷積層的不同尺度特征圖進行目標檢測,較靠前的特征圖用于檢測小目標,較靠后的特征圖用于檢測大目標。
1.2.1 SSD網絡結構
SSD算法的主網絡結構是VGG-16,通過將最后兩個全連接層改為卷積層并增加4個卷積層來構造網絡結構,從而將前端網絡產生的特征層進行不同尺度下的特征提取。SSD網絡結構如圖1所示。
圖1 SSD網絡結構Fig.1 Structure of SSD network
SSD算法使用一個多層的特征圖生成結構,通過分層方式學習語義信息,使得低層特征圖能檢測小目標,高層特征圖檢測大目標,利用不同尺度的特征圖進行檢測的方式可明顯提升目標檢測精度。
1.2.2 SSD檢測過程
SSD算法通過VGG網絡獲得6種不同尺度的特征圖,其大小分別為(38,38)、(19,19)、(10,10)、(5,5)、(3,3)、(1,1),在所獲得的特征圖上均設置一系列固定大小的默認框,但不同特征圖所對應的默認框大小不同,每個特征圖上選取默認框的計算公式為:
(5)
其中,k表示特征圖數目,Smin表示最底層的默認框占輸入圖像的比例,通常取0.2,Smax表示最高層的默認框占輸入圖像的比例,通常取0.9。由于默認框的寬高比主要采用r={1/3,1/2,1,2,3},因此每個默認框的寬高計算公式如式(6)和式(7)所示:
(6)
(7)
圖2 SSD默認框和真實框在不同尺度特征圖下的對比Fig.2 Comparison of SSD default box and real box under different feature maps
基于上述方法,SSD算法會獲得大量的正負樣本,通過比較IOU值的大小來獲取真實目標框。但由于真實目標框的數量遠少于默認框的數量,為保持樣本的平衡性,SSD算法采用hard negative mining方法對負樣本進行抽樣,按照置信度誤差進行排序,選取誤差小的作為正樣本,并以1∶3的比例形式來獲取正負樣本。
在確定訓練樣本后,需要對算法損失函數進行計算。與一般目標檢測模型的目標損失函數相同,SSD算法的目標損失函數分為默認框與目標類別的置信度損失以及相應位置回歸的損失兩部分,具體為:
(8)
其中,Lconf表示置信度損失,Lloc表示位置損失,N為與真實框所匹配的默認框個數,x表示匹配結果,c和l分別表示預測結果的類別置信度和位置信息,g是真實框,參數α用于調整位置損失和置信度損失之間的比例,在默認情況下設置為1。
置信度損失函數的計算公式為:
(9)
位置回歸損失函數的計算公式為:
(10)
1.2.3 SSD目標檢測性能分析
SSD算法選取網絡結構中不同尺度的特征圖,對這些特征圖生成不同尺度的候選框,并以回歸的方式得出目標的類別置信度和候選框與真實值之間的方差。SSD算法中不同尺度特征的卷積感受野不同,在高層卷積層感受野大、分辨率低、語義信息充足,可用于識別相對較大的目標,而低層卷積層感受野小、分辨率高,可用于識別相對較小的目標。
卷積層感受野的計算公式如下:
SRF(t)=(SRF(t-1)-1)×S+k
(11)
其中,S表示步長,k表示濾波器尺寸大小,SRF(t)表示第t層卷積層感受野大小。
對于識別小目標的低層特征圖,其感受野較小且特征非線性程度不夠,無法訓練到足夠的精確度,而對于識別中大型目標的高層特征圖,其感受野較大,但分辨率低,容易出現目標漏檢等情況。
SSD算法檢測精度較高是由于其應用不同卷積層以獲得不同尺度的特征圖,為提升SSD算法精度,需改進目標漏檢情況并提升算法魯棒性,因此本文進一步增強了高層特征圖的語義信息。
全局平均池化是一種特殊的池化操作[11],將特征圖所有像素值相加求平均得到一個數值,使用該數值表示對應的特征圖,而通道注意力模塊對于特征圖上的重要特征具有很強的表征能力,因此選擇將兩種方法相結合應用于SSD算法。首先通過對各層特征圖的全局平均池化操作獲得各個通道的全局信息,然后使用ReLU非線性激活函數和Sigmoid激活函數對各通道間的相關程度進行建模,最后將原特征通道的信息與建模后的權重進行加權處理。通過該結構,網絡可以獲得包含重要信息的特征并有選擇地抑制無關特征。
注意力模塊的操作過程主要包含3個部分,分別為全局池化、激活和特征加權。對輸入的X(維度為C×H×W,其中C、H、W分別表示特征圖的通道數、長度和寬度)進行全局池化操作,得到長度為C的一維數組,具體的計算公式如下:
(12)
其中,(i,j)表示在大小為H×W的特征圖上橫縱坐標分別為i和j的點,輸出Z是長度為C的一維數組。
激活過程是對各通道間的相關程度進行建模,具體計算公式如下:
S=Sigmoid(W2* ReLU(W1Z))
(13)
通過對式(14)進行特征加權操作,將原始的輸入X替換為經過注意力模塊獲得的特征X′,并引入到原網絡結構中進行目標檢測。
X′=X*S
(14)
對于目標檢測任務而言,特征提取網絡對于不同物體所關注的關鍵特征區(qū)域不同,如果在訓練初期就以同樣的關注程度對待每一個特征圖,則會增加網絡收斂所需的時間,并且定位精確和分類準確是互相影響的,但目標檢測算法更受益于精準分明的特征。同時,由于通道注意力機制引入的參數量并不影響算法實時性,并且獲得了平均精度均值(mean Average Precision,mAP)的提升,因此采用通道注意力機制是較好的選擇。引入通道注意力機制的SSD算法流程如圖3所示。
圖3 引入通道注意力機制的SSD算法流程Fig.3 Procedure of SSD algorithm with channel attention mechanism
考慮到傳統(tǒng)SSD算法使用低層特征圖檢測小目標的效果不理想,為獲得更充足的語義信息,本文采用膨脹卷積[12]對特征圖進行下采樣,將高維特征映射成低維輸入,膨脹卷積的示意圖如圖4所示,其中,卷積核大小為3×3,步長為1,膨脹系數為1。
圖4 膨脹卷積示意圖Fig.4 Schematic diagram of dilated convolution
膨脹卷積又稱空洞卷積,屬于下采樣操作[13-15]。在卷積神經網絡中經常使用的下采樣操作有pooling和膨脹卷積兩種。pooling是通過減小圖像的尺寸來增大感受野,該操作會導致圖像細節(jié)信息的損失,因此,本文選擇用膨脹卷積來代替pooling操作,膨脹卷積不僅不會損失細節(jié)信息,而且會增大感受野,使經過卷積操作的特征圖中的特征元素獲得更多的全局信息[16-17]。
普通卷積的運算公式為:
(15)
其中,I(x,y)表示卷積前的圖像在點(x,y)上的值,K(s,t)表示一個卷積核,大小為m×n。
膨脹卷積的運算公式為:
(16)
其中,l表示膨脹因子,*表示膨脹卷積的運算符號。
本文選擇Conv3_1層進行膨脹卷積,卷積核為3×3,stride為2,pad為2,膨脹系數dilation為2。Conv3_1經過膨脹卷積獲得大小為38×38×512的特征圖,將其與Con4_3進行特征融合再次進行卷積,以獲得符合要求的特征圖,并使用該特征圖進行位置預測。
改進后的網絡結構低層特征圖具備更全面的細節(jié)信息以及更強的位置信息,改進結構如圖5所示。引入膨脹卷積的結構使得低層特征圖感受野變大,細節(jié)信息增多,進一步提升了小目標的檢測性能。
圖5 改進的SSD網絡結構Fig.5 Structure of improved SSD network
特征圖融合方式[18]主要有兩種,加性融合和級聯融合,其中級聯融合計算量小、精度高,因此本文采用級聯融合方式,具體的特征圖融合過程如圖6所示。
圖6 特征圖融合過程
實驗所用數據集為PASCAL VOC數據集[19-20],該數據集包括20個類別,即aero、bike、bird、boat、bottle、bus、car、cat、chair、cow、table、dog、horse、mbike、person、plant、sheep、sofa、train、tv,共27 088張圖片。本文使用PASCAL VOC 2007和PASCAL VOC 2012數據集進行訓練,PASCAL VOC 2007數據集進行測試,以Tensorflow框架為基礎并利用圖像處理器(Graphics Processing Unit,GPU)進行加速運算,實驗環(huán)境為Intel?CoreTMi7-8750H CPU@2.20 GHz處理器,8 GB內存,Nvidia GeForce GTX 1050Ti顯卡。
在目標檢測中,通常采用mAP指標對精度進行評估。基于原始SSD模型[21],設置輸入圖像的分辨率為300×300,Batch size為8,初始學習率為0.000 1,先迭代800 00次再將學習率降至0.000 01迭代100 000次,得到最終的網絡模型。對比原始SSD算法(輸入圖像分辨率為300×300)、DSSD算法(輸入圖像分辨率為321×321)以及本文算法的實驗結果如表1所示。
表1 3種目標檢測算法在20個類別下的檢測精度對比Table 1 Comparison of the detection accuracy for three target detection algorithms at twenty categories
從檢測結果可以看出,本文提出的引入注意力機制和不同層級特征融合的SSD目標檢測算法在mPA上比原始SSD算法提高了2.2%,對比結果如圖7所示。
圖7 PASCAL VOC 2007測試集上3種目標檢測算法的mAP對比Fig.7 Comparison of the mAP for three target detection algorithms on PASCAL VOC 2007 test set
此外,為檢驗算法的實時性[22-23],本文對比了傳統(tǒng)目標檢測算法及本文算法的檢測速度,具體檢測結果如表2所示。本文算法在檢測精度上超過了同類型的檢測算法,檢測速度也相對原始SSD算法有了較大幅度的提升,在實時性和精確度方面達到了更好的平衡。
表2 在PASCAL VOC 2007測試集上5種目標檢測算法的檢測速度對比Table 2 Comparison of the detection speed for five target detection algorithms on PASCAL VOC 2007 test set
為更加直觀地評價本文算法,圖8給出PASCAL VOC數據集下的部分實驗結果,其中,第1列為傳統(tǒng)SSD算法的實驗結果,第2列為DSSD算法的實驗結果,第3列為本文算法的實驗結果。針對小目標,以圖8(a)為例,本文算法成功檢測出了更多的小目標;針對遮擋目標,以圖8(b)為例,本文算法成功定位出被遮擋目標的位置并檢測出該目標的類別;針對目標漏檢的情況,以圖8(c)、圖8(d)為例,本文算法明顯比傳統(tǒng)算法識別更加精確,并且對識別出的目標給出了準確的定位以及更高的類別置信度。可以看出,對于傳統(tǒng)SSD算法沒有檢測出的目標,本文算法能實現更加有效的檢測。此外,本文算法還可在一定程度上檢測到遮擋目標,進一步提高了算法魯棒性。
圖8 3種目標檢測算法的檢測結果對比Fig.8 Comparison of detection results of three target detection algorithms
基于傳統(tǒng)SSD算法存在魯棒性差、定位精度低等問題,本文提出一種引入通道注意力機制的改進SSD目標檢測算法。引入膨脹卷積結構,將不同層級的特征圖進行融合,增大低層特征圖的感受野,提升算法整體檢測性能。實驗結果表明,改進的SSD算法具有較好的小目標檢測性能,并且大幅提升了算法魯棒性。下一步將研究注意力機制的工作機理,在優(yōu)化高層特征的基礎上,實現低層特征圖與高層特征圖的充分融合,并在盡可能不增加算法計算量的情況下提升實時性,以更直觀的形式呈現算法在不同數據集下的檢測效果。