葉佳林,蘇子毅,馬浩炎,袁 夏,趙春霞
南京理工大學 計算機科學與工程學院,南京210094
隨著外賣和非接觸式派送行業的快速發展,非機動車違章現象以及造成的交通事故越來越多。由于非機動車數量大、分布廣,所以目前對非機動車監管的難度較大。隨著交管部門對非機動車監管力度日益增強,基于道路監控攝像頭的非機動車智能在線檢測對道路安全和社會發展具有重要意義[1]。
傳統的目標檢測方法利用人工設計的圖像特征進行檢測,Taigman 等人[2]提出HOG(Histogram of Oriented Gradient)算子、Ma等人[3]提出SIFT(Scale-Invariant Feature Transform)算子去提取特征,并將提出的特征放入分類器實現分類識別,但由于在真實場景中非機動車會因遮擋,非機動車較小等因素導致難以提取特征,所以傳統方法很難滿足于實際應用的需求。近些年來,基于卷積神經網絡的目標檢測算法已經成為主流檢測算法。由于卷積神經網絡泛化能力強,一定程度可以克服遮擋,光照等因素帶來的影響。RCNN(Region Convolutional Neural Network)[4]、Fast-RCNN[5]、Faster-RCNN[6]等算法模型的提出,極大地提升了目標檢測準確率。在2015年,Redmon等人[7]提出了YOLO系列算法,極大地提升了算法檢測的速度。Liu 等人[8]提出了SSD(Single Shot MultiBox Detector)算法,使用了多尺度方法提升了檢測的準確率。Law 等人[9]提出的cornerNet 算法和Fcostian等人[10]提出的FCOS(Fully Convolu-tional One-Stage object detection)算法分別受到了人體姿態算法和語義分割算法的啟發,為目標檢測算法打開了新思路。YOLOv3[11]算法是YOLO 算法的第三個版本,由于YOLOv3 算法速度快,精度高,所以在實際場景中YOLOv3 在檢測非機動問題上有著廣泛的應用。本文針對非機動車具有密度大,容易互相遮擋,且在監控視頻中所占面積往往較小等特點,通過改進YOLOv3算法模型實現非機動車的實時檢測。
針對非機動車檢測和識別問題,本文工作主要體現在以下三個方面。第一,本文構建了一個真實交通場景的非機動車檢測的數據庫;第二,基于YOLOv3模型,通過設計新的特征融合結構降低非機動車這類小目標的漏檢率;第三,引入GIOU 損失函數增強對非機動車定位的精度。

圖1 YOLOv3網絡結構
YOLO 是基于無區域建議的卷積神經網絡目標檢測算法模型,它將目標檢測問題轉換成了回歸問題,直接將圖像作為輸入,并在最后一層輸出待檢測目標的位置信息和類別信息,實現了端到端的檢測。YOLOv3是YOLO系列的第三代版本,與二階段模型相比,YOLOv3具有更低的復雜度,檢測的速度更快。與同為單階段目標檢測模型的SSD相比較,YOLOv3具有更高的準確率和速度。在Titan X 顯卡上,YOLOv3 的檢測速度可達到30幀/s,能夠滿足非機動車實時檢測的需求。
YOLOv3 的網絡結構如圖1(a)所示,分為特征提取網絡、FPN(Feature Pyramid Networks)[12]和輸出層三個部分。YOLOv3 采用darknet53 作為特征提取網絡,darknet53 由眾多1×1 卷積層和3×3 卷積層組成。Darknet53 采用了類似于ResNet(Residual Network)[13]的方式,使用了大量的跳躍連接結構保證了訓練并不會出現梯度彌散的現象。darknet53 還采用了步長為2 的卷積層代替了池化操作實現降采樣,這樣使得在進行降采樣操作時不僅減少了計算量,并且在降采樣時保留了更多信息。在卷積神經網絡中,由于低層含有較少的語義信息,但是含有較多的位置信息,高層含有較多的語義信息,但含有較少的位置信息,所以YOLOv3 使用FPN 結構進而將高層與低層的信息相融合,從而增強了目標檢測的準確率。
如圖2有兩個矩形框A、B以及他們的交集框C。

圖2 矩形框A、B和交集框C

圖3 IOU為0
IOU(Intersection over Union)是目標檢測中的常用指標,常用來作為預測框和真實框之間的距離的評價指標,它可以反映出預測框與真實框的相似度,如公式(1)所示。

但是IOU 在衡量兩框之間的相似度時會存在一些問題。如圖3 所示,圖中框A與框B以及框A和框C的IOU 都為0,但是框A與框B的距離明顯小于框A與框C的距離,此時IOU 便不能良好地反應兩框之間的相似度。
圖4中的IOU是相等的,但是很明顯可以看出兩者的回歸的效果是不相同的,但是通過IOU并不能將這種情況區分出來。所以用IOU 作為相似度的衡量指標在一定情況下并不可取。GIOU[14]的設計目標就是為了解決該問題。與IOU一樣,GIOU也是一種度量函數,而且GIOU 對尺度變化并不敏感,可以解決因為尺度問題帶來的定位不準確問題。GIOU 不僅僅只關心重疊的部分,它也關心非重疊部分,能夠更好地反應了兩者的重疊度。

圖4 IOU和GIOU的對比
GIOU 的計算公式如式(2)所示,A表示預測框的面積,B表示真實框的面積,D表示包含預測框和真實框的最小的矩形的面積。

雖然FPN 被用于YOLOv3,并且配上3 種不同尺度的Anchor 去改進目標檢測的效果,但是對于一些小目標而言效果并不是很好,存在漏檢的情況。
YOLOv3的FPN部分分別利用8倍下采樣、16倍下采樣、32倍下采樣的特征圖作為特征層去檢測目標,所以當某一目標在原輸入圖像中大小小于8×8 是無法檢測到的,16 倍下采樣特征圖和32 倍下采樣特征圖去檢測小目標更加困難。YOLOv3 的FPN 層檢測圖如圖5(a)所示。本文提出的改進的FPN層結構如圖5(b)所示,本文將104×104的特征層作為新的特征融合層和其他3個融合層進行融合,這樣可以讓高層的特征具有更強的位置信息,底層的特征具有更強的語義信息,這樣做不僅可以加強定位的精度,而且可以增強對小目標檢測的準確性。

圖5 本文提出的FPN層結構與原始FPN層結構

圖6 本文提出的改進的YOLOv3網絡結構
如圖6,本文提出的改進的YOLOv3 模型使用了4個降采樣層作為FPN,并且在FPN 中將32 倍下采樣特征圖進行2倍上采樣,并且使尺度與16倍下采樣特征圖匹配,進行拼接,將拼接后的16倍下采樣特征圖按照相同的方法與8 倍下采樣特征圖融合,然后將8 倍下采樣特征圖也進行這種操作與4倍下采樣圖像拼接融合,得到大小為104×104、52×52、26×26、13×13的特征圖,分別命名為P1、P2、P3、P4。然后分別將P1 進行降采樣操作與P2 融合,P2 也進行降采樣操作與P3 融合,P3 進行降采樣操作與P4 融合。最后將P4 層、P3 層、P2層、P1 層依次向上融合,從而實現特征融合。
YOLOv3在進行回歸坐標時,僅使用了平方差誤差函數,但在訓練時存在相同平方差誤差,回歸效果不相同的情況。為了解決此問題,本文引入了GIOU損失函數替代了平方差損失函數,從而提升了算法檢測的準確性。原YOLOv3損失函數為式(3):

本文將GIOU 得到的損失函數替換原始損失函數的平方差函數,得到了新的損失函數,如式(4):

LOSSMSE為YOLOv3 原 始 的 均 方 差 損 失,LOSSconf為YOLOv3的分類損失函數,LOSSgiou為GIOU損失,GIOU損失具體公式如式(5)所示:

Anchor 的值對于YOLOv3 而言十分重要,Anchor是通過訓練數據集聚類得到的,合適的Anchor 的值能夠使得定位更加準確,從而降低網絡損失。在YOLOv3的檢測層中,用于進行特征檢測的檢測層的特征圖大小為52×52、26×26、13×13,并且這些特征層能夠被映射到原始圖像,所以在進行檢測時原始圖像和目標坐標被縮小為對應特征層的大小。每個預測框會生成3 個不同比例的待檢測框,并且框的大小由Anchor的值決定,最后讓預測的框與真實框的交并集來找到大于設定交并集值的邊界框去進行計算損失,為了減少計算量YOLOv3設置了檢測的最低置信度,如果預測框的置信度小于此閾值就不再去檢測該框。
本文中引入了Anchor 的思想,提出的改進的YOLOv3 通過4 個尺寸的特征圖去實現檢測,每個特征圖會有3 個通過K-means[15]聚類得到的不同尺度的Anchors來實現坐標的回歸,所以如何選擇Anchor的尺寸就顯得尤為重要了。
在實驗中K-means并非使用歐式距離來實現聚類,而是使用IOU來計算標注框的距離,如式(6)所示:

可以看出,IOU越大表明標注框的距離越小。由于本文采用的是四尺度檢測,所以相比于原始三尺度檢測,本文需要通過K-means[14]算法的得到的12 組Anchors,通過對比,選擇1 組(27,40,36,57,488,68,65,71,63,98,83,81,96,103,214,56,95,152,130,125,156,165,221,188)作為Anchor 的尺度。
本文實驗數據集通過8 組交通探頭在不同時間段得到的非機動車樣本,一共采集了7 000 張圖片作為本次實驗的訓練集與測試集,如圖7所示。

圖7 采集數據集部分樣本
得到采集的數據集后,利用標記軟件labelimg 對采集到的圖片中的非機動車樣本進行標注,具體標注分類為美團外賣車、餓了么外賣車、自行車、其他非機動車,將標注好的圖像坐標信息保存為.xml 形式,如圖8 所示。然后按照比例為4∶1 隨機分為訓練集和測試集。

圖8 非機動車標記狀況
在數據集中,各種非機動車具體信息如表1 所示。由于美團外賣車和餓了么外賣車樣本較少為了平衡樣本,本文實驗將存在美團外賣車和餓了么外賣車的圖片進行旋轉和鏡像來實現數據增強。

表1 數據集各個類別數量
本文實驗在以下條件下完成:處理器為Intel?Xeon CPU E5-1650,配有32 GB內存和ubantu系統,Titan Xp配備11 GB 顯存,并配置好darknet 的深度學習框架,與配置opencv 以及其他依賴庫。本文實驗首先通過python 實現聚類算法計算出Anchor 的值,再通過修改darknet 中的cfg 文件實現網絡搭建,最后通過C 語言修改darknet 代碼實現GIOU 損失函數。本文實驗將batch 設置為64,學習率設置為0.001,每輪更新率為0.95,權重衰減設置為0.000 1。本文實驗模型訓練時是在原始darknet53權重下進行微調,迭代了30 000次完成訓練。
對于多分類目標檢測模型而言,分別會計算每個類別的TP(True Positive)、FP(False positive)、FN(False Negative)的數量。TP 代表預測框分類預測正確并且IOU 大于設定的閾值的預測框的數量。FP 代表預測框與真實框分類預測錯誤或者分類預測正確但是兩者IOU小于閾值的預測框的數量。FN代表未被預測出來真實框的數量。
查準率代表預測框中預測正確的比例,公式如式(7)所示:

查全率代表所有真實框中被預測出的比例,具體公式如式(8)所示:

AP 代表某一分類的精度,通過找到在不同查全率下最高的查準率得到。mAP代表多分類檢測模型中所有類別的AP均值,mAP的值越大表示該模型的定位與識別的準確率越高。mAP50表示當檢測框與目標框IOU值大于0.5時算正類樣本。本文的評價均使用mAP50作為評價指標來判別模型的效果。
本文提出的改進的YOLOv3 與原始的YOLOv3 的實驗對比結果,如表2所示。

表2 實驗結果
YOLOv3的Anchors值是通過COCO數據集計算得到的,當換成本文中的新數據集時,需要重新計算Anchor的值,本文重新計算了Anchor 的值從而提升了數據集的檢測準確率。通過上表可以看出,本文提出的模型在檢測非機動車的平均精度上有所提升。在本文數據集提到的各種場景的非機動車檢測中,大部分非機動車是小尺寸的目標,本文使用了更大特征圖去檢測小目標,并且本文使用了GIOU損失去提升定位的精度,因此對非機動車檢測有一定的提升。本文模型與YOLOv3 模型檢測對比結果如圖9所示。
最終得到的檢測非機動車結果如圖10 所示,可以看出此模型對非機動車檢測效果較為理想。
針對目前非機動車檢測精度難以保證的情況下,本文提出了一種基于YOLOv3 的改進的算法。實驗結果表明,本文提供的算法在精度上能夠達到比較好的效果,尤其是對定位的準確性有顯著的提升,優于原始的YOLOv3模型。在后續工作中,將通過本文提出的模型來實現非機動車的跟蹤任務,從而判斷非機動車是否違章。

圖9 檢測結果對比圖

圖10 檢測效果圖
致謝感謝余漢鴻、高全力、張恒、張欣、崔長江、吳心怡同學為了實驗進行的數據標注工作。