武德彬,劉笑楠
(沈陽工業(yè)大學(xué)信息科學(xué)與工程學(xué)院,沈陽 110870)
在目標(biāo)檢測中,小目標(biāo)具有信息占比低、特征不明顯的特點,因此如何提高小目標(biāo)檢測精度已成為目標(biāo)檢測領(lǐng)域的研究熱點。深度學(xué)習(xí)目標(biāo)檢測方法可分為兩大類,即單階段目標(biāo)檢測方法和兩階段目標(biāo)檢測方法。其中,兩階段目標(biāo)檢測方法檢測精度較高,但是速度較慢,包括Fast-RCNN[1],F(xiàn)aster-RCNN[2]等。單階段目標(biāo)檢測方法采用一種端到端的方式,包括SSD[3]、YOLOv3[4]以及YOLOv4[5]等,這類方法具有較高的檢測速度,但檢測精度較低。針對SSD算法對小目標(biāo)檢測精度不高的問題,研究者們做了一些改進工作。Lim等人[6]提出一種SSD改進方法,通過特征融合獲取上下文信息,使用注意力模塊使網(wǎng)絡(luò)信息集中在重要部分,來提高小目標(biāo)檢測精度。吳天舒等人[7]利用深度可分離卷積、逐點分組卷積與通道重排提出輕量化提取最小單元,在保證精度的條件下,提高了算法運行速度。上述方法雖然提高了小目標(biāo)檢測精度,但是圖像淺層網(wǎng)絡(luò)特征信息尚未得到有效利用,仍有大量信息丟失。為有效利用淺層網(wǎng)絡(luò)中的特征信息,進一步提高SSD方法的小目標(biāo)識別精度,在此提出一種借鑒FPN[8]的思想來提高小目標(biāo)檢測精度的改進SSD算法。該方法使用轉(zhuǎn)置卷積[9]進行上采樣,借助空洞卷積[10]降采樣來增大淺層網(wǎng)絡(luò)的感受野,將淺層網(wǎng)絡(luò)的特征圖與深層網(wǎng)絡(luò)的特征圖進行特征融合,使淺層網(wǎng)絡(luò)的位置信息與深層網(wǎng)絡(luò)的細節(jié)語義信息融合得更好。最終,將特征圖通過注意力機制,提升對關(guān)鍵信息的學(xué)習(xí)能力,實現(xiàn)對小目標(biāo)的更準(zhǔn)確的檢測。
提出的改進SSD算法是一種結(jié)合多尺度語義信息的淺層網(wǎng)絡(luò)與深層網(wǎng)絡(luò)融合的特征金字塔結(jié)構(gòu),使用了注意力機制來增強關(guān)鍵特征提取。這一策略能夠豐富淺層網(wǎng)絡(luò)與深層網(wǎng)絡(luò)提取到的特征。
提出的改進SSD算法網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。該網(wǎng)絡(luò)在原有SSD網(wǎng)絡(luò)的特征層基礎(chǔ)上,增加了一層VGG16網(wǎng)絡(luò)中的75×75大小的池化特征層,稱為Pool2,以彌補38×38大小特征圖損失的一些淺層網(wǎng)絡(luò)語義信息,從而包含更多的小目標(biāo)的位置信息以及細節(jié)信息。將Pool2、Conv4_3層稱為淺層網(wǎng)絡(luò),將Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2層稱為深層網(wǎng)絡(luò)。為了提高淺層網(wǎng)絡(luò)對小目標(biāo)的檢測能力,將兩個淺層特征層使用空洞卷積進行降采樣。空洞卷積可以在不增大計算量的情況下增大卷積核的感受野,且保證該層特征信息不丟失。同時將Conv7、Conv8_2、Conv9_2進行轉(zhuǎn)置卷積上采樣,令高層語義信息特征圖與低層語義信息特征圖分辨率相同,以此增大感受野。分別在Conv4_3、Conv7、Conv8_2的特征層通過特征融合模塊進行特征融合,進行多尺度融合。
圖1 改進算法網(wǎng)絡(luò)結(jié)構(gòu)
從Pool2到Conv9_2便是FPN中的自下而上的特征提取過程。從Conv9_2進行轉(zhuǎn)置卷積是自頂向下的特征融合部分,將二者進行橫向連接,就構(gòu)成特征金字塔結(jié)構(gòu)。通過這種融合方式可以將淺層網(wǎng)絡(luò)中的位置信息與深層網(wǎng)絡(luò)中的語義信息進行融合,使小目標(biāo)有更好的特征表達能力。
由于深層網(wǎng)絡(luò)的特征圖語義信息已經(jīng)很豐富,故將Conv9_2、Conv10_2、Conv11_2直接輸出結(jié)果,獲取細節(jié)信息。將得到的6個融合后的特征圖通過6個3×3卷積層進行平滑,再將平滑后的特征圖分別輸入到CBAM[11]注意力模塊中,接著進行回歸預(yù)測,生成初步結(jié)果,最后通過NMS非極大值抑制算法濾除不符合條件的預(yù)測框,得到最終檢測結(jié)果。
改進算法所使用的注意力機制CBAM(Convolutional Block Attention Module)如圖2所示。它是一種結(jié)合通道注意力模塊和空間注意力模塊的注意力機制,將平滑后的特征圖先后通過上述兩個模塊。
圖2 CBAM注意力機制
通道注意力模塊如圖3所示。首先將平滑后的特征圖做全局平均池化和全局最大池化,得到兩個一維矢量;再將得到的結(jié)果送入一個共享網(wǎng)絡(luò),把得到的兩個特征圖逐個像素求和合并,經(jīng)過一個激活函數(shù)以產(chǎn)生一個權(quán)重結(jié)果;最后將這個權(quán)重結(jié)果和平滑后的特征圖相乘,得到縮放后的新特征圖。
圖3 通道注意力模塊
空間注意力模塊如圖4所示。輸入新特征圖,先通過平均池化和最大池化得到兩個特征圖,并將兩個特征圖拼接在一起,經(jīng)過激活函數(shù)得到一個新的權(quán)重系數(shù),再將新的權(quán)重系數(shù)與新特征圖相乘,得到最終縮放的特征圖。
圖4 空間注意力模塊
為了豐富上下文語義信息,使用的特征融合機制是有空洞卷積參與的淺層網(wǎng)絡(luò)融合機制,如圖5所示。這種融合機制包含正向卷積、轉(zhuǎn)置卷積和空洞卷積三部分。正向卷積首先將特征圖輸入到大小為3×3的卷積層中,減少通道數(shù),再經(jīng)過ReLU激活函數(shù);轉(zhuǎn)置卷積將特征圖先變成需要的分辨率大小,再通過ReLU激活函數(shù);空洞卷積則是先利用空洞卷積進行降采樣,再通過BN層和ReLU激活函數(shù),最后將這三部分得到的特征圖進行Concat通道拼接,然后通過3×3卷積和ReLU激活函數(shù)進行平滑,以產(chǎn)生最后的特征圖。
圖5 特征融合模塊
改進算法的損失函數(shù)沿用SSD算法的損失函數(shù),由分類損失函數(shù)和位置損失函數(shù)相加構(gòu)成,整體損失函數(shù)公式如下:
其中,N表示正樣本匹配候選框數(shù)量,Lconf表示分類損失函數(shù),Lloc表示位置損失函數(shù),α通常設(shè)置為1,當(dāng)N=0時,L為0,表示沒有匹配的候選框。
位置損失函數(shù)由如下公式表示:
其中,xijk表示第i個預(yù)測框與第j個實際框關(guān)于類別k是否相匹配,匹配則值為1,不匹配則為0。ljm表示第i個預(yù)測框的位置,g^jm表示第j個預(yù)測框相對實際框的位置。k代表類別,cx、cy、w、h分別代表候選框偏移量的中心x/y坐標(biāo)、寬和高。
為測試改進算法的性能,在下述條件下進行實驗:Windows 10操作系統(tǒng);Intel Core i5-9300HF處理器(主頻2.40 GHz);NVIDIA GeForce GTX 1660 Ti顯卡。編譯環(huán)境為Torch 1.7.1、Torchvision 0.8.2、CUDA 10.1、cuDNN10.1、Python 3.8。
實驗用來進行模型評估的數(shù)據(jù)集選用PASCAL VOC 2007和PASCAL VOC 2012,再選用PASCAL VOC 2007 trainval和PASCAL VOC 2012 trainval數(shù)據(jù)集進行訓(xùn)練,二者均包含20個類別,共16651張圖片。選用PASCAL VOC2007 test進行測試,共20個類別,4952張圖片。數(shù)據(jù)的具體類別如表1所示。
表1 數(shù)據(jù)集類別
為了對改進的SSD算法進行模型評估,選用查準(zhǔn)率(Precision,P)、召回率(Recall,R)、單類別平均精確率(Average Precision,PA)、所有類別的平均精確率PmA作為評價指標(biāo),其定義式如下:
其中,TP為真正的正樣本數(shù),F(xiàn)P為假的正樣本數(shù),F(xiàn)N為假的負樣本數(shù),N為檢測的類別數(shù),P(R)為查準(zhǔn)率和召回率構(gòu)成曲線。
為驗證改進算法性能,在300×300分辨率下進行對比實驗,為了使評估更加的全面,實驗將沿用MS COCO數(shù)據(jù)集對物體大小的分類,將小于32×32的物體歸為小目標(biāo),大于96×96的歸為大目標(biāo),介于二者之間的歸為中等目標(biāo),并采取IOU=0.5檢測整體平均精度,采用IOU=0.5:0.05:0.95檢測小目標(biāo)的平均精度。為驗證網(wǎng)絡(luò)性能,將改進算法+VGG16網(wǎng)絡(luò)與SSD+VGG16網(wǎng)絡(luò)、SSD+ResNet50網(wǎng)絡(luò)、Pool2+Conv4_3+Conv7融合+VGG16網(wǎng)絡(luò)進行對比,實驗結(jié)果如表2所示。
表2 算法性能比較
實驗結(jié)果表明,Pool2+Conv4_3+Conv7融合相比原始SSD算法和在ResNet50網(wǎng)絡(luò)基礎(chǔ)上的SSD算法對小目標(biāo)的檢測精度分別提高了2.9%和4.4%。但對于整體的精度卻下降了4.9%。經(jīng)過本方法,可以在將小目標(biāo)檢測精度較原SSD算法提高3%的同時將整體的檢測精度提高到79.2%,解決了Pool2+Conv4_3+Conv7融合只提高檢測小目標(biāo)精度而導(dǎo)致整體精度下降的問題。使用Conv7層網(wǎng)絡(luò)進行融合,這一層相較于Pool2,Conv4_3已經(jīng)損失了很多小目標(biāo)位置信息以及其它細節(jié)信息,這是整體精度會出現(xiàn)下降的原因。
除了對算法的整體精度以及小目標(biāo)的精度進行對比外,實驗還對PASCAL VOC2007 test數(shù)據(jù)集當(dāng)中的20個類別的單個類別精度進行了對比,結(jié)果數(shù)據(jù)如表3所示。
實驗結(jié)果表明,本算法對11個類別的檢測精度都是超過原SSD算法以及Pool2+Conv4_3+Conv7融合算法的,而其它9個類別的精度與原SSD算法的檢測精度相差甚微,改進效果明顯。
相應(yīng)的部分檢測結(jié)果如圖6所示。其中,圖6(a)與圖6(c)未能將圖中的相應(yīng)對象都檢測出來,說明對小目標(biāo)的識別都不及改進算法效果好。
圖6 小目標(biāo)檢測效果對比
針對原SSD算法對小目標(biāo)檢測精度低的問題,本算法在原始SSD算法的基礎(chǔ)上將淺層網(wǎng)絡(luò)與深層網(wǎng)絡(luò)進行特征融合構(gòu)成特征金字塔,并引入CBAM注意力模塊,較原SSD算法在對小目標(biāo)的檢測能力上得到了一定提升。在后續(xù)工作中,將進一步完善淺層網(wǎng)絡(luò)特征提取,研究如何在多尺度特征融合的情況下,解決模型的輕量化問題。