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