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