殷 妍,陳慶奎
(上海理工大學 光電信息與計算機工程學院,上海 200093)
車輛計數的關鍵問題在于車輛檢測的方法,無線傳感器[1]等傳統的方法由于溫度變化和路基問題等因素的影響,使其應用受到了限制,并且精度并不理想。常用的車道線劃分方法是利用圖像的邊緣信息來檢測車道,此方法要求道路上沒有過多車輛干擾并且道路標線清晰,且對于夜晚的情況并不適用。
車輛計數的準確性依賴于高準確率的車輛檢測結果。常用的基于視頻的車輛檢測方法有光流法、背景減除法、幀間差分法等[2]。光流法計算復雜度高,實時性差;背景減除法易受其它運動目標干擾,且對光照變化敏感;幀間差分法對于車速較快的情況易產生較大空洞,從而導致檢測不準確。近年來,由于深度學習在提取圖像高層特征上的優勢,越來越多的研究者開始關注基于深度學習的目標檢測[3,4]。基于回歸的目標檢測方法,如YOLO、SSD等,在速度上優勢明顯且檢測準確率較高,滿足實時檢測要求。
本文基于darknet框架,利用YOLOv3網絡對交通視頻中的車輛進行訓練與測試,提出利用車輛行駛軌跡的基于車道映射矩陣法進行車道劃分,并根據車道劃分結果及虛擬線圈計數法統計多車道車流特征。實驗結果表明,YOLOv3網絡能夠在保證實時性的基礎上達到理想的準確率,與基于車道映射矩陣的車道劃分方法結合能夠對多車道區域內的車輛進行高準確率的計數。
交通監控視頻中包含的豐富信息是智能交通系統的重要數據來源。基于監控視頻的車輛檢測方法靈活性高,適用性強,目前已被廣泛采用。對于實時視頻檢測,既要保證降低受外界因素干擾的靈敏度,又要保證較快的處理速度、較強的魯棒性及較高的準確率。由于天氣,光照情況等影響,傳統的基于視頻的車輛檢測方法檢測效果較差,深度學習方法近年來在計算機視覺領域不斷表現出優秀的效果,基于深度學習的目標檢測方法不需要進行人工特征設計,具有良好的特征表達能力,準確率明顯超過傳統檢測方法,并且具有更強的魯棒性,成為了當前主流的目標檢測算法。J.Redmon等[5]提出的YOLO算法,在保證檢測精度的情況下,能夠將檢測速度提升到45幀/s,滿足實時性檢測的要求。
多車道車流特征統計包含實時車輛數,車流速及通行車輛總數。對于實時車輛計數,根據車輛檢測結果即可統計出多車道區域內當前車輛數量。通行車輛總數的計算需要在車輛檢測的基礎上采用車輛計數方法對車輛通行情況進行統計,目前常用的車輛計數方法有基于目標跟蹤[6]及基于虛擬線圈計數法[7]。基于目標跟蹤的計數方法[8]需要匹配不同幀中目標的特征,根據匹配結果進行計數,對于目標間相互遮擋等情況易出現漏檢問題。基于虛擬線圈的檢測計數法[9]計算復雜度低,易于實現且準確率較高。
車道線的識別與劃分是智能交通系統中的重要研究內容,對于多車道區域的車輛計數有著不可或缺的作用。傳統的車道線檢測方法有基于特征和基于模型匹配兩種方法,基于特征的車道線檢測方法[10]主要是通過圖像中道路邊緣提取對車道線進行檢測,利用改進的Hough變換進行車道線定位及車道檢測[11]等。基于特征的方法在道路背景簡單的情況下檢測準確率較高,但對于復雜的道路環境,檢測準確率較低。基于模型的車道線檢測方法[12]能夠適應道路環境復雜的情況,但各模型適用情況較少,對不同道路不能通用。
對于結構化的道路,道路背景環境單一,道路幾何特征明顯,采用邊緣檢測的方法對車道線進行提取可以取得較好的檢測結果。然而由于城市交通情況日新月異,尤其對于道路交通發達的城市,路面上路標復雜,并且可能存在臨時車道線的情況,因此傳統的車道線檢測方法有時結果并不理想。除此之外,利用邊緣提取進行車道線檢測的方法僅在道路背景穩定的情況下可行,對于夜晚情況及無明確車道線的道路,該方法不具有良好的適用性。車輛行駛軌跡蘊含了豐富的道路幾何、語義信息,已成為道路數據獲取的重要途徑[13]。車輛行駛軌跡不受復雜的道路環境影響,對于光照等因素干擾不敏感,根據車輛行駛軌跡規律,可得到真實反映各車道車流情況的分布。因此本文結合車道中車輛行駛特點,利用車輛行駛軌跡點提出基于車道映射矩陣的車道劃分方法,根據車道映射矩陣分布情況對車道進行劃分,實驗結果表明該方法減少了環境因素對檢測結果的影響,采用該方法既可以得到理想的檢測結果,又具有很強的實用性。
對于多車道道路,有時需要對不同車道分別進行計數,尤其在十字路口存在直行、左轉及右轉3種不同行駛方向的車道,由于交通信號燈的控制,3種車道的車輛數量差距可能很大,因此需要多車道車輛計數系統對不同車道分別進行車輛計數。
多車道車輛計數系統主要工作分為3部分,第一部分,利用YOLOv3檢測算法對采集的圖片進行訓練,得到車輛檢測模型;第二部分,根據第一部分的檢測結果,利用車道映射矩陣進行車道線劃分,得到交通道路中多車道區域的劃分方案;第三部分,結合車輛檢測與車道劃分的結果,在系統中計算并顯示檢測出的各車道實時車輛數,車流速及通行的車輛總數。系統流程如圖1所示。

圖1 系統流程
利用YOLOv3進行車輛檢測模型的訓練,車輛目標定義為car。實驗采用的數據集來自上海市中環路,淮海中路及西藏中路3個路口的車輛通行情況錄制視頻,每個路口的總錄制時間在8小時以上,包含不同日期的白天和夜晚的車輛通行情況,3個路口的視頻總時長達到24小時以上。實驗數據集由從視頻中截取的不同時間段的圖像組成,總的數據集包含9000張圖片,圖片尺寸為360像素×270像素。選取8000張數據集作為訓練集,1000張為測試集。數據集的圖像示例如圖2所示。

圖2 數據集圖像示例
YOLO的核心思想是利用整張圖作為網絡的輸入,直接在輸出層回歸矩形邊框的位置和矩形邊框所屬的類別。YOLOv3借鑒了GoogleNet的inception結構及ResNet的shortcut結構,網絡結構為darknet-53,一共有106層。第0層-74層有53個卷積層,其余為res層。第75層至105層為YOLO的特征交互層,分為13×13、26×26、52×52這3個尺度,在3種尺度內通過卷積核實現局部特征交互,通過3×3與1×1卷積核實現特征映射間的交互。
通過采用多尺度融合的方式做預測使得YOLOv3對小目標檢測的準確率大大提高,并且由于darknet-53可以實現每秒最高的策略浮點運算,因此能夠更好地利用GPU進行計算,大大加快了檢測速度,使其在速度上也能達到實時性的要求。
采用在Imagenet上預訓練好的模型參數darknet53.conv.74,在該預訓練權重文件的基礎上繼續訓練。在訓練過程中,采用均勻分步策略,每3000個樣本更新一次權重參數,通過設置權重衰減系數防止過擬合。并采用數據增廣方法進行預處理,包括隨機裁剪、旋轉,調整飽和度、色調、曝光度等。該方法增加了訓練集的樣本量,提高了模型的泛化能力。
在實際生活中,大部分車輛會根據車道行駛,因此本文提出了基于車道映射矩陣的車道劃分法,根據車輛檢測結果統計車輛軌跡點坐標,利用得到的車輛軌跡點信息及軌跡點分布情況對車道中心線進行估計。
對于視頻中的每一幀,若當前幀中檢測出車輛,如圖3所示,利用車輛外接矩形的幾何中心點坐標可表示車輛軌跡點。因此對于視頻中的每一幀,可得到若干軌跡點。

圖3 車輛檢測
統計得到的軌跡點坐標中可能存在異常的干擾點,利用統計判別法對干擾點進行剔除,對于去干擾后的輛軌跡點,根據車輛檢測的結果,可以得到一系列的車輛信息參數
T={(xi,yi)}|i=1,2,…,n|
(1)
其中,xi、yi表示橫縱坐標。對于得到的車輛軌跡點坐標,k-means聚類算法可以將相似度高的點劃分至同一類,誤差平方和(sum of the squared errors,SSE)可以作為衡量聚類效果好壞的評價指標,然而由于目標是對車輛軌跡進行聚類,其采用歐幾里德距離度量方法并不適用,尤其對于非直行車道,SSE無法準確地反映車道軌跡點聚類效果的好壞,因此本文不使用聚類算法對車道中心點進行劃分。
對于用數字陣列表示的圖像,每個像素即對應該陣列中的某個數字,構成數字陣列的所有像素可表示為矩陣。將視頻中圖像映射到一個車道映射矩陣,并將矩陣初始化為零。通過映射核增加車道中心點權值,可得到反映真實車道分布情況的車道映射矩陣。
實驗所采用的視頻幀率為25幀每秒,根據車輛檢測結果,對每幀中車輛軌跡點進行統計,并將軌跡點及其相鄰像素點與映射核進行計算,增加車道映射矩陣中對應位置的權重,得到當前幀的車道映射矩陣。其中,映射核為3×3矩陣,為增加車輛中心點權值,設置映射核第二列為2,為增加軌跡數據量,相鄰像素點權值增量為1。原圖像矩陣與映射核計算得到車道映射矩陣如圖4所示。

圖4 車道映射矩陣計算
根據車輛信息參數初始化原圖像矩陣,將車輛中心點所在矩陣位置值增一,利用映射核增加車道中心點區域的權值,根據車道映射矩陣的權值對車輛軌跡點進行估計,由于不同路口車流量相差較大,使用規定時間作為原圖像軌跡點矩陣與映射核計算終止條件并不適用。因此需要根據實際道路車輛通行情況決定車輛軌跡點采集時間t。通常情況下,60≤t≤180,根據車流量情況取適當大小的t值。對于車道映射矩陣,由于采集的軌跡點樣本足夠大,因此映射矩陣每行的權值均呈高斯分布,峰值即每條車道的中心點。根據車輛通行情況及檢測結果,得到車道映射矩陣,圖5為上海市淮海中路某直行與彎道路口模擬車道映射矩陣中某行的像素點權值分布情況。對于直行路口,如圖5(a)所示,右圖代表其原圖像中部及底部的矩陣行權值分布結果。對于彎道路口,如圖5(b)所示,其原圖像中部及底部的矩陣行權值分布結果與直行路口相比,在圖像中部由于拐彎,其分布狀態變化更為突出,可直觀地反映出車道中心點的位置變化情況。

圖5 車道映射矩陣權值分布
根據車道映射矩陣中值的分布結果,可分割出對應圖像中道路區域及各車道劃分情況。由高斯分布規律可確定車道數,該分布的峰值點即代表對應車道中心點。因此,由映射矩陣即可確定各車道中心點位置,從而得到車道中心線坐標信息。

y=a0+a1x+a2x2+…+amxm
(2)
各軌跡點到該曲線的平方偏差和為
(3)
利用多元函數極值與最值問題的理論依據可知,通過最小二乘法對各個變量求偏導,使得偏導值為0,即對F(a0,a1,…,am)ai求偏導得到m個下式
(4)
對于直行道路,擬合的軌跡為直線,即m=1;對于簡單的彎道,m取3即可擬合出對應曲線。對上式進行求解即可得到車道線函數。
正確檢測出車輛并劃分車道后,下一步即進行車輛計數。
利用訓練得到的YOLO模型對視頻中的車輛進行檢測,根據車輛檢測結果可直接得到當前幀中車輛總數,即YOLO 檢測出的總目標框數nums,通過檢測結果直接進行實時計數,通過計算車輛幾何中心點所屬車道,利用多車道實時車輛計數算法對各車道分別進行車輛計數。
多車道實時車輛計數部分偽代碼:
AlgorithmofReal-TimeVehicleCounting
FOR i ← 1 TO nums
Box[i].center_x←(Box[i].LT_x+ Box[i].RB_x)/2
Box[i].center_y←(Box[i]. LT_y+ Box[i].RB_y)/2
FOR k ←1 TO LineNums
//for Box[i].center_y,calculate
//the abscissa corresponding to each lane line
X[k]=Fk(Box[i].center_y)
EndFor
FOR j ←1 TO [LineNums-1]
IF X[j]≤Box[i].center_x ≤X[j+1]
LaneNums[j]++;
//Number of vehicles in each lane
ELSE
CONTINUE
EndIf
EndFor
EndFor
其中,Box代表檢測出的目標框,LT與RB分別為目標框左上角及右下角點的坐標,Fk為對應車道線的多項式函數。圖6模擬了對上海市某路口進行車輛檢測及車道劃分處理后的車輛計數模型圖。根據檢測結果得到了各車輛信息參數,可計算出每輛車的中心點坐標,利用多元函數求根公式求得每條車道線對應中心點center_y值的橫坐標,通過判斷center_x的范圍即可確定車輛所屬車道,從而對各車道的車輛進行實時數量進行統計。

圖6 車輛計數模型
道路實時車輛數只能在一定程度上反應道路車流情況,全面反映道路通行情況需要實時車輛數,車流速及通行車輛總數。
對車輛總數進行統計通常采用基于虛擬檢測線的方法,該方法計算量小,實時性高,但在視頻中車速較慢時存在重復計數問題,在車輛擁堵時易導致車輛計數遺漏。針對以上兩個問題,在對車輛數量進行統計時,考慮到檢測線易引起誤判的原因,提出了基于虛擬線框的狀態計數算法。根據車輛行駛規律及道路視頻拍攝位置,在車道上設置固定的計數檢測區域,計數檢測框長度設置為車道長度,寬度設置為1.5倍車輛檢測框。為避免車輛在虛擬線框中停留多幀導致的重復計數問題,設置一個表示當前線圈狀態的變量S,當車輛檢測框未完全進入線圈中時,S為0;當車輛檢測框完全包含于線圈內時,將S置為1;當車輛檢測框駛出虛擬線圈時,S狀態為0。根據線圈狀態的變化,對車輛進行計數。根據車輛行駛規律,當線圈狀態S由1變為0時,代表車輛離開虛擬線圈,通行車輛計數器加一。檢測框計數如圖7所示。

圖7 檢測框計數
車流速定義:單位時間內通過道路特定區域的車輛數量,單位為輛/小時,計算公式
(5)
對交通視頻進行分析,獲取車輛通行情況,利用基于虛擬線框的狀態計數算法對指定時間內通過的所有車輛進行統計,根據車流速定義,計算單位時間內通行的車輛總數。并對當天通過該路段的所有車輛進行計數,得到通行車輛總數。各路口車流量統計結果通過實時車輛數,車流速及通行車輛總數3項特征共同反映。
實驗在64位 Windows 7操作系統下進行。硬件環境:CPU為Intel(R) Core(TM)2 Duo,主頻2.94GHz,內存6GB;GPU為Nvidia Geforce GTX680。開發環境:Visual Studio 2013,OpenCV2.4.9,CUDA8.0并行計算庫及cuDNNv5.0并行加速庫。
多車道車輛計數準確率既受車輛檢測影響,又受車道劃分影響。因此車輛檢測及車道劃分準確率是衡量多車道車輛計數準確率的基礎。
實驗評價標準中車輛檢測任務的評價指標為
(6)
(7)
其中,recall即召回率,為被正確檢測出的車輛占驗證集中所有車輛數的比例,即準確率,precision為被正確檢測出的車輛占檢測出的車輛數的比例,mTP為目標為車輛且被系統正確檢測成車輛的數量,mFP為目標不為車輛,但被系統錯誤檢測成車輛(誤檢),mFN為目標為車輛,但系統并未將其檢測為車輛(漏檢)。
車道線劃分的目標是要正確檢測出車道線,因此車道線檢測采用人工標定的方法判別車道劃分是否準確,將算法劃分的車道線與人工標注的車道線基準求差值,將標定的車道線設為l,算法劃分的車道線設為l′,x為l與圖像下方的交點,x′為l′與圖像下方的交點。若x與x′滿足 |x-x′|≤w,且|θ(l-l′)|≤α, 則認為劃分的車道線是正確的。其中w與α根據道路實際情況取適當值。
實驗所采用的視頻圖像分辨率為320×270,幀率為25幀/s。常見視頻幀率為25幀/s至30幀/s,在本文實驗環境下,系統的檢測速度達到35幀/s,滿足實時性要求。
為評估本文算法的有效性,對上海市不同路段,不同光照情況及不同道路標志干擾下的6000張圖像中多車道區域進行車道線提取實驗,并將其與傳統的基于Hough的車道線檢測方法進行比較,測試統計結果見表1。

表1 車道線提取測試結果
由表1可知,基于車道映射矩陣的車道劃分方法對不同的環境均有良好的適應性,在不同干擾條件下均有很好的魯棒性。圖8是在西藏中路夜晚的實驗結果,表明在光照條件不理想且交通標線不清晰的情況下,本文的方法依然能夠準確地對車道進行劃分。

圖8 夜晚車道劃分
為了驗證本文模型對車輛檢測的準確度,分別在不同場景下任意截取多段視頻,其中白天及夜晚情況各10段,每段視頻10 min,并使用本文的車輛檢測模型進行測試,實驗結果表明,該模型在白天情況下檢測準確率高達96.4%,在夜晚情況下準確率高達94.3%,對于車輛稀疏和車輛擁擠的情況誤檢率及漏檢率都很低,檢測結果見表2。在上海市中環路,淮海中路及西藏中路3個路口檢測效果如圖9所示,可以看出本文模型對光照變化不敏感,在夜晚光線較暗的情況下依然能夠保持較高的檢測準確率,且對于車輛密集及小目標的情況均有良好的檢測效果。

表2 本文模型車輛檢測結果

圖9 檢測效果
分別選取上海市中環路,淮海中路及西藏中路3個路口進行多車道實時車輛計數準確率測試,對3000組圖片測試各車道車輛計數的平均準確率,結果見表3,說明車輛檢測模型與車道劃分方案結合可以實現較高準確率的多車道實時計數系統。根據本文的多車道車流特征統計方法,利用車輛檢測與車道劃分結果,對淮海中路的各車道車流速及通行車輛總數進行實驗統計的結果見表4。

表3 多車道實時車輛計數檢測結果

表4 淮海中路車流特征統計結果
由實驗結果可以驗證,在不同的路口和交通場景下,本文方法均獲得了較佳的檢測識別效果及較高的計數準確率。
針對不同道路的多車道實時車輛計數問題,本文應用YOLOv3檢測算法實現了對交通視頻中的車輛檢測,提出基于車道映射矩陣的車道劃分方案,利用了車輛軌跡信息,與傳統的車道檢測方法相比,在車道線不清晰,被遮擋及夜晚環境情況下具有更優的適用性及準確性,并通過實驗驗證了本文車道劃分及檢測模型的準確率。結合車輛檢測與車道劃分結果,實現了多車道車輛計數系統,可以自動檢測車輛及劃分車道,并能夠對車輛總數及各車道中的車輛數量進行統計,通過虛擬線框對該道路所有通行車輛進行統計并計算車流速,該系統有助于智能交通系統中道路擁堵的判定,具有很強的實用性。下一步的研究重點是如何進一步提高車輛檢測及車道劃分準確率,完善多車道計數系統,提高系統穩定性。