寧波工程學(xué)院電子與信息工程學(xué)院 浙江 寧波 315211
人臉識(shí)別技術(shù)對(duì)于我國(guó)國(guó)防、通信、生物醫(yī)療等領(lǐng)域有著重要的意義。在識(shí)別圖像過程中,輸入的圖像千奇百怪,各種圖形的特征也各不相同。例如人臉上的膚色、五官和表情數(shù)不勝數(shù)。同時(shí)人臉識(shí)別系統(tǒng)系統(tǒng)的設(shè)計(jì)具有很大的挑戰(zhàn)性。
常用的人臉識(shí)別系統(tǒng)多采用CPU為核心,存在處理速度不夠快等問題。而FPGA是并行處理數(shù)據(jù),并有浮點(diǎn)數(shù)處理單元,高效的開發(fā)速率,與GPU相比具有較低的功耗,與ASIC相比具有較低的開發(fā)成本。在同樣的功耗下,PYNQ平臺(tái)能夠在速率上超過純ARM平臺(tái)和PC平臺(tái)[1]。目前廣泛使用的硬件加速平臺(tái)有GPU、ASIC、FPGA三種。FPGA可重構(gòu)、集成度高、功耗低,可以適應(yīng)計(jì)算量大但計(jì)算機(jī)構(gòu)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)模型[2]。本文提出了一種基于PYNQ-Z1設(shè)計(jì)思路,為人臉識(shí)別提供了一套易于實(shí)現(xiàn)的、低成本、可擴(kuò)展的解決方案。
本系統(tǒng)總體設(shè)計(jì)框圖如圖1所示。系統(tǒng)包含輸入模塊、FPGA模塊和輸出模塊,將圖像保存在一定路徑中,再加載到程序中,對(duì)圖像進(jìn)行預(yù)處理,然后主控模塊PYNQ會(huì)對(duì)圖像進(jìn)行識(shí)別,先是對(duì)圖像進(jìn)行預(yù)處理,然后是對(duì)圖像進(jìn)行定位和對(duì)齊,在圖像中對(duì)應(yīng)所需的元素用黃色的框框住,最后實(shí)現(xiàn)人臉識(shí)別。
2.1 FPGA模塊 本系統(tǒng)采用的硬件是選自賽靈思公司研發(fā)的FPGA模塊。PYNQ-Z1是支持python進(jìn)行開發(fā),不同于賽靈思公司的另一塊FPGA模塊BYNQ,使用python進(jìn)行模塊化開發(fā)可以大大加快系統(tǒng)的開發(fā)速度。由于python存在三方接口,python可以直接調(diào)用opencv庫(kù)進(jìn)行對(duì)圖像的處理。PYNQ-Z1本身也自帶很多資源,作為賽靈思公司的進(jìn)階版,它帶有較多的邏輯處理單元。PYNQ-Z1是異構(gòu)系統(tǒng),有著兩塊cortex-A9的CPU和FPGA,即為兩端。PS(處理系統(tǒng))和PL(可編程邏輯)可相互配合使用,兩者用AXI總線相連,有高速的處理速度。在處理神經(jīng)網(wǎng)絡(luò)時(shí),ARM內(nèi)核可以與部署功能強(qiáng)大且 靈活的卷積專用處理器協(xié)同使用。專用卷積處理器嵌入卷積引擎和可編程軟核,釋放ARM處理器的大部分監(jiān)督職責(zé),并允許加速器由軟件以超細(xì)度控制[3]。
3.1 PYNQ開發(fā)框架 FPGA傳統(tǒng)的開發(fā)框架有兩張,其中一種是FPGA和CPU互聯(lián)的,另一種是和RAM互聯(lián)。這兩種方式的弊端是要求開發(fā)人員關(guān)注硬件的實(shí)現(xiàn)細(xì)節(jié)。這兩種開發(fā)方式會(huì)讓開發(fā)人員在開發(fā)的過程中遇到各種問題,這些問題的解決也十分困難。PYNQ的出現(xiàn)解決了這一問題,能夠讓開發(fā)人員在開發(fā)的過程中避開這些問題。PYNQ是一個(gè)全新的開發(fā)框架,無論是哪類開發(fā)人員都能專注與工程的開發(fā),而不用太深入的研究硬件。在開發(fā)工程中可以調(diào)用IP核,讓整個(gè)設(shè)計(jì)的實(shí)現(xiàn)和測(cè)試更加方便,非常適合進(jìn)行復(fù)雜系統(tǒng)設(shè)計(jì)。
3.2 HLS加速的基本理論 傳統(tǒng)的FPGA開發(fā)流程中,是采用基于RTL的設(shè)計(jì)方式來進(jìn)行邏輯設(shè)計(jì)的,這種開發(fā)方式有優(yōu)點(diǎn)也有缺點(diǎn)。其優(yōu)點(diǎn)在于,可以進(jìn)行自定義的接口協(xié)議的開發(fā),在進(jìn)行邏輯黏合時(shí)候就有很強(qiáng)的優(yōu)勢(shì),設(shè)計(jì)者可以在開發(fā)的過程中從底層的硬件出發(fā),設(shè)計(jì)相應(yīng)邏輯接口[4]。而賽靈思提供的HLS在高級(jí)綜合的過程中,設(shè)計(jì)代碼中的數(shù)組、結(jié)構(gòu)體和循環(huán)體等都會(huì)通過編譯器編譯映射為存儲(chǔ)器、計(jì)數(shù)器和狀態(tài)機(jī)等硬件結(jié)構(gòu)。這種方式明顯縮短了開發(fā)周期,減少了開發(fā)人員成本。
3.3 人臉識(shí)別程序 Python開發(fā)先調(diào)用預(yù)先準(zhǔn)備好三方庫(kù)。本系統(tǒng)將輸出結(jié)果顯示在屏幕上,因此先對(duì)HDMI進(jìn)行初始化。然后輸入待檢測(cè)的圖片,將數(shù)據(jù)存入在PYNQ中。然后調(diào)用opencv和numpy的三方庫(kù),對(duì)臉部進(jìn)行識(shí)別,將識(shí)別出的數(shù)據(jù)用numpy數(shù)組的形式存儲(chǔ)在內(nèi)存中,最后將數(shù)組輸出在顯示屏中,并以JPG格式存儲(chǔ)。
為測(cè)試系統(tǒng)的實(shí)現(xiàn)效果,在PYNQ-Z1的實(shí)物板上進(jìn)行實(shí)驗(yàn)。首先準(zhǔn)備好一張8GB的sd卡,在官網(wǎng)上下載相應(yīng)的鏡像文件。使用win32磁盤燒寫軟件將鏡像文件燒入。然后設(shè)置PYNQ的網(wǎng)絡(luò)環(huán)境,在對(duì)應(yīng)的局域網(wǎng)內(nèi)將域名改為192.168.1.1,嘗試ping通網(wǎng)絡(luò)。接通電源,打開PYNQ,若四盞等閃爍則PYNQ開啟成功。Python的運(yùn)行環(huán)境選擇jupyter notebook,在jupyternotebook中運(yùn)行程序,需要將所檢測(cè)的人臉圖片寫入相應(yīng)的加載路徑,然后一步步執(zhí)行程序,實(shí)驗(yàn)效果如圖1所示。
圖1 人臉識(shí)別
本文設(shè)計(jì)并實(shí)現(xiàn)了人臉檢測(cè)系統(tǒng),應(yīng)用于各種人臉檢測(cè)的場(chǎng)景。本系統(tǒng)可以對(duì)所需的元素進(jìn)行框定處理,并具有較快的處理速度。后續(xù)在PYNQ上也可以實(shí)現(xiàn)更多人臉識(shí)別的案例,對(duì)神經(jīng)卷積網(wǎng)絡(luò)進(jìn)行研究。