趙加坤 韓 睿 孫 俊 金 舉
(西安交通大學軟件學院 西安 710049)
隨著高速公路的迅速發展,ETC 通道車輛違規行為卻日漸嚴重,出現各種各樣的跟車闖關、大車小標、偷換標簽等情況[1],這些龐大數量的違規車輛不但造成收費站重大的經濟損失,而且也嚴重阻礙了我國智慧高速公路的健康發展。在這種情況下,傳統的車型管理方法慢慢被社會所淘汰,需要一種更智能化的、能夠基于車牌以外的其他車輛特征來對監控視頻中的車輛進行自動、準確地識別技術[2]。目前已有的車輛檢測算法大致可以分為兩類:基于車輛特征信息的傳統檢測算法和基于深度學習的檢測算法。傳統車輛實時檢測算法主要是依據車輛的邊緣和幾何特征來識別汽車,目前主流的算法主要分為光流法[3]、幀差法[4]、背景差分法[5]等。在實際的ETC應用場景中,車輛的識別比較復雜,傳統車輛識別算法存在著很多局限性,例如:光流法很容易受到光源、噪聲等因素的影響而降低檢測率;幀差法不容易檢測到運動速度緩慢的車輛;背景差分法對場景變換比較敏感,而在ETC場景中存在天氣、光照等復雜多變的不同場景,這會在很大程度上影響檢測結果。
針對傳統檢測算法存在抗噪能力差,計算復雜,準確率低等缺點。在大量的車輛檢測算法中,基于深度學習的車輛檢測算法引起了學者極大的關注并被廣泛使用。目前基于深度學習的車輛檢測算法主要有R-CNN[6]、Fast R-CNN[7]、SSD[8]、YOLOv3[9]。R-CNN 通過一些傳統圖像處理方法實現候選區域的選取,再通過卷積神經網絡提取對應的車輛特征向量,最后使用SVM[10]對區域進行分類,使用線性回歸損失來校正邊界框,以實現車輛分類并得到車輛的檢測框。Fast R-CNN 在R-CNN 的基礎上進行改進,取代R-CNN 原本的串行特征提取方式,直接采用一個卷積神經網絡對全圖提取特征,同時利用金字塔池化層的思想[11],解決了R-CNN 輸入圖像尺寸固定的問題。相對傳統的目標檢測算法,R-CNN 和Fast R-CNN 在車輛特征提取方面有了較大的提升,但是依舊存在計算量大,沒有實現端到端的訓練與測試等問題,無法滿足在ETC 場景下車輛實時檢測的需求。SSD 基于VGG16[12]網絡融合不同卷積層的特征圖來增強系統的特征表征能力,在保證實時的同時,大幅度提升檢測精度,但是SSD融合多個卷積特征時沒有考慮卷積層之間的相互關系,從而導致檢測精度并不是很高[13]。相比于SSD 和Fast R-CNN,YOLOv3 算法借鑒了殘差神經網絡[14]的思想,并實現了多尺度預測,在保證實時檢測的同時獲得了目前最好的檢測精度。
為了提高算法在車輛檢測方面的適用性和準確性,我們采用GIOU[15]來替換邊框回歸損失函數的思想對YOLOv3 進行改進,同時分析數據集中目標的分布情況修正anchor box,使得anchor box更加符合目標尺寸,增強收斂效果。通過ETC數據集上的實驗結果,可以發現改進的YOLOv3 在達到實時性要求的同時依然能夠保持著較高的準確度。
YOLOv3 借鑒了殘差網絡的思想,提出了全新的特征提取網絡Darknet53,作為骨干網絡提取車輛的特征。Darknet53 主要有卷積層和殘差層組成。殘差層如圖1 所示,其中帶加號的標志是一個相加的操作,公式表示為

圖1 殘差網絡塊

其中xt和xt+1是第t 個殘差層的輸入與輸出向量,Ft(xt)是xt經過兩次卷積操作后得到的結果,兩次卷積操作的卷積核尺寸分別為1×1和3×3,步長均為1。Darknet53 在每層卷積后都添加了批量歸一化層和線性單元的激活函數,這樣組成的殘差網絡易于特征提取且更易于收斂。
通過特征提取網絡Darknet53的特征提取,YOLO 卷積層會得到大小為52×52、26×26、13×13 的特征圖,但是在特征圖預測結果之前,卷積層會將提取到的特征進行特征融合,將淺層的低語義高分辨率特征與深層的高語義特征進行結合,采用上采樣和融合的做法,融合了三個尺度(13*13、26*26 和52*52),在多個尺度的融合特征圖上分別獨立檢測,最終使得高分辨的車輛特征也包含了豐富的語義信息。對于輸出預測的三個特征圖,特征圖上每個像素點格子預測三個框,每個框都預測中心點坐標x、y,高寬h、w,存在物體的置信度p 和k 個類別的得分值。最終通過非極大抑制算法篩選出的預測框作為車輛的最終檢測框。
原始的YOLOv1 中,網絡會直接預測檢測目標的中心點坐標x,y 和檢測框的寬高w,h,但是預測結果的微小變換會導致檢測框的波動較大,預測結果不準確。YOLOv2 對預測值進行了改進,其公式為

其中tx、ty、tw、th均為網絡預測值;cx、cy為當前cell距離左上角的偏移量;pw,ph代表與真實框重合度最大的anchor box 的寬高;σ函數是sigmoid 函數,其目的是將預測偏移量縮放到0~1之間。
損失函數作為神經網絡用來評估模型的預測值與真實值之間的差異程度,可以在很大程度上影響模型收斂的效果。在YOLOv3 中,原始的損失函數Loss為[16]

主要的損失函數分為三大部分,坐標損失,置信度損失及分類損失,λobj在預測框檢測到目標車輛時為1,其他時候為0。
YOLOv3 的損失函數采用誤差平方和的計算方式,整合了預測框定位誤差、有無目標的IOU 誤差以及分類誤差,其中預測框定位誤差的計算采用的都是邊框回歸損失的計算方式,這些計算損失值的方式都是檢測框的“代理屬性”——距離,而忽略了檢測框本身最顯著的性質——IOU。
如圖2所示,在L1及L2范數取到相同的值時,實際上檢測效果卻是差異巨大的,直接表現就是預測和真實檢測框的IOU 值變化較大,這說明L1 和L2 范數不能很好的反映檢測效果。但是直接用IOU 作為損失函數來反映預測檢測框與真實檢測框的檢測效果,我們會發現檢測框與真實框之間沒有重合時,IOU為0。而在優化損失函數時,梯度為0,意味著無法優化,且在檢測框與真實框之間IOU相同時,檢測的效果也具有較大差異,如圖2所示。

圖2 同一L2范數的不同IOU,GIOU對比圖
基于IOU 的優良特性和其作為損失函數時的缺點,我們引入GIOU的概念:

假如現在有兩個任意性質A,B,我們找到一個最小的封閉形狀C,讓C 可以把A,B 包含在內;計算C 中沒有覆蓋A 和B 的面積占C 總面積的比值;用A 與B 的IOU 減去這個比值;相比于IOU 會出現梯度為0 的問題,GIOU 引入了包含A,B 兩個形狀的C,所以當A,B 不重合時,依然可以進行優化,且以GIOU 為邊框回歸的損失函數,可以直接反映模型的檢測效果。

1)計算BP的面積公式如下:

2)計算Bg的面積公式如下:

3)計算BP,Bg的重疊面積公式如下:

4)計算可以包含BP,Bg的最小邊框Bc公式如下:

5)計算Bc的面積公式如下:

6)計算IOU的公式如下:

7)計算GIOU的公式如下:

8)計算改進的YOLOv3 邊界框損失函數公式如下:

YOLOv3 采用維度聚類的方法得到一般化的anchor box。即采用K-means[17]的方法在VOC 2007和COCO 數據集上得到9 個anchor box。每個尺度預測三個檢測框,與YOLOv2 相比,YOLOv3 采用了多個不同的尺度的特征圖,每一張特征圖上均采用三個候選框。如圖3所示。

圖3 原始anchors尺寸圖
現有的YOLOv3采用的是COCO數據集上得到的9 種聚類結果:(10,13),(16,30),(33,23),(30,61),(62,45),(59,119),(116,90),(156,198),(373,326)。
根據高速公路車型的固有特點,本文確定目標先驗框數量和對應寬高值;其次根據聚類結果優化網絡anchor 參數,我們對anchors 的大小進行了改進。基于ETC 場景下的數據集,我們重新計 算 了anchors 的 聚 類 結 果:(162.66666667,96.53333333),(114,219.2),(84.6,86.4),(74.3,123.7),(133.6,304.),(87.6,170.6),(104.,123.7),(204.3,371.7),(57,62.9),為邊界框的預測提供更優化的初始值,使訓練網絡在車輛檢測和識別方面具有一定的針對性。
首先按照高速公路收費標準對數據集類別進行劃分:7 座以及7 座以下轎車為car1,8 座到19 座客車為car2,20 座到39 座客車為car3,40 座以及40座以上為car4,卡車為其他類別。其次由于訓練模型需要大量的訓練樣本,在數據集的收集過程中,通過ETC 收費站的攝像頭視角收集到了可供定位和識別訓練車輛圖片訓練集數據共有規整圖片7984 張,車輛21204 輛。其中car1 類客車15030輛,car2 類客車1500 輛,car3 類客車160 輛,car4 類客車800 輛,卡車共3714 輛,涵蓋各種主要的場景(例如:夜晚,白天)車型條件(普通客車,大面包車,依維柯全順,柯斯達,大型客車等),車輛品牌(東風,大眾,豐田,本田,寶馬,奔馳等),車身的遠近視角,車身的平視視角和俯視視角,車身的傾斜程度等。
在實際的ETC 場景下,小型巴士(即20座到39座客車)的數據樣本較少,通過對小型巴士的樣本進行隨機的旋轉、翻轉、裁剪、隨機設置圖片的亮度和對比度以及對數據進行標準化(數據的均值為0,方差為1)[18],如圖4 所示。通過這些操作,可以獲得更多的圖片樣本,原來的一張圖片可以變為多張圖片,擴大了樣本容量,對于提高模型的準確率和提升模型的泛化能力非常有幫助。

圖4 原始數據和增強之后的樣本數據
實驗主要在PC 端完成的。PC 主要配置為i5處理器,GPU(GTX-1080ti)和16G 內存。SSD 和YOLOv3 使用了Pytorch 框架,使用的編程語言為Python。
本文使用改進的YOLOv3可以得到如圖5所示的檢測結果。

圖5 檢測效果
我們使用均值平均精度(mAP)與傳輸速率兩項指標作為評估標注,結果如表1所示。

表1 實驗結果對比
表1 顯示了目前主流的目標檢測算法SSD、YOLOv3、YOLOv2、Fast R-CNN、R-CNN 與本文提出的改進的YOLOv3 方法的實驗結果。這些方法均使用本文收集的ETC 場景數據集進行訓練與測試。從表中可以看出,改進的YOLOv3 獲得了90.2%的mAP,在精度方面優于所有其他方法,并且以34f/s 的速度實現了ETC 場景下實時檢測。相比于基于回歸思想的SSD 與YOLO 系列,基于區域的目標檢測算法的實時性太低,無法達到實時檢測的要求。YOLOv2 的檢測速度較快,但對于一些復雜場景車輛的特征提取較少,導致檢測精度有所欠缺。
1)為了驗證改進的YOLOv3相比于SSD在ETC場景下的車輛檢測更具有優勢,我們收集了五個車輛類別的mAP 數據,如圖6 所示,我們將改進的YOLOv3定義為G-YOLOv3。

圖6 各類別車輛mAP對比結果
從圖6中可以看出改進的YOLOv3算法與目前主流的車輛識別算法SSD 相比,改進的YOLOv3 算法對各種類別的車輛,有著更高的mAP。
通過對檢測結果的分析,我們發現對于近處的車輛,SSD 基本上可以滿足檢測的要求,但是對于遠處的車輛略顯不足。相比于SSD,改進的YOLOv3 通過借鑒特征金字塔的思想,采用多尺度對不同尺寸大小的車輛進行檢測,可以達到很好的檢測效果。
2)為了驗證GIOU相比于原有的回歸損失在收斂速度方面所獲得的優勢,采取每個epochs保存一次模型的方式,收集了100 個epochs 的不同損失函數的數據,如圖7、8所示。

圖7 原始YOLOv3在驗證集上的收斂效果圖
與原始的YOLOv3 相比,改進的YOLOv3 的邊界回歸損失函數、有無目標的IOU損失函數的收斂速度更快,收斂的曲線也更加平緩。相對于原始YOLOv3而言,改進的YOLOv3用GIOU 作為邊界回歸的損失函數,生成的檢測框可以更好地適應不同角度的車輛,在ETC復雜多變場景下的車輛識別也有著更好的檢測效果。

圖8 改進的YOLOv3在驗證集上的收斂效果圖
目前針對ETC場景下復雜多變的車輛視角,本文采用改進的YOLOv3 實現車輛檢測,取得了較高的檢測準確率與實時的檢測速度,基本上達到了ETC 場景對車輛檢測的要求。對于擁堵場景導致的車輛遮擋問題以及夜晚條件下光照不足導致的車輛識別問題,會在后續的工作中繼續研究與改進。