楊 柳, 路錦正
(西南科技大學 信息工程學院,四川 綿陽 621010)
隨著社會和科學技術(shù)的不斷發(fā)展,監(jiān)控視頻在人們的生活中起著越來越重要的作用,而監(jiān)控中的行人往往包含更有價值的信息。因此,監(jiān)控視頻中的行人檢測[1,2]成為機器視覺研究領(lǐng)域中不可或缺的一部分。為此,研究人員提出了各種算法及其相應(yīng)的實現(xiàn)方案。如Dalal N等人[3]提出了用方向梯度直方圖(histogram of oriented gradient,HOG)特征來描述行人特征的方法;楊濤等人[4]采用統(tǒng)計學習和相關(guān)場景模型結(jié)合的方法提高檢測的魯棒性等。
計算機視覺和半導(dǎo)體技術(shù)的發(fā)展,使基于嵌入式平臺的實時圖像處理非常廣泛[5~7],嵌入式的固有優(yōu)勢使其具有廣闊的應(yīng)用前景。其中數(shù)字信號處理器(digital signal processor,DSP)具有強大的并行處理能力,具有通用C語言編程、集成方便、低功耗高性能等特點。經(jīng)優(yōu)化的高性能DSP平臺方案,信號處理速度比通用的CPU快多倍,是行人檢測算法的硬件實施優(yōu)秀平臺。
但許多行人檢測算法復(fù)雜度高、耗時長,在嵌入式平臺檢測效率低、實時性差。為了解決這個問題,應(yīng)用攝像機固定情況下,監(jiān)控視頻中背景大部分是靜止,而感興趣的行人是運動的先驗信息,提出了一種基于嵌入式DSP平臺的快速行人檢測系統(tǒng)。
首選設(shè)計適用的行人檢測算法,再將該算法移植到以TMS320C6657處理器為核心的嵌入式DSP開發(fā)板;然后將待檢測的視頻圖像傳輸?shù)紻SP中,進行行人檢測;最后將檢測結(jié)果保存。
TMS320C6657具備2個TMS320C66x單核子系統(tǒng),可以在高達1 GHz的主頻下工作,峰值運算能力為80GMACS。它可以執(zhí)行每個周期 8 個單精度浮點MAC 操作、雙精度和混合操作等。這些功能使得用于信號處理、數(shù)學和圖像采集功能的DSP內(nèi)核性能得到相當大的提升。
此外,TMS320C665處理器集成了大量的片上存儲器,除了32 kB的L1程序和數(shù)據(jù)高速緩存區(qū),每核配有1 024 kB專用存儲器,可配置為可映射 RAM或緩存,進一步提升了內(nèi)核的處理性能。
Dalal N等人提出的HOG+支持向量機(support vector machine,SVM)算法已經(jīng)被證明具有良好的檢測效果[3],但HOG特征檢測中檢測窗口多、識別速度慢。針對該缺點,對傳統(tǒng)的HOG+SVM算法進行改進。先利用Vibe背景建模[8]提取視頻中的運動前景區(qū)域,確定感興趣目標窗口;再使用HOG+SVM算法對感興趣目標窗口進行檢測,標記出行人目標。其算法系統(tǒng)流程如圖1所示。
圖1 行人檢測算法系統(tǒng)流程
該方法在傳統(tǒng)的HOG+SVM算法基礎(chǔ)上,通過過濾一部分背景區(qū)域,減少檢測窗口的數(shù)目來提高系統(tǒng)的檢測速率,并且在一定程度上減少了背景信息帶來的誤檢。
3.1.1 Vibe算法運動區(qū)域檢測
Vibe是一種像素級的背景建模、前景檢測算法,檢測過程主要包括三部分:
1)背景模型的初始化:用第一幀中相鄰區(qū)域隨機抽取的值填充背景模型。因此,Vibe的背景模型可以用M(x)={v1,v2,…,vN}來描述。式中M(x)為背景模型,vi為第一幀圖像中點x處的第i個樣本的像素值。
2)前景檢測:為了對圖像中點x處的像素v(x)進行分類,如圖2所示,定義了以點v(x)為中心,半徑為R的圓SR(v(x))。設(shè)定一個閾值#min,如果模型M(x)與SR(v(x))的交集大于閾值#min,則認為v(x)是背景像素點,否則認為是前景。
圖2 Vibe前景檢測模型
3)背景模型更新:Vibe算法采用隨機替換策略,在時間和空間上隨機更換背景模型中的樣本集;同時為了解決死區(qū)的問題,加入前景點計數(shù)方法,即當前景點計數(shù)達到一定數(shù)目后則認為該點為背景,并以1/φ的(φ為抽樣系數(shù))概率去更新模型樣本集中本像素點的值。
利用Vibe背景建模,獲得輸入視頻的前景運動區(qū)域圖像,并對前景圖像進行腐蝕、膨脹和連通區(qū)域標記處理,改善檢測結(jié)果,獲得最終的感興趣區(qū)域。
3.1.2 行人識別
在行人識別模塊,采用HOG+SVM算法對提取出的感興趣區(qū)域進行檢測。計算過程如下:
1)對Vibe算法提取出來的感興趣區(qū)域進行歸一化處理,使其統(tǒng)一縮放為大小為64像素×128像素。
2)計算像素點(x,y)處的梯度幅值和梯度方向
α(x,y)=arctan(Gy(x,y)/Gx(x,y))
(1)
式中Gx(x,y)為水平方向梯度;Gy(x,y)為垂直方向梯度
Gx(x,y)=H(x+1,y)-H(1,y),
Gy(x,y)=H(x,y+1)-H(x,y-1)
(2)
式中H(x,y)為像素的像素值。
3)把輸入圖像分割成多個8像素×8像素的單元(cell),且把梯度方向平均劃分為9個區(qū)間,對Cell內(nèi)的每一個像素用梯度方向在直方圖中進行加權(quán)投影,以獲得這個Cell的梯度直方圖。
4)將2×2個Cell組合成大的、空間上聯(lián)通的區(qū)間塊(Block),并把每個Block中所有Cell的特征向量串聯(lián)起來獲得Block的HOG特征。
5)用Block對輸入待檢測圖像向右或向下滑動8個像素進行掃描,最后,所有Block的特征串聯(lián)起來獲得人體的特征。
6)使用INRIA樣本庫獲取訓(xùn)練集,通過離線訓(xùn)練構(gòu)建線性SVM行人分類器。將得到的目標區(qū)域的HOG特征加載到SVM分類器,實現(xiàn)行人目標的檢測標記。
3.2.1 行人檢測算法在DSP平臺的移植
OpenCV是一個開源的跨平臺計算機視覺庫,由一系列C語言函數(shù)和一部分C++類構(gòu)成,具備多種語言接口,提供了多個計算機視覺和圖像處理函數(shù)API接口。為了提高開發(fā)效率以及考慮到OpenCV與嵌入式DSP平臺的兼容等問題,本設(shè)計選用OpenCV1.0作為平臺移植和開發(fā)的工具。
行人檢測算法中主要利用CV和CXCOR模塊來完成圖像數(shù)據(jù)的處理,為了確保相關(guān)函數(shù)能夠跨平臺使用,主要對CV模塊和CXCORE模塊進行移植。在移植過程中需要解決的問題:
1)對CV和CXCORE模塊進行適當?shù)木喤c刪減,減少代碼大小,降低代碼一致的冗余。例如,摒棄使用一些由C++編寫的CV模塊中的函數(shù),選擇使用相同功能的函數(shù)來代替,降低DSP處理器的工作負擔。
2)CCS編譯環(huán)境與VC編譯環(huán)境下的數(shù)據(jù)類型存在一定的區(qū)別,在移植的過程中需要對部分數(shù)據(jù)類型進行相應(yīng)調(diào)整改寫,使其能夠在CCS中正常使用。本設(shè)計中,當代碼中出現(xiàn)Bool類型時,移植到CCS編譯環(huán)境下時需要用Char類型進行替代;且函數(shù)中同時出現(xiàn)Int和Long數(shù)據(jù)類型時,需考慮兩者所占用的位數(shù)的不同,以避免數(shù)據(jù)類型發(fā)生截斷等。
3)在CCS編譯環(huán)境下進行軟件開發(fā)時,開發(fā)者要手動的對系統(tǒng)堆棧大小進行配置和維護。移植過程中,需要對*.cmd文件中的起始地址長度、系統(tǒng)的大小等資源進行合理的配置,確保在CCS環(huán)境下能夠正確編譯。
3.2.2 行人檢測算法在DSP平臺的優(yōu)化
將未優(yōu)化的算法直接移植到嵌入式TMS320C6657平臺后,算法的處理效率特別低,實時性和工程實用性都不能夠滿足要求。為此需要根據(jù)TMS320C6657自身的特點以及TI提供的多種優(yōu)化工具,通過各種優(yōu)化方法對程序和平臺進行全面的優(yōu)化,提高代碼的執(zhí)行效率。本文著重從以下幾個方面對行人檢測模塊進行優(yōu)化。
1)CCS編譯器優(yōu)化:TI公司的編譯器CCS提供了分為若干等級和種類的自動優(yōu)化選項,用戶可以根據(jù)需要進行選擇。本文在優(yōu)化過程中采用-o3編譯選項和Release編譯模式。-o3編譯選項啟動文件級優(yōu)化,支持去除所有沒有被調(diào)用的函數(shù)、簡化返回值等;Release編譯模式可以使程序獲得最大的優(yōu)化效果。
2)循環(huán)展開:代碼中的for循環(huán)需要打斷C66x內(nèi)部的軟件流水線,頻繁的for循環(huán)使程序運行緩慢,大大降低DSP的處理效率。在本文中,根據(jù)相關(guān)情況,將部分for循環(huán)進行展開,以代碼增加為代價提高代碼的執(zhí)行效率。
3)內(nèi)聯(lián)函數(shù)的使用:針對C6000 DSP平臺,TI公司提供了可快速優(yōu)化C代碼的內(nèi)聯(lián)函數(shù),內(nèi)聯(lián)函數(shù)可以直接映射為C6000的匯編,代碼執(zhí)行效率與匯編相同。通過對內(nèi)聯(lián)函數(shù)的合理使用,可以減少代碼的程序量,提高代碼的執(zhí)行效率。本系統(tǒng)中,圖像的像素值進行點積運算時,未經(jīng)優(yōu)化的C程序需要循環(huán)N次,經(jīng)過內(nèi)聯(lián)函數(shù)優(yōu)化后,將2組數(shù)據(jù)劃分為高16位和低16位,再分別做乘法和加法處理,使循環(huán)次數(shù)減少為原來的1/2。
4)C66x VLIB庫的使用:C66x VLIB(Video Analytics & Vision Library )是TI提供的經(jīng)過優(yōu)化的圖像/視頻處理函數(shù)庫,包含了40多個內(nèi)核軟件庫,能夠加速圖像/視頻分析與開發(fā)。采用VLIB庫函數(shù)代替自己編寫的C代碼,對Vibe背景建模提取出來的前景圖像進行腐蝕、膨脹和連通區(qū)域提取操作,提高代碼的執(zhí)行速度。
本文硬件系統(tǒng)選用TMS320C6657芯片作為圖像處理核心單元,采用Seed公司的SEED XDS560V2 USB型仿真器和TI公司提供的CCS(Code Composer Studio)5.5軟件開發(fā)環(huán)境,并輔以其它外設(shè)完成相應(yīng)的調(diào)試功能。
為了驗證系統(tǒng)的性能,本文測試數(shù)據(jù)采用分辨率為768×576的PETS_09 View_001 監(jiān)控視頻。
1)檢測效果分析
算法移植優(yōu)化完成后,對輸入視頻進行測試,部分檢測結(jié)果如圖3所示。
圖3 檢測結(jié)果
統(tǒng)計測試視頻中的100幀圖像,共含待檢測行人523個,將本設(shè)計中的算法與文獻[3]中傳統(tǒng)的HOG算法在準確率、誤檢率和漏檢率方面進行比較,統(tǒng)計結(jié)果如表1所示。
表1 文獻[3]算法與本文算法性能對比 %
從圖4和表1分析可得,本文中的算法能夠有效地對視頻中的行人進行檢測,且比文獻[3]中傳統(tǒng)的HOG方法在準確率、漏檢率和誤檢率方面有更好的檢測效果。
2)算法耗時分析
算法移植到嵌入式DSP平臺后,通過對系統(tǒng)優(yōu)化前后的周期數(shù)進行統(tǒng)計,實現(xiàn)對算法在嵌入式TMS320C6657的優(yōu)化效果分析。本設(shè)計選用的TMS320C6657芯片的主頻為1 GHz,準確的時鐘值需要用實驗測得的時鐘周期除以DSP的主頻。
為了能夠更加清晰直觀地對算法在DSP平臺的優(yōu)化效果進行分析,結(jié)合優(yōu)化前后時鐘周期的統(tǒng)計數(shù)據(jù),使用如圖4所示的折線圖對算法優(yōu)化前后的耗時情況進行對比分析。
圖4 算法在DSP平臺優(yōu)化前后耗時對比
通過圖4對比分析可以看到,算法在DSP平臺未經(jīng)優(yōu)化時,想要獲得理想的檢測效果,其算法耗時過長,檢測效率低,實時性差。而經(jīng)過編譯器優(yōu)化、循環(huán)展開、內(nèi)聯(lián)函數(shù)的使用等優(yōu)化方法優(yōu)化后,在保證相同的檢測效果的同時,算法在DSP平臺處理一幀分辨率為768×576的圖像的平均耗時從1.28 s左右降低到0.26 s左右,代碼執(zhí)行效率比未優(yōu)化之前平均提高了5倍左右,優(yōu)化效果明顯,具有較好的工程實用價值。
提出了一種基于Vibe的背景建模結(jié)合HOG+SVM的行人快速檢測系統(tǒng);并借助OpenCV1.0和CCS開發(fā)環(huán)境以及TI提供的各種優(yōu)化工具,結(jié)合TMS320C6657 DSP的硬件資源和行人檢測算法的特點,實現(xiàn)了算法在嵌入式DSP平臺的移植和優(yōu)化。實驗結(jié)果表明:本文行人檢測系統(tǒng)在嵌入式DSP平臺上有較好的檢測精度和優(yōu)化效果,具有一定的工程實用性。下一步將繼續(xù)通過算法的改進,在保證檢測精度的同時提高檢測效率。