趙燕姣,李鋼,姚瓊辛,任 杰
(長安大學 信息工程學院,陜西西安 710061)
車輛檢測是借助相應的深度學習算法檢測出圖片中的車輛并判斷屬于哪種類型,車輛作為道路上的重要通行工具,對其準確檢測已成為城市交通管理的重要工作[1]。一般來說,傳統的目標檢測算法分為三步:劃定可能包含有目標的區域、進行特征提取以及檢測分類[2],但劃定區域時,整個算法的時間復雜度會大幅度提升,并且手工提取特征會導致算法魯棒性差,由于以上缺點的存在,引入深度學習的方法檢測車輛。
基于深度學習的檢測算法可分為兩種[3]:兩階段算法和單階段算法。兩階段的算法主要以Region-CNN 算法及其改進算法為代表,檢測過程分為兩個階段:先利用RPN 生成預選框,再通過檢測網絡實現預選框的分類和回歸,雖然這類算法具有較高的AP值,但是整個算法運行時間較長。單階段的算法包括SSD 算法、YOLO[4-6]系列算法,這類算法去掉了RPN 階段,因而檢測速度較快,但準確率較低。其中YOLOv4 算法的檢測速度和精度都比其余單階段檢測算法有優勢,因而改進YOLOv4 算法可用于對具體目標的檢測。
李昭慧[7]等人為了能夠精確地檢測出駕駛人員是否處于疲勞駕駛,針對YOLOv4 的網絡框架,引入空洞卷積技術,并且在其特征金字塔的前半部分和后半部分各增加一個卷積層,從而提高對深層特征的提取,增加卷積來輸出感受野。葉子勛等人通過替換骨干網絡來解決模型龐大的問題[8]。羅暉[9]等人在檢測公路路面病害時,改進YOLOv4 中的損失函數,來提高檢測的精確度。針對原YOLOv4 算法在復雜環境下對車輛的特征提取能力不強、檢測精度低等問題,對通用的算法做了改進。
YOLOv4 網絡結構如圖1 所示。

圖1 YOLOv4網絡結構圖
YOLOv4 的骨干網絡是CSPDarkNet53,由DarkNet53[10]與CSPNet[11]結合而成。CSPNet 可以實現更加豐富的梯度組合,并整合了網絡從開始到結束階段的所有特征圖來減少計算量。CSPDarkNet53 包含5 個CSPNet 模塊,激活函數使用Mish 函數,具體公式如式(1)所示,函數圖如圖2 所示,橫坐標代表x的值,縱坐標代表Mish 值。Mish 函數可以增強深層信息的傳播,使網絡具有更高的準確性,骨干特征提取網絡將部分CSPNet 模塊提取的特征傳入頸部[12]。


圖2 Mish函數曲線圖
頸部是由SPP 和PANet 兩部分組成。SPP 網絡對特征層進行1×1、5×5、9×9 和13×13 四種尺度的最大池化(Maxpooling)操作,有效提高網絡的感受野,并提取出重要的上下文特征[13]。PANet 結構的作用可以進一步提高特征提取能力,和FPN[14]相比多了自下而上的特征融合,可以使底層的信息傳到高層。
頭部是由三個YOLO head 組成的預測層,功能是利用獲得的特征進行預測,YOLO head 工作原理是:K-means 算法對樣本目標聚類得出先驗框大小,在此基礎上利用相對偏移量計算出預測框的大小及位置[13]。
數據增強是針對訓練數據集過少來擴充數據集的技術。通過對圖片翻轉、裁剪、縮放、添加噪聲、Mosaic 增強等操作可以達到擴充數據集的目的。Mosaic 數據增強是CutMix[15]數據增強的改進,Mosaic增強過程如圖3 所示。Mosaic 數據增強擴充了數據集的多樣性,并增加了網絡的魯棒性[16]。

圖3 Mosaic數據增強過程圖
目標檢測中引入Anchor box 機制有助于模型快速收斂,Anchor box 是指預先定義好不同長寬比的邊界,在YOLO head 階段通過相應的技術對Anchor box進行微調可以得到預測結果。YOLOv4 算法對訓練數據使用K-means 聚類算法獲得Anchor box,Kmeans 聚類算法最終結果受初始化聚類中心點的影響,為了擺脫此影響,提出改進版本的K-means++算法獲取Anchor box,K-means++算法可以使計算速度大幅提高,減少運行時間。K-means++算法的實現流程如圖4 所示。

圖4 K-means++實現流程圖
在圖像分割和目標檢測領域,空洞卷積(Dilated Convolution)被廣泛使用。空洞卷積可以增加感受野,當圖像經過YOLOv4 的SPP 網絡后會丟失很多信息,特別是空間結構信息,對分辨率較低的圖片破壞效果尤為嚴重。為了解決該問題在YOLOv4 的骨干網中加入了空洞卷積模塊,空洞卷積可以保留圖像內部的信息,提高目標檢測效果。改進后的網絡結構如圖5 所示。

圖5 改進后的YOLOv4網絡結構
空洞卷積引入了擴張率(Dilation Rate)概念,該值代表卷積核在處理數據時各值間的距離[17],擴張率分別為1、2、4 的空洞卷積如圖6 所示。

圖6 空洞卷積圖解
空洞卷積的卷積核計算公式如式(2)所示:

式中,xn是加入空洞之后的卷積核大小,xk是擴張率為1 的卷積核大小,Dr為空洞率。
損失函數可以對模型的預測性能進行評估,YOLOv4 算法的損失函數由bbox 損失、置信度損失和類別誤差組成[18],總損失函數如式(3)所示:

其中,bbox 損失函數LCIoU和相關公式如式(4)所示:

用P 代表預測矩形框,Q 代表實際矩形框,式中,IoU為P 與Q 的交集和并集的比值,b為P 的中心點,bgt為Q 的中心點,ρ為b和bgt的歐幾里得距離,c是同時含有P 和Q 的最小封閉區域的對角線距離,av是對長寬比的懲罰項[12],v為描述P和Q的長寬比的比例一致性的參數,wgt為Q 的寬度,hgt為Q 的高度,w為P 的寬度,h為P 的高度,a為平衡參數。
YOLOv4 算法在運行過程中為了定位目標會生成大量的先驗框,當一幅圖中目標個數很少,大量的先驗框處于背景區域,這就導致正負樣本數差異過大。因此,在損失函數方面使用Focal Loss 損失函數[19],它可以避免原始交叉熵函數導致的正負樣本不均衡的問題,從而達到提高目標檢測精度的目的。Focal Loss 表達式為:

式中,ln 是以e 為底的對數,y為真實標簽,y'為標簽的預測值,γ為調節參數,用于調節簡單樣本權重,以提高網絡訓練速度,使得模型可以更好實現樣本的特征學習[9],α參數用來平衡正負樣本數量比例。
該次實驗數據樣本由拍攝西安市南二環道路上的車輛圖片、挑選公共數據集和對圖片通過算法擴充三部分組成。其中拍攝了3 000 張圖片,從VOC2007公開數據集挑選了684 張圖片,為了使訓練后的網絡模型魯棒性更好,對數據集進行加霧、加雨、調整亮度、圖像高斯模糊等方式擴充。每種擴充方式是從原始數據集中選擇500 張圖片,通過相應的圖像處理算法來修改圖片。圖7 展示的是未處理之前、加霧、加雨、圖像變亮、高斯模糊的圖片。擴充后的訓練集5 115張,測試集569張,比值為9∶1,利用標注軟件來進行手工標注,數據標簽是car(汽車)、bus(公交車)兩類。

圖7 數據擴增效果圖
實驗的硬件環境:RTX2070 GPU 顯卡、Intel(R)Core(TM) i5-9400F CPU @ 2.90 GHz。軟件環境:Windows10、Python 3.6.2、CUDA 10.0、Pytorch 1.2.0。
利用實驗結果所得的精確率(Precision)、模型查全性能的召回率(Recall)、模型整體性能的F1 值、類別平均精度AP(Average Precision)[20]作為模型好壞的標準。mAP 和AP 的相關計算如式(6)所示:

式中,TP 指檢測出正確的車輛數,比如實際為car 的樣本,檢測出來也為car,FP 指檢測出錯誤的車輛數,比如實際為非car,檢測出來為car,FN 指沒有正確檢測出的車輛數,比如實際為car,檢測為非car。F1 表示綜合評價指標,F1 是P和R同時達到最高,取到平衡的值,公式如式(7)所示:

該次實驗是以VOC 數據集的預訓練模型為基礎進行訓練完成的,該訓練方法提高了模型在未訓練數據上良好的表現能力,使訓練更穩定,減少了訓練模型的時間。算法改進前后檢測效果如圖8、9 所示,從檢測結果可以看出,改進后的算法在檢測車輛時的準確度得到了提升,并且降低了漏檢率。

圖8 YOLOv4算法檢測結果

圖9 改進的YOLOv4算法檢測結果
實驗最后所得的busP-R曲線如圖10 所示,carP-R曲線如圖11 所示,其中橫坐標代表召回率(Recall),縱坐標代表精確率(Precision),bus 的AP值為86.05%,car 的AP 值為86.21%。

圖10 bus P-R圖

圖11 car P-R曲線
使用相同的數據集,做改進YOLOv4 算法和YOLOv4、YOLOv3 對比實驗,實驗結果如表1 所示。

表1 不同算法的性能對比
由表可知,改進后算法較原YOLOv4 算法mAP值提高了7.31%,相比于YOLOv3 算法提高了8.83%。各項評估值均有不同程度的提升,達到了預期的結果。
通過改進YOLOv4 算法,解決了在復雜環境下車輛檢測精確率低的問題。實驗由兩部分組成:通過圖像處理算法擴充數據集和修改YOLOv4 網絡,對比實驗結果可知,改進后的YOLOv4 的mAP 達到了86.13%,召回率和精確率均比原YOLOv4 有較高的提升,達到了預期的效果,但是還存在網絡模型參數大的問題,下一步的重點是減少網絡模型參數量,方便YOLOv4 模型在移動端部署,減少對其內存的占用。