鄧健峰,謝 云
(廣東工業(yè)大學(xué) 自動化學(xué)院,廣東 廣州 510006)
目前,隨著汽車保有量的日益增多,道路安全問題日益突出,行人因為沒有好的保護方法而容易受到傷害。2016年中國的道路交通事故死亡人數(shù)約為40 824人,與2015年的36 178人相比,增加了4 646人[1],可見,車輛裝備具有行人檢測功能的安全駕駛系統(tǒng)是有必要的。當(dāng)前,行人檢測技術(shù)越來越廣泛,但由于行人檢測復(fù)雜度高,數(shù)據(jù)處理量大,因此大多數(shù)行人檢測平臺一般采用PC來完成。但問題就是功耗和成本比較高。因此筆者采用Xilinx公司ZYNQ-7000 SoC開發(fā)板,設(shè)計了一種車載行人檢測系統(tǒng)。開發(fā)板包含處理系統(tǒng)(Processing System,PS)和可編程邏輯(Programmable Logic,PL)兩部分[2],PS端集成雙核ARM Cortex-A9系列處理器,PL端包含Xilinx 7系列的FPGA。本系統(tǒng)采用軟硬件協(xié)同設(shè)計的方法,移植操作系統(tǒng)Linux作為系統(tǒng)軟件運行環(huán)境,滿足準(zhǔn)確度、低功耗和便攜性要求。
如圖1所示,系統(tǒng)由6個功能模塊組成,分別是采集模塊、緩存模塊、顯示模塊、行人梯度方向直方圖(Histogram of Oriented Gradient,HOG)特征提取模塊、支持向量機(Support Vector Machine,SVM)分類識別模塊和IP核驅(qū)動模塊。其中采集模塊、緩存模塊和顯示模塊在FPGA中完成,行人HOG特征提取模塊、SVM分類識別模塊和IP核驅(qū)動程序模塊則在ARM中完成。FPGA與ARM之間的通信是通過高級可擴展接口(Advanced eXtensible Interface, AXI)完成的。
圖1 系統(tǒng)構(gòu)成圖
系統(tǒng)主要模塊功能如下:
(1)采集模塊:采用攝像頭采集數(shù)據(jù),用戶可以通過IIC協(xié)議[3]設(shè)置攝像頭的工作模式。本系統(tǒng)設(shè)置RGB565、分辨率640×480的圖像輸出格式。
(2)緩存模塊:采用IP核視頻直接內(nèi)存訪問(Video Direct Memory Access,VDMA)[4]作為ARM和FPGA之間的數(shù)據(jù)傳輸工具,將圖像數(shù)據(jù)通過格式轉(zhuǎn)換緩存到外部儲存DDR3中。
(3)行人HOG特征提取主要包括圖像灰度化、圖像縮放和特征提取。
(4)SVM主要對提取的行人特征向量進行判別。
(5)顯示模塊:由IP核視頻定時控制器(Video Timing Controller,VTC)提供分辨率為640×480的顯示時序,主要任務(wù)是將已經(jīng)被方框標(biāo)出的行人位置輸出到VGA(Video Graphics Array)顯示器上,并根據(jù)行人離攝像頭距離遠近變換方框顏色。
(6)驅(qū)動模塊程序主要是IP核VDMA驅(qū)動,使得ARM處理器的軟件程序可以控制FPGA中的IP核。
本系統(tǒng)采用OV7670型號的攝像頭來采集視頻圖像,因為攝像頭上電后默認輸出YUV422格式的視頻圖像,所以通過IIC協(xié)議改變攝像頭的采集模式和輸出模式。攝像頭初始化完成后,在行同步(高電平有效)、幀同步信號(低電平有效)情況下,每兩個像素時鐘周期輸出一個16位的RGB565的像素值,同時輸出有效的寫使能信號、行同步信號和幀同步信號。
系統(tǒng)采用DDR3緩存視頻數(shù)據(jù)。在開發(fā)板結(jié)構(gòu)中,DDR3是ARM控制的。AXI包括3種接口標(biāo)準(zhǔn),分別是AXI4、AXI-Stream和AXI-Lite[5]。FPGA中的圖像數(shù)據(jù)主要以AXI-Stream與ARM通信,所以攝像頭采集的數(shù)據(jù)信號要轉(zhuǎn)換成AXI-Stream的接口信號,而AXI-Stream不能直接和ARM相連[6]。本設(shè)計采用VDMA,通過AXI_HP(High Performance)接口將數(shù)據(jù)緩存到DDR3中[7]。ARM端讀取DDR3數(shù)據(jù)并進行處理,處理后的數(shù)據(jù)通過AXI_GP(General Purpose)接口傳到FPGA中[7],最后轉(zhuǎn)換成RGB565格式輸出。圖2為分辨率為640×480的實景效果圖。
圖2 實景效果圖
本系統(tǒng)采用了“HOG+SVM”框架的行人檢測算法,完整的行人檢測流程如圖3所示。
圖3 行人檢測流程圖
本系統(tǒng)采用HOG作為行人特征。HOG提取分為6個部分:圖像預(yù)處理、圖像縮放、梯度計算、梯度統(tǒng)計、重疊Block標(biāo)準(zhǔn)化和特征組合,具體過程如下:
(1)原始圖像灰度化,目的是弱化光照效果,減少圖像信息?;叶戎礸(x,y)的計算公式為:
g(x,y)=0.3r+0.59g+0.11b
(1)
其中r、g、b分別為像素H(x,y)中紅、綠、藍的分量值。
(2)由于行人相對于攝像頭的距離各有不同,會造成視頻圖像中行人的大小不一。本設(shè)計是利用滑動窗口掃描法檢測圖像中行人,滑動窗口的尺寸是64×128。為了能夠提取出圖像中大小不同的行人的特征,需要對原幀圖像按照一定比例進行縮放操作,然后對每一尺度下的圖像都利用滑動窗口遍歷掃描[8],提取行人HOG特征,直到圖像縮小到不小于滑動窗口的尺寸為止??s放算法采用二維線性插值法,該算法計算復(fù)雜度不高,實現(xiàn)效果較好。
(3)對滑動窗口進行單元和塊的劃分,水平方向和垂直方向上的滑動窗口掃描步長均為8像素。用8×8像素的單元(cell)對窗口進行劃分,形成了8×16=128個單元。把上下左右4個相鄰的單元視為一個塊(Block),一個塊的滑動步長也是8像素,每一個像素的梯度方向范圍為0°~180°,平均劃分為9個區(qū)間。計算窗口里每個像素的梯度大小和方向。
像素點H(x,y)的梯度為:
Gx(x,y)=H(x+1,y)-H(x-1,y)
(2)
Gy(x,y)=H(x,y+1)-H(x,y-1)
(3)
像素點H(x,y)的梯度幅值為:
(4)
像素點H(x,y)的梯度方向為:
(5)
(4)空間和方向上的梯度統(tǒng)計,首先在cell中統(tǒng)計9維向量,一般像素點的梯度方向離散化到9個區(qū)間中,則它會對相鄰的2個區(qū)間有影響(梯度方向如果在某個區(qū)間的中心,則認為只對該區(qū)間有影響),每個cell中的向量統(tǒng)計都是基于該cell中每個像素點進行投票,投票的權(quán)重根據(jù)該像素點的梯度幅值在方向和位置上三線性插值到相鄰兩個梯度方向中心上計算出來[9]。其次,在一個Block中,一個cell中的像素梯度方向?qū)α硪粋€cell的像素也有影響,統(tǒng)計Block梯度直方圖時除了對單個cell的統(tǒng)計,還要考慮對其他cell的投影權(quán)重,因此采用三線性插值法求出權(quán)重。最后,因為每個Block按照一定的步長在水平和垂直方向上移動,所以Block與Block是相互重疊的,每個cell的梯度直方圖在不同的Block中被重復(fù)計算,對Block中的特征向量使用L2-norm函數(shù)進行標(biāo)準(zhǔn)化能獲得更好的檢測效果[9]。
(5) 將所有的Block的特征向量組合得出(所檢測的目標(biāo))描述子,在64×128的掃描窗口中,水平方向一共有7個Block,垂直方向一共有15個Block,一個cell的描述子為9維,一個Block的描述子為36維,整個掃描窗口的描述子就為3 780維,這樣完成了行人特征提取。
SVM是一種基于結(jié)構(gòu)風(fēng)險最小化原則的模式分類方法,可將多類的問題轉(zhuǎn)化為多個兩類的問題來解決[9]。使用SVM前先進行訓(xùn)練,然后再讀取已經(jīng)訓(xùn)練好的分類器(XML文件)進行行人檢測,這樣既節(jié)省時間,也不會影響檢測率。當(dāng)行人檢測時,求每個檢測窗口產(chǎn)生的3 780維向量與XML文件里的3 780維檢測子向量內(nèi)積,如果結(jié)果大于0則被認為檢測到行人,并保存當(dāng)前檢測窗口的位置。分類器訓(xùn)練使用的是INRIA數(shù)據(jù)庫,該訓(xùn)練庫包含正樣本集和負樣本集,正樣本集包含3 500張含有人體的圖片,分辨率為64×128,負樣本集包含1 200張不含人體的圖片,每張隨機截取10張分辨率為64×128的圖片,一共為12 000張,得到特征向量矩陣A,利用A訓(xùn)練SVM分類器。當(dāng)完成訓(xùn)練時,重新對負樣本集進行行人檢測,收集錯誤檢測到的矩形框,把這些誤判保存并加入原來負樣本集中,重新進行SVM的訓(xùn)練,這樣能顯著減少誤報。
當(dāng)所有尺度下的圖像檢測完畢后,如果有行人就會輸出滑動窗口的四點坐標(biāo),再用方框?qū)⑵溥B起來,但這樣同一個行人會產(chǎn)生尺度不同的行人方框,需要窗口融合算法將重疊的方框合并成一個方框,核心思想是將所有的矩形框分為若干類,初始為空,遍歷所有矩形框,如果每兩個矩形框的四個相應(yīng)頂點的差值的絕對值都在0.5范圍內(nèi),則認為屬于同一類,否則是不同類。然后計算每一類別的平均矩形框位置,將類別中個數(shù)少于設(shè)定闕值的矩形框舍棄,只有當(dāng)某一個類別中的矩形框個數(shù)大于設(shè)定的闕值,才保留該類別。最后將大矩形框里的小矩形框舍棄,得出融合的窗口,并在圖像中表示出來。
VDMA驅(qū)動程序是通過AXI-Lite接口向VDMA中不同功能的寄存器進行賦值實現(xiàn)的,因為FPGA和ARM之間圖像數(shù)據(jù)傳輸是通過IP核VDMA傳輸?shù)?,所以用戶需要控制VDMA來控制傳輸,當(dāng)開始幀緩存前需要分配好每幀首地址。當(dāng)ARM端進行數(shù)據(jù)處理,讀取一幀圖像數(shù)據(jù)時,VDMA寫通道中斷[10],幀緩存暫停,完成處理并顯示后,幀緩存繼續(xù)工作,以此循環(huán)。
本系統(tǒng)采用軟硬件協(xié)同設(shè)計方式實現(xiàn),利用了FPGA+ARM架構(gòu)。FPGA部分通過VDMA將圖像數(shù)據(jù)緩存到DDR3,由ARM做算法處理,最終將結(jié)果輸出到顯示器上。行人檢測系統(tǒng)的評價標(biāo)準(zhǔn)是系統(tǒng)輸出的矩形框能否包含行人軀體80%以上。軟件性能測試結(jié)果通過準(zhǔn)確率(Precision)和覆蓋率(Recall)曲線描述,準(zhǔn)確率和覆蓋率計算公式如下:
(6)
(7)
首先從ETH行人數(shù)據(jù)庫截取4段不同場景的視頻在Linux系統(tǒng)上進行測試,4段視頻分別是晴天,人多;晴天,人少;陰天,人多;陰天,人少,每段視頻都是20 s,600幀圖像。系統(tǒng)平均處理一幀圖像需要0.45 s,在不影響正確率情況下,可以調(diào)整圖像的縮放比例使處理速度加快。表1為4種情況下行人檢測系統(tǒng)檢測率和誤檢率統(tǒng)計結(jié)果。由表1看出,在晴天情況下,人多時的檢測率要低于人少時的檢測率,人多時的誤檢率要高于人少時的誤檢率。在行人數(shù)量相近的情況下,晴天時的檢測率要高于陰天的檢測率,晴天時的誤檢率要低于陰天時的誤檢率。圖4是行人檢測部分的準(zhǔn)確率和覆蓋率曲線圖,從圖中可看出,當(dāng)準(zhǔn)確率達到85%時,覆蓋率達到70%,當(dāng)覆蓋率達到85%,準(zhǔn)確率也達到72%,基本達到預(yù)期效果。
表1 行人檢測系統(tǒng)檢測率和誤檢率
圖4 行人檢測的準(zhǔn)確率和覆蓋率曲線圖
圖5、圖6是行人檢測系統(tǒng)校園實景測試效果圖。圖5是行人比較多的畫面,圖中出現(xiàn)的方框大小、粗細不同表示行人距離攝像頭的遠近不同,線條粗的表明行人距離攝像頭較遠,線條較細的表明行人距離攝像頭較近。
圖6是行人比較少的畫面,存在漏檢現(xiàn)象,主要是因為行人距離攝像頭較遠,光照不足而導(dǎo)致,但基本達到理想預(yù)期。
圖5 行人較多的檢測結(jié)果圖
圖6 行人較少的檢測結(jié)果圖
本文在ZYNQ平臺上進行嵌入式軟硬件協(xié)同設(shè)計,結(jié)合梯度直方圖和支持向量機算法進行行人檢測,在FPGA端實現(xiàn)了圖像采集和顯示功能,在ARM端進行行人檢測和分類。該系統(tǒng)已經(jīng)進行了測試,當(dāng)準(zhǔn)確率達到85%時,覆蓋率達到70%,當(dāng)覆蓋率達到85%,準(zhǔn)確率也達到72%,達到基本應(yīng)用要求。行人多時準(zhǔn)確率不高,主要是行人遮擋影響了準(zhǔn)確率。誤檢主要是因為行人的影子、諸如路燈和樹這些柱狀物體的干擾。行人的服飾與背景相似、光照不足是造成漏檢的原因之一。如果要降低漏檢率就要增加包含人各種動作的正樣本來訓(xùn)練SVM,在SVM分類器選擇上,可以采用非線性和線性分類器級聯(lián),以提高檢測速度。本系統(tǒng)實現(xiàn)了一種低功耗、靈活的嵌入式行人檢測系統(tǒng),在實際應(yīng)用中有比較大的意義,具有良好的發(fā)展?jié)摿Α?/p>
[1] 中華人民共和國國家統(tǒng)計局.中華人民共和國2016年國民經(jīng)濟和社會發(fā)展統(tǒng)計公報[N].經(jīng)濟日報,2017-03-01(5).
[2] 孟繁星.基于ZYNQ-7000的視頻圖像處理系統(tǒng)設(shè)計[J].信息通信,2015(8): 60-62.
[3] 莫長江,李俊宏,駱綺健,等.基于ZYNQ AP SoC的安全駕駛系統(tǒng)設(shè)計[J].電子產(chǎn)品世界,2017(Z1):38-41.
[4] Xilinx.LogiCORE IP AXI video direct memory access v6.3[EB/OL].[2017-10-04].http://china.xilinx.com/support/documentation/ip-documentation/axi-vdma/v6_3/pg020_axi_vdma.pdf.
[5] 鄭建立,漆榮輝,張璐.基于AXI4-Stream總線的數(shù)字視頻采集接口IP核設(shè)計[J].電子科技,2016,29(9):161-165.
[6] 曾爽,應(yīng)駿,王健,等.基于ZYNQ的人臉檢測的快速實現(xiàn)[J].電視技術(shù),2015,39(15):144-147.
[7] 陸佳華,潘祖龍,彭競?cè)A.嵌入式系統(tǒng)軟硬件協(xié)同設(shè)計實踐指南:基于Xilinx ZYNQ[M].北京:機械工業(yè)出版社,2014.
[8] 梁新宇.基于ZYNQ的行人檢測系統(tǒng)的軟硬件協(xié)同實現(xiàn)[D].大連:大連海事大學(xué),2016.
[9] 徐光柱, 雷幫軍. 實用性目標(biāo)檢測與跟蹤算法原理與應(yīng)用[M]. 北京:國防工業(yè)出版社,2015.
[10] 符曉,張國斌,朱鴻順.Xilinx ZYNQ-7000 AP Soc開發(fā)實戰(zhàn)指南[M].北京:清華大學(xué)出版社,2016.