江 屾,殷時蓉,羅天洪,鄭訊佳,張洪杰
(1.重慶交通大學 機電與車輛工程學院,重慶 400074;2.重慶文理學院 智能制造工程學院,重慶 402160;3.中國汽車工程研究院股份有限公司,重慶 401122)
車輛檢測已經成為了高級輔助駕駛系統(advanced driver assistance systems,ADAS)以及智能交通系統(intelligent transportation system,ITS)研究中的一個重點[1-3]。目前,車輛檢測方法主要分為基于傳統圖像處理的車輛檢測和基于深度學習的車輛檢測兩種[4-6]。基于傳統圖像處理的車輛檢測方法的特征泛化性差、魯棒性低,容易出現目標誤檢、漏檢現象,同時特征提取難度較大,運算量大,無法滿足人們對目標檢測精確度及實時性的要求[7,8]。基于深度學習的車輛檢測算法可以分為基于區域的和基于回歸的車輛檢測兩種[9,10]。基于區域的車輛檢測方法是通過生成候選區域[11],再使用神經網絡進行分類處理,主要方法有R-CNN、Fast R-CNN、Faster R-CNN等[12],而基于回歸的目標檢測方法是通過把目標檢測問題當作回歸問題,直接得到物體的類別及坐標位置,主要方法有SSD[14]、YOLO系列[15,16]。但基于回歸的車輛檢測算法網絡結構較大,模型的參數量與計算量較大,同時對于小目標車輛的漏檢率較高,在實車嵌入式設備中的運行速度較慢。
基于此,本文提出一種基于改進YOLOv4模型的多目標車輛檢測算法。主要采用3種改進方法:①引入深度可分離卷積代替標準卷積;②增加一層網格為104×104的輸出層以及在Head部分引入Inceptionv3結構;③構建車輛數據集以及K-means++聚類算法重新確定錨框。改進的網絡在保證檢測速度的同時降低模型大小并提高算法對小目標車輛的檢測性能。
YOLOv4檢測算法主要由主干特征提取網絡CSPDarknet53、頸部特征融合網絡Neck以及檢測頭Head這3部分組成。其中頸部網絡Neck又由路徑聚合網絡(path aggregation network,PANet)和空間金字塔池化(spatial pyramid pooling,SPP)模塊組成,其網絡結構如圖1所示。

圖1 YOLOv4網絡框架
當輸入像素為416×416×3的車輛圖片經過特征提取網絡CSPDarknet53后,YOLOv4將輸出網格為13×13、26×26、52×52這3個尺度的特征圖。在頸部特征融合網絡Neck中,13×13尺寸的特征圖卷積后進入SPP結構中進行池化、堆疊,得到新特征圖,之后再經過卷積輸入到路徑聚合網絡PANet中。PANet對輸入的13×13的特征圖進行兩次卷積以及上采樣,結果分別與26×26、52×52的特征圖進行堆疊以及卷積,再自上而下傳遞定位信息,對不同網絡層的信息進行融合,進一步提升檢測性能[17],并輸入至Head部分。在Head檢測部分,對輸入的特征進行大小為3×3和1×1的卷積后完成檢測。
YOLOv4算法雖然具有較高的精確度,但是由于模型中使用了很多標準的3×3卷積而導致參數量較多、計算量較大,不適用在算力及內存資源有限的移動端設備進行車輛檢測。而對于目標車輛來說,在進行檢測時需要更多的特征層信息才能夠被Head部分檢測出來,而在YOLOv4網絡中,負責檢測的Head部分僅利用3個尺度的特征且檢測時只進行卷積核大小為3×3以及1×1的卷積,導致所劃分出來的網格數量有限,對于網絡結構中的淺層信息利用不充分。基于上述原因,本文對YOLOv4算法進行改進。
2.1.1 引入深度可分離卷積
YOLOv4模型中使用了很多標準的3×3卷積而導致參數量較大,不適用在算力及內存資源有限的設備上進行車輛檢測,因此通過引入深度可分離卷積代替標準卷積,降低模型的參數量,減輕模型大小,來提高模型檢測速度。
標準卷積的過程如圖2所示。如當其輸入的特征圖為Dx×Dy×S時,該特征圖分別與N個3×3的卷積核進行卷積,最后得到通道數為N的新特征圖。

圖2 標準卷積流程
深度可分離卷積的過程如圖3所示。當其輸入同樣為Dx×Dy×S的特征圖時,深度可分離卷積首先將輸入的特征圖分別與3個3×3的卷積核進行逐層卷積,得到通道數與輸入通道數相同的特征圖,再將此特征圖與N個1×1的卷積核進行逐點卷積,最后同樣得到通道數為N的新特征圖。卷積所用參數量計算如式(1)所示

圖3 深度可分離卷積流程
Pc=W×H×S×N
(1)
其中,Pc是卷積所用參數量,W×H是卷積大小,S是輸入通道數,N是輸出通道數。當輸入為Dx×Dy×3的特征圖,與N個3×3的卷積核進行卷積時,標準卷積所用參數量P1如式(2)所示
P1=3×3×S×N=9×S×N
(2)
深度可分離卷積所用參數量P2如式(3)所示
P2=P3+P4=9S+S×N
(3)
其中,P3為逐層卷積時所用參數量,P4為逐點卷積時所用參數量。
將式(2)、式(3)進行比較得到式(4)
(4)
其中,k為深度可分離卷積所用參數量與標準卷積所用參數量的比值,由于在YOLOv4中輸入通道數S與輸出通道數N都較大,因此,k遠小于1。
由上述公式可知,使用深度可分離卷積后,在得到與標準卷積差不多效果的同時可以大大減少卷積所用的參數量,因此引入深度可分離卷積代替標準卷積。
2.1.2 增加104×104輸出層
YOLOv4網絡中負責檢測的Head部分僅利用3個尺度的特征,導致所劃分出來的網格數量有限,對于網絡結構中的淺層信息利用不充分,因此在原有的3個輸出層的基礎上,增加一層網格為104×104的輸出層。將路徑聚合網絡PANet網絡中網格為52×52的特征層繼續進行上采樣得到網格為104×104的特征層,并與淺層網格為104×104的特征層進行堆疊以及卷積得到新的特征層,新的特征層一方面輸入檢測頭Head部分進行檢測,另一方面繼續進行下采樣并與深層特征層進行堆疊卷積操作,為檢測網絡提供更多的特征信息,提升模型對小目標車輛的檢測性能。
2.1.3 引入Inceptionv3結構
YOLOv4網絡在Head部分進行識別的過程中,輸入的車輛特征越精細,目標車輛被檢測到的可能性就越大,為提高模型的檢測精度,一般通過增加網絡的深度來實現,但增加網絡深度的同時也會增加網絡的參數量,降低檢測速度。YOLOv4網絡在Head部分只進行卷積核大小為3×3以及1×1的卷積,對輸入的車輛特征利用不充分,而Inceptionv3網絡具有稀疏結構,同時具有密集矩陣高性能的特點,其利用卷積核大小為1×1、3×3、5×5分別對輸入進行卷積,然后將含有不同尺度特征的輸出進行堆疊融合,最后利用一個卷積核大小為1×1進行整合,能夠在不大量增加參數量的同時大幅度提高模型的檢測性能。
為了進一步加強YOLOv4網絡對小目標車輛的檢測性能,將Inceptionv3結構引入到Head部分,構建Inceptionv3 Head結構,如圖4所示。

圖4 Inceptionv3 Head結構
綜上所述,最后改進YOLOv4算法的網絡框架如圖5所示。其中引入深度可分離卷積代替標準卷積部分記為改進1,在圖5中將所有深度可分離卷積用卷積_DW表示,而增加網格為104×104的輸出層記為改進2,Inceptionv3 Head結構記為改進3。

圖5 改進YOLOv4網絡框架
在YOLOv4算法中,利用了K-means聚類算法對錨框進行聚類,但是K-means聚類算法存在聚類效果不穩定以及聚類中心不一致的問題,因此,對錨框的聚類進行優化,采用K-means++聚類算法對數據集進行聚類分析,K-means++聚類算法能夠避免由于隨機初始化聚類中心而導致聚類效果的不確定性的問題,其具體步驟為:
(1)從輸入的車輛數據集中隨機選取一個數據樣本作為聚類中心;
(2)計算數據集中每個樣本數據xi(i=1,2,3,…,n) 到聚類中心的距離D(xi), 如式(5)所示
D(xi)=1-I(xi)
(5)
其中,I(xi) 為第i個樣本數據到聚類中心的平均交并比。
(3)計算樣本數據xi是下個聚類中心的概率P(xi), 如式(6)所示
(6)
(4)重復步驟(2)、(3),從樣本數據中選出K個聚類中心;
(5)計算其它樣本數據距離這K個聚類中心的平均交并比,其中平均交并比的值越大,則距離該聚類中心的距離就越小,將其中距離越小的樣本數據劃分為一類,共劃分為K類;
(6)對這K類數據的聚類中心進行更新;
(7)重復執行步驟(5)、步驟(6),直到聚類中心不再變化,將聚類中心進行輸出。
通過K-means++聚類算法進行聚類分析,其聚類分析效果如圖6所示,其中三角形的點代表聚類中心,橫縱坐標代表錨框的寬和高。

圖6 聚類效果
由圖6可知,K-means++聚類算法的聚類效果較好,12個聚類錨框能夠較好的對數據集進行聚類,最終得到的12個錨框其對應聚類中心的寬度和高度分別為(37,35)、(59,106)、(105,74)、(105,191)、(167,316)、(185,127)、(207,212)、(282,266)、(303,355)、(316,168)、(372,258)、(389,368)。
本文通過拍照、網絡下載等手段共采集市區、鄉鎮、高速公路等地方的車輛圖片2500張,其中包括汽車、公共汽車、卡車、摩托車等道路上常見車輛,還涵蓋了包括晴天、陰天、夜晚等場景以及車輛相互遮擋等情況。本文將數據集中的車輛共標注為4個類別,其中小型乘用車標注為car;公共汽車標注為bus;摩托車標注為motorbike;卡車標注為truck。為增強改進YOLOv4算法對于光照變化、圖像模糊等因素的魯棒性,通過圖像亮度調整、圖像加噪、圖像模糊以及Mosaic算法對數據集進行數據增強,增強后數據集圖片擴充到了10 000張。最后利用LabelImg工具對數據集進行標注,共標注車輛18 876輛。
改進YOLOv4算法進行訓練和測試的實驗環境配置見表1。

表1 實驗環境配置

為了衡量改進YOLOv4算法的性能,采用平均精確度均值(mean average precision,mAP)以及每秒檢測幀數(frames per second,FPS)作為模型的性能評價指標,mAP是一個綜合評價指標,表示所有類別平均精度(ave-rage precision,AP)的均值,檢測目標的AP值越高,則該類目標的檢測效果越好。其中AP值由精確率(precision,P)、召回率(recall,R)確定,精確率、召回率的計算如式(7)、式(8)所示
(7)
(8)
其中,TP表示圖像中正確檢測出的目標車輛數量,FP表示圖像中錯誤檢測出的目標車輛數量,FN表示未被檢測到的目標車輛數量。
為了更直觀地展示改進YOLOv4算法的訓練過程,其訓練時的損失曲線如圖7所示。由圖7可知,模型的訓練損失值在前150次迭代時呈現下降趨勢,而在150次迭代之后訓練的損失穩定在0附近,表示模型趨于穩定,具有較好的訓練效果。

圖7 訓練損失曲線
改進YOLOv4算法訓練后得到bus、motorcycle、car、truck的平均精度條形圖如圖8所示。由圖8可知,改進YOLOv4算法對motorbike、truck、bus以及car這4種車輛的檢測平均精度均在98%以上,分別達到了98.94%、98.55%、98.40%以及98.16%,同時通過計算可得模型的平均精度均值mAP達到了98.51%,說明該算法對于車輛的檢測性能較好。

圖8 平均精度條形圖
為了驗證改進YOLOv4算法的車輛檢測性能,將只引入深度可分離卷積的模型記為對比模型1,將只增加一層104×104輸出層的模型記為對比模型2,將只引入Inceptionv3結構的模型記為對比模型3,并將這3個對比模型與改進YOLOv4模型、YOLOv4模型進行對比實驗,其對比結果見表2。

表2 改進YOLOv4與YOLOv4性能對比
由表2可知,對比模型1相比于YOLOv4模型,其檢測精度基本不變,但其檢測速度提高了2.5 FPS,模型大小降低了108 MB,說明引入深度可分離卷積代替標準卷積大幅度減少了模型的參數量以及計算量,提高了模型的檢測速度;對比模型2相比于YOLOv4模型,其檢測mAP增加了2.27%,同時模型大小也只增加了4 MB,但是其檢測速度降低了1.1 FPS,說明增加YOLOv4網絡檢測層的數量,能夠提高模型對車輛的檢測能力,但是同樣會降低檢測速度;對比模型3相比于YOLOv4模型,其檢測速度增加了0.5 FPS,同時其檢測mAP增加了2.05%,但模型大小增加了30 MB,說明引入Inceptionv3結構,在保證檢測精度基本不變的情況下,能夠提高模型對車輛的檢測能力,但也會小幅度增加模型的參數量以及計算量;而使用改進YOLOv4模型進行檢測,在檢測速度基本不變的情況下,其mAP增加了2.44%,模型大小也降低了68 MB,驗證改進YOLOv4算法的檢測性能優于YOLOv4。
為了更加直觀地對改進YOLOv4與YOLOv4的檢測效果進行對比,選取白天、夜間、大霧3種場景對改進YOLOv4與YOLOv4進行測試,其檢測結果如圖9所示。

圖9 不同場景檢測結果
由圖9(b)可知,YOLOv4算法在白天、夜間、大霧3種場景進行車輛檢測時,對于一些小目標車輛以及遮擋車輛出現了誤檢現象,將圖片中的car檢測為truck,且在夜間以及大霧場景下的車輛檢測性能弱于白天的檢測性能,而改進YOLOv4模型通過增加一個尺度的輸出層,以及引入Inceptionv3結構,提高了算法對車輛特征的提取能力,因此在圖9(c)中,對于小目標車輛以及遮擋車輛,改進YOLOv4算法都能夠準確地檢測出來,而且在夜間以及大霧場景下都具有較好的檢測效果,進一步驗證了改進YOLOv4算法的有效性以及魯棒性。
由表3可知,改進YOLOv4模型與Faster R-CNN模型相比,雖然模型大小增加了68 MB,但是其檢測速度提高了7.1 FPS,同時檢測mAP提高了16.04%;改進YOLOv4模型與SSD模型相比,雖然模型大小增加了84 MB,檢測速度降低了4.9 FPS,但是其檢測提高了6.76%;而改進YOLOv4模型與YOLOv3模型相比,雖然檢測速度降低了2.9 FPS,但是其檢測mAP提高了2.95%,且模型大小降低了59 MB,綜上所述,改進YOLOv4算法的車輛檢測性能高于其它目標檢測算法。

表3 不同檢測算法性能對比
針對現有檢測方法存在小目標車輛漏檢率高以及夜間車輛誤檢率高的問題,本文提出一種基于改進YOLOv4的多目標車輛檢測算法。通過引入深度可分離卷積代替標準卷積,減輕網絡模型大小;增加一層輸出層以及引入InceptionV3結構,提高對小目標車輛的檢測性能;構建適用于多場檢測的車輛數據集,并采用K-means++聚類算法重新確定錨框。通過構建的車輛數據集對改進YOLOv4算法進行測試,并與其它常見的目標檢測算法進行對比分析,結果表明,改進YOLOv4算法優于其它模型,相比于改進前,在檢測速度基本不變的情況下,其檢測mAP增加了2.44%,且模型大小減小1/3,同時在不同場景下改進YOLOv4算法具有良好的魯棒性。后續將在此實驗的基礎上繼續進行更深入研究,在不降低其檢測性能的同時,大幅度減輕模型大小,并且將檢測的車輛類型增加。