葉佳林,蘇子毅,馬浩炎,袁 夏,趙春霞
南京理工大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,南京210094
隨著外賣和非接觸式派送行業(yè)的快速發(fā)展,非機(jī)動車違章現(xiàn)象以及造成的交通事故越來越多。由于非機(jī)動車數(shù)量大、分布廣,所以目前對非機(jī)動車監(jiān)管的難度較大。隨著交管部門對非機(jī)動車監(jiān)管力度日益增強(qiáng),基于道路監(jiān)控?cái)z像頭的非機(jī)動車智能在線檢測對道路安全和社會發(fā)展具有重要意義[1]。
傳統(tǒng)的目標(biāo)檢測方法利用人工設(shè)計(jì)的圖像特征進(jìn)行檢測,Taigman 等人[2]提出HOG(Histogram of Oriented Gradient)算子、Ma等人[3]提出SIFT(Scale-Invariant Feature Transform)算子去提取特征,并將提出的特征放入分類器實(shí)現(xiàn)分類識別,但由于在真實(shí)場景中非機(jī)動車會因遮擋,非機(jī)動車較小等因素導(dǎo)致難以提取特征,所以傳統(tǒng)方法很難滿足于實(shí)際應(yīng)用的需求。近些年來,基于卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測算法已經(jīng)成為主流檢測算法。由于卷積神經(jīng)網(wǎng)絡(luò)泛化能力強(qiáng),一定程度可以克服遮擋,光照等因素帶來的影響。RCNN(Region Convolutional Neural Network)[4]、Fast-RCNN[5]、Faster-RCNN[6]等算法模型的提出,極大地提升了目標(biāo)檢測準(zhǔn)確率。在2015年,Redmon等人[7]提出了YOLO系列算法,極大地提升了算法檢測的速度。Liu 等人[8]提出了SSD(Single Shot MultiBox Detector)算法,使用了多尺度方法提升了檢測的準(zhǔn)確率。Law 等人[9]提出的cornerNet 算法和Fcostian等人[10]提出的FCOS(Fully Convolu-tional One-Stage object detection)算法分別受到了人體姿態(tài)算法和語義分割算法的啟發(fā),為目標(biāo)檢測算法打開了新思路。YOLOv3[11]算法是YOLO 算法的第三個(gè)版本,由于YOLOv3 算法速度快,精度高,所以在實(shí)際場景中YOLOv3 在檢測非機(jī)動問題上有著廣泛的應(yīng)用。本文針對非機(jī)動車具有密度大,容易互相遮擋,且在監(jiān)控視頻中所占面積往往較小等特點(diǎn),通過改進(jìn)YOLOv3算法模型實(shí)現(xiàn)非機(jī)動車的實(shí)時(shí)檢測。
針對非機(jī)動車檢測和識別問題,本文工作主要體現(xiàn)在以下三個(gè)方面。第一,本文構(gòu)建了一個(gè)真實(shí)交通場景的非機(jī)動車檢測的數(shù)據(jù)庫;第二,基于YOLOv3模型,通過設(shè)計(jì)新的特征融合結(jié)構(gòu)降低非機(jī)動車這類小目標(biāo)的漏檢率;第三,引入GIOU 損失函數(shù)增強(qiáng)對非機(jī)動車定位的精度。
圖1 YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)
YOLO 是基于無區(qū)域建議的卷積神經(jīng)網(wǎng)絡(luò)目標(biāo)檢測算法模型,它將目標(biāo)檢測問題轉(zhuǎn)換成了回歸問題,直接將圖像作為輸入,并在最后一層輸出待檢測目標(biāo)的位置信息和類別信息,實(shí)現(xiàn)了端到端的檢測。YOLOv3是YOLO系列的第三代版本,與二階段模型相比,YOLOv3具有更低的復(fù)雜度,檢測的速度更快。與同為單階段目標(biāo)檢測模型的SSD相比較,YOLOv3具有更高的準(zhǔn)確率和速度。在Titan X 顯卡上,YOLOv3 的檢測速度可達(dá)到30幀/s,能夠滿足非機(jī)動車實(shí)時(shí)檢測的需求。
YOLOv3 的網(wǎng)絡(luò)結(jié)構(gòu)如圖1(a)所示,分為特征提取網(wǎng)絡(luò)、FPN(Feature Pyramid Networks)[12]和輸出層三個(gè)部分。YOLOv3 采用darknet53 作為特征提取網(wǎng)絡(luò),darknet53 由眾多1×1 卷積層和3×3 卷積層組成。Darknet53 采用了類似于ResNet(Residual Network)[13]的方式,使用了大量的跳躍連接結(jié)構(gòu)保證了訓(xùn)練并不會出現(xiàn)梯度彌散的現(xiàn)象。darknet53 還采用了步長為2 的卷積層代替了池化操作實(shí)現(xiàn)降采樣,這樣使得在進(jìn)行降采樣操作時(shí)不僅減少了計(jì)算量,并且在降采樣時(shí)保留了更多信息。在卷積神經(jīng)網(wǎng)絡(luò)中,由于低層含有較少的語義信息,但是含有較多的位置信息,高層含有較多的語義信息,但含有較少的位置信息,所以YOLOv3 使用FPN 結(jié)構(gòu)進(jìn)而將高層與低層的信息相融合,從而增強(qiáng)了目標(biāo)檢測的準(zhǔn)確率。
如圖2有兩個(gè)矩形框A、B以及他們的交集框C。
圖2 矩形框A、B和交集框C
圖3 IOU為0
IOU(Intersection over Union)是目標(biāo)檢測中的常用指標(biāo),常用來作為預(yù)測框和真實(shí)框之間的距離的評價(jià)指標(biāo),它可以反映出預(yù)測框與真實(shí)框的相似度,如公式(1)所示。
但是IOU 在衡量兩框之間的相似度時(shí)會存在一些問題。如圖3 所示,圖中框A與框B以及框A和框C的IOU 都為0,但是框A與框B的距離明顯小于框A與框C的距離,此時(shí)IOU 便不能良好地反應(yīng)兩框之間的相似度。
圖4中的IOU是相等的,但是很明顯可以看出兩者的回歸的效果是不相同的,但是通過IOU并不能將這種情況區(qū)分出來。所以用IOU 作為相似度的衡量指標(biāo)在一定情況下并不可取。GIOU[14]的設(shè)計(jì)目標(biāo)就是為了解決該問題。與IOU一樣,GIOU也是一種度量函數(shù),而且GIOU 對尺度變化并不敏感,可以解決因?yàn)槌叨葐栴}帶來的定位不準(zhǔn)確問題。GIOU 不僅僅只關(guān)心重疊的部分,它也關(guān)心非重疊部分,能夠更好地反應(yīng)了兩者的重疊度。
圖4 IOU和GIOU的對比
GIOU 的計(jì)算公式如式(2)所示,A表示預(yù)測框的面積,B表示真實(shí)框的面積,D表示包含預(yù)測框和真實(shí)框的最小的矩形的面積。
雖然FPN 被用于YOLOv3,并且配上3 種不同尺度的Anchor 去改進(jìn)目標(biāo)檢測的效果,但是對于一些小目標(biāo)而言效果并不是很好,存在漏檢的情況。
YOLOv3的FPN部分分別利用8倍下采樣、16倍下采樣、32倍下采樣的特征圖作為特征層去檢測目標(biāo),所以當(dāng)某一目標(biāo)在原輸入圖像中大小小于8×8 是無法檢測到的,16 倍下采樣特征圖和32 倍下采樣特征圖去檢測小目標(biāo)更加困難。YOLOv3 的FPN 層檢測圖如圖5(a)所示。本文提出的改進(jìn)的FPN層結(jié)構(gòu)如圖5(b)所示,本文將104×104的特征層作為新的特征融合層和其他3個(gè)融合層進(jìn)行融合,這樣可以讓高層的特征具有更強(qiáng)的位置信息,底層的特征具有更強(qiáng)的語義信息,這樣做不僅可以加強(qiáng)定位的精度,而且可以增強(qiáng)對小目標(biāo)檢測的準(zhǔn)確性。
圖5 本文提出的FPN層結(jié)構(gòu)與原始FPN層結(jié)構(gòu)
圖6 本文提出的改進(jìn)的YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)
如圖6,本文提出的改進(jìn)的YOLOv3 模型使用了4個(gè)降采樣層作為FPN,并且在FPN 中將32 倍下采樣特征圖進(jìn)行2倍上采樣,并且使尺度與16倍下采樣特征圖匹配,進(jìn)行拼接,將拼接后的16倍下采樣特征圖按照相同的方法與8 倍下采樣特征圖融合,然后將8 倍下采樣特征圖也進(jìn)行這種操作與4倍下采樣圖像拼接融合,得到大小為104×104、52×52、26×26、13×13的特征圖,分別命名為P1、P2、P3、P4。然后分別將P1 進(jìn)行降采樣操作與P2 融合,P2 也進(jìn)行降采樣操作與P3 融合,P3 進(jìn)行降采樣操作與P4 融合。最后將P4 層、P3 層、P2層、P1 層依次向上融合,從而實(shí)現(xiàn)特征融合。
YOLOv3在進(jìn)行回歸坐標(biāo)時(shí),僅使用了平方差誤差函數(shù),但在訓(xùn)練時(shí)存在相同平方差誤差,回歸效果不相同的情況。為了解決此問題,本文引入了GIOU損失函數(shù)替代了平方差損失函數(shù),從而提升了算法檢測的準(zhǔn)確性。原YOLOv3損失函數(shù)為式(3):
本文將GIOU 得到的損失函數(shù)替換原始損失函數(shù)的平方差函數(shù),得到了新的損失函數(shù),如式(4):
LOSSMSE為YOLOv3 原 始 的 均 方 差 損 失,LOSSconf為YOLOv3的分類損失函數(shù),LOSSgiou為GIOU損失,GIOU損失具體公式如式(5)所示:
Anchor 的值對于YOLOv3 而言十分重要,Anchor是通過訓(xùn)練數(shù)據(jù)集聚類得到的,合適的Anchor 的值能夠使得定位更加準(zhǔn)確,從而降低網(wǎng)絡(luò)損失。在YOLOv3的檢測層中,用于進(jìn)行特征檢測的檢測層的特征圖大小為52×52、26×26、13×13,并且這些特征層能夠被映射到原始圖像,所以在進(jìn)行檢測時(shí)原始圖像和目標(biāo)坐標(biāo)被縮小為對應(yīng)特征層的大小。每個(gè)預(yù)測框會生成3 個(gè)不同比例的待檢測框,并且框的大小由Anchor的值決定,最后讓預(yù)測的框與真實(shí)框的交并集來找到大于設(shè)定交并集值的邊界框去進(jìn)行計(jì)算損失,為了減少計(jì)算量YOLOv3設(shè)置了檢測的最低置信度,如果預(yù)測框的置信度小于此閾值就不再去檢測該框。
本文中引入了Anchor 的思想,提出的改進(jìn)的YOLOv3 通過4 個(gè)尺寸的特征圖去實(shí)現(xiàn)檢測,每個(gè)特征圖會有3 個(gè)通過K-means[15]聚類得到的不同尺度的Anchors來實(shí)現(xiàn)坐標(biāo)的回歸,所以如何選擇Anchor的尺寸就顯得尤為重要了。
在實(shí)驗(yàn)中K-means并非使用歐式距離來實(shí)現(xiàn)聚類,而是使用IOU來計(jì)算標(biāo)注框的距離,如式(6)所示:
可以看出,IOU越大表明標(biāo)注框的距離越小。由于本文采用的是四尺度檢測,所以相比于原始三尺度檢測,本文需要通過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 的尺度。
本文實(shí)驗(yàn)數(shù)據(jù)集通過8 組交通探頭在不同時(shí)間段得到的非機(jī)動車樣本,一共采集了7 000 張圖片作為本次實(shí)驗(yàn)的訓(xùn)練集與測試集,如圖7所示。
圖7 采集數(shù)據(jù)集部分樣本
得到采集的數(shù)據(jù)集后,利用標(biāo)記軟件labelimg 對采集到的圖片中的非機(jī)動車樣本進(jìn)行標(biāo)注,具體標(biāo)注分類為美團(tuán)外賣車、餓了么外賣車、自行車、其他非機(jī)動車,將標(biāo)注好的圖像坐標(biāo)信息保存為.xml 形式,如圖8 所示。然后按照比例為4∶1 隨機(jī)分為訓(xùn)練集和測試集。
圖8 非機(jī)動車標(biāo)記狀況
在數(shù)據(jù)集中,各種非機(jī)動車具體信息如表1 所示。由于美團(tuán)外賣車和餓了么外賣車樣本較少為了平衡樣本,本文實(shí)驗(yàn)將存在美團(tuán)外賣車和餓了么外賣車的圖片進(jìn)行旋轉(zhuǎn)和鏡像來實(shí)現(xiàn)數(shù)據(jù)增強(qiáng)。
表1 數(shù)據(jù)集各個(gè)類別數(shù)量
本文實(shí)驗(yàn)在以下條件下完成:處理器為Intel?Xeon CPU E5-1650,配有32 GB內(nèi)存和ubantu系統(tǒng),Titan Xp配備11 GB 顯存,并配置好darknet 的深度學(xué)習(xí)框架,與配置opencv 以及其他依賴庫。本文實(shí)驗(yàn)首先通過python 實(shí)現(xiàn)聚類算法計(jì)算出Anchor 的值,再通過修改darknet 中的cfg 文件實(shí)現(xiàn)網(wǎng)絡(luò)搭建,最后通過C 語言修改darknet 代碼實(shí)現(xiàn)GIOU 損失函數(shù)。本文實(shí)驗(yàn)將batch 設(shè)置為64,學(xué)習(xí)率設(shè)置為0.001,每輪更新率為0.95,權(quán)重衰減設(shè)置為0.000 1。本文實(shí)驗(yàn)?zāi)P陀?xùn)練時(shí)是在原始darknet53權(quán)重下進(jìn)行微調(diào),迭代了30 000次完成訓(xùn)練。
對于多分類目標(biāo)檢測模型而言,分別會計(jì)算每個(gè)類別的TP(True Positive)、FP(False positive)、FN(False Negative)的數(shù)量。TP 代表預(yù)測框分類預(yù)測正確并且IOU 大于設(shè)定的閾值的預(yù)測框的數(shù)量。FP 代表預(yù)測框與真實(shí)框分類預(yù)測錯誤或者分類預(yù)測正確但是兩者IOU小于閾值的預(yù)測框的數(shù)量。FN代表未被預(yù)測出來真實(shí)框的數(shù)量。
查準(zhǔn)率代表預(yù)測框中預(yù)測正確的比例,公式如式(7)所示:
查全率代表所有真實(shí)框中被預(yù)測出的比例,具體公式如式(8)所示:
AP 代表某一分類的精度,通過找到在不同查全率下最高的查準(zhǔn)率得到。mAP代表多分類檢測模型中所有類別的AP均值,mAP的值越大表示該模型的定位與識別的準(zhǔn)確率越高。mAP50表示當(dāng)檢測框與目標(biāo)框IOU值大于0.5時(shí)算正類樣本。本文的評價(jià)均使用mAP50作為評價(jià)指標(biāo)來判別模型的效果。
本文提出的改進(jìn)的YOLOv3 與原始的YOLOv3 的實(shí)驗(yàn)對比結(jié)果,如表2所示。
表2 實(shí)驗(yàn)結(jié)果
YOLOv3的Anchors值是通過COCO數(shù)據(jù)集計(jì)算得到的,當(dāng)換成本文中的新數(shù)據(jù)集時(shí),需要重新計(jì)算Anchor的值,本文重新計(jì)算了Anchor 的值從而提升了數(shù)據(jù)集的檢測準(zhǔn)確率。通過上表可以看出,本文提出的模型在檢測非機(jī)動車的平均精度上有所提升。在本文數(shù)據(jù)集提到的各種場景的非機(jī)動車檢測中,大部分非機(jī)動車是小尺寸的目標(biāo),本文使用了更大特征圖去檢測小目標(biāo),并且本文使用了GIOU損失去提升定位的精度,因此對非機(jī)動車檢測有一定的提升。本文模型與YOLOv3 模型檢測對比結(jié)果如圖9所示。
最終得到的檢測非機(jī)動車結(jié)果如圖10 所示,可以看出此模型對非機(jī)動車檢測效果較為理想。
針對目前非機(jī)動車檢測精度難以保證的情況下,本文提出了一種基于YOLOv3 的改進(jìn)的算法。實(shí)驗(yàn)結(jié)果表明,本文提供的算法在精度上能夠達(dá)到比較好的效果,尤其是對定位的準(zhǔn)確性有顯著的提升,優(yōu)于原始的YOLOv3模型。在后續(xù)工作中,將通過本文提出的模型來實(shí)現(xiàn)非機(jī)動車的跟蹤任務(wù),從而判斷非機(jī)動車是否違章。
圖9 檢測結(jié)果對比圖
圖10 檢測效果圖
致謝感謝余漢鴻、高全力、張恒、張欣、崔長江、吳心怡同學(xué)為了實(shí)驗(yàn)進(jìn)行的數(shù)據(jù)標(biāo)注工作。