馬永杰, 宋曉鳳
(西北師范大學 物理與電子工程學院,甘肅 蘭州 730070)
車流量檢測是智能交通系統(tǒng)的關(guān)鍵技術(shù),目前熱門的檢測方法是基于大數(shù)據(jù)與機器學習的,但大數(shù)據(jù)需要經(jīng)歷長期的數(shù)據(jù)收集,并需要車輛使用特定的軟件,如滴滴、快的、美國的優(yōu)步等,而機器學習的檢測方法設(shè)備簡單、準確率高,因此成為一個主要的研究方向。
深度學習是一種特殊的機器學習方法,在目標檢測方面比傳統(tǒng)的檢測方法與淺層機器學習模型都有著更高的準確率與更好的檢測結(jié)果。深度學習應(yīng)用深度卷積神經(jīng)網(wǎng)絡(luò)進行大量的有監(jiān)督訓練來獲取圖像中的車輛特征,從而檢測出車輛。2012年AlexNet模型[1]的出現(xiàn)使深度學習獲得了巨大的突破,該模型具有良好的分類優(yōu)勢,但不適合目標檢測;Girshick等人在2013年提出R-CNN[2]方法,可以應(yīng)用于目標檢測,但是檢測速度不夠快;Redmon等人在2016年提出You Only Look Once[3](YOLO)對象檢測方法,在高性能GPU上達到了實時檢測,但是準確度不高;2017年Redmon等人在改進YOLO后提出YOLO v2[4],又在2018年在YOLO v2基礎(chǔ)上再次改進提出YOLO v3[5]。
由于嵌入式系統(tǒng)的便攜性和低功耗,基于嵌入式系統(tǒng)的車輛檢測應(yīng)用也越來越廣泛,如自動駕駛、無人機、智能機器人、軍事等領(lǐng)域[6]。但大多數(shù)嵌入式設(shè)備可用的計算資源受限于低功率的嵌入式GPU或有限存儲器的嵌入式CPU,因此,要在嵌入式設(shè)備上實現(xiàn)車流量的實時檢測仍然是一個很大的挑戰(zhàn)[7],而基于深度學習的嵌入式車流量檢測方法更具研究價值。
本文在RK3399嵌入式芯片上用深度學習算法YOLO v2檢測車輛,并用核相關(guān)濾波器(KCF)跟蹤車輛,提高了車輛自動統(tǒng)計的準確度,成功地實現(xiàn)了車流量的檢測。
雖然深度學習框架也可以移植到嵌入式上進行訓練,但是嵌入式的CPU與GPU不適合訓練模型,若能準確地檢測出目標才具有更大的應(yīng)用價值。本文基于嵌入式的車流量檢測算法主要依賴OpenCV實現(xiàn),由4部分組成:車輛檢測算法、感興趣區(qū)域、計數(shù)、跟蹤算法。檢測算法需要準確的檢測出車輛,并準確地對汽車與其它目標分類。本文通過OpenCV 3.4.3的函數(shù)使用YOLO v2,在每個車道單獨設(shè)置感興趣區(qū)域,只在感興趣區(qū)域中顯示出YOLO v2的檢測結(jié)果,并進行車輛的跟蹤與計數(shù),在YOLO v2檢測出汽車時計數(shù)才會改變。而跟蹤算法能保證同一輛車在連續(xù)的幾幀內(nèi)駛不出感興趣區(qū)域時,不會被重復計數(shù),故準確地計數(shù)需要檢測的準確與跟蹤的準確。
在獲取圖像后先進行圖像的灰度化處理,然后用YOLO v2進行檢測車輛。YOLO在輸入的圖像中回歸預測目標[8],有效緩解了R-CNN的計算復雜度,并且比R-CNN有著更顯著的速度優(yōu)勢,但檢測精度方面明顯低于R-CNN。YOLO v2與YOLO相比,網(wǎng)絡(luò)架構(gòu)中沒有完全的連接層。YOLO v2在特征圖上用滑窗進行采樣,在每個滑窗中心應(yīng)用k-means聚類訓練預測出不同比例的預測框,這樣提高了建模精度,也使得網(wǎng)絡(luò)的訓練過程更加容易。YOLO v2使用CNN網(wǎng)絡(luò)架構(gòu)Darknet-19。Darknet-19包含19個卷積層和5個最大值池化層[9],需要85.2億浮點運算,可以在Nvidia Titan-X GPU上以67 f/s進行物體檢測。
.
(1)
故在統(tǒng)計車輛數(shù)時,只需要統(tǒng)計出檢測出來的car類、bus類、truck類的個數(shù)就行,然后使用跟蹤算法避免同一輛車重復計數(shù)。跟蹤目標由YOLO v2的目標預測框框定。目標預測框b的中心點坐標用(bx,by)表示,寬高為bw、bh。對應(yīng)圖像網(wǎng)格左上角坐標為(cx,cy)。σ(tx)、σ(ty)是預測框的中心相對柵格左上角的橫坐標、縱坐標,pw與ph是邊界框的寬度與高度,etw與eth為橫縱方向上的縮放因子[10]。bx、by、bw、bh如式(2)所示:
bx=σ(tx)+cx
by=σ(ty)+cy
bw=pwetw
bh=pheth
.
(2)
將目標預測框的左下頂點坐標(xlb,ylb)與右上頂點坐標(xrt,yrt)傳遞給跟蹤算法,頂點坐標的計算由式(3)給出:
(3)
根據(jù)車輛的速度與攝像機的角度,對每個車道單獨設(shè)置感興趣區(qū)域(ROI)。使目標的中心在經(jīng)過ROI時正好落在ROI中,但感興趣區(qū)域又要足夠的狹窄,使目標在下一幀時盡可能地駛出ROI。設(shè)ROI左下頂點坐標為(xrlb,yrlb),右上頂點坐標為(xrrt,yrrt),在中心位置滿足式(4)時,YOLO v2在檢測出car類、bus類、truck類3類時計數(shù)加1:
(4)
為了避免車速太慢行駛不出感興趣區(qū)域而重復計數(shù),應(yīng)用核相關(guān)濾波器(KCF)對車輛進行跟蹤。KCF跟蹤算法基于嶺回歸函數(shù),利用循環(huán)矩陣在目標區(qū)域設(shè)置采樣窗口進行循環(huán)移位,使樣本具有循環(huán)特性,再使用循環(huán)矩陣訓練分類器,這樣可減少存儲與計算量[11-13]。但是KCF在跟蹤目標時在嚴重遮擋、尺度變化、相似目標干擾時會出現(xiàn)跟蹤失敗的情況,而不能進行長期目標跟蹤。本文將感興趣區(qū)域設(shè)置的更狹窄,從而也可避免長期跟蹤。在檢測車輛的中心進入感興趣區(qū)域前的一段位置時,對KCF進行初始化,即將前一輛目標的跟蹤信息去除,這個值kint根據(jù)視頻中的車速確定。初始化的區(qū)域如式(5)所示:
(5)
圖1是本文基于RK3399開發(fā)的檢測系統(tǒng)框圖。RK3399有6個內(nèi)核,分別為2個ARM Cortex-A72核和4個ARM Cortex-A53核,GPU采用四核ARM高端圖像處理器Mali-T860。算法在ARM上的調(diào)用需求與PC一樣,需要操作系統(tǒng)與軟件,操作系統(tǒng)的搭建需移植U-boot、ARM-Linux內(nèi)核、文件系統(tǒng),軟件需要交叉編譯OpenCV與Qt。本文ARM平臺所用軟件為:交叉編譯器aarch64-linux-gnu、Qt 5.6.1、OpenCV 3.4.3。
圖1 檢測系統(tǒng)框圖Fig.1 Detection system block diagram
在OpenCV交叉編譯時,在cmake-gui中選擇dnn模塊才能調(diào)用YOLO v2。dnn模塊的編譯依賴protobuf。使用OpenCV的KCF等跟蹤算法需要opencv_contrib,在cmake-gui中需要設(shè)置OPENCV_EXTRA_MODULES_PATH。嵌入式的存儲空間有限,可以將不需要的模塊不進行編譯。本文在cmake-gui的WITH中勾選了FFMPEG、JPEG、PNG、PROTOBUF、V4L。
系統(tǒng)環(huán)境就緒后,進行算法程序的移植,根據(jù)車輛的數(shù)據(jù)特征設(shè)置網(wǎng)絡(luò)配置文件,先在PC機上訓練好網(wǎng)絡(luò),之后將yolov2.cfg、coco.names、yolov2.weights文件移植到ARM上。
最后,將算法程序、圖形界面設(shè)計程序放在同一文件夾中,設(shè)置前面交叉編譯成功的共享庫路徑,交叉編譯生成RK3399上的可執(zhí)行程序,并將可執(zhí)行程序移植到RK3399上。
圖2是系統(tǒng)測試示意圖,液晶屏左側(cè)顯示的是檢測的情況,其中3個小矩形框為感興趣區(qū)域,2個大矩形框為YOLO v2的檢測結(jié)果,液晶屏右側(cè)是檢測的統(tǒng)計信息,分別為幀數(shù)、車輛數(shù)、日期。
圖2 系統(tǒng)測試Fig.2 System test
表1是各方法在RK3399上檢測一幀圖像所用的時間,其中YOLO v2檢測是將文獻[14]中的車輛檢測算法改成YOLO v2,跟蹤與計數(shù)方法不變。
表2所示是本文算法與文獻[14]中的算法在檢測相同視頻時的數(shù)據(jù)。漏檢是指有車輛目標卻沒有檢測出車輛,誤檢是指將其它物體檢測成車輛,多計是指將同輛車多次計數(shù)。
表1 RK3399上各方法檢測時間Tab.1 Real-time detection execution time
表2 兩種檢測算法的測試Tab.2 Test of two detection algorithms
實驗結(jié)果的分析表明,算法的漏檢來自YOLO v2會將車輛誤檢成其他物體或在ROI中無法檢測出車輛,而多計是因為跟蹤算法在攝像機的位置保持不變時,車輛靠近或遠離攝像機時,會造成目標的尺度變化而將目標跟丟,在再次檢測到同輛車時而被認為是不同車輛,造成重復計數(shù)。
圖3是本文算法檢測與跟蹤效果,在13 949幀時公共汽車還未進入分布在道路上窄矩形框的ROI中,在第13 951幀時公共汽車檢測到bus,并用白色矩形框出,計數(shù)加1,在后面的13 952到13 958幀bus被跟蹤,灰色方框表示跟蹤的結(jié)果,此時計數(shù)不變,到第13 959幀時bus駛出ROI。
圖3 本文算法檢測與跟蹤效果Fig.3 Algorithm detection and tracking effect
本文將深度學習算法YOLO v2引入混合交通的車流量檢測中,通過設(shè)置感興趣區(qū)域(ROI)、在車輛目標經(jīng)過ROI時計數(shù)、用核相關(guān)濾波器(KCF)跟蹤車輛實現(xiàn)混合交通中的車流量檢測,并在嵌入式平臺RK3399上實現(xiàn)了該算法。實驗結(jié)果表明,采用本文方法在RK3399上YOLO v2能成功地檢測出車輛,KCF跟蹤算法能在ROI中跟蹤車輛保證計數(shù)的準確。雖然YOLO v2在Nvidia Titan-X GPU上可達到實時檢測,但在RK3399上算法還需要較長的檢測時間,未來需要進一步調(diào)高算法的檢測速度,以實現(xiàn)基于嵌入式和深度學習的車流量的實時檢測。