毛世昕,李捍東
(貴州大學(xué)電氣工程學(xué)院,貴陽550025)
隨著計(jì)算機(jī)技術(shù)的不斷提高,人工智能技術(shù)的硬件需求得到了保障,以深度學(xué)習(xí)為核心的人工智能技術(shù)近年間得以飛速發(fā)展,其中目標(biāo)檢測技術(shù)是計(jì)算機(jī)視覺及圖像處理領(lǐng)域的一個(gè)熱門研究主題。傳統(tǒng)目標(biāo)檢測對輸入圖像使用滑動窗口來選取候選框,這樣選取候選框?qū)е麓翱谌哂啵崛√卣鞯姆绞椒夯阅懿睿瑱z測精度因此降低;提取步驟的繁雜也導(dǎo)致檢測速度慢,不具備實(shí)時(shí)性。基于深度卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測算法改善了目標(biāo)檢測算法精度、速度、實(shí)時(shí)性等性能指標(biāo),相關(guān)研究也不斷涌現(xiàn),包括:Grishick等人提出了基于卷積神經(jīng)網(wǎng)絡(luò)的Fast R-CNN[1];蔡兆偉等人提出了一種級聯(lián)的檢測網(wǎng)絡(luò)Cascade R-CNN[2]。但這兩種是兩階段的目標(biāo)檢測算法,需要生成候選區(qū)域才能進(jìn)行目標(biāo)檢測,極大限制了檢測速度,時(shí)效性無法得到保證。R edmon等人提出的YOLO網(wǎng)絡(luò)[3]和劉偉等人提出的SSD網(wǎng)絡(luò)[4],則是單階段的目標(biāo)檢測算法,將候選區(qū)域省略掉,對整個(gè)網(wǎng)絡(luò)進(jìn)行反向傳播迭代優(yōu)化,使檢測效率大大提升,且首次將不同維度的特征圖信息進(jìn)行疊加進(jìn)一步改善檢測精度和速度,但是對小目標(biāo)的檢測精度不高。之后,比SSD所使用的VGG-16有著更高識別精度的基礎(chǔ)神經(jīng)網(wǎng)絡(luò)ResNet[5]被提出,汪慧蘭等利用殘差結(jié)構(gòu)組成的預(yù)測模塊代替3×3的卷積提高小目標(biāo)檢測精度[6]。利用反卷積模塊改進(jìn)的DSSD[7]也被提出,但精度提高有限而網(wǎng)絡(luò)過深,導(dǎo)致訓(xùn)練參數(shù)量大,速度不高。最新研究還包括基于空間域和通道域的注意力機(jī)制CBAM[8]。胡少暉等也在步態(tài)識別領(lǐng)域嘗試添加了CBAM注意力機(jī)制[9]。
基于上述已有研究,在此提出一種改進(jìn)的SSD目標(biāo)檢測算法,將SSD中的基礎(chǔ)網(wǎng)絡(luò)VGG-16替換成Res N et-50網(wǎng)絡(luò),選擇合適的殘差塊作為淺層輸入特征,利用殘差網(wǎng)絡(luò)深度加深精度不退化的優(yōu)勢,提高SSD的檢測精度;同時(shí)也在Res N et-50網(wǎng)絡(luò)中添加注意力機(jī)制CBAM,結(jié)合空間域和通道域的注意力,以求獲得更高的檢測精度。
SSD是一種基于回歸的單階段目標(biāo)檢測網(wǎng)絡(luò),原始SSD的結(jié)構(gòu)如圖1所示。它首先將圖片的大小處理成300×300的格式,然后運(yùn)用VGG-16的部分基礎(chǔ)網(wǎng)絡(luò)對原始圖片進(jìn)行特征信息的提取,通過非極大抑制處理(NMS)最后得到目標(biāo)檢測結(jié)果。

圖1 原始SSD網(wǎng)絡(luò)
圖中左側(cè)為提取特征層之間所經(jīng)過的卷積層的大小和深度,s1和s2代表這一層所使用的的步距分別為1和2;右側(cè)為提取特征層的名稱以及輸出特征的大小和深度。
SSD通過這種多層卷積輸出特征圖進(jìn)行檢測的方式,在淺層中小目標(biāo)類別和位置的信息沒有完全丟失,對淺層信息的融合使得最后的檢測結(jié)果能夠反映原始圖片中小目標(biāo)的類別和位置。深層卷積輸出的特征圖保留了原始圖中的大目標(biāo)的類別和位置信息,其精度比傳統(tǒng)的YOLO以及Faster R-CNN有明顯的改進(jìn)。
對于SSD目標(biāo)檢測算法,損失函數(shù)分為類別損失和位置損失兩部分,總的損失函數(shù)如下式:

其中,L代表總的損失函數(shù);Lconf和Lloc分別是種類置信度損失函數(shù)和位置信息損失函數(shù);N代表預(yù)測框的數(shù)量。Lconf和Lloc的計(jì)算公式為:

式中,cx、cy、w、h分別表示預(yù)測框的中心坐標(biāo)以及寬度、高度;lim代表第i個(gè)正樣本的回歸參數(shù);g^im代表第i個(gè)正樣本對應(yīng)的真實(shí)框的回歸參數(shù);xijk={0,1};c^ip代表第i個(gè)預(yù)測框?qū)?yīng)種類是p的置信度。
ResNet達(dá)到超深層次的網(wǎng)絡(luò)結(jié)構(gòu)靠的是不斷堆疊殘差塊,同時(shí)通過批標(biāo)準(zhǔn)化(Batch Normalization)來代替以往的drop out方式,防止梯度爆炸或梯度消失,同時(shí)也能加速模型的收斂過程。ResNet-50作為ResNet的一種,它的基本結(jié)構(gòu)如表1所示。

表1 ResNet-50基本結(jié)構(gòu)
ResNet網(wǎng)絡(luò)通過直接將輸入信息繞道傳到輸出,保護(hù)信息的完整性。殘差網(wǎng)絡(luò)通過不斷疊加輸入和輸出讓網(wǎng)絡(luò)的訓(xùn)練更加容易收斂,使網(wǎng)絡(luò)加深而不會出現(xiàn)退化現(xiàn)象。
基于上述原理與思路對基礎(chǔ)網(wǎng)絡(luò)做出改進(jìn)。改進(jìn)的網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
CBAM作為一種輕量的注意力機(jī)制模塊,能夠獲得比SENet更好的效果。CBAM分為通道(channel)和空間(spatial)兩個(gè)部分,通過將輸入特征和經(jīng)過注意力機(jī)制通道特征圖相乘,提高特征提取能力。CBAM模塊原理圖如圖3所示。

圖2 基于ResNet-50的SSD網(wǎng)絡(luò)

圖3 CBAM模塊工作原理
特征的每一個(gè)通道都代表著一個(gè)專門的檢測器,為了匯總空間特征,CBAM采用了全局平均池化和最大池化兩種方式來分別利用不同的信息。通道注意力模塊原理圖如圖4所示。

圖4 通道注意力模塊工作原理
它的輸入是一個(gè)H×W×C的特征矩陣F,先分別進(jìn)行一個(gè)空間的全局平均池化和最大池化,得到兩個(gè)特征圖,然后通過共享多層感知機(jī)。第一層神經(jīng)元個(gè)數(shù)為C/r(r為減少率),激活函數(shù)為Relu;第二層神經(jīng)元個(gè)數(shù)為C,相加得到兩個(gè)特征后,通過激活函數(shù)Sigmoid得到系數(shù)Mc。拿Mc和原來的F相乘得到縮放后的新特征F′。
在此引入空間注意力模塊,原理如圖5所示。將通道域模塊輸出特征圖作為輸入,先進(jìn)行基于通道的全局最大池化和平均池化,再做通道拼接,通過卷積層降維,再用激活函數(shù)Sigmoid得到空間注意力系數(shù)Ms,將Ms與輸入特征相乘得到最終特征圖。
將注意力模塊添加到ResNet-50的每一個(gè)殘差塊的輸出卷積層的后面,疊加之后再使用激活函數(shù)relu,形成新的殘差結(jié)構(gòu),如圖6所示。
實(shí)驗(yàn)采用的數(shù)據(jù)集是PASCAL組織使用的PASCAL-VOC以及由德國卡爾斯魯厄理工學(xué)院和豐田美國技術(shù)研究院聯(lián)合創(chuàng)辦的KITTI數(shù)據(jù)集。
PASCAL-VOC數(shù)據(jù)集包括VOC2007和VOC 2012兩個(gè)版本。VOC2007包含9963幅標(biāo)注好的圖片,VOC2012包含11530幅圖片,分成訓(xùn)練集合測試集兩部分。在實(shí)驗(yàn)中,將這兩個(gè)版本訓(xùn)練集和驗(yàn)證集拿來聯(lián)合訓(xùn)練得到新模型的預(yù)訓(xùn)練權(quán)重。
通過遷移學(xué)習(xí),使用由PASCAL-VOC數(shù)據(jù)集訓(xùn)練出來的預(yù)訓(xùn)練權(quán)重來訓(xùn)練交通數(shù)據(jù)集KITTI,其中包含7481張圖片,按照9:1的比例分為訓(xùn)練集和測試集進(jìn)行訓(xùn)練和檢測。
在目標(biāo)檢測領(lǐng)域常用的評價(jià)指標(biāo)為mAP值。mAP值是所有種類的AP值得平均值,是目標(biāo)檢測網(wǎng)絡(luò)性能的主要指標(biāo)。mAP的計(jì)算公式為:

式中,P代表精度,R代表召回率,TP表示正樣本被預(yù)測為正樣本的個(gè)數(shù),F(xiàn)P表示負(fù)樣本被預(yù)測為正樣本的個(gè)數(shù),F(xiàn)N表示負(fù)樣本被預(yù)測為負(fù)樣本的個(gè)數(shù)。通過P和R來畫出P-R曲線圖,P-R曲線下方覆蓋的面積為所有種類的AP,對其取平均值即得到mAP值。
實(shí)驗(yàn)選取GPU為NVIDIA GeForceGTX1080Ti;編程語言選用Python3.7,框架為Pytorch1.6,CUDA版本為9.0。初始學(xué)習(xí)率設(shè)為0.001,優(yōu)化算法選取SGD,Batchsize設(shè)為32。
先訓(xùn)練PASCAL-VOC數(shù)據(jù)集,再訓(xùn)練KITTI數(shù)據(jù)集。由于圖片標(biāo)注格式在兩種數(shù)據(jù)集中并不一致,先把圖片統(tǒng)一轉(zhuǎn)換為JPG格式。為便于訓(xùn)練,將Truck、Van歸為Car類,其中的Person_sitting類歸為Pedestrian類。考慮到Cyclist類和Pedestrian類的標(biāo)簽大小差別較大,所以單獨(dú)作為一類,忽略掉Tram、Don′t care以及Misc類。提取標(biāo)簽中種類和位置信息按照PASCAL-VOC數(shù)據(jù)集的標(biāo)注格式進(jìn)行處理,得到用于訓(xùn)練的標(biāo)注XML文件。
通過訓(xùn)練,并逐步降低學(xué)習(xí)率,最終訓(xùn)練損失穩(wěn)定在1.6左右。
基于改進(jìn)的模型進(jìn)行實(shí)驗(yàn)后,將得到的算法檢測精度結(jié)果與Faster R-CNN、DSSD321、YOLOv3的進(jìn)行對比。對比結(jié)果如表2所示。

表2 各算法檢測精度對比表單位:%
由表中可見,改進(jìn)SSD網(wǎng)絡(luò)結(jié)構(gòu)算法的mAP達(dá)到了62.0%,比Faster R-CNN的高了12.4%,比DSSD的好了4.7%,比YOLOv3的高了3.3%,與當(dāng)前主流目標(biāo)檢測網(wǎng)絡(luò)相比,仍有更優(yōu)良的平均精度。
再將改進(jìn)點(diǎn)依次添加到原始的SSD中,通過改好的KITTI數(shù)據(jù)集對模型進(jìn)行訓(xùn)練,實(shí)驗(yàn)最終結(jié)果如表3所示。

表3 改進(jìn)點(diǎn)添加對aMP的提升效果單位:%
通過上述實(shí)驗(yàn)結(jié)果可以得出,對基礎(chǔ)網(wǎng)絡(luò)的修改使得網(wǎng)絡(luò)在交通行人及其車輛檢測整體的精度上有了1.7%的提升;CBAM的添加使得精度再提升了2.5%。不同改進(jìn)點(diǎn)對各類檢測精度影響情況如圖7所示。

圖7 不同改進(jìn)點(diǎn)對檢測精度的影響
從圖中可以看出CBAM對小目標(biāo)類的檢測精度較大目標(biāo)改善明顯,CBAM和ResNet的引入提高了整體模型的精度。將不同改進(jìn)度算法應(yīng)用到具體圖像中,得到的實(shí)際檢測效果如圖8所示。
利用殘差網(wǎng)絡(luò)ResNet-50對原來的基礎(chǔ)網(wǎng)絡(luò)VGG-16進(jìn)行替代,再在殘差模塊中添加注意力機(jī)制CBAM,確實(shí)可對小目標(biāo)檢測效果做出實(shí)際性的改善。改進(jìn)算法中的相關(guān)嘗試在實(shí)際應(yīng)用中尚有更廣的發(fā)展?jié)摿Α8倪M(jìn)后的算法在KITTI數(shù)據(jù)集上的檢測結(jié)果顯示其能夠達(dá)到更高的精度,但實(shí)際網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)龐大,后續(xù)研究中將嘗試通過網(wǎng)絡(luò)剪枝的方式來降低訓(xùn)練參數(shù)的數(shù)量,提高運(yùn)算速度。