鄧健峰,謝 云
(廣東工業(yè)大學(xué)自動(dòng)化學(xué)院,廣東 廣州 510006)
隨著計(jì)算機(jī)視覺的發(fā)展,行人檢測技術(shù)越來越受到人們關(guān)注[1]。許多行人檢測方法被提出,如方向梯度直方圖(histogram of oriented gradient,HOG)特征和支持向量機(jī)(support vector machines,SVM)分類算法[2];統(tǒng)計(jì)轉(zhuǎn)換直方圖(census transform histogram,CENTRIST)和SVM分類算法[3];深度學(xué)習(xí)的方法[4]等。然而,上述方法存在檢測時(shí)間長的問題。此時(shí)可以采用并行運(yùn)算降低耗時(shí),如:文獻(xiàn)[5]采用Opencv實(shí)現(xiàn)行人檢測,但檢測時(shí)間仍然較長;文獻(xiàn)[6]采用CPU進(jìn)行加速,對運(yùn)行平臺(tái)要求較高,而車載環(huán)境下設(shè)備性能有限,無法運(yùn)行大功耗系統(tǒng)。嵌入式系統(tǒng)雖然性能不如計(jì)算機(jī),但具有功耗低等優(yōu)點(diǎn),適合在車載環(huán)境下運(yùn)行,目前廣泛應(yīng)用于機(jī)器視覺[7-9]等領(lǐng)域。
本文提出基于Zynq[10]的實(shí)時(shí)行人檢測系統(tǒng),利用Vivado HLS對圖像進(jìn)行預(yù)處理加速,采用CENTRIST特征作為行人特征,級(jí)聯(lián)SVM作為分類算法,并通過試驗(yàn)分析驗(yàn)證了方法的可行性。
行人檢測系統(tǒng)主要由攝像頭采集模塊、硬件加速模塊、圖像緩存模塊、顯示模塊、IP核初始化模塊、CENTRIST特征提取模塊和SVM分類模塊組成。攝像頭采集模塊由OV7670攝像頭采集圖像,顯示模塊則通過VGA接口顯示圖像。其中,現(xiàn)場可編程門陣列(field programmable gate array,FPGA)部分主要通過封裝IP核來搭建,包括攝像頭采集模塊、硬件加速模塊和顯示模塊;ARM部分主要通過編寫軟件程序來實(shí)現(xiàn)模塊功能,包括圖像緩存模塊、IP核初始化模塊、CENTRIST特征提取模塊和SVM分類模塊。FPGA和ARM之間的數(shù)據(jù)交互是通過高級(jí)可擴(kuò)展接口(advanced extensible interface,AXI)實(shí)現(xiàn)的。
系統(tǒng)總體設(shè)計(jì)框圖如圖1所示。
圖1 系統(tǒng)總體設(shè)計(jì)框圖
本系統(tǒng)采用OV7670攝像頭采集視頻圖像,通過串行攝像頭控制總線(serial camera control bus,SCCB)協(xié)議[11]初始化攝像頭,設(shè)置為RGB565、分辨率640×480的輸出格式。在行同步有效、幀同步信號(hào)有效的情況下,每兩個(gè)像素時(shí)鐘周期拼接出一個(gè)16位的像素值,將16位像素值低位補(bǔ)0,合成一個(gè)24位的像素值輸出,同時(shí)輸出有效的寫使能信號(hào)、行同步信號(hào)和幀同步信號(hào)。
FPGA中的圖像數(shù)據(jù)主要以AXI-Stream與ARM通信,所以圖像數(shù)據(jù)信號(hào)要轉(zhuǎn)換成AXI-Stream的接口信號(hào),而AXI-Stream不能直接和ARM相連[12]。因此本設(shè)計(jì)采用IP核視頻直接內(nèi)存訪問(video direct memory access,VDMA)[13]作為傳輸工具,將AXI-Stream格式的數(shù)據(jù)流轉(zhuǎn)換為AXI4 Memory Map格式,從而實(shí)現(xiàn)DDR3緩存。
當(dāng)視頻圖像顯示時(shí),首先IP核AXI4-Stream to Video Out[14]將DDR3的數(shù)據(jù)轉(zhuǎn)換為三元色(red,green,blue,RGB)格式,然后IP核視頻時(shí)間控制器(video timing controller,VTC)[15]提供分辨率為640×480,掃描頻率為60 Hz的視頻圖移陣列(video grapnics array,VGA)時(shí)序,最后只需要根據(jù)數(shù)據(jù)有效信號(hào)將24位數(shù)據(jù)轉(zhuǎn)換為16位數(shù)據(jù)輸出即可。
在行人檢測前需要進(jìn)行圖像預(yù)處理,圖像預(yù)處理包括圖像縮放、灰度化和Sobel邊緣檢測。在實(shí)際檢測中,行人距離攝像頭遠(yuǎn)近不同,造成行人成像大小不同,影響檢測。需要按照比例對原圖像進(jìn)行縮放,然后對縮放后的圖像進(jìn)行檢測,直到圖像縮小到不小于滑動(dòng)窗口的尺寸為止。圖像縮放算法采用雙線性插值法,縮放比例是0.8。在此基礎(chǔ)上,對原圖像進(jìn)行灰度化,目的是降低原圖像的信息量,減少干擾?;叶戎礸(x,y)公式如式(1)所示。
g(x,y)=0.3R+0.59G+0.11B
(1)
式中:R為像素H(x,y)中紅色分量值;G為像素H(x,y)中綠色分量值;B為像素H(x,y)中藍(lán)色分量值。最后采用Sobel邊緣檢測對灰度圖像進(jìn)行編碼,使行人輪廓清晰顯示。
由于在ARM環(huán)境下運(yùn)行預(yù)處理算法耗時(shí)較長,而在FPGA環(huán)境下運(yùn)行預(yù)處理算法比較復(fù)雜。Vivado HLS開發(fā)工具能夠?qū)⒏呒?jí)語言(C/C++語言)編寫的算法通過高層次綜合,實(shí)現(xiàn)FPGA開發(fā),同時(shí)獲得良好的加速性能。所以本設(shè)計(jì)通過Vivado HLS實(shí)現(xiàn)圖像預(yù)處理算法。
在Vivado HLS工程中,圖像數(shù)據(jù)的輸入輸出都是AXI-Stream接口信號(hào),其他參數(shù)(圖像縮放系數(shù))由ARM通過AXI4-Lite總線進(jìn)行配置,選擇的時(shí)鐘頻率跟全局時(shí)鐘頻率一致。當(dāng)編寫完成后,需要對工程進(jìn)行仿真以檢測是否有邏輯錯(cuò)誤,準(zhǔn)確無誤后可以封裝IP核并導(dǎo)入FPGA工程中。運(yùn)行時(shí),需要先設(shè)置IP核參數(shù)。硬件加速的優(yōu)點(diǎn)是提高檢測速度,降低系統(tǒng)功耗。表1為硬件加速IP核時(shí)序。
表1 硬件加速IP核時(shí)序
CENTRIST是統(tǒng)計(jì)局部區(qū)域統(tǒng)計(jì)轉(zhuǎn)換(census transform,CT)值得到的直方圖特征[16]。本系統(tǒng)采用了“CENTRIST+SVM”框架的行人檢測算法。完整的行人檢測流程如圖2所示。
圖2 行人檢測流程圖
相比于HOG特征,CENTRIST特征主要描述行人輪廓信息,不需要?dú)w一化處理,這樣能夠減少計(jì)算時(shí)間。具體實(shí)現(xiàn)過程如下。
①本設(shè)計(jì)利用滑動(dòng)窗口掃描法來檢測圖像中行人,滑動(dòng)窗口的尺寸是36×108。預(yù)處理后,進(jìn)行CT值計(jì)算。在圖像中,定義某個(gè)像素點(diǎn)P(x,y),以P點(diǎn)為中心,從左到右,從上到下,定義周圍8個(gè)點(diǎn)為P1,P2,…,P8,將P1,P2,…,P8的灰度值分別與P點(diǎn)相減,差值用二進(jìn)制值代替,大于0則為0,其余則為1,并賦值到Pi中,如式(2)所示:
(2)
由式(2)得出8個(gè)二進(jìn)制數(shù)值,將數(shù)值按下標(biāo)從小到大排列,得到一個(gè)8位的二進(jìn)制數(shù)值,數(shù)制轉(zhuǎn)換為十進(jìn)制,即為P點(diǎn)的CT值。遍歷所有像素得到CT值圖像。由于邊緣像素沒有8個(gè)像素比較,所以邊緣像素不用計(jì)算。
②得到CT值圖像后,采用滑動(dòng)窗口掃描CT值圖像進(jìn)行特征向量計(jì)算?;瑒?dòng)窗口水平方向移動(dòng)步長為9像素,垂直方向移動(dòng)步長為12像素,窗口里分為9×4個(gè)圖像小塊,小塊大小為9×12,上下左右相鄰的小塊合并成超塊,超塊移動(dòng)步長與窗口移動(dòng)步長一致,則整個(gè)窗口共有24個(gè)超塊。對每個(gè)超塊計(jì)算CENTRIST特征向量,超塊的特征向量為256維,每個(gè)CT值對應(yīng)一個(gè)維度。計(jì)算特征向量時(shí),將CT值對應(yīng)維度的數(shù)值加1,整個(gè)窗口的CENTRIST特征向量維度為256×24=6 144維。這樣就完成了CENTRIST特征提取。
本設(shè)計(jì)采用級(jí)聯(lián)SVM分類器進(jìn)行分類,包含線性分類器和非線性分類器,非線性分類器采用的核函數(shù)為直方圖交叉核(histogram intersection kernel,HIK)。首先進(jìn)行SVM分類器訓(xùn)練,完成后分別讀取線性和非線性分類器(二進(jìn)制文件)進(jìn)行行人檢測。分類器訓(xùn)練使用的是INRIA數(shù)據(jù)庫,該訓(xùn)練庫包含正樣本集和負(fù)樣本集,正樣本集包含2 400個(gè)正樣本,分辨率為36×108,負(fù)樣本集包含1 200個(gè)負(fù)樣本。接著進(jìn)行線性分類器的訓(xùn)練,在負(fù)樣本集中隨機(jī)截取分辨率為36×108的圖片和正樣本一起訓(xùn)練分類器h1。然后用h1判別負(fù)樣本集,生成的子負(fù)樣本集,子負(fù)樣本集和正樣本一起訓(xùn)練分類器h2,用h2判別負(fù)樣本集,生成另一個(gè)子負(fù)樣本集,如此下去,直到至少有一個(gè)分類器能正確判別負(fù)樣本集。最后將所有子負(fù)樣本集合并,得到最終分類器S1。
線性分類器S1雖然精度不高,但能夠排除大部分非行人區(qū)域,速度快;而非線性分類器正好相反。所以用線性分類器S1判別負(fù)樣本集,生成一個(gè)新的負(fù)樣本集,然后新負(fù)樣本集和正樣本集訓(xùn)練非線性分類器S2。
在進(jìn)行在線檢測時(shí),首先用S1對滑動(dòng)窗口提取的CENTRIST特征進(jìn)行判別,判別公式如(3)所示。若式(3)成立,則記錄滑動(dòng)窗口的位置。
WTX≥0
(3)
式中:W為分類器的檢測向量;X為CENTRIST特征向量。
當(dāng)線性分類結(jié)束后,被記錄的滑動(dòng)窗口對應(yīng)的CENTRIST特征輸入到S2作進(jìn)一步檢測。倘若判別為符合行人特征,則輸出滑動(dòng)窗口位置。
當(dāng)所有尺度下的圖像檢測完畢后,如果包含行人,則使用方框?qū)⒒瑒?dòng)窗口的四點(diǎn)坐標(biāo)相連接,但這樣同一個(gè)行人會(huì)產(chǎn)生大小不一的方框,需要窗口融合算法將這些方框合并成一個(gè)方框。判別式如式(4)所示。
Recti>0.6rect且Recti>0.6RECTi
(4)
式中:Recti為分類矩形框與i類別合并矩形框的相交面積;rect為分類矩形框的面積;RECTi為i類別合并矩形框的面積。
當(dāng)式(4)成立時(shí),分類矩形框分類到i類別,否則是新類別。能對所有分類矩形框進(jìn)行上述操作,將窗口都分類到相應(yīng)的類別中;然后,剔除類別中個(gè)數(shù)少于闕值的矩形框,并計(jì)算保留類別中矩形框的平均位置;最后,舍去大矩形框里的小矩形框,輸出融合窗口。
因?yàn)镕PGA和ARM之間圖像數(shù)據(jù)傳輸是通過VDMA傳輸?shù)?。?shù)據(jù)緩存地址和VDMA工作模式由相關(guān)寄存器負(fù)責(zé)控制[17],所以需要在軟件部分初始化VDMA。初始化主要是軟件程序通過AXI-Lite接口向VDMA中不同功能的寄存器進(jìn)行賦值。FPGA工程包含VDMA1和VDMA2,兩個(gè)VDMA都分配緩存起始地址、字節(jié)數(shù)。當(dāng)開始檢測時(shí),VDMA1寫通道中斷,幀緩存暫停,讀通道讀取數(shù)據(jù)進(jìn)行圖像預(yù)處理加速。加速完成后由VDMA2將數(shù)據(jù)緩存到DDR3中,由ARM處理器進(jìn)行行人特征提取分類。完成檢測后,VDMA1寫通道重新工作,以此循環(huán)。
本系統(tǒng)在Zynq-7000 SoC開發(fā)板進(jìn)行測試。測試分為圖像預(yù)處理效果測試和行人檢測性能測試。行人檢測性能測試結(jié)果通過準(zhǔn)確率和覆蓋率曲線描述。設(shè)定圖片測試集中,實(shí)際行人個(gè)數(shù)為L,正確檢測行人個(gè)數(shù)為P,錯(cuò)誤檢測為行人的物體個(gè)數(shù)為N,沒有檢測到的行人個(gè)數(shù)為S。
準(zhǔn)確率和覆蓋率計(jì)算公式如下所示。
(5)
(6)
FPGA工程的資源利用率如表2所示。
表2 FPGA工程的資源利用率
從表2看出,F(xiàn)PGA消耗的邏輯資源比較多,這是因?yàn)镕PGA工程使用IP核個(gè)數(shù)較多所致。IP核的工作頻率統(tǒng)一為100 MHz,整個(gè)系統(tǒng)的片上功耗為1.920 W,達(dá)到預(yù)期效果。
圖3分別是計(jì)算機(jī)、ARM處理器和硬件加速對圖像預(yù)處理效果圖。表3給出圖像預(yù)處理耗時(shí)對比。計(jì)算機(jī)的配置為主頻3.1 GHz的四核Inter Core i5-7 300處理器,內(nèi)存為8 GB。
圖3 圖像預(yù)處理效果對比圖
ms
對比圖3(b)、圖3(c)和圖3(d)看出,三種方法均能實(shí)現(xiàn)圖像預(yù)處理,視覺效果基本沒有差別,硬件加速方法雖然顏色較暗,但行人輪廓顯示較為清晰。從表3看出,硬件加速耗時(shí)僅為計(jì)算機(jī)的一半,由此可見,硬件加速能減少圖像預(yù)處理時(shí)間。
行人檢測耗時(shí)對比如表4所示。
對比表4可看出,本文提出的方法檢測一幀圖像所需時(shí)間比計(jì)算機(jī)和ARM方法要少,能有效提高檢測速度。
表4 行人檢測耗時(shí)對比
從ETH行人數(shù)據(jù)庫截取20 s視頻,對大約600幀圖像進(jìn)行測試。為了更好地評(píng)價(jià)本系統(tǒng)采用的行人檢測算法,本文引入另一種行人檢測算法(HOG特征和線性SVM)進(jìn)行對比。表5為兩種行人檢測方法的檢測率和誤檢率。
表5 兩種行人檢測系統(tǒng)檢測率和誤檢率
從表5可看出,本文采用方法的檢測率略高于HOG+SVM方法,主要由于本文方法采用級(jí)聯(lián)SVM進(jìn)行分類,提高了分類精度。圖4是兩種行人檢測算法的準(zhǔn)確率曲線。
圖4 兩種行人檢測算法的準(zhǔn)確率曲線
從圖4可看出,CENTRIST和SVM檢測算法的檢測效果與文獻(xiàn)[3]中的機(jī)器人的檢測效果相差不大,但本系統(tǒng)是采用低功耗開發(fā)板完成的。
本文在Zynq-7000 SoC開發(fā)板上,進(jìn)行嵌入式軟硬件協(xié)同設(shè)計(jì),結(jié)合CENTRIST特征向量和級(jí)聯(lián)SVM分類器,設(shè)計(jì)了基于FPGA+ARM的行人檢測系統(tǒng)。該系統(tǒng)已經(jīng)進(jìn)行了測試,證明本文提出的方法在效果上與計(jì)算機(jī)沒有明顯差別,但在運(yùn)行時(shí)間、功耗和成本都有優(yōu)勢,達(dá)到準(zhǔn)確度高、實(shí)時(shí)性好的應(yīng)用要求。今后在行人特征提取算法上,可以適當(dāng)增加不同行人特征來描述行人,提高魯棒性;同時(shí)可以采用FPGA實(shí)現(xiàn)循環(huán)計(jì)算以提高運(yùn)算速度。