陳艷菲,晏彰琛,周 超,黃鈺量
(武漢工程大學(xué) 電氣信息學(xué)院,武漢 430205)
車輛檢測是自動駕駛技術(shù)的基礎(chǔ),車輛檢測的高精度與實時性對于自動駕駛技術(shù)的實現(xiàn)至關(guān)重要[1],在自動駕駛場景中,由于其它車輛與車載攝像頭的距離不同,造成車輛在車載攝像頭中的成像尺度不同,現(xiàn)階段的車輛檢測算法,對大目標車輛檢測效果較好,但容易漏檢小目標車輛[2],嚴重威脅自動駕駛技術(shù)的安全性。
傳統(tǒng)目標檢測算法的泛化性和魯棒性較差[3],難以適用于復(fù)雜的自動駕駛場景。基于深度學(xué)習的目標檢測算法,以其檢測精度高、速度快,廣泛應(yīng)用于自動駕駛領(lǐng)域[4]?;谏疃葘W(xué)習的目標檢測算法分為以R-CNN 系列[5-7]為代表的基于候選區(qū)域生成的雙階段目標檢測算法,和以YOLO 系列[8-11]、SSD(single shot multibox detector)[12]為代表的直接對目標類別和位置進行回歸的單階段目標檢測算法。其中雙階段目標檢測算法檢測速度慢,不滿足實時檢測的要求。單階段目標檢測算法檢測速度快,滿足實時檢測的要求,但是檢測精度不如雙階段高。由于自動駕駛技術(shù)對目標檢測算法實時性的要求,目前單階段目標檢測算法開始應(yīng)用于自動駕駛場景。文獻[13]改進YOLOv4 算法,針對YOLOv4 算法對小目標檢測效果不足,設(shè)計了新的特征融合網(wǎng)絡(luò)PAN++,使用5 個檢測尺度來提高自動駕駛場景小目標的檢測精度,但改進算法的檢測速度慢。文獻[14]提出輕量車輛檢測算法GS-YOLO,使用輕量級網(wǎng)絡(luò)GhostNet 替換YOLOv4 的主干特征提取網(wǎng)絡(luò),然后結(jié)合深度可分離卷積,大幅度減少算法的內(nèi)存占用和算力要求,適用于算力不足的嵌入式設(shè)備,但算法的檢測精度不高。
上述改進算法均存在難以平衡目標檢測精度和速度的問題。本文基于YOLOv4 算法,改進YOLOv4 的特征融合網(wǎng)絡(luò),增加小目標檢測層,使得算法能夠檢測到更小的目標; 然后將EIoU 損失函數(shù)作為YOLOv4 的邊界框回歸損失函數(shù),降低模型的訓(xùn)練損失,提高目標的定位精度與檢測精度。經(jīng)實驗證明,本文提出改進的YOLOv4 算法,在滿足實時檢測的條件下,較原YOLOv4 算法,在各類車輛的檢測精度上均有明顯提升。
YOLOv4[11]是一種兼具檢測精度和速度的單階段目標檢測算法,YOLOv4 的網(wǎng)絡(luò)結(jié)構(gòu)可以分為3個部分:
(1)主干網(wǎng)絡(luò):YOLOv4 使用CSPDarkNet53[15]作為主干特征提取網(wǎng)絡(luò),將輸入416×416 尺寸的圖像分別提取52×52、26×26、13×13 這3 種不同尺度的特征圖,作為頸部特征融合網(wǎng)絡(luò)的輸入。
(2)頸部:為了加強目標的特征提取,YOLOv4首先構(gòu)建了SPP[16](spatial pyramid pooling)結(jié)構(gòu),增強13×13 尺度特征圖的感受野,然后利用PANet[17](path aggregation network)結(jié)構(gòu),融合主干網(wǎng)絡(luò)提取的3 種不同尺度特征圖,將特征圖的淺層與深層信息進行融合,輸出兼具深層語義信息和淺層位置信息的52×52、26×26、13×13 尺度的檢測層。
(3)預(yù)測:利用頸部輸出的3 層檢測層,其中每層檢測層分配3 個錨框,通過調(diào)整錨框的中心坐標、寬、高等參數(shù),對輸入圖像進行目標檢測,輸出目標的類別、置信度、位置信息。
在交通圖像數(shù)據(jù)集KITTI 中,標注的目標車輛先驗框?qū)捀呷鐖D1 所示,可知駕駛場景中由于視距造成的小目標車輛十分普遍。雖然YOLOv4 算法使用了多尺度目標檢測策略,利用52×52 檢測層去檢測小目標,但該檢測層是由主干網(wǎng)絡(luò)的8 倍下采樣特征層,再經(jīng)過特征融合網(wǎng)絡(luò)生成,經(jīng)過的卷積層較多,損失了大量的淺層位置信息,且小目標車輛在圖像中所占的像素較少,經(jīng)過深層卷積網(wǎng)絡(luò)后,導(dǎo)致小目標車輛的特征信息丟失,造成小目標車輛漏檢。
圖1 KITTI 數(shù)據(jù)集標注車輛大小散點圖Fig.1 Scatter diagram of vehicle size marked on KITTI dataset
針對上述問題,為了保留有效的淺層位置信息,輸出主干網(wǎng)絡(luò)的4 倍下采樣特征層,改進YOLOv4的特征融合網(wǎng)絡(luò),將4 倍下采樣特征層與其它特征層進行融合,新增104×104 尺度的檢測層。改進YOLOv4的網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示,能夠檢測到更小的目標,而且充分地發(fā)揮了淺層特征層的位置信息與深層特征層的語義信息,降低小目標車輛的漏檢率。
圖2 改進YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)Fig.2 Improved YOLOv4 network architecture
損失函數(shù)能夠衡量模型與實際數(shù)據(jù)之間的差距,是模型訓(xùn)練過程中十分重要的部分,合適的損失函數(shù)有助于提高模型的檢測精度。
YOLOv4 使用CIoU[18]損失函數(shù)計算邊界框的回歸損失,CIoU 的計算公式為
式中:IoU(intersection over union)表示預(yù)測框與真實框的交并比;ρ2(b,bgt)表示預(yù)測框與真實框中心點的距離;c2表示預(yù)測框與真實框的最小閉包框?qū)蔷€距離;wgt與w 分別表示真實框和預(yù)測框的寬;hgt與h 分別表示真實框和預(yù)測框的高。
CIoU 對寬高縱橫比定義比較模糊,而且其寬高縱橫比不能代表實際數(shù)據(jù)的預(yù)測框與真實框之間的寬高比。當{w=kwgt,h=khgt∣k∈R+}時,會出現(xiàn)υ=0的情況;以及υ 對w,h 梯度的符號相反,如式(4)、式(5)所示,當w 或h 中一個增加時,另一個就會減少,以上兩點顯然不符合模型訓(xùn)練過程中預(yù)測框的寬高變化情況[19]。
EIoU 在CIoU 的基礎(chǔ)上進行改進,解決了CIoU對寬高縱橫比定義的問題,明確了預(yù)測框與真實框在寬高上的差異,計算公式如式(6)所示。因此采用EIoU 損失函數(shù)作為YOLOv4 的邊界框回歸損失函數(shù)。
式中:cw,ch分別表示預(yù)測框與真實框最小閉包框的寬高;ρ2(w,wgt),ρ2(h,hgt)分別表示預(yù)測框與真實框?qū)捄透呔嚯x。
實驗軟硬件環(huán)境配置情況如表1 所示。
表1 實驗軟硬件環(huán)境Tab.1 Experimental software and hardware environment
本文在自動駕駛領(lǐng)域使用最為廣泛的KITTI 數(shù)據(jù)集上開展實驗。KITTI 訓(xùn)練集標注了7481 張圖像,包含鄉(xiāng)村、市區(qū)、高速公路等道路場景,每張圖像中最多存在15 輛車,且目標還有不同程度的遮擋與截斷[20]。數(shù)據(jù)集一共包含8 個類別:Car,Van,Truck,Tram,Pedestrain,Person,Cyclist,Misc。
在數(shù)據(jù)集的準備階段,本文保留其中的Car,Van,Truck 三類,刪除其它類別,然后將不含目標的標注文件和圖像刪除。KITTI 數(shù)據(jù)集剩余6798 張圖像和對應(yīng)的標注文件,然后將數(shù)據(jù)集以8∶1∶1 劃分為訓(xùn)練集,驗證集與測試集。
在數(shù)據(jù)處理階段,首先將圖像統(tǒng)一縮放到416×416 大小作為輸入,為了增強模型對小目標的訓(xùn)練效果,采用Mosaic 數(shù)據(jù)增強的方法,在訓(xùn)練集中隨機挑選4 張圖像,通過隨機縮放、裁剪、翻轉(zhuǎn)、色域變化等方式拼接成一張新的圖像,如圖3 所示,并加入到訓(xùn)練集中進行訓(xùn)練。
圖3 Mosaic 數(shù)據(jù)增強Fig.3 Mosaic data enhancement
對于檢測錨框的選取,根據(jù)本文改進YOLOv4算法的要求,采用K-Means 聚類算法,將KITTI 數(shù)據(jù)集中車輛錨框的寬高聚為12 類,錨框的聚類與分配結(jié)果如表2 所示。
表2 KITTI 數(shù)據(jù)集錨框聚類與分配結(jié)果Tab.2 Anchor box clustering and allocation results of KITTI dataset
為了加速模型的訓(xùn)練,引入遷移學(xué)習的思想,在模型訓(xùn)練過程中加載主干網(wǎng)絡(luò)預(yù)訓(xùn)練權(quán)重,并將模型的訓(xùn)練分為2 個階段,第一階段凍結(jié)網(wǎng)絡(luò)主干,對特征融合網(wǎng)絡(luò)參數(shù)進行微調(diào),初始學(xué)習率(learning rate)為0.001,批量大?。╞atch size)為16,訓(xùn)練50輪;第二階段解凍主干網(wǎng)絡(luò),對整個模型進行訓(xùn)練,初始學(xué)習率為0.0001,批量大小為4,訓(xùn)練250 輪。兩個階段均采用隨機梯度下降法(SGD),動量(momentum)為0.9,權(quán)值衰減(weight_decay)為0.0005。本文改進YOLOv4 算法在訓(xùn)練過程中的損失曲線如圖4 所示。
圖4 改進YOLOv4 算法損失曲線Fig.4 Loss curve of improved YOLOv4 algorithm
改進YOLOv4 算法的訓(xùn)練損失和驗證損失隨著訓(xùn)練輪次的增加不斷降低,模型在100 輪之后趨于穩(wěn)定,逐漸收斂,沒有產(chǎn)生欠擬合和過擬合現(xiàn)象,最終訓(xùn)練損失收斂在1 左右,驗證損失收斂在1.5左右。
為了驗證上述改進策略的有效性,設(shè)計消融實驗,所有模型的訓(xùn)練方法和訓(xùn)練環(huán)境均一致。首先以YOLOv4 作為基準算法,然后驗證新增小目標檢測層以及采用EIoU 損失函數(shù)作為YOLOv4 的邊界框回歸損失函數(shù)的檢測效果。消融實驗結(jié)果如表3所示。
表3 消融實驗結(jié)果Tab.3 Ablation experimental results
由表3 可知,新增小目標檢測層對YOLOv4 車輛檢測算法的檢測精度提升很大,對Car,Truck,Van的檢測精度均有明顯提高,平均檢測精度(mAP)提高2.38%;使用EIoU 改進YOLOv4 算法的損失函數(shù)后,平均檢測精度提高0.9%。因此新增小目標檢測層,使用EIoU 改進損失函數(shù),對YOLOv4 算法的檢測精度均有提高。雖然整體改進YOLOv4 算法的檢測速度下降3.07 幀/s,但算法的平均檢測精度提高2.84%,而且改進YOLOv4 算法的檢測速度也達到37.12 幀/s,滿足自動駕駛場景實時檢測的需求。
為了直觀驗證改進YOLOv4 算法的有效性,從測試集中選取3 幅有代表性的圖像,使用本文改進YOLOv4 算法進行車輛目標檢測,結(jié)果如圖5 所示??芍疚母倪MYOLOv4 算法對小目標車輛以及存在遮擋的車輛都有很好的檢測效果。
圖5 改進YOLOv4 算法檢測結(jié)果Fig.5 Improved YOLOv4 algorithm detection results
為了驗證改進YOLOv4 算法的優(yōu)越性,選取具有代表性的目標檢測算法SSD,CenterNet[21],EfficientDet[22],YOLOv3,YOLOv5 在相同的實驗條件和數(shù)據(jù)集下,進行車輛目標檢測的性能對比實驗,檢測結(jié)果如表4 所示??芍疚母倪MYOLOv4 算法在輸入圖像尺寸較小的情況下,檢測精度最高。在要求實時檢測與高精度檢測的自動駕駛場景中,本文改進YOLOv4 算法相比其它算法更優(yōu)。
表4 目標檢測算法性能對比Tab.4 Performance comparison of target detection algorithms
針對自動駕駛場景車輛檢測算法對遠距離小目標車輛檢測效果不好的問題,本文在數(shù)據(jù)處理階段采用Mosaic 數(shù)據(jù)增強的方法,加強模型對小目標車輛的訓(xùn)練,然后提出改進YOLOv4 算法,設(shè)計新的特征融合網(wǎng)絡(luò)以及改進YOLOv4 算法的邊界框回歸損失函數(shù),最后使用K-Means 聚類算法選出更合適的錨框,提升了模型檢測精度。相比SSD,YOLOv5 等具有代表性的目標檢測算法,本文提出改進YOLOv4 算法更適合自動駕駛場景的車輛檢測。但是本文改進YOLOv4 算法模型較大,未來在車載端部署,對車載系統(tǒng)的存儲空間和算力有較高的要求,下一步將進行車輛檢測算法的輕量化研究。