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