楊培宇 楊自恒 徐勤濤 劉爽
摘要:近年來,F(xiàn)PGA越來越多地應(yīng)用于語音識別、機器學(xué)習(xí)和云計算等領(lǐng)域。這是由于FPGA具有強大的并行計算能力,而且與通用處理器相比功耗較低。然而,這些應(yīng)用主要集中在大規(guī)模的FPGA集群上,具有極強的處理能力執(zhí)行大量的矩陣運算或卷積運算,但不適合便攜式或移動應(yīng)用程序。本文通過對單FPGA平臺的研究,探索FPGA在這些領(lǐng)域中的應(yīng)用。在本課題中,我們實現(xiàn)了一個LeNet-5模型。并在裝有XILINX ZYNQ SOC XC7Z020-1CLG400C的PYNQ板上實現(xiàn)了一個帶有AXI Stream接口的硬件加速器。我們在CPU平臺上對模型進(jìn)行訓(xùn)練,并將模型部署到PYNQ板上,用Jupyter notebook對模型進(jìn)行驗證。
關(guān)鍵詞:FPGA;卷積神經(jīng)網(wǎng)絡(luò);PYNQ
1.前言
在當(dāng)代社會,研究人員在人工智能和機器學(xué)習(xí)領(lǐng)域取得了大量的成果。特別是alpha Go的成功提高了人們對人機交互領(lǐng)域的信心。然而,深度學(xué)習(xí)相關(guān)算法以比傳統(tǒng)機器學(xué)習(xí)算法更高的精度優(yōu)勢應(yīng)用到了許多領(lǐng)域,其中卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)的研究越來越受到許多研究者的關(guān)注,已被廣泛應(yīng)用于圖像分類[1],人臉識別[2],數(shù)字視頻監(jiān)控[3]等領(lǐng)域。這些神經(jīng)網(wǎng)絡(luò)算法在上述領(lǐng)域中具有較高的精度和良好的性能。運行卷積神經(jīng)網(wǎng)絡(luò)需要大量的計算能力來模擬神經(jīng)元的操作和數(shù)據(jù)的訪問,F(xiàn)PGA由于其并行性,可以充分發(fā)揮算法的并行性。
2.LeNet-5模型
在本次設(shè)計中,我們采用的LeNet-5模型算法。該模型主要由卷積層、池化層和全連接層共同組成。對于FPGA來說,解決方案是實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的前向計算過程,它將在CPU平臺上對模型進(jìn)行訓(xùn)練,將圖像數(shù)據(jù)和已訓(xùn)練好的權(quán)值數(shù)據(jù)加載到內(nèi)存中,進(jìn)行乘法和加法運算來完成神經(jīng)元的前向計算。
(1)卷積層
卷積層的二維卷積單元計算過程可由公式(2-1)計算得到, 和 表示圖像輸入的大小, 表示卷積核的權(quán)重, 表示閾值。
(2)池化層
公式(2-2)描述了池化層的數(shù)學(xué)模型,將給定區(qū)域( )像素的最大值作為輸出 。
(3)全連接層
公式(2-3)描述了前向神經(jīng)網(wǎng)絡(luò)模型, 表示權(quán)重矩陣, 表示輸入圖像矩陣, 代表閾值。
3.設(shè)計方案
我們在PYNQ開發(fā)板上實現(xiàn)一個LeNet-5模型算法,該模型采用ZYNQ-7020-1CLG400C芯片,支持Python和Jupyter notebook編程。PYNQ是Python Productivity for ZYNQ[4]的的縮寫。從硬件架構(gòu)上看,PYNQ的核心芯片是Xilinx ZYNQ芯片,這是一個可編程邏輯(PL)與處理系統(tǒng)(PS)相結(jié)合的FPGA SOC平臺。在32位ARM內(nèi)核的處理系統(tǒng)(PS)端,我們可以利用一種FPGA硬件庫Overlay為卷積神經(jīng)網(wǎng)絡(luò)創(chuàng)建一個硬件加速器。
本文工作主要分為三個部分:
(1)PC機下利用MNIST[5]數(shù)據(jù)集進(jìn)行訓(xùn)練得到權(quán)值數(shù)據(jù),為FPGA的實現(xiàn)提供條件。
(2)PS端用于實現(xiàn)應(yīng)用程序可視化和提供編程接口,完成對PL端的控制以及應(yīng)用程序的運行;通過在PS端進(jìn)行編程,直接將數(shù)據(jù)集存放在SD卡上,當(dāng)網(wǎng)絡(luò)運行時,通過ARM端的app將SD卡的數(shù)據(jù)集加載到DDR中,通過DMA總線下發(fā)到PL端。
(3)PL端將執(zhí)行LeNet-5模型前向網(wǎng)絡(luò)的搭建。卷積層和池化層運行在卷積計算引擎中,該引擎由多組并行的乘累加計算單元組成,同時每個乘累加計算單元包含一個激活層。全連接層的其余部分在全連接計算引擎中實現(xiàn),使用乒乓緩存機制,在卷積層和全連接層之間進(jìn)行數(shù)據(jù)同步,降低對內(nèi)存的消耗。圖像數(shù)據(jù)、權(quán)值數(shù)據(jù)和輸出數(shù)據(jù)存儲在FPGA的Block RAM中。PS端和PL端的通信,使用AXI DMA總線來提高數(shù)據(jù)傳輸速度。這些模塊都由它們各自的控制單元控制,并用有限狀態(tài)機(FSM)實現(xiàn)。
4.結(jié)論
本文實現(xiàn)了LeNet-5模型算法,并通過Jupyter notebook將訓(xùn)練好的模型部署到PYNQ開發(fā)板上,設(shè)計了一個基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)硬件加速器。采用python編程語言設(shè)計了一個FPGA SOC系統(tǒng),加快了FPGA的開發(fā)進(jìn)程,拓寬了FPGA的應(yīng)用范圍。我們建立了一個硬件加速器與AXI Stream接口,與軟件程序進(jìn)行交互,證明了軟件和硬件的聯(lián)合設(shè)計可以在神經(jīng)網(wǎng)絡(luò)領(lǐng)域發(fā)揮作用。該模型可以通過CPU或GPU進(jìn)行訓(xùn)練后傳送到FPGA SOC系統(tǒng)中,開發(fā)在移動設(shè)備上的應(yīng)用。
參考文獻(xiàn)
[1]Ioannou Y,Robertson D,Shotton J,et al.Training Convolutional Neural Networks with Low-rank Filters for Efficient Image Classification[J].Journal of Bacteriology,2016,167(3):774-783.
[2]Sun Y,Wang X,Tang X.Deep Learning Face Representation from Predicting 10,000 Classes[C].IEEE Conference on computer Vision and Pattern Recognition.IEEE Computer Society,2014:1891-1898.
[3]Li J,Karmoshi S,Zhu M.Unconstrained face detection based on cascaded Convolutional Neural Networks in surveillance video [C],International Conference on Image,Vision and Computing.IEEE,2017:46-52.
[4]“PYNQ”.[Online] Available:http://www.pynq.io/home.html.
[5]http://yann.lecun.com/exdb/mnist/.
作者簡介:楊培宇(1996.01-),男,河北省河間市人,哈爾濱市南崗區(qū)黑龍江大學(xué),電子與通信工程專業(yè)2018級,碩士研究生,研究方向:人工智能及FPGA實現(xiàn)方向。