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

圖1 人臉識別
本文設計并實現了人臉檢測系統,應用于各種人臉檢測的場景。本系統可以對所需的元素進行框定處理,并具有較快的處理速度。后續在PYNQ上也可以實現更多人臉識別的案例,對神經卷積網絡進行研究。