潘 超, 王雪涵, 高俊平, 王贏慶,尹棟程, 李 佳, 肖 巍*
(1.長春工業(yè)大學 計算機科學與工程學院, 吉林 長春 130102;2.長春市十一高中北湖學校, 吉林 長春 130102)
中國汽車工業(yè)協(xié)會公布的數(shù)據(jù)顯示,2019年國內(nèi)汽車銷量2 576.9萬輛,2020年國內(nèi)汽車銷量2 531.1萬輛。從數(shù)據(jù)上可以看出,每年都有眾多的汽車源源不斷地融入到交通系統(tǒng),給交通系統(tǒng)帶來了巨大的壓力,可以說交通系統(tǒng)的管理能力決定了社會生活的方方面面。交通問題的解決離不開計算機技術大加持,而人工智能技術的不斷革新突破可以進一步提升交通系統(tǒng)的工作效率。因此對交通場景智能識別系統(tǒng)(Traffic Scene Intelligent Recognition System)的需求越來越高。
高效準確地完成交通場景的智能識別依賴于計算機視覺的目標檢測技術。目標檢測是區(qū)分視頻或圖像中感興趣的區(qū)域與其他區(qū)域,判斷目標存在與否,確定目標的位置并識別其種類的計算機視覺任務。近年來,隨著深度學習理論的日趨成熟以及硬件性能的飛速提升,目標檢測任務也從基于計算機視覺與手工特征提取的傳統(tǒng)算法轉向基于深度神經(jīng)網(wǎng)絡的檢測方法[1],基于深度學習的視覺處理方法以各種卷積神經(jīng)網(wǎng)絡結構模型為代表,合并特征提取、選擇和分類過程,通過端對端訓練來自動提取特征,達到分類效果,這類方法精度較高[2]。一般常用的深度學習方法包括: R-CNN、Fast/Faster R-CNN、SSD、YOLO系列等。
計算機目標檢測算法的發(fā)展歷程見表1。
表1 計算機目標檢測算法的發(fā)展歷程
2001年,維奧拉-瓊斯通過滑動窗口的檢測方法首次實現(xiàn)了人臉的實時檢測,使用傳統(tǒng)的目標檢測算法進行檢測。2005年,N Dalal等[4]對尺度不變特征變換和性狀上下文作出改進,提出HOG。2008年,傳統(tǒng)目標檢測算法發(fā)展達到頂點,P Felzenszwalb等[5]提出DPM算法,經(jīng)過多人改進,使用“邊界框回歸”技術提高了檢測精度。
2012年,隨著GPU技術的不斷發(fā)展,進入基于深度學習的目標檢測算法時期。Hinton教授團隊利用卷積神經(jīng)網(wǎng)絡設計了AlexNet, 在ImageNet數(shù)據(jù)集上打敗所有傳統(tǒng)方法的團隊,使得CNN成為計算機視覺領域中最為重要的工具[14]。
2014-2017年間,涌現(xiàn)出R-CNN、SPPNet、Fast R-CNN、Faster R-CNN、YOLO、SSD、Retina-Net、Pyramid Networks等深度學習算法,可分為One-stage和Two-stage兩類。
Two-stage 識別錯誤率較低[15]。R-CNN 首次將深度學習應用到目標檢測上,SPPNet 輸入具有靈活性,能在輸入尺寸任意的情況下產(chǎn)生固定大小的輸出,F(xiàn)ast R-CNN主網(wǎng)絡是VGG16,比R-CNN 和SPPNet 快數(shù)倍,F(xiàn)aster R-CNN相較于Fast R-CNN改為多參考檢測,Pyramid Networks融入特征融合,使得基于深度學習的目標檢測算法逐漸成熟。
One-stage 檢測速度較快[16],YOLO 將物體檢測作為回歸問題求解,檢測網(wǎng)絡pipeline簡單,SSD引入多分辨檢測和難分類樣本挖掘的思想,Retina-Net在分類損失上進行改動,加上權重因子,加大難分類樣本的相對權重。
不少學者將這些算法應用到交通路口智能識別產(chǎn)品中,而目前比較傳統(tǒng)的交通路口智能識別產(chǎn)品在固定角度、固定距離的條件下雖具有較好的識別效果,但在不同角度條件下識別效果較差。在這些算法中,YOLO V3版本算法主要在損失函數(shù)上做了改進,在開放目標檢測數(shù)據(jù)集上的檢測效果和性能都很出色。文中利用YOLO V3檢測算法適應性強的特點,從實際問題的特性出發(fā),嘗試使用YOLO V3實現(xiàn)交通場景的分析。
YOLO系列算法是基于卷積神經(jīng)網(wǎng)絡的目標檢測算法[17],以YOLO V3算法為基礎進行車輛檢測研究。
對物體進行識別時,網(wǎng)絡通過特征提取的方式對目標進行識別。識別時將目標圖像分為若干個小塊,根據(jù)待識別物體的大小可以分為13×13,26×26,52×52的小格,在實際使用中,如果待識別的物體更小(如小昆蟲、小零件等),還可以將圖像分割的更小(如104×104)。當物體的中心坐標被分入某個格中,就由這個格子預測物體。物體有固定數(shù)量的外框(bounding box),YOLO V3 使用邏輯回歸確定用來預測物體的回歸框。原理如圖1和圖2所示。
圖1 YOLO實現(xiàn)原理1
圖2 YOLO實現(xiàn)原理2
總體上講,YOLO V3網(wǎng)絡結構包括輸入部分、基礎網(wǎng)絡部分、特征融合層。輸入部分要求輸入數(shù)據(jù)為 416×416像素,如果數(shù)據(jù)過大,需要對輸入數(shù)據(jù)進行Resize操作,使之變?yōu)楹线m的尺寸。雖然YOLO V3本身使用的是全卷積層,輸入數(shù)據(jù)和特征圖尺寸的修改都是通過卷積層來實現(xiàn)。但是輸入圖片過大仍然可能影響識別效果的完整性。
基礎網(wǎng)絡部分中YOLO V3采用Darknet-53網(wǎng)絡。該網(wǎng)絡綜合考慮了Darknet-19和ResNet的Residual殘差結構。既增加了網(wǎng)絡的深度,提升了擬合能力,又減小了訓練難度。
Darknet-53 模型結構如圖3所示。
圖3 Darknet-53 模型結構
Darknet-53由BDL組件和5個RES(殘差塊)聯(lián)合構成。由于YOLO V3是全卷積網(wǎng)絡,所以DBL由卷積網(wǎng)絡、歸一化組件BN(Batch Normalize)、激活函數(shù)(LeakyRelu)構建而成[18]。YOLO V3的總網(wǎng)絡一共有75個卷積層,采用深度學習中常用的LeakyReLu作為激活函數(shù),并使用batch normalization對數(shù)據(jù)進行正則化,加速收斂速度,提高了模型的擬合能力,但是模型結構冗長也有產(chǎn)生梯度消失問題的風險。為解決此問題,模型引入了殘差模塊,每個殘差塊中包含若干個殘差單元,殘差塊中包含具體殘差單元的數(shù)量由殘差塊res的n值確定。由于網(wǎng)絡主體是由許多殘差模塊組成,這種結構減小了梯度爆炸風險,很好地加強了網(wǎng)絡的學習能力[19]。
算法允許在速度和準確率之間做出選擇,根據(jù)需要可以選擇側重于速度而犧牲一些準確率或側重準確率而犧牲一些算法效率。從V2版本中使用的darknet-19到V3版本中使用的darknet-53,YOLO版本表現(xiàn)的提升很大程度上取決于backbone網(wǎng)絡性能的提升。
Joseph Redmon實驗表明,在分類準確度與效率平衡上,Darknet-53模型比ResNet-101、 ResNet-152和Darknet-19表現(xiàn)得更好[20]。YOLO V3并沒有那么追求速度,而是在保證實時性(fps>60)的基礎上追求performance。同時,V3提供了可以替換的backbone-tiny darknet。對于注重性能的準確性場景可以使用darknet53,對于注重效率的場景可以選用tiny darknet。 YOLO V3的這種特性使其具有非常好的適應性,適合應用于實際的工程場景[21]。
YOLO檢測算法可以對每一幀進行分析,找到畫面中的各個目標,但在實際交通場景中,大部分監(jiān)控場景都是一個復雜連續(xù)的過程。識別出每個畫面中的物體只是第一步,還要提取物體的靜態(tài)特征,對每個物體進行追蹤,以判斷是否存在違反交通規(guī)則的情況。
算法: 物體重識別算法
輸入: 每幀畫面中物體中心點坐標(xi,yi),特定距離閾值m
輸出: 是否為同一物體
1.計算前后兩幀畫面物體中心點的歐氏距離di;
2.比較di與m,
2.1.若di≤m,則將兩個物體視作前后兩幀畫面中的同一對象。
2.2.否則,
2.2.1.若(xi-1,yi-1)不存在,而(xi,yi)存在,則對于本幀新出現(xiàn)的點記作新的物體;
2.2.2.若(xi-1,yi-1)存在,而(xi,yi)不存在,則對于本幀畫面未能配對的點予以注銷。
在進行物體重識別設計時,主要依據(jù)歐氏距離進行檢測,上一幀和本幀畫面中物體中心點之間的歐氏距離為
di=(xi-1-xi)2+(yi-1-yi)2,
在畫面分析結束后,獲取YOLO的分析結構,將YOLO識別出的物體中心點作為檢測依據(jù),分別比較上一幀畫面和本幀畫面中物體中心點的變化情況:若先后兩個點之間歐氏距離小于特定值,則將兩個物體視作前后兩幀畫面中的同一對象;對于新出現(xiàn)的點記作新的物體;對于上一幀畫面中存在,而本幀畫面未能配對的點予以注銷,算法示意圖如圖4所示。
圖4 物體重識別算法示意圖
在交通管理的場景中,距離檢測運用最為廣泛,通過距離檢測判斷識別車輛與車道線的距離、車輛與行人的距離、車輛與人行道的距離。通過車輛與車道線的距離,可以判斷車輛是否紅燈越線,以及是否有闖紅燈等行為;在車輛與行人的距離判定中,可以判斷車輛的車速,以及車輛是否禮讓行人;根據(jù)車輛與人行道的距離,判斷車輛是否進入或者通過人行道,用車輛與中心線之間的距離來統(tǒng)計車流量。
在判定車輛是否闖紅燈時,首先采用距離算法來判斷車輛具體在哪個車道上,從而得到車道導向,并通過信號燈的識別獲取對應的紅綠燈信息,判斷車輛所在導向是否為紅燈。當為紅燈時,判斷車輛所在位置是否在對面車道線和當前車道線之間,如果是,則判定該車輛闖紅燈。
算法:判定車輛是否闖紅燈
輸入:車道對應的紅綠燈信息
輸出:車輛是否闖紅燈
1.判斷車輛所在導向是否為紅燈,若為紅燈;
1.1判斷車輛所在位置是否在對面車道線和當前車道線之間,若是,輸出車輛闖紅燈;
2.否則,輸出車輛未闖紅燈。
車速計算示意圖如圖5所示。
圖5 車速計算示意圖
測量車速時,利用人行橫道作為參照物,只要利用車輛經(jīng)過人行橫道的時間就可以粗略測量出車輛速度,那么關鍵就集中于如何判斷車輛經(jīng)過人行橫道的時間。車輛未到達人行橫道時,車輛入點與人行橫道下沿之差為正數(shù),在某視頻幀下,此差變?yōu)樨摂?shù)時,則代表車輛經(jīng)過人行橫道下沿,記錄時間點;接下來就是車輛入點與人行橫道上沿進行作差,過程與人行橫道下沿相同,然后記錄時間點;前后兩個時間點作差,就可以得到車輛通過人行橫道的時間,從而可以判斷車輛是否超速。
算法:車輛超速判斷算法
輸入:人行橫道寬度s,人行橫道上沿縱坐標y上,人行橫道下沿縱坐標y下,每幀車輛入點縱坐標yi,限速v限
輸出:車輛是否超速
記錄yi-y下由正變負的時間點t1和yi-y上由負變正變化時的時間點t2;
比較vi與v限,
若vi≤v限,輸出車輛未超速
否則,輸出車輛超速
判斷禮讓行人示意圖如圖6所示。
圖6 判斷禮讓行人示意圖
車輛是否禮讓行人與距離密切相關,通過計算車輛與行人之間的距離判斷行人在人行道上,還是在人行橫道的區(qū)域內(nèi)。人行道的行人無須判斷,而對于在人行橫道上的行人,如果車輛與行人的距離過近,則觸發(fā)車輛未禮讓行人的事件。
車流量計數(shù)示意圖如圖7所示。
圖7 車流量計數(shù)示意圖
車流量計數(shù)是通過判斷車輛點與中心線之間的關系實現(xiàn)的。車輛通過中心線則記錄,無論哪個方向駛來的車輛都會加入車流量計數(shù)的行列。算法方面則是通過判斷當前點是否比中心線縱坐標大或者小來判斷車輛是否通行。如果有小到大或者大到小的變化,則可將車輛加入計數(shù)中。
為了配合YOLO以及其他功能的實現(xiàn),系統(tǒng)整體使用Python語言實現(xiàn)。前臺使用PYQT繪制界面并提供交互,使用OpenCV讀取視頻文件,VideoCapture獲取視頻幀用于分析。系統(tǒng)產(chǎn)生的信息用json格式進行存儲,便于日后的讀取和進一步分析。
系統(tǒng)對路口視頻進行測試的結果如圖8所示。
圖8 視頻分析結果
系統(tǒng)可以正確識別車輛、行人、非機動車、信號燈,模型mAP均值見表2。
表2 各模型mAP均值
繪制車道線后可以識別出車輛壓線、未禮讓行人等違反交通規(guī)則的行為,并將違反交通規(guī)則的瞬間進行取證保存以備查看。
系統(tǒng)將數(shù)據(jù)輸出到主面板的視頻顯示窗口,以及主面板的速度顯示窗口、車速檢測窗口、車流量統(tǒng)計窗口、紅綠燈顯示,違章顯示窗口顯示YOLO前端檢測的車輛、車牌、紅綠燈等信息的數(shù)據(jù)結果,為用戶提供最為直觀的數(shù)據(jù)。
交通場景智能識別是現(xiàn)代智能交通系統(tǒng)重要組成部分。首先對攝像機拍攝的車輛圖像或者視頻圖像進行處理分析,得到每輛車的車牌號碼,從而完成識別過程。文中實現(xiàn)結合基于深度學習的智能交通, 從車輛壓線檢測、距離判斷等方向進行研究, 并根據(jù)實際應用環(huán)境進行具體的分析工作, 對檢測算法與物體重識別算法進行了論述。研究成果能夠幫助管理者實時掌握交通整體運行態(tài)勢,有效地維護道路交通秩序, 特別是交通違規(guī)行為識別,對于實現(xiàn)智慧交通可視化管理具有較強的實用價值。將計算機視覺技術應用于實際工程場景,對于維護交通安全和城市治安,防止交通堵塞,提升道路通行效率有現(xiàn)實意義。