徐江浪,李林燕,尚欣茹,胡伏原*
(1.蘇州科技大學 電子與信息工程學院,江蘇 蘇州 215009;2.蘇州經(jīng)貿(mào)職業(yè)技術(shù)學院 信息技術(shù)學院,江蘇 蘇州215009)
違停車輛檢測是交通智能化過程中非常關(guān)鍵的步驟,主要通過圖像處理等方法提取監(jiān)控圖像中的目標車輛,自動判斷車輛是否違停。Collins R T[1]等人利用幀間差分法將幀與幀之間的信息聯(lián)系起來,以作差的方式來獲取目標的位置信息,但是該方法對于靜止目標的檢測效果并不好。Warren Long[2]等人在此基礎(chǔ)上提出了基于圖片信息和背景模型的背景差分法。該方法利用背景幀的穩(wěn)定性,有效地解決了靜止目標難以辨別的問題,但是容易受環(huán)境影響。Jepson A[3]提出了基于光流法的視頻目標檢測算法,以空間物體表面的點的運動速度在圖像序列中的表達來體現(xiàn)物體的運動狀態(tài),避免了圖像幀信息模糊帶來的弊端[4]。但上述幾種算法均存在檢測的精度和速度難以平衡的問題。
傳統(tǒng)的車輛檢測方法中,大部分檢測工作是基于人工設(shè)定的特征(Haar[1-2]、HOG[3])。由于實際應用場景中自然光線分布不均勻,造成部分目標與背景區(qū)分度不高,提取過程變得極為繁瑣[5]。但隨著深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks,DNNs)的發(fā)展,利用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNNs[6])提取圖像的特征,然后使用分類模型(如SVM[7]等)對提取的圖像特征進行分類和預測,可以有效地降低特征提取的難度。其中,經(jīng)典的卷積網(wǎng)絡(luò)模型有AlexNet[8]、ResNet[1]、VGG[9]等。雖然,CNNs能有效提高目標檢測的精度,但是速度仍然沒有得到較好的解決。
You Only Look Once(YOLO[10-11])算法在目標檢測的實驗中實現(xiàn)了速度與精度較好的平衡。在YOLO算法中,卷積網(wǎng)絡(luò)可以對輸入的整個圖像進行檢測,經(jīng)過采樣,圖像被劃分成不同的區(qū)域,然后計算出各個區(qū)域的類概率、邊界框預測,并依據(jù)概率大小,對邊界框排序,算出它們之間的重疊度(Intersection over Union,IOU),輸出目標檢測結(jié)果。與R-CNN[9]、Fast R-CNN[12]和Faster R-CNN[13]將目標檢測分為兩個階段(twostage)不同,YOLO不需要region proposal[14]階段,目標圖像通過一次檢測,就直接得到物體的類別概率和坐標值。因此,YOLO節(jié)省了大量的時間,并且可以直接針對輸入圖像做反向的網(wǎng)絡(luò)訓練。
基于此,筆者提出了一種基于YOLO算法的車輛違停檢測方法。該方法結(jié)合YOLO算法的目標檢測速度快精度高的特點,利用檢測框和目標違停區(qū)域之間的IOU,篩選出符合違停條件的目標車輛,并在IOU誤差的反饋下,提高目標檢測框的精度,最后通過在數(shù)據(jù)集KITTI和實際圖像上的實驗證明了提出方法的有效性。
目標檢測過程首先需要訓練網(wǎng)絡(luò)模型。模型訓練在圖像樣本數(shù)量為N的訓練集中進行,假設(shè)T代表訓練集,T={t1,t2,t3,…,tN},其中每一張圖像ti的樣本標注信息為si,si是S={s1,s2,s3,…,sN}中的任意一個。而目標檢測中,樣本訓練的目的就是使模型形成一種映射關(guān)系,即f:T→S。其中,樣本圖像標注信息S為{x,y,w,h,C},x、y、w、h、C分別代表圖像中檢測框的中心橫坐標、縱坐標、寬、高和類別。把每一個檢測框的處理過程認為是一個類別預測的過程,即
文中以YOLO算法為框架,輸入圖像經(jīng)過CNN進行特征提取和分類,產(chǎn)生候選框,然后利用非極大值抑制法(Non-Maximum Suppression,NMS[15])篩選目標候選框。在該方法產(chǎn)生最終檢測框的算法中加入IOU值的計算,即預先設(shè)置違停區(qū)域與目標檢測框之間重疊區(qū)域閾值,根據(jù)計算出的IOU值,將大于該閾值的目標檢測框篩選出來,判斷其為違停。如圖1所示,輸入圖像進入YOLO的CNN網(wǎng)絡(luò)中,網(wǎng)絡(luò)提取了整個圖像的特征并產(chǎn)生了若干個候選區(qū)域,利用非極大值抑制法對這些候選區(qū)域框進行篩選,得到較為精確的檢測框數(shù)據(jù)。然后取違停區(qū)域框數(shù)據(jù)與該數(shù)據(jù)之間的IOU值,并將其與設(shè)置的違停閾值相比較,比較所產(chǎn)生的結(jié)果即是車輛是否違停的結(jié)果,最后輸出檢測圖像。
圖1 網(wǎng)絡(luò)框架
YOLO作為一個端到端的目標檢測算法,由正向特征提取和反向誤差傳遞構(gòu)成,前面24個卷積層利用濾波器卷積來進行圖像的特征提取,后面2個全連接層用來預測類概率值以及確定目標位置。如圖2所示,在YOLO網(wǎng)絡(luò)中,整張圖像通過采樣劃分為S*S個單元格,bounding box將由這些單元格產(chǎn)生,并且同時產(chǎn)生類概率值。bounding box的主要數(shù)據(jù)信息包含x、y、width、height和class。這5個值都將通過歸一化處理,將值限制在區(qū)間0到1以內(nèi)。每個單元格產(chǎn)生2個檢測框,在網(wǎng)格產(chǎn)生的眾多檢測框之中,通過非極大值抑制法篩選出最符合目標位置的檢測框,從而確定目標位置。最后,通過損失函數(shù)反向校正檢測框的位置,提高檢測精度。
圖2 YOLO工作原理圖
1.3.1 正向生成網(wǎng)絡(luò)
在訓練的過程中,每個網(wǎng)格單元只負責預測一類邊界框(bounding box)和類概率(class probability),只要將圖像中對象的概率乘以某一類型的條件類概率,就可得到某一類型的預測概率
其中,Pr(Classi|Object)代表每個網(wǎng)格單元預測的類別信息。表示預測目標的置信度,則即為預測框的類別信息。通過非極大值抑制法來濾除這些預測框中準確度較低的信息。在這些可能包含目標的n個矩形框中,用產(chǎn)生的類概率將他們排序,將類概率最大的矩形框分別與其他矩形框求IOU值,將該值與設(shè)定的閾值比較,如果大于閾值,則將該矩形框舍棄,并標記最大類概率的矩形框。在其余剩下來的矩形框中重復同樣的算法,最終把所有不是極大值的框濾除掉,得到較為精確的預測邊界框。
1.3.2 反向校正目標區(qū)域
在正向生成目標區(qū)域之后,網(wǎng)絡(luò)共輸出了S*S*(B*5+C)維向量。其中S表示網(wǎng)格的維數(shù);B表示每個網(wǎng)格的預測框數(shù)量;C表示預測的類別個數(shù)。
YOLO算法采用均方和誤差表示loss函數(shù)來調(diào)整和優(yōu)化算法的參數(shù),即網(wǎng)絡(luò)輸出的S*S*(B*5+C)維向量與實際圖像的對應S*S*(B*5+C)維向量的均方和誤差。每個格子的損失表示為
其中,IOUError、coordError和classError分別代表預測數(shù)據(jù)與標定數(shù)據(jù)之間的IOU誤差、坐標誤差和分類誤差。
YOLO在訓練過程中l(wèi)oss計算公式為
其中,xi、yi、wi、hi、Ci、pi是網(wǎng)絡(luò)預測值,是標注值。和表示物體落入第i個網(wǎng)格和第j個候選框中,和表示物體落入和未落入第i個格子的第j個候選框。通過這個損失函數(shù),能夠反向調(diào)整預測框的位置,提高目標檢測精度。
但是,對于相同的誤差值,大的物體比小的物體對檢測誤差更具影響。造成這樣的原因是,相同的位置偏差占大物體的比例遠遠小于同等偏差占小物體的比例,在文中,使用λcoord=5修正coordError,并采用物體大小的信息項(w和h)進行求平方根來改進這個問題。而在計算IOU誤差時,對于包含物體的格子和不包含物體的格子,它們的IOU誤差對loss的貢獻是不同程度的,YOLO使用λnoobj=0.5修正。經(jīng)過誤差函數(shù)的調(diào)整,使得目標區(qū)域更加精確。
YOLO網(wǎng)絡(luò)中的IOU值是衡量目標之間重疊度的重要標準之一,通過重疊面積占比即可算出。文中借助IOU值來判斷目標車輛和違停區(qū)域之間的位置關(guān)系,通過與閾值的比較得出檢測結(jié)果,實現(xiàn)了車輛違停檢測。
首先,根據(jù)輸入的視頻將其轉(zhuǎn)化為幀圖像,利用已經(jīng)訓練好的YOLO網(wǎng)絡(luò)進行車輛檢測;然后,選取一幀圖像標注可停區(qū)域,即在此區(qū)域以外的車輛被視為違停車輛,結(jié)合目標檢測框,算出二者之間的IOU值,重疊度IOU值計算公式為
最后,將該值與閾值τ相比較,若大于該閾值,則判定為該車輛出現(xiàn)在違停區(qū)域,即為違停;若小于閾值,則判斷沒有占用違停區(qū)域,即沒有違停。流程圖如圖3所示。
圖3 違停算法流程圖
文中采用的數(shù)據(jù)集是來自KITTI數(shù)據(jù)集中的Stanford car dataset,該數(shù)據(jù)集共16 185張圖片,包括兩部分,訓練集8 144張圖片,還有測試集8 041張圖片,如圖4所示。在該數(shù)據(jù)集中,信息包含了所有訓練和測試圖像的 bounding boxes的x1、x2、y1、y2、class以及 fname。其中x1和x2是在x方向上的像素最大值和最小值,y1和y2是y方向上的像素最大值和最小值。
文中卷積神經(jīng)網(wǎng)絡(luò)(CNNs)采用了24個卷積層和2個全連接層。網(wǎng)格維數(shù)S=7,即網(wǎng)格將圖像劃分為7*7。每個網(wǎng)格產(chǎn)生2個檢測框,即B=2。由于文中只檢測車輛,則類別C=1,所以網(wǎng)絡(luò)最終輸出7*7*11維向量。在訓練參數(shù)中,batch size設(shè)置為64,learning rate設(shè)置為0.001,檢測效果較佳。
2.2.1 數(shù)據(jù)集車輛檢測結(jié)果分析
從圖5中的檢測效果可知,圖中展示了多視角下的車輛,該算法對圖像整體特征的提取極其全面,即使目標所處的環(huán)境各不相同,又或者圖中同目標是運動或靜止,在文中算法的檢測中,都能夠被精確地檢測出來。而且各個網(wǎng)格產(chǎn)生的bounding boxes在非極大值抑制法的嚴格篩選下,得到與目標車輛最吻合的檢測框,這說明該算法的精確性。
2.2.2 實際圖像違停檢測結(jié)果分析
如圖6所示,將視頻流中的一幀圖像取出并標記出違停區(qū)域,在圖6(a)中,人行道區(qū)域上出現(xiàn)了一輛違停車輛,通過在此區(qū)域上標記違停區(qū)域,該車輛能夠被精確地檢測出來。在圖6(b)中,在正門前的空地上出現(xiàn)三輛車違停,三輛車相距比較近,但是并沒有影響到檢測效果,依然能精確定位并標注違停車輛。在圖6(c)中,岔路口處及人行道上均出現(xiàn)了違停車輛,而且其中一輛被輕微遮擋,在這種情況下,文中采用的方法能有效解決遮擋物造成的干擾,精確地定位并且檢測到了圖中的違停車輛。
圖4 訓練集圖像
圖5 車輛檢測結(jié)果
圖6 車輛違停檢測結(jié)果
筆者提出了一種基于YOLO算法的車輛檢測和違停檢測的方法,借助IOU值實現(xiàn)了提高車輛檢測精度的目的,同時在數(shù)據(jù)集和實際圖像中的多種場景下依然有很好的檢測和識別能力,因此,文中所提出的方法具有良好的檢測效果。