杜金航,何 寧
北京聯合大學,北京100101

圖1 YOLOV3網絡結構
道路車輛檢測技術是機器視覺的重要研究內容,其中基于深度學習的車輛檢測技術是目前主要的研究技術手段。車輛檢測技術可應用于無人駕駛、智能交通、交通安全等眾多領域,尤其在交通監控、刑事案件取證等應用中具有重要應用價值。近幾年隨著計算機計算性能的提升和存儲空間的增長,卷積神經網絡逐漸成為了計算機視覺領域研究的熱點和重點,并憑借其強大的特征表達能力取得了巨大的成功。最早的經典卷積神經網絡結構是Alex 等提出的AlexNet 模型[1],之后為了提高卷積神經網絡的性能,國內外學者在網絡結構和網絡深度方面進行了深入探索,高階特征在卷積神經網絡中的研究也取得了一定的進展[2-4]。基于深度學習的車輛檢測方法可以分為兩類。一類是基于區域推薦的目標檢測算法,首先使用區域推薦產生候選目標,隨后使用卷積神經網絡進行處理。具有代表性的算法有RCNN[5]、Fast RCNN[6]、Faster RCNN[7]、Mask RCNN[8]等,這類方法的優點是精度較高,缺點是由于計算量過大而不能滿足實時應用的需求。另一類是基于回歸的目標檢測方法,將檢測問題作為回歸問題處理,直接預測目標位置與類別。具有代表性的算法有YOLO[9]、SSD[10]、YOLOv2[11]、YOLOv3[12]等。這類方法的優點是結構清晰,實時性好,缺點是相對于RCNN系列方法而言精度偏低。
本文針對車輛檢測算法存在檢測精度低、速度慢的問題,提出了一種基于改進YOLOv3的道路車輛目標檢測方法。為了降低目標檢測算法復雜度,提出了更為簡單的網絡模型,同時為了降低檢測速度增加檢測精度使用k-means 聚類方法選取先驗框,在保證檢測精度不降低的前提下顯著提高檢測速度,保證檢測的實時性。
為了保證目標能夠快速檢測的前提下提高檢測性能,Redmon J 等[12]于2018 年提出YOLOv3,主要應用于圖像目標檢測、視頻目標檢測、攝像頭實時目標檢測等方面。
YOLOv3 的網絡結構主要包括Darknet53 與YOLO層兩部分,分別用于提取圖像特征和多尺度預測,通過在三種尺度上進行預測的方法,有效增強了對不同大小物體及被遮擋物體的檢測效果,并引入躍層連接以強化收斂效果,同時采用隨機多尺度訓練的方式增強了算法的魯棒性。
YOLOv3提出了新的提取圖片特征的網絡Darknet53,作為全卷積網絡,Darknet53主要由卷積層、批量標準化及躍層連接組成,激活函數采用Leaky Relu,其網絡結構如圖1所示,其中輸入圖像尺寸為416×416×3,虛線部分為Darknet53骨架網絡,其余部分為YOLO網絡層。
圖1 中DBL 結構是YOLOv3 的基本組件,由卷積層,批量標準化與激活函數構成,如圖1 左下角所示。resn 結構為YOLOv3 中的主要組成部分,n 代表數字,表示這個res_block里含有多少個res_unit。該結構中包括零填充與殘差結構,如圖1右下角所示。圖中用紅色虛線框出的部分是骨干網絡Darknet53,該網絡用于提取圖像特征。卷積層的工作原理如圖2所示,其中淡藍色區域是大小為5×5的輸入圖像,綠色區域是大小為5×5 的輸出圖像,輸入圖像中深藍色區域為大小為3×3 的卷積核。為保證輸出圖像與輸入圖像大小不變,首先擴充輸入圖像如圖中白色虛線框。隨后計算輸入圖像中左上角3×3大小的區域,通過卷積運算將其映射到輸出圖像的第一個點上。最后滑動卷積核,完成整張圖像的卷積操作。通過卷積可以突出圖像的特征。

圖2 卷積層原理示意圖

圖3 YOLOV3多尺度檢測示意圖
圖1 右側為YOLOv3 網絡的特征交互層,YOLOv3在對目標物體進行分類時不再使用softmax函數。這是由于一個目標邊框中出現的物體可能同時屬于多個類別,而softmax 進行分類時只能將其分為一類。所以YOLOv3 采取多尺度分類思想,將YOLO 層分為3 個尺度,在同尺度YOLO 層利用卷積操作,使用卷積核(3×3和1×1)完成特征圖和局部特征的交互。YOLOv3 輸出了3 個不同尺度的feature map,如圖1 所示的y1,y2,y3。在特征圖大小為13×13、26×26、52×52的3個尺度上對目標進行檢測,每一個單元格借助3個錨點框(anchor box)預測3 個邊界框。該部分網絡用于多尺度預測。多尺度檢測示意圖如圖3,圖3(a)為縮放后的圖片示意圖,縮放前圖片大小為1 242×375,縮放后圖片的大小為416×416。圖3(b)、(c)、(d)分別為YOLOv3 在52×52、26×26、13×13 尺度上進行目標檢測的示意圖。圖中藍色部分為當前尺度下的錨點位置,YOLOv3使用錨點機制預測車輛邊界框,在錨點位置處產生維度比例為1∶1、1∶2和2∶1的錨點框,預測目標位置。
骨干網絡Darknet53對于道路車輛目標檢測過于復雜與冗余,會出現檢測速度過慢的問題。特征交互層使用的錨點框是根據經驗、使用手工方式獲取錨點的尺度,YOLOv3的錨點選取在對道路車輛目標檢測時實用性低,從圖4(a)、(b)中可以看出會誤檢的問題,從圖4(c)中可以看出會漏檢的問題,從圖4(c)、(d)中可以看出會重復檢測的問題。
本文提出利用錨點機制預測道路車輛邊界框,并改進骨干網絡,降低網絡復雜度,在保證檢測精度的同時提高檢測速度。
Redmon等人[12]在YOLOv3中提出了Darknet53網絡,獲得了很好的檢測精度與速度的平衡。雖然Darknet53通過殘差結構使網絡的訓練難度降低,并使用了大量的1×1 和3×3 是卷積核,步長為2 的卷積核替代最大池化層減少了參數數量,但對于道路車輛的檢測,Darknet53網絡有些復雜與冗余,過多的參數會導致訓練復雜、增大對數據量的需求、減慢檢測速度。

圖4 YOLOV3在KITTI數據集上的錯誤檢測結果實例
為了提高道路車輛目標檢測速度,以保持準確度、減少參數量為出發點,本文借鑒Darknet53,提出一種參數數量相對較少、運算復雜度相對較低的卷積神經網絡作為特征提取網絡。本文提出的卷積神經網絡,稱為Darknet30,網絡結構如表1所示。
第一個卷積層用32 個大小為3×3 的卷積核(濾波器)操作416×416分辨率的輸入圖像;然后,將先前卷積層的輸出作為輸入,使用64個尺寸為3×3的卷積核以及兩個像素的步長對它們進行卷積操作,實現下采樣操作,同時添加殘差塊增加網絡的深度,該殘差塊由1×1卷積層和3×3 卷積層組成,此時得到的特征圖尺寸為208×208;接下來,執行包含2×殘差塊的5 組網絡,分別獲取104×104、52×52、26×26、26×26、13×13 分辨率的特征圖。在這5組殘差塊組成的網絡中,除了卷積核數與特征圖的尺度不同之外,每一個殘差塊都相似。
該網絡結構包含1×、2×殘差塊的6組網絡,相比較于YOLOv3中1×、2×、8×、8×、4×殘差塊的5組網絡,參數數量減少47%,運算復雜度下降,實現檢測速度的提升。

表1 Darknet30的網絡結構
為高效地預測不同尺度與寬高比的物體邊界框,Faster R-CNN 最早提出使用錨點框作為選取物體邊界框的參照物,代替傳統的圖像金字塔與特征金字塔的方法,同時降低了模型訓練的復雜度,提高了運行速度。隨后SSD、YOLOv2與YOLOv3均采用了錨點機制并取得了良好效果,因此,本文延用YOLOv3中的錨點機制預測車輛邊界框。傳統YOLOv3 中的錨點個數與維度是由VOC 20 類和COCO 80 類數據集聚類得到,錨點框維度比例為1∶1、1∶2和2∶1。不適用于道路車輛目標檢測。道路車輛目標的長寬比始終是一個相對固定的值,聚類后長寬比呈現為1∶1,因此需要對道路車輛目標候選框進行聚類分析,重新確定錨點個數和寬高維度。
Faster R-CNN 通過在每個滑動位置采用3 個尺度和3個縱橫比的框產生9個錨點,SSD使用6個縱橫比表示不同形狀的錨點。這些方法的共性是根據經驗、使用手工方式獲取錨點的尺度,然后在模型訓練過程中調整錨點框的尺寸。受到YOLOv2的啟發,本文使用k-means維度聚類的方法對訓練數據集的邊界框做聚類,選取最合適的邊界框先驗,對車輛進行更好的預測,其中聚類方法中距離公式定義如下:

其中,B 為矩形框的大小,C 為矩形框的中心,RIOU表示兩個矩形框的交疊比。
本文權衡平均交并比與錨點框的數量關系如圖5所示,取9 個錨點框,使用k -means 聚類方法處理數據集標簽信息。聚類是將數據集中的道路車輛目標位置信息劃分為9 個簇,讓簇內的點之間距離盡量小,而讓簇間的距離盡量大。聚類操作后9 個簇的位置就是錨點框的位置,這樣選取的9個錨點框可以更加有效地檢測目標,本文實驗中有52 000 個二維的數據點,作圖點與點之間的距離太近,不易觀察算法的執行過程,圖6(a)、(b)、(c)示意性實驗采取了100個二維的數據點進行,k 值取3,每個數據點的橫縱坐標為在圖片中的位置信息,為方便計算將其進行歸一化處理。

圖5 錨點框數量與平均交并比的關系

圖6 k-means實驗示意圖
k-means算法的執行過程可以分以下步驟:
(1)隨機選擇3個位置,作為初始聚類中心,本實驗選取的3 個初始聚類中心位置如圖6(a)中黑色叉線表示。隨后計算圖中所有點到這3 個初始聚類中心的歐式距離,將每一個點劃入到距離其最近的初始聚類中心。如圖6(a)中不同顏色的點表示劃分到不同的簇中。
(2)將每一簇的中心位置更新為聚類中心位置。重復計算步驟(1),直到每個種子點的前后兩次的更新值之間滿足預設的閾值或迭代次數。
圖6(b)是聚類迭代4次后的結果,原本屬于紅色簇的右上角紅色的點群隨著迭代的進行,距離藍色簇聚類中心的距離變為最小,故將其重新劃分到藍色點群中,顏色由紅色變為藍色;圖6(c)是聚類8 次以后的結果。第9 次聚類結果與第8 次相同,故第8 次迭代的結果就是最終聚類結果。
本文中錨點框的選取為圖6(d)中的實驗結果,分別是(8,66),(8,205),(79,198),(137,195),(183,190),(224,186),(279,185),(282,17),(353,178)。在每個尺度上的每一個單元格借助3個錨點框預測3個邊界框。
表2 顯示了使用錨點機制預測道路車輛邊界框在KITTI 數據集上的檢測結果。本實驗中使用的算法使用了錨點機制,所以命名為YOLOv3-anchors,改方法在檢測速度上比傳統的YOLOv3提高了19.77 f/s。同時獲得90.05%的mAP,比傳統的YOLOv3提高了0.44%。可以看出使用錨點機制對檢測速度有顯著的提升效果。
道路車輛檢測的損失函數包括坐標誤差,置信度誤差與分類誤差。
中心坐標誤差為:

寬高坐標誤差為:

置信度誤差為:

分類誤差為:

其中,λ 為損失權重,λcoord取5,λnoobj取0.5;K×K 為網格大小,取值分別為52×52,26×26,13×13;M 為每個網格中候選框個數,取值為3;xi、yi、wi、hi、Ci、pi為橫坐標、縱坐標、高度、寬度、置信度、類別預測值,為其對應的真實值,其中橫坐標、縱坐標、高度、寬度的最大值為圖片的大小416。置信度與類別預測值的取值范圍為0到1。
本文在公開數據集KITTI[13]與車輛行駛動態數據集上進行訓練和測試。實驗基于Darknet神經網絡框架[14]實現,在配置有Intel Xeon Silver 4110 CPU和RTX2080Ti GPU的PC機上運行。程序設計語言為Python語言。本文使用均值平均精度(mAP)與檢測速度兩項指標對模型進行評價。mAP計算公式如下:

其中,Nclasses為類別個數,PclassAve為不同類別的平均精度,計算方法如式(7),其中,Pclass為每幅圖像中的類別檢測精度,Ntotal為該類別的物體在測試集中的照片數目。

檢測速度計算公式如下:

車輛檢測標準數據集KITTI,KITTI 數據集由德國卡爾斯魯厄理工學院和豐田美國技術研究院聯合創辦,是目前國際上最大的自動駕駛場景下的計算機視覺算法評測數據集。KITTI還提取了用于2D、3D目標檢測、目標跟蹤和姿態預估數據集。本次實驗使用2D目標檢測數據集,并對數據集原有的標簽信息進行處理,保留實驗需要的3 個類別的標簽,即:Car,Van,Truck。選取該數據集中7 481張圖像作為實驗數據,并分成兩部分:5 000張圖像用于訓練驗證數據集,2 481張圖像用于測試數據集。
車輛行駛動態數據集取材于日常車輛行駛中拍攝的視頻,視頻格式為AVI,包括不同天氣情況、不同道路的視頻數據,總大小為2.68 GB。使用Labellmg 對視頻序列中的每一幀圖像進行標注用于測試。從視頻序列中選取的道路車輛圖像如圖7所示,其中包括了復雜環境、車輛遮擋、夜晚低亮度等情況。
本文在訓練階段,進行50 200 次迭代,動量配置為0.9,權重衰減配置為0.000 5,批量大小設置為16,學習率初始為10-3,并在網絡迭代40 000次時學習率降低為10-4。在網絡迭代45 000 次時學習率降低10-5。圖8 為訓練過程中的損失函數收斂曲線,從圖中可以看出,在訓練次數達到5 000次時損失函數收斂曲線趨于平緩。

表2 使用錨點機制在KITTI測試集上的檢測結果

圖7 車輛行駛動態數據集實例

圖8 收斂曲線
圖9 顯示了本文提出的方法與YOLO 系列算法在KITTI 數據集上的比較,其中本文提出的方法獲得76.04 f/s 的檢測速度,相比于YOLO 與YOLOv3 方法,本文提出的方法在檢測速度上有顯著的提高。同時,本文所使用的方法在測試集上獲得90.08%的mAP,比傳統的YOLOv3提高了0.47%,相比于YOLOv2與YOLO,本文提出的方法在檢測精度上有大幅度提高。

圖9 YOLO系列算法性能對比
本文使用均值平均精度(mAP)與檢測速率兩項指標對改進的YOLOv3模型進行評價。表3顯示了本文方法與傳統的YOLOv3 在車輛行駛動態數據集上檢測的效果。其中YOLOv3-anchors采用了錨點機制預測道路車輛邊界框,YOLOv3-anchors-30 采用了錨點機制預測道路車輛邊界框的同時更改骨架網絡為Darknet30。可以看出在同時采用錨點機制預測邊界框和Darknet30網絡時,檢測效果更佳。

表3 不同方法在車輛行駛動態數據集上的檢測結果
表4 顯示了Fast R-CNN、Faster R-CNN、YOLO、YOLOv2、YOLOv3 與本文提出的改進的YOLOv3 方法的實驗結果。從表中可以看到,本文提出的YOLOv3-anchors-30獲得了90.08%的mAP,在精度方面優于所有其他方法,并且以76.04 f/s的速度實現了實時檢測。可以看出本文提出的方法在綜合考慮檢測精度與檢測速度之后取得了更好的效果。
圖10顯示了本文方法在車輛行駛動態數據集上檢測的效果。圖11 顯示了本文方法在KITTI 數據集上檢測的效果。圖10(a)、圖10(b)、圖11(b)、圖11(c)、圖11(d)顯示了本文提出的方法在復雜環境下的檢測效果。圖11(a)顯示了在強光照環境下的檢測效果。圖10(b)、圖11(b)顯示了在遮擋情況下的檢測效果。可以看出本文提出的模型對城市交通監控車輛的檢測具有良好的魯棒性。

圖10 本文方法在車輛行駛動態數據集上檢測的效果
表5 顯示了本文方法與其他文獻中方法的對比結果。從表中可以看到,本文方法在檢測精度方面略有不足,但在檢測速度方面具有明顯優勢,可以得出本文方法在檢測精度與檢測速度的綜合考慮中檢測效果更好的結論。

表4 不同方法在KITTI測試集上的檢測結果

表5 不同文獻方法檢測結果對比

圖11 本文方法在KITTI數據集上檢測的效果
車輛實時檢測在很多領域里具有重要作用,例如無人駕駛、智能交通、交通安全、停車場管理等。目前的車輛實時檢測算法還存在一定的局限性,比如受光照變化、車輛遮擋、目標的快速運動等因素的影響,常常不能達到很好的檢測效果,該研究依然具有一定的挑戰性。本文提出的改進的YOLOv3 算法在檢測速度方面有了顯著的提示,并且在檢測精度方面優于現有的目標檢測方法。在后續工作中,如何在保證實時性的基礎上增加車輛檢測精度可以作為主要的突破方向。