張 翔, 劉振凱, 葉 娜, 趙妍禎
(西安建筑科技大學 信息與控制工程學院,西安 710311)
目標檢測作為計算機視覺的重要研究領域,是解決圖像描述、場景理解、語義分割、目標追蹤和事件檢測等更高層次視覺任務的基礎。隨著深度學習被應用于計算機視覺研究中,基于卷積神經網絡的目標檢測算法成為目標檢測算法的主流。
基于深度學習的目標檢測算法分為兩階段的目標檢測算法和單階段的目標檢測算法。由學者Girshick提出的R-CNN算法[1]就是兩階段目標檢測算法的代表,該算法將人工干預用Selective Search[2]方法進行替換,利用卷積神經網絡(CNN,convolutional neural networks)提取特征。使用支持向量機(SVM,support vector machine)對獲取的特征進行分類。通過PASCAL VOC數據集[3]對R-CNN檢測算法進行驗證,準確率為58.5%。因R-CNN在全連接層需要對圖像進行裁剪、壓縮為固定大小,最終影響檢測結果的準確性。于是Kaiming He等人提出了多尺度空間金字塔網絡[4](spatial pyramid pooling,SPP-net),SPP-net的引入有效解決R-CNN對圖像處理時導致的不完整性問題。由于SPP-net的特征提取是基于多尺度空間金字塔池化,需要花費大量時間在訓練以及檢測上,因此Fast R-CNN[5]將SPP-net池化替換為感興趣區域池化(region of interest pooling,ROI pooling),節省檢測時間和訓練時間,并將SVM替換為softmax,節省存儲空間。Faster R-CNN[6]對候選區的選擇方式進行了改進,使用區域建議網絡[6](RPN,region proposal network)。將RPN嵌入到Faster R-CNN中去,實現真正意義上端到端的檢測與訓練。
2016年Redmon[7]等人改變以往的兩階段檢測思路,采用單階段檢測,這種全新的檢測方法取名為 YOLO(You Only Look Once),其網絡架構受到GoogleNet[8]圖像分類的啟發,將目標檢測視為回歸問題,看成一個單一神經網絡,利用整張圖像預測所有類的邊界框。模型將圖像分為網格,每個網格負責預測對象邊界框和邊框置信度,置信度反映了模型預測的準確性。
因YOLO需要對置信度位置進行推測,產生大量的Prediction box,增加計算量影響檢測速度。YOLOv2[9]借鑒Faster R-CNN中anchor box思想,利用錨框對目標位置進行估計,減少Prediction box的數量,提高了檢測速度。但YOLOv2對小目標檢測精度不高,Joseph Redmon提出YOLOv3[10]并引入了新的思想,主干網絡采用DarkNet-53,借鑒殘差網絡算法,增加檢測模型的深度。YOLOv3受特征金字塔網絡[11](FPN,feature pyrimad networks)啟發,融合多個尺度特征網絡,提升模型檢測精度。Alexey Bochkovskiy等人[12]提出了YOLOv4,模型檢測精度以及檢測速度相比于其他的YOLO系列得到提升,Liu等人提出了SSD[13]模型,使用單個獨立的過濾器進行檢測,每個過濾器都進行圖像特征提取,并將獲取的特征傳送到檢測器中,以便執行對尺度檢測,經過改進SSD的檢測速度要比YOLO更加快速,而且檢測的精準度相比于Faster R-CNN還要精確。
隨著單階段目標檢測效率的提升,將該檢測方式應用到其它檢測領域已經成為熱點問題。張興旺團隊將Tiny-YOLOv3應用在無人機地面目標跟蹤上[14],通過應用卡爾曼濾波器實現目標的有效跟蹤。隨著2020年疫情變得嚴峻,將目標檢測與疫情防控融合,實現疫情的有效控制,于碩團隊將YOLOv5應用到口罩佩戴檢測中[15],面對復雜的檢測環境,可以有效進行防控工作。
雖然YOLOv4提升目標檢測的精度,但對于細微層次上的特征表達不那么敏感,當檢測的目標過小或者有遮擋時,模型會出現漏檢以及誤檢等問題。
針對YOLOv4模型中存在的問題,提出RFAL YOLOv4模型,具體改進為引入Res2Net,替換原有ResNet,實現細小特征獲取;利用注意力機制獲取關鍵信息,減輕模型計算負擔;改進CIOU損失函數,解決對有遮擋目標檢測出現的漏檢問題,提升模型的檢測準確率。
傳統YOLOv4是以CSPDarkNet53[16]為主干網絡,先將輸入為3通道的圖像處理為32通道,然后再輸入到主干網絡中進行卷積操作。基礎主干網包含了72個卷積層,對輸入的圖像進行淺層特征提取,經過多域金字塔池化層(SPP)以及路徑聚合網絡[17](PANet),將提取的淺層特征進行深層處理,最終將獲取到的特征輸入到檢測頭,輸出3個大小不同的heatmap。具體的YOLOv4算法結構如圖1所示。

圖1 YOLOv4算法結構圖
YOLOv4輸出為3個大小不同的heatmap,對不同的目標進行檢測。由于本文輸入模型的圖像像素值大小為416*416,因此經過卷積操作以及池化操作后,輸出的檢測頭像素值分別是52*52、26*26、13*13。雖然YOLOv4在以前的YOLO上做了極大的優化,但還會出現漏檢以及誤檢的目標,影響模型的檢測準確率。
為改善YOLOv4算法在復雜背景下檢測小目標困難,RFAL YOLOv4首先在原始網絡中改進ResNet殘差網絡,并融合注意力機制,實現卷積網絡對圖像特征細微獲取,其次改進原有的CIOU損失函數,可以實現遮擋目標的有效識別。原始YOLOv4網絡在SCPResNet結構的part2部分進行殘差網絡循環操作,RFAL YOLOv4網絡不僅在CSPRes2Net結構的part2部分進行組內殘差循環操作,并且在完整的循環操作后融合注意力模塊,網絡結構對比如圖2所示。

圖2 YOLOv4與RFAL YOLOv4骨干網絡對比
Res2Net[18]在傳統的ResNet[19]上進行改進,模型獲取更細微圖像特征。它通過在一個殘差塊內構造層次化的殘差連接,增加了每個網絡層的接受域。
ResNet只是單一的殘差操作,它的思想是將原有網絡特征利用卷積操作一分為二,這兩個結構塊輸入特征相同,一塊不進行卷積操作,另一塊進行卷積操作,然后將沒有進行卷積操作的那一塊特征與參加卷積操作的輸出特征進行合并。
Res2Net網絡結構先進行分組,在進行殘差操作,它的思想是首先將輸入特征分組,其中一組過濾器先進行卷積操作,提取輸入信息的特征,然后將獲取到的特征和另外一組發送過來準備輸入的特征一起輸入到下一個過濾器,對上述過程不斷的重復執行,它的目的是對輸入特征進行完全處理,處理完之后該操作結束,最后連接這些特征圖,并將連接好的特征圖傳遞到一個1*1的過濾器,融合所有特征。在特征傳遞過程中,輸入特征可以以任何路徑進行轉化,當通過和上一次卷積相同的3*3過濾器時,由于卷積操作的原因使得感受野增加。網絡結構對比如圖3所示。

圖3 網絡結構對比圖

(1)
雖然引入組內殘差結構,增加了網絡的卷積操作,可以有效的獲取圖像上下文特征,但增加了模型的復雜度。相比于原始的CSPDarknet網絡,改進后的網絡每經過一次CSP網絡,都要進行特征分割并進行卷積操作,增加了模型的計算量,影響了模型的檢測實時性,但模型的檢測精度得到提升。
由于組內殘差對特征過度細小化提取,導致模型計算量增加。因此引入注意力機制獲取關鍵信息降低Res2Net計算量。
2018年提出(CBAM,convolutional block attention module)[20],一種既考慮不同通道像素相關性,又考量空間像素影響的注意力算法。并且進行組內殘差連接之后,雖然可以獲取到更深、更有判別力的特征圖信息,但這也會造成特征圖空間信息出現丟失。
CBAM首先進行通道域處理,將輸入的特征進行全局最大池化和全局平均池化,然后送入一個兩層的神經網絡并進行激活操作,最后將這兩層網絡進行加和在經過sigmoid激活,生成channel attention feature,將得到的通道注意力特征和輸入特征進行乘法操作,最終生成spatial attention模塊需要的輸入特征;其次進行空間域處理,將channel attention模塊輸出的特征做一個基于channel的全局最大池化和全局平均池化,得到兩個H*W*1的特征圖,然后將這兩個特征圖做拼接操作,然后進行7*7卷積,進行降維操作,在經過sigmoid生成spatial attention feature,最后將channel attention輸出的特征和該模塊處理的特征進行乘法操作,得到最終的Refined Feature。因此引入CBAM注意力機制模塊可以有效地避免信息丟失等問題。CBAM注意力模塊如圖4所示。

圖4 CBAM網絡結構圖
將CBAM注意力模塊融合到組內殘差網絡中,模型在進行訓練時,圖像經過主干網絡進行特征提取,首先進行歸一化、前向傳播以及激活操作,然后利用卷積操作將處理后的圖像特征分為兩個部分,這兩部分特征相同,其中一部分特征保留,而另一部分特征輸入到組內殘差卷積塊中,模型對圖像特征進行卷積操作,并獲取細小特征,利用卷積操作將這兩個部分的特征合并,最后將提取的特征輸入到CBAM注意力模塊,利用注意力模塊對獲取特征進行關鍵信息提取,使用該注意力模塊增加模型感受野,從而使模型具有更好的檢測效果。以及引入CBAM注意力機制,可以有效抑制背景信息干擾。融合后的網絡結構圖如圖5所示。

圖5 CBAM-Res2Net網絡結構圖
替換ResNet為Res2Net并在組內殘差網絡之后融入CBAM注意力模塊,在不同的像素下輸出的特征圖像如圖6所示,上半部分為原始YOLOv4處理后的圖像特征輸出,下半部分為RFAL YOLOv4特征輸出,RFAL YOLOv4訓練的圖像像素輸入值設置為416*416,經過卷積之后網絡的三層輸出像素分別是52*52、26*26、13*13。

圖6 特征輸出對比圖像
通過Res2Net和CBAM融合后輸出特征圖對比發現,引入注意力機制,52*52、26*26像素輸出提高目標與背景的區別,替換ResNet網絡之后,RFAL YOLOv4可以獲取更多的特征,尤其是在52*52像素特征輸出時最為明顯。
目標檢測任務中,利用損失函數反應Real Box和Prediction Box的誤差,其中IOU[21]損失函數的范圍在(0,1)之間,具有尺度不變性,IOU損失可以評價各種形狀的匹配程度。所以將IOU損失引入到YOLO檢測中。IOU損失如公式(2)所示。
(2)
式中,A表示Prediction Box與Real Box的交集即獲取的交集區域的面積,B表示Real Box與Prediction Box的并集即獲取的并集部分的面積。利用獲取的交集的面積和并集的面積作比,最終得到IOU。
但當Real Box與Prediction Box不相交時IOU為零,不能預測Real Box與Prediction Box之間的誤差值;當Prediction Box與Real Box交集、并集相同,此時得到的IOU相同,但位置不一致時,模型獲取到的圖像特征是不相同的,因此IOU損失函數不滿足此時的需求。
因此GIOU[22]損失在IOU損失的基礎上進行優化, GIOU損失如公式(3)所示。
(3)
式中,C表示Real Box與Prediction Box的最小外接矩形,但當Prediction Box位于Real Box內部時,GIOU會退化為IOU損失,無法優化相對位置,收斂緩慢。由于出現損失退化的問題,所以對損失函數進行優化,產生DIOU損失[23]。

(4)
DIOU保留了GIOU的優點,對兩個框的中心點進行度量,使其進行快速收斂,并且當兩個框的中心點重合時,DIOU才退化為IOU,雖然DIOU在前人的基礎上做了改進,但該損失有個缺陷是當Prediction Box與Real Box距離一致但是框的形狀不一致,其計算的DIOU結果相同,無法進行模型的優化。所以對其進行優化,產生CIOU損失。
CIOU損失考慮到同一中心點位置的Prediction box的形狀不同,在DIOU損失函數的基礎上對其添加懲罰項。用于Prediction box形狀的區分。
CIOU損失如公式(5)所示。

(5)
(6)
(7)
式中,α用以平衡參數,v表示寬高比的傾斜角度。
YOLOv4模型訓練時,當出現劃定的多個位置不同的Prediction Box形狀相同,且它們到Real Box中心點距離相同,計算得到多個Prediction Box的CIOU損失值一致,導致模型在回歸操作時會舍棄相同的Prediction Box,因此出現漏掉圖像部分特征的問題。當模型進行檢測任務時,如果檢測目標恰好被某個物體遮擋,遮擋部分的Prediction box與沒有被遮擋部分的Prediction box進行損失計算時,它們的損失函數值一致,這就導致目標在被遮擋時出現檢測誤差。
對上述問題,RFAL YOLOv4在CIOU的基礎上添加了懲罰項,計算Prediction box左上角到Real box中心距,以此區別于Prediction box與Real box中心距相同、Prediction box形狀相同、位置不同時的特殊情況。損失函數計算公式如(8)所示:
Loss=1-LossYOLOv4-β*t
(8)
β計算公式如(9)所示:
(9)
t的計算公式如(10)所示:
t=I(a,b)
(10)
式中,a表示Prediction box到Real box左上角的距離,b表示Prediction box到Real box中心點的距離,I表示坐標距離的比值,β表示平衡t所添加的參數項。
采用的數據集為官方的VOC數據集,首先運行voc2yolo4.py文件,將數據集劃分為訓練集、測試集、驗證集,然后設置classes為aeroplane、bicycle、bird等20個類別,然后設置模型輸入圖像的像素,輸入shape大小為416*416,設置anchor_num為9,進行聚類操作生成九個聚類框的坐標,參數設置完成之后進行模型訓練。
2.4.1 超參數設置
1)修改VOC_label.py文件中的類別標簽,將其修改為要識別的目標類別。由于本文采用VOC2007+2012數據集,進行模型訓練時,在該文件下將classes分別修改為對應的分類類別。
2)修改obj.data文件中的classes、修改為訓練數據集的類別數,因此設定classes分別為20。設定訓練數據集路徑、模型訓練時生成的權重值存儲文件路徑,cfg/obj.names文件為模型訓練時各類別名稱。
3)修改obj.names文件中進行分類的類別,進行VOC數據訓練時,在該文件中設置類別為aeroplane、bicycle、bird等類別。
4)YOLOv4.cfg文件:此文件主要為模型的網絡結構,文件開頭部分描述了用于訓練網絡的一些超參數,剩余部分為圖像特征提取的主干網絡。修改一部分超參數使其適應本文數據集和訓練環境。文件中將batch設置為64、subdivisions設置為16(主要取決于模型訓練的GPU內存大小)。max_batches=40 000(迭代次數為訓練類型classes*2 000)、steps=32 000,36 000(設置為max_batches的80%、90%)、classes=20,anchors為kmeans聚類之后獲取的先驗框坐標、[yolo]-layers下的三處filters=75。filters的計算公式如式(11)所示:
filters=(5+classes)×3
(11)
式中,filters表示卷積輸出,classes表示類別數。
2.4.2 預編譯
首先運行test.py文件,將數據集劃分為訓練集、測試集以及驗證集,然后運行VOC_label.py文件,獲取Annotations標簽文件中的標注文件屬性。最后運行kmeans_for_anchors.py文件,使用kmeans算法,對模型訓練時的數據集進行聚類操作,并生成聚類框的坐標值。
本次實驗采用的數據集來自PASCAL VOC 2007[4]和PASCAL VOC 2012,其中包含有人、貓、狗、馬、自行車、電視、沙發、鳥等等20個種類22 077張圖片。本次實驗將數據集隨機劃分為驗證集、訓練集、測試集,訓練集有19 870張圖片,測試集有1 985張,驗證集有222張,使用19 870張不同種類的圖片實驗模型的預訓練,使用1 985張圖片進行模型的測試。實驗數據如表1所示。

表1 實驗數據劃分
3.2.1 實驗硬件環境
由于該實驗需要對大量的圖數據進行處理,所以需要利用GPU進行計算。表2為實驗所需要的硬件環境。

表2 硬件環境
3.2.2 實驗軟件環境
本實驗所使用的模型為RFAL YOLOv4,部分實驗采用的權重參數如表3所示。

表3 軟件環境參數值表
采用AP和mAP進行模型性能評價,將本文改進的檢測模型RFAL YOLOv4和Fast、Faster、SSD、YOLO、YOLOv2-v4目標檢測模型進行對比,各個類別的檢測結果如表4所示,RFAL YOLOv4在檢測精度上得到相應的提升。通過圖表對比各模型檢測結果,對某個類別檢測精度最高項,采用斜體加粗的方式進行標記。余麗仙團隊改進SSD[24]六個檢測類別精度占優,YOLOv2兩個檢測類別精度占優,YOLOv3一個檢測類別精度占優,YOLOv4三個檢測精度占優,RFAL YOLOv4有九項檢測精度占優,其中YOLOv4與RFAL YOLOv4有一項并列占優。RFAL YOLOv4模型相比于傳統YOLOv4模型,mAP提升了5.5%,相比于改進SSD目標檢測算法,mAP僅差0.1%,但RFAL YOLOv4在具體類別檢測中占相對高的優勢,相比于YOLOv2提升了6.1%,相比于YOLOv3提升了5.6%。通過圖8可以直觀的看出,RFAL YOLOv4模型基本處于最高點。

圖8 VOC 測試數據集20類別檢測精度對比

表4 VOC 測試數據集下20類檢測精度對比
網絡模型的評價指標表現為兩方面,分別為檢測模型的精度和速度,RFAL YOLOv4相比于傳統YOLOv4模型在檢測的速度上有所下降,但是模型的檢測精度提高了5.5%。具體的模型對比如表5所示。

表5 VOC數據集下模型檢測速度對比
YOLOv4和RFAL YOLOv4在訓練時檢測精準度對比如圖7所示,其中橫坐標表示模型在各個類別上的檢測精準度,縱坐標表示模型的類別,mAP表示檢測模型的最終檢測精準度。

圖7 模型檢測結果對比
通過檢測結果圖更加直觀的展示RFAL YOLOv4有效性。圖9為YOLOv4與改進RFAL YOLOv4在測試集上的檢測結果。采用PASCAL VOC 2007+2012 train訓練集。圖像大小的輸入均為416 * 416像素值。

圖9 YOLOv4與RFAL YOLOv4檢測結果對比
a1-k1為傳統YOLOv4算法的檢測結果,圖a2-k2為RFAL YOLOv4算法的檢測結果。通過a1、a2、b1、b2對
比,原始YOLOv4模型出現誤檢,將沒有出現的目標誤檢為椅子,將目標中的馬和人誤檢,RFAL YOLOv4有效的識別出目標中的檢測對象。c1、c2、d1、d2對比,YOLOv4算法出現漏檢,未能識別桌子以及桌子上的瓶子,d1圖像中漏檢了椅子,而RFAL YOLOv4算法對桌子、椅子、瓶子識別率高。通過e1、e2對比,在檢測的對象較多時,YOLOv4出現漏檢,未能充分檢測圖像中的鳥類,RFAL YOLOv4算法精準的識別出圖像中的鳥。
為驗證RFAL YOLOv4算法對小目標檢測效果,從VOC數據集中挑選出小目標圖像進行檢測,圖中f1-h1為傳統YOLOv4檢測結果,f2-h2為RFAL YOLOv4算法檢測結果,通過f1、f2對比,RFAL YOLOv4精準的識別出圖像中的船舶,通過g1、g2對比,RFAL YOLOv4算法對汽車識別效果好,通過h1、h2對比,RFAL YOLOv4算法可以精確識別圖像中出現的羊。
通過在VOC數據集中選取200張有遮擋圖像,組成小型遮擋數據集進行檢測,通過實驗最終得到改進CIOU損失,如表6所示,模型的檢測精度相比于原始YOLOv4檢測模型提升了3.1%,相比于文獻21中SSD算法mAP高0.5%。

表6 遮擋目標檢測結果對比
為了驗證在有遮擋的情況下RFAL YOLOv4算法的魯棒性。通過實驗驗證RFAL YOLOv4算法對遮擋目標檢測效果比較好。通過i1、i2行人被遮擋后,RFAL YOLOv4算法可以精準檢測,通過j1、j2行船幾乎被完全遮擋時,RFAL YOLOv4算法可以準確檢測行船,通過對比k1、k2,RFAL YOLOv4對狗有好的識別能力。
通過檢測結果直觀的展示RFAL YOLOv4檢測模型的有效性。檢測圖像中存在較多的檢測目標,可以更多更精確的檢測;檢測對象中存在有較小的目標,RFAL YOLOv4有更好的識別能力;檢測對象中存在有遮擋,RFAL YOLOv4模型也表現出更好的檢測效果。
通過上述實驗,充分的說明了RFAL YOLOv4模型有效的改善了漏檢誤檢等問題。
考慮到傳統的YOLOv4模型在檢測小目標、有遮擋目標、以及在檢測相似性目標時,識別能力較弱的情況。對傳統模型進行優化,首先將傳統YOLOv4網絡中的ResNet網絡更改為Res2Net,可以獲取細小的特征。為了不影響檢測模型的實時性,將組內殘差網絡的特征子集分為3個。其次在主干網絡后融入注意力機制,有效的區分目標與背景信息,從而增加了模型的識別能力。最后對模型的損失進行改進,有效的檢測遮擋目標。使用公開的VOC數據集對模型進行對比驗證,在測試集上模型的檢測精度達到了79.5%,在傳統的檢測模型上提高了5.5%,充分的證明RFAL YOLOv4模型具有更好的魯棒性。