李傳志
(吉林工業(yè)經(jīng)濟學(xué)校,吉林 吉林132000)
隨著行人檢測技術(shù)水平的不斷提高,各行業(yè)均不斷引入行人檢測技術(shù),尤其在戶外場景、汽車等移動設(shè)備中得到了極為廣泛的應(yīng)用,但傳統(tǒng)行人檢測技術(shù)檢測算法復(fù)雜性高、靈活度低、便捷性差,進而導(dǎo)致其應(yīng)用受到了嚴重限制,所以本文將基于ZYNQ-7000 算法平臺構(gòu)建出一款高效行人檢測系統(tǒng),現(xiàn)報道如下。
方向梯度直方圖(HOG)屬于一種特征描述子,能揭示行人輪廓信息,主要通過對局部方向梯度直方圖進行合理應(yīng)用,來構(gòu)建特征集。HOG 算法的核心思想為滑動窗口機制,可使圖像局部目標(biāo)的原有形狀轉(zhuǎn)化為梯度方向的密度分布[1]。HOG 特征提取過程中,圖像需被平均分成多個cell 單元,再根據(jù)cell 單元具體大小,計算每個像素梯度,并行梯度直方圖統(tǒng)計,最后將cell 單元以3×3 形式拼為相互重疊的block 塊,獲得圖像HOG特征[2]。
AdaBoost 算法屬一種迭代算法,利用若干弱分類器學(xué)習(xí)同一訓(xùn)練集,每個弱分類器可獲得0、1 兩種結(jié)果,再將所有弱分類器組成一個強分類器[3]。
利用串行結(jié)構(gòu)提取特征是傳統(tǒng)HOG 算法常用方式,效率低,難滿足實時性要求。為加快HOG 特征提取速度,本文在傳統(tǒng)HOG 算法中融入現(xiàn)場可編程邏輯門陣列(FPGA)的三級流水線結(jié)構(gòu),從而實現(xiàn)HOG 特征提取算法能夠在一個時鐘周期內(nèi)完成梯度計算模塊、cell 和block 單元統(tǒng)計直方圖生成模塊等更多工作內(nèi)容,提高算法執(zhí)行效率。然而,本文為能進一步提高算法效率,選用位移運算代替相對復(fù)雜的除法運算,這樣不僅能促進歸一化速度有效提高,同時還能對硬件資源的消耗進行有效控制。本文選用賽靈思公司開發(fā)的ZYNQ-7000 片上系統(tǒng)實現(xiàn)這種算法,這種片上系統(tǒng)主要由PL 和PS 兩部分組成,其中PL端更加適合提取模塊等計算量較大和級聯(lián)分類器模塊等容易發(fā)生并行化的內(nèi)容實現(xiàn),而PS 端則更加適合圖片讀取模塊、顯示控制模塊等運算量相對較小但流程控制較為復(fù)雜的內(nèi)容實現(xiàn)[4]。
此部分設(shè)計主要包括梯度計算、梯度幅值和角度、生成cell統(tǒng)計直方圖和生成block 統(tǒng)計直方圖四方面內(nèi)容。
其一,梯度計算。梯度計算模塊設(shè)計選用流水線結(jié)構(gòu),此模塊由處理區(qū)和緩存區(qū)兩部分組成,處其中處理區(qū)包含8 個8bit位移寄存器(包含REG_1_1~2,REG_2_1~3,REG_3_1~3),如圖1,時鐘上升沿驅(qū)動后,8bit 亮度值L 首先進入REG_3_1,此時其他寄存值會按順序進入下一級。檢測80×60 像素圖片時,想要實現(xiàn)圖片信息完全儲存,緩存區(qū)必須設(shè)置2×57 個8bit 寄存器單元,采取這種方式可為計算梯度的亮度值一直處于處理區(qū)REG_1_2、REG_2_1、REG_2_3 及REG_3_2 中提供保障,同時這種方式無需一次性緩存所有像素值,只需要設(shè)計122 個8bit寄存器緩存,從而一定程度上降低了硬件資源使用。
圖1 梯度計算流水線結(jié)構(gòu)示意圖
其二,梯度幅值和角度。直方圖生成過程中,無需獲取具體角度值,僅需要明確對應(yīng)段號,即可實現(xiàn)直方圖生成,技術(shù)研發(fā)人員針對原有像素點的梯度幅值和角度計算公式進行簡化,獲得公式(1),其中將梯度方向表示為θn(h,w),并且θn(h,w)∈{0,1,2,…,7}。利用這種方法進行計算時,可使用4 次乘法運算、4 次比較運算以及1 次減法運算替代相對復(fù)雜的tan-1運算,進而節(jié)省運算難度,提高運算效率。
其三,cell 統(tǒng)計直方圖。單個像素點包含梯度幅值與梯度角度兩部分,設(shè)計復(fù)雜性得以降低,將梯度幅值(9bit)與梯度角度(3bit)連接成1 個數(shù)據(jù)(12bit)作為本模塊輸入內(nèi)容。本文設(shè)計cell 統(tǒng)計直方圖依然采用流水線結(jié)構(gòu),其中處理區(qū)共包括25 個寄存器單元,對應(yīng)1 個cell 單元,并利用8×14bit 表示生成cell單元統(tǒng)計直方圖h,但由于各cell 單元并不存在重疊關(guān)系,因此無需在每個時鐘周期都進行計算。
其四,block 統(tǒng)計直方圖。Block 塊由cell 單元以3×3 形式組成,其設(shè)計同樣采用流水線結(jié)構(gòu)完成,見圖2,通過上一級生成的8×14bit cell 統(tǒng)計直方圖h 依次流入下一寄存器單元,技術(shù)開發(fā)人員為有效簡化歸一化過程,研發(fā)出一種分段法近似法,這種方法將歸一化計算公式中的歸一化分母近似為以2 為底的指數(shù)冪和,進而將除法運算轉(zhuǎn)換為一種移位運算,使得算法運算速度在一定范圍內(nèi)可大幅度提升。
分類器硬件設(shè)計包含離線學(xué)習(xí)和硬件實現(xiàn)兩部分。選用矩陣實驗室(MATLAB)軟件實現(xiàn)分類器的離線學(xué)習(xí),在此期間,需要全面分析樣本中每個block 塊單元的HOG 特征值,并選擇最大累計分布差值時對應(yīng)的特征值與塊坐標(biāo)作為迭代輸出弱分類器,作為一次迭代訓(xùn)練,連續(xù)500 次。將重復(fù)弱分類器全部清除后,最終共獲得弱分類器61 個,將其聯(lián)合為一個強分類器,利用這個強分類器匹配待檢測圖片和已訓(xùn)練完成分類器,再統(tǒng)計匹配成功數(shù)量,以此判定當(dāng)前窗口是否存在行人,匹配成功個數(shù)高于閾值表明有行人,反之表明無行人。技術(shù)研發(fā)人員為明確最佳閾值,分別將閾值設(shè)置為10~50,最終發(fā)現(xiàn)分類器閾值設(shè)置為24 時,檢測效果最為優(yōu)異。在FPGA 的BRAM中固化訓(xùn)練獲取分類器參數(shù),是硬件設(shè)計階段基本內(nèi)容。首先在硬件弱分類器中設(shè)置一個8bit RAM,以保存特征值。例如本文選用80×60 大小圖像作為訓(xùn)練樣本,通過乘法運算可獲得14×10 個block 塊,但乘法運算對FPGA 產(chǎn)生資源消耗較大,若想減少資源消耗,則需要緊湊設(shè)計電路,同時還需要在設(shè)計過程中,利用寬度方向坐標(biāo)與高度方向坐標(biāo)拼接而成的8bit 定點數(shù),替代原有的寬度方向坐標(biāo)與高度方向坐標(biāo)乘積值,以達到節(jié)省資源的目的。據(jù)此,本文設(shè)計出圖3 所示分類器。
圖3 分類器設(shè)計
本文選用以ZYNQ-7000 為基礎(chǔ)的ALINX7010 開發(fā)板作為硬 件 平 臺,ARM 主 頻 設(shè) 置 為667MHz,F(xiàn)PGA 主 頻 設(shè) 置 為250MHz,選用VIVADO 2017.4 與Xilinx SDK 2018.1 作為開發(fā)環(huán)境,選用C 語言作為編程語言,行人數(shù)據(jù)庫選用CSDN,選擇大小為80×60 圖像作為樣本數(shù)據(jù),在數(shù)據(jù)庫中隨機抽取正負樣本各2000 個作為訓(xùn)練樣本集,另隨機抽取正負樣本各3000 個作為測試樣本集。檢測不同實現(xiàn)方式下算法的召回率(TPR)、精度(P)和誤檢率(FPR),結(jié)果顯示三種實現(xiàn)方法檢測準確性大致相同,詳見表1;對比不同實現(xiàn)方式資源利用和時間消耗情況,結(jié)果顯示本文應(yīng)用的PS+PL 實現(xiàn)方式資源占用更高,但運行時間明顯低于PS 實現(xiàn)方式,詳見表2。
表1 不同實現(xiàn)方式下算法檢測準確性
表2 資源和時間消耗
本文構(gòu)建基于ZYNQ-7000 算法平臺的行人檢測系統(tǒng),對FPGA 特性進行了充分利用,對HOG 算法和AdaBoost 分類器均進行優(yōu)化處理,同時充分結(jié)合ARM完成顯示與控制,在保持同等檢測效率的基礎(chǔ)上,大幅度提升檢測速度。