宋煥生,李 瑩,楊 瑾,云 旭,張 韞,解 熠
1(長安大學(xué) 信息工程學(xué)院,西安 710064)
2(陜西省交通建設(shè)集團公司,西安 710064)
隨著社會經(jīng)濟飛速發(fā)展,交通運輸對我國經(jīng)濟和社會發(fā)展有著重要的促進作用.智能交通系統(tǒng)(Intelligent Transportation Systems,ITS)作為一個綜合的交通監(jiān)控管理系統(tǒng),道路交通信息則是必不可少的前提和內(nèi)容[1].因此,基于視頻的交通信息獲取成為智能交通系統(tǒng)的核心.高速公路作為當(dāng)前道路的主要交通方式,基于當(dāng)前大量的高速公路視頻監(jiān)控設(shè)備,通過對視頻圖像進行處理與分析,實現(xiàn)車輛目標(biāo)的檢測與跟蹤,從而獲取道路交通信息,自動地對高速公路場景進行監(jiān)控監(jiān)測,實現(xiàn)交通管理的智能化.但是,高精度的車輛目標(biāo)檢測與跟蹤仍是智能交通系統(tǒng)的一個難點.
傳統(tǒng)的目標(biāo)檢測算法包括:幀差法[2]、背景差分法[3]、光流法[4]等.但是,當(dāng)目標(biāo)運動緩慢時,幀差法易將運動目標(biāo)當(dāng)做背景圖像造成目標(biāo)檢測失敗;背景差分法是對背景進行建模得到前景的運動目標(biāo),受外界光照的變化,背景運動等因素的影響;光流法采用光流信息描述目標(biāo),Meye 等提出了基于輪廓的目標(biāo)檢測跟蹤算法,實現(xiàn)了較好的檢測跟蹤效果,但該方法存在抗噪能力差,計算復(fù)雜,對硬件要求高等缺點.基于深度學(xué)習(xí)的目標(biāo)檢測算法與傳統(tǒng)算法相比擁有更高的檢測精度,其主要運用卷積神經(jīng)網(wǎng)絡(luò)CNN[5].目前基于深度學(xué)習(xí)的目標(biāo)檢測主流算法有,基于區(qū)域建議的檢測算法Fast R-CNN[6]和基于回歸的檢測算法YOLO[7]、SSD[8].
針對目標(biāo)跟蹤,跟蹤預(yù)測算法本質(zhì)上是通過提取已檢測目標(biāo)的特征信息,在后續(xù)圖像序列中搜索定位與目標(biāo)模板相似的區(qū)域作為候選位置.目標(biāo)特征的提取的一種方式是提取特征點,然后利用特征點進行目標(biāo)匹配的重定位.常用的特征點提取方式有Harris[9]角點檢測、SIFT[10]算子特征點檢測,基于特征點的匹配能夠適應(yīng)目標(biāo)的旋轉(zhuǎn)和光照變化,但是特征點提取過多導(dǎo)致匹配困難,特征點過少又容易造成誤檢,而且特征點提取過程計算復(fù)雜,耗時嚴(yán)重.另一種方式是對目標(biāo)整體描述,常用到的目標(biāo)特征包括圖像邊緣、形狀、紋理,顏色直方圖統(tǒng)計特征等,通過融合多個特征增強目標(biāo)特征的可靠性.對目標(biāo)進行特征提取之后,采用相似性度量方式進行目標(biāo)重定位,實現(xiàn)目標(biāo)跟蹤.基于特征的跟蹤算法對運動目標(biāo)的尺度、形變和亮度等變化不敏感,即使目標(biāo)部分被遮擋,還能夠根據(jù)部分特征信息完成跟蹤任務(wù).但是其對于圖像模糊、噪聲等較敏感,特征的提取效果也依賴于各種提取算子及其參數(shù)的設(shè)置.
因此本文采用基于深度學(xué)習(xí)的SSD 目標(biāo)檢測算法,通過數(shù)據(jù)集訓(xùn)練得到適應(yīng)高速公路場景的模型,實現(xiàn)高精確度的車輛目標(biāo)檢測.在目標(biāo)檢測結(jié)果的基礎(chǔ)上,本文提出了一種目標(biāo)軌跡時序信息結(jié)合KCF[11]算法的車輛目標(biāo)跟蹤方法,實現(xiàn)車輛目標(biāo)的持續(xù)跟蹤,具有較好的應(yīng)用價值.
目前,多目標(biāo)跟蹤有兩種解決方案.方案一:對視頻序列的每一幀進行運動目標(biāo)檢測,基于相鄰幀間的檢測結(jié)果完成運動目標(biāo)軌跡連接,獲取運動目標(biāo)信息.方案二:在初始幀對目標(biāo)進行檢測得到有效描述,然后在后續(xù)圖像序列中查找與已檢測目標(biāo)相匹配的目標(biāo)區(qū)域,最終跟蹤得到運動目標(biāo)軌跡.
為了實現(xiàn)高速公路場景下的高精準(zhǔn)檢測和車輛持續(xù)跟蹤,本文將上述兩種方案相結(jié)合,提出了一種面向高速公路場景車輛目標(biāo)檢測及跟蹤方法,實現(xiàn)了車輛目標(biāo)的持續(xù)跟蹤.高速公路場景下車輛目標(biāo)的跟蹤,分兩大模塊,一是目標(biāo)車輛檢測,二是目標(biāo)跟蹤.目標(biāo)車輛檢測采用基于深度學(xué)習(xí)的SSD (Single ShotMultiBox Detector)目標(biāo)檢測算法,目標(biāo)的持續(xù)跟蹤首先利用軌跡時序信息進行數(shù)據(jù)關(guān)聯(lián),然后結(jié)合KCF 算法校正斷開軌跡.如圖1是面向高速公路場景下的車輛目標(biāo)跟蹤過程的總體框架.
本文采用基于深度學(xué)習(xí)的SSD 目標(biāo)檢測算法,其網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示.其中使用VGG16[12]作為基礎(chǔ)網(wǎng)絡(luò),該網(wǎng)絡(luò)包括16 層,網(wǎng)絡(luò)模型如圖3所示,SSD 在VGG16 的基礎(chǔ)上添加了特征提取層.具體的SDD 算法請參考文獻[8]中劉偉等人的工作.
為了更適用高速公路場景下的車輛目標(biāo)檢測,本文將SSD 的檢測類別由原來的20 種改為4 種,并參考國內(nèi)標(biāo)準(zhǔn)的車型分類手冊[13],將車輛目標(biāo)分為三類:小車(Car)、客車(Bus)、卡車(Truck),如圖4為車型類別的樣本示例圖.本文以杭金衢高速公路的監(jiān)控視頻作為樣本,針對4 種不同場景下的視頻每75 幀提取一幀作為本文的訓(xùn)練樣本集,總計提取6288 張圖片,并通過LamImage 工具對目標(biāo)車輛進行位置標(biāo)注,對類別用標(biāo)簽進行區(qū)分,得到6288 個標(biāo)注文件.其標(biāo)注工具如圖5所示,生成的標(biāo)簽文件如圖6所示.
本文的輸入網(wǎng)絡(luò)圖像大小為512×512,訓(xùn)練迭代次數(shù)設(shè)置為12 000 次,根據(jù)本實驗的GPU 的性能將BatchSize 設(shè)置為4,訓(xùn)練學(xué)習(xí)率LearningRate 設(shè)置為0.004×0.05,然后將制作好的數(shù)據(jù)集輸入SSD 網(wǎng)絡(luò)進行訓(xùn)練,其中網(wǎng)絡(luò)訓(xùn)練過程的Loss 曲線圖如7 所示,Loss 隨著迭代次數(shù)的增加逐漸降低并趨于穩(wěn)定,說明達到了訓(xùn)練的收斂要求,即得到適合高速公路場景的網(wǎng)絡(luò)模型.
圖1 車輛目標(biāo)跟蹤過程的總體框架
圖2 SSD 網(wǎng)絡(luò)結(jié)構(gòu)
圖3 VGG16 網(wǎng)絡(luò)模型及每層的輸出
圖4 車型類別的樣本示例
圖5 LabelImg 圖像標(biāo)注工具
圖6 LabImage 生成的標(biāo)簽文件
圖7 網(wǎng)絡(luò)訓(xùn)練過程的Loss 曲線
在檢測結(jié)果的基礎(chǔ)上,需要通過數(shù)據(jù)關(guān)聯(lián)方式將同一目標(biāo)車輛連接起來形成軌跡.高速公路場景下的高幀率(一般為25 FPS)監(jiān)控視頻,在相鄰幀中同一個車輛目標(biāo)具有明顯的高重疊面積IOU (Intersection-Over-Union)[14].如圖8是實際場景中連續(xù)幀間的目標(biāo)位置.
圖8 高幀率下目標(biāo)高重疊面積圖
本文提出了一個簡單的IOU 跟蹤器,計算當(dāng)前幀的檢測目標(biāo)框與現(xiàn)有軌跡的IOU 匹配值Overlap(box1,box2).由于高速公路場景下車輛目標(biāo)之間存在相互遮擋,幀間相互遮擋的目標(biāo)IOU 匹配值只有在一定范圍有效,本文將有效范圍設(shè)置為[0.6,1].其中,IOU 匹配值的定義如式(1)所示.
其中,box1 和box2 是兩個目標(biāo)檢測框,Area(box1),Area(box2)是其對應(yīng)的圖像面積大小.
在高速公路場景下,由于光照、遮擋、相機架設(shè)位置等因素的影響,即使是SSD 算法,也不能達到100%的檢測精度,為了實現(xiàn)目標(biāo)軌跡的持續(xù)跟蹤,當(dāng)目標(biāo)檢測丟失時,需要通過跟蹤預(yù)測算法完成軌跡信息的校正,從而得到完整的軌跡信息.
本文利用KCF 跟蹤算法對目標(biāo)車輛進行位置預(yù)測,完成對目標(biāo)軌跡的校正.KCF 跟蹤算法是通過提取目標(biāo)的HOG[15]特征在目標(biāo)跟蹤過程中訓(xùn)練一個目標(biāo)檢測器,利用目標(biāo)檢測器在下一幀圖像中判別預(yù)測位置是否是目標(biāo),然后再用新檢測結(jié)果更新目標(biāo)檢測器.具體的KCF 原理過程參考文獻[12].KCF 目標(biāo)跟蹤的基本過程如下:
1)在第t幀中,在當(dāng)前目標(biāo)位置p附近進行采樣,并且采用循環(huán)矩陣增加正負訓(xùn)練樣本,利用脊回歸訓(xùn)練目標(biāo)檢測器.
2)在第t+1 幀中,在前一幀位置p附近進行采樣,用訓(xùn)練的目標(biāo)分類器計算每一個采樣對應(yīng)的響應(yīng)值.
3)響應(yīng)最強的采樣作為第t+1 幀的目標(biāo)位置.
基于SSD 的車輛目標(biāo)檢測結(jié)果,一個車輛目標(biāo)從首次檢測到跟蹤形成一條有效軌跡的過程中,目標(biāo)車輛的狀態(tài)轉(zhuǎn)換過程如圖9所示的目標(biāo)跟蹤模塊.
1)目標(biāo)激活:當(dāng)一個目標(biāo)首次被檢測到,即該目標(biāo)被激活.新目標(biāo)的初始位置框boxi,t(i表示當(dāng)前幀的檢測序號,t表示當(dāng)前處理的幀號)作為一條新軌跡形成的初始位置,新軌跡表示為traceI,t(I表示軌跡的唯一標(biāo)識ID).與此同時,為該軌跡建立一個KCF 跟蹤器trackerBoxI,t+1,目的是為了防止后續(xù)目標(biāo)丟失時,對目標(biāo)能夠進行位置預(yù)測.
一個處于激活狀態(tài)的目標(biāo)可以經(jīng)s1 轉(zhuǎn)換成跟蹤和經(jīng)s7 轉(zhuǎn)換到離開兩種狀態(tài).實際過程中不可避免的會出現(xiàn)錯誤的目標(biāo)檢測結(jié)果,但是由于誤檢目標(biāo)并不能持續(xù)地被檢測跟蹤,所以本文設(shè)定閾值,如果一個目標(biāo)處于激活狀態(tài),連續(xù)5 幀被檢測且匹配跟蹤時,目標(biāo)轉(zhuǎn)換到跟蹤狀態(tài),否則,該目標(biāo)就被認(rèn)為是錯誤的檢測目標(biāo),狀態(tài)轉(zhuǎn)換為離開,與之對應(yīng)的軌跡也被刪除.
2)目標(biāo)跟蹤:在第t+1 幀檢測得到boxi,t+1,軌跡traceI,t基于其時序信息與當(dāng)前檢測框計算得到匹配代價表.如果某條軌跡traceI,t與某目標(biāo)框boxi,t滿足式(1)的范圍取值時,則表示兩者匹配成功,目標(biāo)經(jīng)時轉(zhuǎn)換到跟蹤狀態(tài),得到更新軌跡traceI,t+1.如果軌跡未匹配到目標(biāo)框,則該軌跡目標(biāo)經(jīng)s3 進入丟失狀態(tài).如果該目標(biāo)未匹配到軌跡,則該目標(biāo)是一個新的目標(biāo),經(jīng)s0 進入目標(biāo)激活狀態(tài).
3)目標(biāo)丟失:理想情況下,一個目標(biāo)不離開場景時會一直保持跟蹤狀態(tài)時,但是由于光照,遮擋等原因目標(biāo)可能未被檢測到,此時軌跡traceI,t找不到與之匹配到目標(biāo)boxi,t+1,則該軌跡目標(biāo)轉(zhuǎn)換到丟失狀態(tài).當(dāng)該目標(biāo)再次被檢測到時,目標(biāo)可以從丟失狀態(tài)經(jīng)s4 過程重新回到跟蹤狀態(tài).當(dāng)目標(biāo)處于丟失狀態(tài)時,本文采用KCF 目標(biāo)跟蹤算法,在當(dāng)前幀為軌跡目標(biāo)預(yù)測新位置trackerBoxI,t+1,并將預(yù)測位置添加到軌跡中.
在本文中,當(dāng)一個新目標(biāo)被激活時,為該目標(biāo)初始化一個跟蹤器,在跟蹤過程中訓(xùn)練一個目標(biāo)檢測器,并且通過不斷地更新提高目標(biāo)檢測器的準(zhǔn)確性,但是當(dāng)目標(biāo)運動過程中形態(tài)尺度發(fā)生變化時,檢測器的更新過程會造成不斷地錯誤累積,導(dǎo)致目標(biāo)漂移,跟蹤失敗.為了適應(yīng)目標(biāo)的變化,每25 幀重新初始化一次模板,適應(yīng)目標(biāo)的變化.
4)目標(biāo)離開:目標(biāo)轉(zhuǎn)換到離開狀態(tài)的情況分三種:
① 目標(biāo)離開運動場景時,目標(biāo)既不會被檢測到也不再進行KCF 的預(yù)測操作,目標(biāo)將從跟蹤狀態(tài)先經(jīng)s3 轉(zhuǎn)到丟失狀態(tài),再經(jīng)s5 轉(zhuǎn)換到離開狀態(tài);
② 目標(biāo)被激活但是不滿足連續(xù)5 幀被檢測跟蹤,被認(rèn)定為錯誤目標(biāo),目標(biāo)從激活狀態(tài)轉(zhuǎn)換到離開狀態(tài);
③ 當(dāng)一條軌跡目標(biāo)連續(xù)40 幀一直處于丟失狀態(tài),即軌跡目標(biāo)一致處于s6 的轉(zhuǎn)換過程,則認(rèn)為該目標(biāo)離開.
圖9 目標(biāo)跟蹤模塊狀態(tài)轉(zhuǎn)換
步驟一:車輛目標(biāo)檢測.將視頻幀序列送入訓(xùn)練好的SSD 網(wǎng)絡(luò)模型進行目標(biāo)檢測.
步驟二:對目標(biāo)軌跡進行跟蹤,建立匹配代價表.
1)若檢測目標(biāo)與軌跡匹配成功,更新軌跡;
2)若跟蹤態(tài)軌跡未匹配到檢測目標(biāo),KCF 預(yù)測目標(biāo)位置,更新軌跡;
3)若檢測目標(biāo)未匹配到軌跡,記為激活態(tài)軌跡;
4)激活態(tài)軌跡連續(xù)5 幀跟蹤成功,確認(rèn)更新為跟蹤態(tài)軌跡;
5)若軌跡滿足2.4 小節(jié)中目標(biāo)離開的3 個條件之一,則刪除軌跡.
步驟三:重復(fù)步驟一、二.對車輛目標(biāo)進行持續(xù)跟蹤.
本文實驗所采用的視頻是杭金衢高速(G60 國道)的不同時間和不同路段的監(jiān)控視頻.表1是本文實驗的四種不同場景.
表1 四種不同實驗場景
為了驗證SSD 檢測算法的精確度,本實驗針對場景1 和場景2 將其與傳統(tǒng)的背景建模檢測算法相比較,得到表2.通過對比發(fā)現(xiàn),背景建模檢測算法的精度均低于90%,,而基于深度學(xué)習(xí)的SSD 檢測算法相較于具有更高的精度,實驗結(jié)果顯示平均檢測精度在95%左右.
表2 SSD 檢測算法與傳統(tǒng)的背景建模檢測算法的精度分析
本實驗將K C F 跟蹤算法與傳統(tǒng)卡爾曼濾波Kalman 跟蹤算法進行比較,為了公平起見,我們針對同一場景同一時間段的車輛目標(biāo)進行跟蹤分析.如圖10(a)和10(b)是兩種跟蹤算法的實驗結(jié)果.
圖10 (a)卡爾曼濾波Kalman 跟蹤 (b)核相關(guān)濾波KCF 跟蹤
從結(jié)果可以看出,雖然兩種跟蹤算法都能將目標(biāo)位置鎖定,但是Kalman 算法得到的跟蹤框位置明顯存在較大誤差,而KCF 算法能夠更加精確地鎖定目標(biāo)位置,同時也能從上圖發(fā)現(xiàn),即使存在部分遮擋的情況下,KCF 算法也可以實現(xiàn)跟蹤.
以上本文單獨針對目標(biāo)檢測和目標(biāo)跟蹤做了實驗對比分析,為了驗證本文算法的整體精度,針對場景1、2、3 本文通過對軌跡條數(shù)進行統(tǒng)計分析,并且將其與實際人工檢測的數(shù)據(jù)進行對比,得到表3.本文利用簡單的切面檢測線方式進行統(tǒng)計計數(shù),精度平均可以達到96.3%.其中小車(Car)類型的平均檢測精度95.6%,卡車(Truck)類型的平均檢測精度97.1%,客車(Bus)類型的平均檢測精度95.9%.小車精度較低原因在于高速公路場景中,小車(Car)目標(biāo)小,容易被遮擋,當(dāng)小車目標(biāo)是黑色時容易漏檢.從整體的檢測跟蹤精度來分析,本文的方法滿足實際高速公路場景的應(yīng)用需求.
表3 軌跡計數(shù)精度分析
通過實驗發(fā)現(xiàn)利用基于深度學(xué)習(xí)的SSD 目標(biāo)檢測算法,可以獲得了高精度的目標(biāo)檢測結(jié)果.其次,采用檢測與跟蹤相結(jié)合的思想,利用軌跡時序信息進行車輛目標(biāo)的數(shù)據(jù)關(guān)聯(lián),采用KCF 跟蹤算法對丟失檢測結(jié)果的軌跡進行校正,能夠有效完成軌跡的持續(xù)跟蹤.實驗表明,該車輛目標(biāo)跟蹤方法具有較高精度,并且能夠適應(yīng)各種實際高速公路場景,接下來為了達到實時化的檢測跟蹤效果,需要針對深度學(xué)習(xí)檢測方法進行優(yōu)化使其速度更快,此外,可以通過已得到的軌跡信息完成交通參數(shù)的獲取,交通事件的實時監(jiān)測,對于智能交通領(lǐng)域具有廣泛的應(yīng)用前景.