許喜斌 趙小蕾
(1.廣東工程職業(yè)技術(shù)學(xué)院 廣州 510520)(2.中山大學(xué)新華學(xué)院 廣州 510520)
在視頻監(jiān)控系統(tǒng)中,行人運(yùn)動(dòng)目標(biāo)的跟蹤是重要的環(huán)節(jié),無(wú)論是在商業(yè)、小區(qū)安全,還是軍事保密等方面有著極大的需求[1]。其中早期檢測(cè)技術(shù)主要以靜態(tài)圖像處理中的分割、邊緣提取、運(yùn)動(dòng)檢測(cè)等為主,例如以Gavrila 為代表的全局模板方法、Broggi 為代表的局部模板方法、Lipton 為代表的光流檢測(cè)方法、Heisele 為代表的運(yùn)動(dòng)檢測(cè)方法、Wohler為代表的神經(jīng)網(wǎng)絡(luò)方法等,所以行人檢測(cè)的主要方法就是基于背景建模方法和基于統(tǒng)計(jì)學(xué)習(xí)的方法,而跟蹤方法就比較豐富,有基于算法進(jìn)行改進(jìn),也有基于硬件設(shè)備進(jìn)行跟蹤。
文獻(xiàn)[2]是法國(guó)研究員Navneet Dalal 和Bill Triggs 提出的HOG+SVM 行人檢測(cè)算法,該算法利用Hog 進(jìn)行特征提取,利用線性SVM 作為分類(lèi)器,實(shí)現(xiàn)行人檢測(cè),該方法的速度和效果綜合平衡性能較好;文獻(xiàn)[3]提出一種基于人體特征識(shí)別和卡爾曼濾波的行人跟蹤算法,主要基于人體體型特征和行為姿態(tài)特征的識(shí)別方法來(lái)自動(dòng)識(shí)別行人,該算法提高了行人檢測(cè)識(shí)別及跟蹤精度;文獻(xiàn)[4]利用Jetson TK1嵌入式設(shè)備和深度卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行行人檢測(cè),具有較高的識(shí)別率和快速的檢測(cè)速度;文獻(xiàn)[5]利用支持向量機(jī)(SVM)檢測(cè)的粒子濾波改進(jìn)跟蹤算法,有效降低PF 所需粒子數(shù),實(shí)現(xiàn)實(shí)時(shí)跟蹤;文獻(xiàn)[6]是基于Mean-Shift 算法的基礎(chǔ)上,將顏色直方圖個(gè)三重幀間差分相結(jié)合的跟蹤方法,有效地對(duì)目標(biāo)進(jìn)行準(zhǔn)確定位跟蹤。文獻(xiàn)[7]利用檢測(cè)階段的行人運(yùn)動(dòng)二值化差分圖,結(jié)合水平融合值、垂直融合值及其他符合融合要求的非連通區(qū)域形成一個(gè)新的矩形框,并以新矩形框及其中心作為行人的位置特征進(jìn)行行人檢測(cè)與跟蹤,取得了較高的準(zhǔn)確率。文獻(xiàn)[8]利用核函數(shù)對(duì)正則化最小二乘分類(lèi)器求解獲得核相關(guān)濾波器計(jì)算特征響應(yīng)圖,根據(jù)響應(yīng)圖的最大值和振蕩程度判斷目標(biāo)是否被遮擋,再通過(guò)更新學(xué)習(xí)目標(biāo)的外觀模型和尺度模型,實(shí)現(xiàn)自適應(yīng)目標(biāo)跟蹤。這些算法在行人運(yùn)動(dòng)跟蹤方面都具有實(shí)時(shí)性,準(zhǔn)確性,但是抗遮擋能力較弱,且運(yùn)算能力較差。本文先利用Jetson TK1平臺(tái)基于CUDA編程模式的GPU 進(jìn)行加速,提升運(yùn)算速度,再進(jìn)行KCF算法的改進(jìn)增強(qiáng)算法的抗遮擋性,實(shí)現(xiàn)行人運(yùn)動(dòng)跟蹤目的。
KCF(Kernelized Correlation Filters)就是核相關(guān)濾波器方法,KCF是建立在相關(guān)濾波跟蹤算法的框架上,具備該框架的極快跟蹤速度的優(yōu)點(diǎn),還極大的提高了跟蹤精度[9],該方法通過(guò)循環(huán)偏移圖像矩陣構(gòu)建出了分類(lèi)器的訓(xùn)練樣本,中間位置是正樣本,周邊區(qū)域是負(fù)樣本,使得數(shù)據(jù)矩陣變成了循環(huán)矩陣,再通過(guò)簡(jiǎn)化循環(huán)矩陣計(jì)算就把基于循環(huán)矩陣特性的問(wèn)題求解,從FFT快速傅里葉變換轉(zhuǎn)換到頻域,避免矩陣求逆過(guò)程,大大降低算法復(fù)雜度,使得算法引入核函數(shù)后仍能保持高速度的跟蹤。
KCF 算法對(duì)跟蹤問(wèn)題的解決其實(shí)就是對(duì)線性回歸模型的求解,樣本的訓(xùn)練就是求解嶺回歸的問(wèn)題。其中,目標(biāo)圖像為z,權(quán)重為w,因此可得到目標(biāo)函數(shù):
假設(shè)映射函數(shù)為φ(x),嶺回歸函數(shù)為f(xi)=wTφ(xi),這時(shí)得到的權(quán)重系數(shù)為
令向量α導(dǎo)數(shù)為0,求解可得:
式(4)中φ(x)φ(x)T為核矩陣,令K 表示核空間的核矩陣,即K=φ(x)φ(x)T,則α=(K+λI)-1y,由于K 為循環(huán)矩陣,故因此可得:
在進(jìn)行目標(biāo)檢測(cè)的時(shí)候,通常都是讓回歸函數(shù)在圖像上的多個(gè)位置進(jìn)行評(píng)價(jià),或是評(píng)估多個(gè)候選圖像塊,候選圖像可用循環(huán)位移進(jìn)行建模,較少在孤立的圖像上使用回歸函數(shù)評(píng)估,且計(jì)算公式如下:
式(6)中k(z,xi)為核函數(shù),令訓(xùn)練樣本和候選圖像塊之間的核矩陣為KZ,且由文獻(xiàn)[10]中的定理1 可得KZ是循環(huán)矩陣,故Kz=C(kxz),根據(jù)循環(huán)矩陣特性[11],將帶入式(6)中,可得:
故KCF算法目標(biāo)跟蹤流程如圖1所示。
圖1 KCF算法流程圖
基于Jetson TK1 平臺(tái)的行人運(yùn)動(dòng)目標(biāo)跟蹤系統(tǒng)主要由兩部分組成,分別為硬件平臺(tái)部分和軟件算法部分,硬件平臺(tái)是整個(gè)系統(tǒng)的運(yùn)作基礎(chǔ)和動(dòng)力,先從攝像頭獲取監(jiān)控區(qū)域的行人運(yùn)動(dòng)圖像,并把圖像信息傳送到軟件算法層進(jìn)行處理。軟件算法層通過(guò)OpenCV 計(jì)算機(jī)視覺(jué)和圖像處理功能和改進(jìn)的KCF 算法實(shí)現(xiàn)對(duì)行人的跟蹤功能。硬件部分由Jetson TK1 平臺(tái)作為主要部塊,USB Camera 采集圖像數(shù)據(jù)部分;軟件部分由OpenCV[12]作為主要支撐軟件。
Jetson TK1 平臺(tái)的行人運(yùn)動(dòng)目標(biāo)跟蹤系統(tǒng)以Jetson TK1 為主,其中 NVIDIA Jetson TK1[13]全球首款針對(duì)嵌入式系統(tǒng)的是移動(dòng)超級(jí)計(jì)算機(jī),該平臺(tái)的核心是基于NVIDIA Kepler?架構(gòu)的192 核超級(jí)芯片:小巧的Tegra K1 移動(dòng)處理器,平臺(tái)的參數(shù)及搭建,如表1所示。
表1 JetsonTK1平臺(tái)主要參數(shù)
該系統(tǒng)總共由三個(gè)部分構(gòu)成:基于OpenCV 庫(kù)函數(shù)的 HOGDescriptor 及 gpu::HOGDescriptor 函數(shù)對(duì)行人目標(biāo)進(jìn)行識(shí)別,KCF 函數(shù)中KCFTracker::init 進(jìn)行目標(biāo)框的初始化工作,KCF 函數(shù)中KCFTracker::update 實(shí)現(xiàn)目標(biāo)實(shí)時(shí)跟蹤模塊。本文采用了編譯型的C/C++編寫(xiě)系統(tǒng),提高了目標(biāo)跟蹤實(shí)時(shí)性,而基于原KCF算法上改進(jìn)的基于分塊的KCF目標(biāo)跟蹤算法,根據(jù)當(dāng)前幀位置更新模塊的輸出獲取圖像跟蹤結(jié)果,然后再將該跟蹤結(jié)果展示在當(dāng)前幀圖像上。系統(tǒng)的總體流程圖如圖2所示。
本系統(tǒng)所使用主要功能步驟如下所示。
1)檢測(cè)識(shí)別階段
(1)在當(dāng)前幀構(gòu)建HOGDescriptor結(jié)構(gòu)體,建立HOG描述子和檢測(cè)器;
(2)設(shè)置線性SVM 分類(lèi)器系數(shù),采用行人分類(lèi)器,獲取行人的參數(shù);
(3)采用多尺度的窗口進(jìn)行行人目標(biāo)識(shí)別及檢測(cè)。
圖2 總體框架圖
2)分塊特征訓(xùn)練階段
(1)獲取檢測(cè)識(shí)別階段行人目標(biāo)位置,即行人特征搜索區(qū)域;
(2)對(duì)整個(gè)行人目標(biāo)區(qū)域進(jìn)行分塊提取HOG特征[14~15],初始化 KCF 跟蹤器,并對(duì)每個(gè)分塊特征進(jìn)行訓(xùn)練,獲得行人目標(biāo)分塊的特征值。
3)更新目標(biāo)階段
在經(jīng)過(guò)分塊特征訓(xùn)練階段之后,利用行人特征值等相關(guān)濾波參數(shù)進(jìn)行相應(yīng)的學(xué)習(xí)和目標(biāo)位置更新。
通過(guò)對(duì)KCF 目標(biāo)跟蹤算法原理和流程進(jìn)行研究分析后,可發(fā)現(xiàn)該算法跟蹤正確率高、計(jì)算量少、運(yùn)算速度高、算法實(shí)時(shí)性強(qiáng)、算法思想和實(shí)現(xiàn)較為簡(jiǎn)單,但是也存在兩個(gè)弊端:第一,KCF算法在跟蹤整個(gè)過(guò)程中是設(shè)定好目標(biāo)框大小的,故當(dāng)跟蹤序列中目標(biāo)大小發(fā)生變化,就容易使目標(biāo)框在跟蹤過(guò)程中發(fā)生漂移,導(dǎo)致跟蹤失敗。第二,KCF 算法沒(méi)有很好解決跟蹤過(guò)程當(dāng)中的目標(biāo)被遮擋的問(wèn)題,一旦跟蹤目標(biāo)發(fā)生遮擋現(xiàn)象就容易導(dǎo)致跟蹤失敗。因此文本探索利用基于目標(biāo)分塊的方法解決KCF 目標(biāo)遮擋問(wèn)題。
基于分塊方法的KCF目標(biāo)跟蹤算法描述如下。
步驟1:先將行人目標(biāo)整體檢出來(lái),然后對(duì)行人整體目標(biāo)進(jìn)行劃分,例如假設(shè)整體行人目標(biāo)為S,將其等分為四部分,分別為S1、S2、S3、S4;
步驟2:對(duì)每部分都進(jìn)行特征檢測(cè),并將其檢測(cè)結(jié)果保存起來(lái),即對(duì)S1、S2、S3、S4 分別進(jìn)行特征檢測(cè),記其結(jié)果分別為D1、D2、D3、D4;
步驟3:先單獨(dú)跟蹤其中一部分,即先跟蹤D1,以D1 特征為目標(biāo)S1 作為行人目標(biāo)所在的跟蹤對(duì)象進(jìn)行跟蹤;
步驟4:當(dāng)S1 目標(biāo)被遮擋時(shí),調(diào)用下一個(gè)行人目標(biāo)部塊S2的特征D2,使用D2作為目標(biāo)跟蹤特征進(jìn)行跟蹤,重復(fù)步驟3;
步驟5:當(dāng)目標(biāo)完全被遮擋,或所有目標(biāo)部分特征失效時(shí),則跟蹤失??;
步驟6:算法結(jié)束。
如圖3 所示,對(duì)目標(biāo)區(qū)域進(jìn)行分塊識(shí)別,建立每個(gè)部塊跟蹤器獨(dú)立地進(jìn)行對(duì)應(yīng)的部分跟蹤,并且輸出相應(yīng)的響應(yīng)值,這樣子就可根據(jù)貝葉斯推理框架的聯(lián)合置信圖來(lái)追蹤整個(gè)目標(biāo)。當(dāng)圖中計(jì)算可能性時(shí),抽樣的候選對(duì)象被顯示為的矩形,而這個(gè)實(shí)心的矩形顯示了最大的可能置信圖上的跟蹤結(jié)果。
圖3 分塊識(shí)別檢測(cè)
具體實(shí)現(xiàn):在視頻的第一幀中,先將行人目標(biāo)檢測(cè)標(biāo)識(shí)出來(lái),然后將行人目標(biāo)劃分為幾個(gè)小部分,再對(duì)每個(gè)小區(qū)域運(yùn)用KCF跟蹤器進(jìn)行初始化并輸出響應(yīng)值,其中響應(yīng)值是定位目標(biāo)局部區(qū)域位置的關(guān)聯(lián)響應(yīng),這些部分的響應(yīng)值組合起來(lái)就是行人整體目標(biāo)響應(yīng)值,如圖4、圖5所示。
圖4 識(shí)別行人
圖5 分塊識(shí)別特征
分塊局部檢測(cè)跟蹤主要難點(diǎn)在于圖和分配組織各個(gè)局部區(qū)域的響應(yīng)值,因此每個(gè)區(qū)域在每一幀中都會(huì)遇到不同的因素干擾,若給每個(gè)局部區(qū)域分配同樣的權(quán)重就導(dǎo)致出錯(cuò)概率增大,所以就需要根據(jù)每個(gè)局部區(qū)域跟蹤器的響應(yīng)值來(lái)分配權(quán)重,對(duì)于可靠性較大的局部區(qū)域,分配較大權(quán)重;可靠性差的局部區(qū)域就分配較小權(quán)重。這樣通過(guò)給每個(gè)局部區(qū)域分配不同的權(quán)重,整體的跟蹤聯(lián)合置信度就會(huì)比較關(guān)注可靠性高的局部區(qū)域,而不用關(guān)注可靠性弱、產(chǎn)生漂移的局部區(qū)域,使得系統(tǒng)整體的跟蹤效果大大的提升。
在視頻中,假設(shè)t幀內(nèi),聯(lián)合置信度為
其中μi,σi分別代表第i 個(gè)區(qū)域置信度的均值和方差,η是置信度的平滑度和銳利度之間的平衡值,在實(shí)驗(yàn)中設(shè)定為1,△表示從t-1 到t 幀產(chǎn)生置信度最大值的對(duì)應(yīng)移位位數(shù),⊕表示置信度的移位操作,表示區(qū)域i在兩幀的置信度。
在JetsonTK1 平臺(tái)上可以調(diào)用CPU 及GPU 進(jìn)行行人識(shí)別,在此分別調(diào)用CPU 和GPU 進(jìn)行實(shí)驗(yàn),通過(guò)比較兩者的識(shí)別時(shí)間和FPS,來(lái)確認(rèn)選擇在JetsonTK1 平臺(tái)使用哪個(gè)模式性能更優(yōu)越。其中識(shí)別時(shí)間使用GetTickCount 函數(shù)來(lái)計(jì)算行人識(shí)別的時(shí)間,再結(jié)合getTickFrequency()函數(shù)來(lái)計(jì)算FPS大小,具體基于CPU及GPU的識(shí)別過(guò)程如圖6、圖7所示。
通過(guò)分別調(diào)用JetsonTK1 平臺(tái)的CPU 和GPU不同模式進(jìn)行識(shí)別跟蹤,根據(jù)不同模式的FPS來(lái)確定平臺(tái)性能,如圖8所示。
通過(guò)實(shí)驗(yàn)可得知,CPU 與GPU 識(shí)別行人的FPS分別是1.5956 和3.1121,GPU 的識(shí)別幀數(shù)將近是CPU 的兩倍,對(duì)于視覺(jué)的行人目標(biāo)研究來(lái)說(shuō),高識(shí)別率會(huì)提高目標(biāo)的跟蹤率,提升實(shí)驗(yàn)效果,因此在本系統(tǒng)中選用GPU模式進(jìn)行識(shí)別。
圖6 CPU的識(shí)別過(guò)程
圖7 GPU的識(shí)別過(guò)程
圖8 JetsonTK1平臺(tái)不同模式的FPS
本系統(tǒng)為了驗(yàn)證改進(jìn)KCF算法的性能,故先采用原KCF算法進(jìn)行行人檢測(cè)跟蹤,將行人作為跟蹤目標(biāo)框,提取整個(gè)行人作為特征值,實(shí)驗(yàn)中可以準(zhǔn)確的識(shí)別行人,在空曠地帶,整個(gè)跟蹤效果不錯(cuò),但當(dāng)行人目標(biāo)被遮擋時(shí),就發(fā)生了目標(biāo)框漂移,從而無(wú)法對(duì)行人目標(biāo)進(jìn)行有效的跟蹤,減低了跟蹤精確度,導(dǎo)致行人目標(biāo)跟蹤失敗,如圖9所示。
圖9 行人跟蹤失敗
接著采用KCF 改進(jìn)算法重新對(duì)同一個(gè)視頻進(jìn)行檢測(cè)跟蹤,實(shí)驗(yàn)中將行人分為頭部、上半身、腹部、腿部四部分(圖5 所示),分別進(jìn)行局部區(qū)域特征檢測(cè),再將其保存起來(lái),先從頭部進(jìn)行跟蹤,若頭部被遮擋則調(diào)用上半身的特征進(jìn)行檢測(cè)跟蹤,以此類(lèi)推,當(dāng)當(dāng)前局部區(qū)域特征被遮擋則調(diào)用其他的局部區(qū)域特征進(jìn)行檢測(cè)跟蹤,實(shí)驗(yàn)表明,局部區(qū)域特征檢測(cè)跟蹤具有良好的抗遮擋性,如圖10所示。
圖10 行人跟蹤抗遮擋
在這里通過(guò)對(duì)同一段視頻進(jìn)行跟蹤對(duì)比發(fā)現(xiàn),改進(jìn)的KCF跟蹤算法更具有抗遮擋性,因此再通過(guò)兩者的準(zhǔn)確率和召回率進(jìn)行比較,進(jìn)一步分析兩者之間的區(qū)別,使得我們能更準(zhǔn)確的評(píng)估KCF算法與其進(jìn)行后算法的性能。
1)準(zhǔn)確率:準(zhǔn)確率就是衡量目標(biāo)跟蹤的準(zhǔn)確性。計(jì)算公式如下所示。
在式(12)中,準(zhǔn)確率為P,目標(biāo)跟蹤正確的圖像幀總數(shù)為T(mén)P,目標(biāo)跟蹤錯(cuò)誤及目標(biāo)未出現(xiàn)的圖像幀總數(shù)為FP。
2)召回率:召回率就是目標(biāo)跟蹤算法的全面性衡量、跟蹤質(zhì)量的評(píng)估,反映了算法在所有目標(biāo)出現(xiàn)的圖像中成功跟蹤到目標(biāo)的能力,計(jì)算方法如下公式所示。
在式(13)中,召回率為R,圖像序列中含有目標(biāo)的圖像幀及跟蹤失敗的總數(shù)為T(mén)N。
為了分析對(duì)比運(yùn)動(dòng)目標(biāo)跟蹤算法的性能,本文將Kalman 算法也在JetsonTK1 平臺(tái)進(jìn)行了實(shí)現(xiàn),在相同視頻中對(duì)比不同方法的準(zhǔn)確率和召回率,表2展示JetsonTK1上不同跟蹤算法的效果準(zhǔn)確率及召回率。
表2 基于JetsonTK1平臺(tái)不同算法跟蹤效果對(duì)比
通過(guò)表2的分析研究可知,Kalman算法的準(zhǔn)確率和召回率分別為22.76%和21.87%,較低于KCF算法,因而本課題選用KCF 目標(biāo)跟蹤算法較為合適。而原KCF 目標(biāo)跟蹤算法的準(zhǔn)確率為28.55%,而改進(jìn)后KCF 目標(biāo)跟蹤算法的準(zhǔn)確率為42.39%,相比之下,改進(jìn)后的KCF 算法提升13.84%。而召回率的結(jié)果表明,原KCF 算法召回率為28.11%,改進(jìn)后的KCF算法為41.81%,兩者相差13.7%,因此,實(shí)驗(yàn)表明,改進(jìn)后的KCF目標(biāo)跟蹤算法的跟蹤性能更佳、效果更好。
本文設(shè)計(jì)并開(kāi)發(fā)了基于JetsonTK1平臺(tái)的行人運(yùn)動(dòng)目標(biāo)跟蹤系統(tǒng),該系統(tǒng)能實(shí)現(xiàn)對(duì)監(jiān)控區(qū)域的行人目標(biāo)實(shí)時(shí)跟蹤功能,其中利用JetsonTK1 平臺(tái)小巧便捷和高性能的特點(diǎn),選取了GPU 作為該平臺(tái)的圖像處理中心,提升數(shù)據(jù)圖像處理速度和性能,結(jié)合KCF目標(biāo)跟蹤算法的優(yōu)點(diǎn),采用分塊檢測(cè)行人目標(biāo)特征的思想改進(jìn)KCF算法,使得系統(tǒng)在行人目標(biāo)發(fā)生遮擋的時(shí)候,較好地跟蹤行人目標(biāo),提高系統(tǒng)的抗遮擋性和跟蹤精度。實(shí)驗(yàn)表明,基于JetsonTK1 平臺(tái)的行人運(yùn)動(dòng)目標(biāo)跟蹤系統(tǒng)性能穩(wěn)定可靠,具有較好的實(shí)時(shí)性和擴(kuò)展性,基于這個(gè)系統(tǒng),可進(jìn)行相關(guān)行人跟蹤或動(dòng)作識(shí)別等工作,具有較大應(yīng)用意義。