武德彬,劉笑楠
(沈陽工業大學信息科學與工程學院,沈陽 110870)
在目標檢測中,小目標具有信息占比低、特征不明顯的特點,因此如何提高小目標檢測精度已成為目標檢測領域的研究熱點。深度學習目標檢測方法可分為兩大類,即單階段目標檢測方法和兩階段目標檢測方法。其中,兩階段目標檢測方法檢測精度較高,但是速度較慢,包括Fast-RCNN[1],Faster-RCNN[2]等。單階段目標檢測方法采用一種端到端的方式,包括SSD[3]、YOLOv3[4]以及YOLOv4[5]等,這類方法具有較高的檢測速度,但檢測精度較低。針對SSD算法對小目標檢測精度不高的問題,研究者們做了一些改進工作。Lim等人[6]提出一種SSD改進方法,通過特征融合獲取上下文信息,使用注意力模塊使網絡信息集中在重要部分,來提高小目標檢測精度。吳天舒等人[7]利用深度可分離卷積、逐點分組卷積與通道重排提出輕量化提取最小單元,在保證精度的條件下,提高了算法運行速度。上述方法雖然提高了小目標檢測精度,但是圖像淺層網絡特征信息尚未得到有效利用,仍有大量信息丟失。為有效利用淺層網絡中的特征信息,進一步提高SSD方法的小目標識別精度,在此提出一種借鑒FPN[8]的思想來提高小目標檢測精度的改進SSD算法。該方法使用轉置卷積[9]進行上采樣,借助空洞卷積[10]降采樣來增大淺層網絡的感受野,將淺層網絡的特征圖與深層網絡的特征圖進行特征融合,使淺層網絡的位置信息與深層網絡的細節語義信息融合得更好。最終,將特征圖通過注意力機制,提升對關鍵信息的學習能力,實現對小目標的更準確的檢測。
提出的改進SSD算法是一種結合多尺度語義信息的淺層網絡與深層網絡融合的特征金字塔結構,使用了注意力機制來增強關鍵特征提取。這一策略能夠豐富淺層網絡與深層網絡提取到的特征。
提出的改進SSD算法網絡結構如圖1所示。該網絡在原有SSD網絡的特征層基礎上,增加了一層VGG16網絡中的75×75大小的池化特征層,稱為Pool2,以彌補38×38大小特征圖損失的一些淺層網絡語義信息,從而包含更多的小目標的位置信息以及細節信息。將Pool2、Conv4_3層稱為淺層網絡,將Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2層稱為深層網絡。為了提高淺層網絡對小目標的檢測能力,將兩個淺層特征層使用空洞卷積進行降采樣。空洞卷積可以在不增大計算量的情況下增大卷積核的感受野,且保證該層特征信息不丟失。同時將Conv7、Conv8_2、Conv9_2進行轉置卷積上采樣,令高層語義信息特征圖與低層語義信息特征圖分辨率相同,以此增大感受野。分別在Conv4_3、Conv7、Conv8_2的特征層通過特征融合模塊進行特征融合,進行多尺度融合。

圖1 改進算法網絡結構
從Pool2到Conv9_2便是FPN中的自下而上的特征提取過程。從Conv9_2進行轉置卷積是自頂向下的特征融合部分,將二者進行橫向連接,就構成特征金字塔結構。通過這種融合方式可以將淺層網絡中的位置信息與深層網絡中的語義信息進行融合,使小目標有更好的特征表達能力。
由于深層網絡的特征圖語義信息已經很豐富,故將Conv9_2、Conv10_2、Conv11_2直接輸出結果,獲取細節信息。將得到的6個融合后的特征圖通過6個3×3卷積層進行平滑,再將平滑后的特征圖分別輸入到CBAM[11]注意力模塊中,接著進行回歸預測,生成初步結果,最后通過NMS非極大值抑制算法濾除不符合條件的預測框,得到最終檢測結果。
改進算法所使用的注意力機制CBAM(Convolutional Block Attention Module)如圖2所示。它是一種結合通道注意力模塊和空間注意力模塊的注意力機制,將平滑后的特征圖先后通過上述兩個模塊。

圖2 CBAM注意力機制
通道注意力模塊如圖3所示。首先將平滑后的特征圖做全局平均池化和全局最大池化,得到兩個一維矢量;再將得到的結果送入一個共享網絡,把得到的兩個特征圖逐個像素求和合并,經過一個激活函數以產生一個權重結果;最后將這個權重結果和平滑后的特征圖相乘,得到縮放后的新特征圖。

圖3 通道注意力模塊
空間注意力模塊如圖4所示。輸入新特征圖,先通過平均池化和最大池化得到兩個特征圖,并將兩個特征圖拼接在一起,經過激活函數得到一個新的權重系數,再將新的權重系數與新特征圖相乘,得到最終縮放的特征圖。

圖4 空間注意力模塊
為了豐富上下文語義信息,使用的特征融合機制是有空洞卷積參與的淺層網絡融合機制,如圖5所示。這種融合機制包含正向卷積、轉置卷積和空洞卷積三部分。正向卷積首先將特征圖輸入到大小為3×3的卷積層中,減少通道數,再經過ReLU激活函數;轉置卷積將特征圖先變成需要的分辨率大小,再通過ReLU激活函數;空洞卷積則是先利用空洞卷積進行降采樣,再通過BN層和ReLU激活函數,最后將這三部分得到的特征圖進行Concat通道拼接,然后通過3×3卷積和ReLU激活函數進行平滑,以產生最后的特征圖。

圖5 特征融合模塊
改進算法的損失函數沿用SSD算法的損失函數,由分類損失函數和位置損失函數相加構成,整體損失函數公式如下:

其中,N表示正樣本匹配候選框數量,Lconf表示分類損失函數,Lloc表示位置損失函數,α通常設置為1,當N=0時,L為0,表示沒有匹配的候選框。
位置損失函數由如下公式表示:

其中,xijk表示第i個預測框與第j個實際框關于類別k是否相匹配,匹配則值為1,不匹配則為0。ljm表示第i個預測框的位置,g^jm表示第j個預測框相對實際框的位置。k代表類別,cx、cy、w、h分別代表候選框偏移量的中心x/y坐標、寬和高。
為測試改進算法的性能,在下述條件下進行實驗:Windows 10操作系統;Intel Core i5-9300HF處理器(主頻2.40 GHz);NVIDIA GeForce GTX 1660 Ti顯卡。編譯環境為Torch 1.7.1、Torchvision 0.8.2、CUDA 10.1、cuDNN10.1、Python 3.8。
實驗用來進行模型評估的數據集選用PASCAL VOC 2007和PASCAL VOC 2012,再選用PASCAL VOC 2007 trainval和PASCAL VOC 2012 trainval數據集進行訓練,二者均包含20個類別,共16651張圖片。選用PASCAL VOC2007 test進行測試,共20個類別,4952張圖片。數據的具體類別如表1所示。

表1 數據集類別
為了對改進的SSD算法進行模型評估,選用查準率(Precision,P)、召回率(Recall,R)、單類別平均精確率(Average Precision,PA)、所有類別的平均精確率PmA作為評價指標,其定義式如下:

其中,TP為真正的正樣本數,FP為假的正樣本數,FN為假的負樣本數,N為檢測的類別數,P(R)為查準率和召回率構成曲線。
為驗證改進算法性能,在300×300分辨率下進行對比實驗,為了使評估更加的全面,實驗將沿用MS COCO數據集對物體大小的分類,將小于32×32的物體歸為小目標,大于96×96的歸為大目標,介于二者之間的歸為中等目標,并采取IOU=0.5檢測整體平均精度,采用IOU=0.5:0.05:0.95檢測小目標的平均精度。為驗證網絡性能,將改進算法+VGG16網絡與SSD+VGG16網絡、SSD+ResNet50網絡、Pool2+Conv4_3+Conv7融合+VGG16網絡進行對比,實驗結果如表2所示。

表2 算法性能比較
實驗結果表明,Pool2+Conv4_3+Conv7融合相比原始SSD算法和在ResNet50網絡基礎上的SSD算法對小目標的檢測精度分別提高了2.9%和4.4%。但對于整體的精度卻下降了4.9%。經過本方法,可以在將小目標檢測精度較原SSD算法提高3%的同時將整體的檢測精度提高到79.2%,解決了Pool2+Conv4_3+Conv7融合只提高檢測小目標精度而導致整體精度下降的問題。使用Conv7層網絡進行融合,這一層相較于Pool2,Conv4_3已經損失了很多小目標位置信息以及其它細節信息,這是整體精度會出現下降的原因。
除了對算法的整體精度以及小目標的精度進行對比外,實驗還對PASCAL VOC2007 test數據集當中的20個類別的單個類別精度進行了對比,結果數據如表3所示。
實驗結果表明,本算法對11個類別的檢測精度都是超過原SSD算法以及Pool2+Conv4_3+Conv7融合算法的,而其它9個類別的精度與原SSD算法的檢測精度相差甚微,改進效果明顯。
相應的部分檢測結果如圖6所示。其中,圖6(a)與圖6(c)未能將圖中的相應對象都檢測出來,說明對小目標的識別都不及改進算法效果好。

圖6 小目標檢測效果對比
針對原SSD算法對小目標檢測精度低的問題,本算法在原始SSD算法的基礎上將淺層網絡與深層網絡進行特征融合構成特征金字塔,并引入CBAM注意力模塊,較原SSD算法在對小目標的檢測能力上得到了一定提升。在后續工作中,將進一步完善淺層網絡特征提取,研究如何在多尺度特征融合的情況下,解決模型的輕量化問題。