《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于FPGA加速的卷積神經網絡識別系統(tǒng)
基于FPGA加速的卷積神經網絡識別系統(tǒng)
2020年電子技術應用第2期
林志文,林志賢,郭太良,林珊玲
福州大學 物理與信息工程學院,福建 福州350116
摘要: 針對卷積神經網絡(CNN)在通用CPU以及GPU平臺上推斷速度慢、功耗大的問題,采用FPGA平臺設計了并行化的卷積神經網絡推斷系統(tǒng)。通過運算資源重用、并行處理數(shù)據(jù)和流水線設計,并利用全連接層的稀疏性設計稀疏矩陣乘法器,大大提高運算速度,減少資源的使用。系統(tǒng)測試使用ORL人臉數(shù)據(jù)庫,實驗結果表明,在100 MHz工作頻率下,模型推斷性能分別是CPU的10.24倍,是GPU的3.08倍,是基準版本的1.56倍,而功率還不到2 W。最終在模型壓縮了4倍的情況下,系統(tǒng)識別準確率為95%。
中圖分類號: TN409;TP391
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.191000
中文引用格式: 林志文,林志賢,郭太良,等. 基于FPGA加速的卷積神經網絡識別系統(tǒng)[J].電子技術應用,2020,46(2):24-27.
英文引用格式: Lin Zhiwen,Lin Zhixian,Guo Tailiang,et al. Recognition system of convolution neural network based on FPGA acceleration[J].Application of Electronic Technique,2020,46(2):24-27.
Recognition system of convolution neural network based on FPGA acceleration
Lin Zhiwen,Lin Zhixian,Guo Tailiang,Lin Shanling
School of Physics and Information Engineering,F(xiàn)uzhou University,F(xiàn)uzhou 350116,China
Abstract: A convolutional neural network(CNN) inference system is designed based on the FPGA platform for the problem that the convolutional neural network infers at low speed and it is power consuming on the general CPU and GPU platforms. By computing resource reusing, parallel processing of data and pipeline design, it greatly improved the computing speed, and reduced the use of computing and storage resources by model compression and sparse matrix multipliers using the sparseness of the fully connected layer. The system uses the ORL face database. The experimental results show that the model inference performance is 10.24 times of the CPU, 3.08 times of the GPU and 1.56 times of the benchmark version at the working frequency of 100 MHz, and the power is less than 2 W. When the model is compressed by 4 times, the system identification accuracy is 95%.
Key words : convolutional neural network(CNN);FPGA;face recognition;sparsity

0 引言

    隨著近些年深度學習的迅速發(fā)展和廣泛的應用,卷積神經網絡(CNN)[1]已經成為檢測和識別領域最好的方法,它可以自動地從數(shù)據(jù)集中學習提取特征,而且網絡層數(shù)越多,提取的特征越有全局性。通過局部連接和權值共享可以提高模型的泛化能力,大幅度提高了識別分類的精度。并且隨著物聯(lián)網的發(fā)展,部署嵌入式端的卷積神經網絡要處理大量的數(shù)據(jù),這將會消耗大量的資源與能量,而嵌入式設備通常用電池維持工作,頻繁更換電池將會提高成本,因此對于推斷階段的運算加速以及低功耗設計有重要實際意義。

    CNN的不同卷積核的運算之間是相互獨立的,而且全連接層的矩陣乘法不同行之間也是獨立的,因此神經網絡的推斷在CPU平臺上串行計算的方式是非常低效的。GPU可以通過流處理器實現(xiàn)一定的并行性,但是缺乏對于網絡并行結構的深度探索,不是最優(yōu)的方案。而基于FPGA的神經網絡可以更好地實現(xiàn)網絡并行計算與資源復用,因此本文采用FPGA加速卷積神經網絡運算。

    此前已有一些基于FPGA的卷積神經網絡加速器,WANG D設計了流水線卷積計算內核[2];宋宇鯤等人針對激活函數(shù)進行設計優(yōu)化[3];王昆等人通過ARM+FPGA軟硬件協(xié)同設計的異構系統(tǒng)加速神經網絡[4];張榜通過雙緩沖技術與流水線技術對卷積優(yōu)化[5]。本文針對卷積神經網絡的并行性以及數(shù)據(jù)與權值的稀疏性,對卷積層和全連接層進行優(yōu)化,根據(jù)卷積核的獨立性設計單指令多數(shù)據(jù)(Single Instruction Multiple Data,SIMD)的卷積與流水線結構,提高計算速度與資源效率,利用全連接層數(shù)據(jù)極大的稀疏性,設計稀疏矩陣乘法器減少計算冗余,然后對模型參數(shù)定點優(yōu)化,最后將實驗結果與CPU、GPU平臺以及基準設計[5]進行比較分析。

1 CNN模型與網絡參數(shù)

1.1 CNN模型

    CNN是基于多層感知機的神經網絡結構,典型的CNN模型由輸入層、卷積層、全連接層、輸出層和分類層組成,如圖1所示。由輸入層讀取圖像數(shù)據(jù),由卷積層通過多個卷積核分別和輸入圖卷積生成多個特征圖,再由池化層降維提取特征圖信息。經過幾個卷積層后,再將特征圖展開成向量,輸入給全連接層,經過全連接層與輸出層的矩陣運算得到輸出,然后再通過Softmax分類層得到分類概率輸出。

rgzn1-t1.gif

    本文CNN模型結構如圖2所示,該結構包含兩個卷積層、兩個池化層、一個全連接層,一個輸出層、一個使用Softmax的分類層,其中激活函數(shù)不算作一層,共7層的網絡結構。其中兩個卷積層的輸出特征圖個數(shù)分別為16、32,卷積核大小為3×3,移動步長為1,輸出尺寸與輸入相同,系統(tǒng)使用線性修正單元(Rectified Linear Units,ReLU)作為激活函數(shù)。全連接層和輸出層分別有1 024和40個神經元。由圖2計算得權值與偏置的數(shù)量,本文模型共4 765 416個參數(shù),其中全連接層占了99%的參數(shù)。

rgzn1-t2.gif

    由于分類層是用輸出層的值通過Softmax函數(shù)求得每個分類的概率,而Softmax函數(shù)的運算消耗大量的運算資源,而且對結果沒有影響,這是不必要的運算開銷,因此用輸出值來判別即可。

1.2 CNN網絡參數(shù)

    根據(jù)所選的網絡結構,本文使用TensorFlow框架搭建模型,學習率設置為0.000 1,使用自適應學習率優(yōu)化算法Adam加速模型收斂,訓練選擇ReLU激活函數(shù)增加模型參數(shù)的稀疏性,使用交叉熵作為損失函數(shù),加入L2正則化項減小過擬合。訓練了50輪后,模型在ORL人臉數(shù)據(jù)庫的正確率達到95%,滿足實際應用需要。

    神經網絡模型推斷降低一定的精度不會影響準確率,而且在FPGA上定點數(shù)比起浮點數(shù)的計算更有效率,所以將模型參數(shù)由32 bit浮點數(shù)量化為16 bit定點數(shù),由深度壓縮[6]中的方法,將16 bit的定點數(shù)權值再用8 bit的索引表示,索引表的值共28=256個,然后通過反向傳播算法[7]更新索引表后,將索引和索引表存在外部存儲器中。

2 CNN系統(tǒng)硬件設計

    本系統(tǒng)針對CNN模型結構以及數(shù)據(jù)與參數(shù)的特點進行設計和優(yōu)化,卷積同一層內不同特征圖的計算有天然的并行性,不同層之間因為不是獨立的,無法同時進行計算,而全連接層和輸出層都可以使用卷積層的PE來完成乘法運算。系統(tǒng)設計如圖3所示。

rgzn1-t3.gif

    首先通過控制器從外部存儲器DDR3中讀取圖像數(shù)據(jù)到輸入緩沖區(qū),輸入緩沖區(qū)通過移位寄存器設計,通過固定窗口讀取數(shù)據(jù)。讀取權值索引到權值緩沖區(qū),然后由索引讀取權值輸入給卷積的處理單元(Processing Element,PE),經過每層的卷積后加上偏置,用ReLU函數(shù)激活,再經過池化操作降維,然后特征圖經過非零檢測模塊統(tǒng)計稀疏性,讀取對應的非零神經元的權值,然后由稀疏矩陣乘法器(Sparse Matrix-Vector Multiplication,SPMV)完成矩陣乘法,加上偏置后輸出給輸出層。輸出層復用卷積層的PE完成矩陣乘法,然后遍歷輸出值求出最大值對應的神經元序號即為預測值。

2.1 卷積層硬件設計優(yōu)化

    如圖4所示,卷積層采用移位寄存器作為輸入緩存,本文卷積層的卷積核尺寸為3×3,每次讀取9個權值,使用9個定點小數(shù)乘法器,然后使用4層加法樹結構將結果與偏置相加。然后通過ReLU函數(shù)激活,該函數(shù)表達式為y=max(0,x),因此只要判斷輸入數(shù)據(jù)的符號位即可,使用一個數(shù)據(jù)選擇器即可完成運算,消耗一個時鐘。第一層卷積的不同卷積核是獨立計算的,所以使用16個PE同時計算,然后通過流水線技術,可以在一個時鐘周期內產生16個卷積輸出,輸出數(shù)據(jù)的延遲包括讀取數(shù)據(jù)延遲和加法樹的延遲。

rgzn1-t4.gif

2.2 池化層設計優(yōu)化

    池化層用于對輸入特征圖降低維度和提取信息,池化分為平均值池化和最大值池化,本文使用最大值池化,池化尺寸為2×2,步長為2。池化層使用比較器得到最大值,經過兩次比較得到結果。經研究發(fā)現(xiàn),池化操作不影響卷積操作,因此設計了池化與卷積的并行計算,如圖5所示。并行操作節(jié)省了池化運算的時間,加快了網絡的計算速度。

rgzn1-t5.gif

2.3 全連接層與輸出層的設計與優(yōu)化

2.3.1 全連接層

    全連接層將所有輸入特征圖和輸出向量相連接,每個神經元的值由卷積層特征圖加權求和得到。本文多次實驗發(fā)現(xiàn)全連接層有大量為零的神經元,如圖6所示。因此可以利用神經元的稀疏性減少乘法的操作,設計如圖7所示稀疏矩陣乘法器。首先通過非零元檢測模塊,得到不為零的神經元,然后復用卷積層的PE來計算非零神經元與權值的乘加操作。這樣可以重復利用運算資源,并大大降低運算的時間復雜度,提高運算速度。

rgzn1-t6.gif

rgzn1-t7.gif

2.3.2 輸出層

    輸出層對全連接層神經元做矩陣運算,然后通過Softmax層得到所有分類的概率。但是由于Softmax函數(shù)含有指數(shù)運算,需要消耗大量運算資源和時間,而且對結果沒有影響,因此將Softmax層移除,直接使用輸出層值的大小來分類。本文多次實驗發(fā)現(xiàn)輸出層沒有稀疏性,大部分神經元不為零,輸出層的計算復用SPMV的第二個部分進行計算,由PE與串行加法器組成,分別計算輸出層的40個分類的值,40個運算單元共用一路數(shù)據(jù)輸入,采用滑動窗口讀取數(shù)據(jù),多路PE同時計算,由串行加法器輸出結果。最后遍歷求得輸出值最大值,并輸出分類結果。

3 數(shù)據(jù)量化與模型壓縮

    本文模型使用了兩個卷積層、一個全連接層、一個輸出層的結構,使用參數(shù)量由前文所述有476萬參數(shù),而全連接層又占了99%的參數(shù),因此主要針對全連接層進行數(shù)據(jù)壓縮。對于所有層的參數(shù)進行數(shù)據(jù)量化,從原本模型64 bit浮點數(shù)量化為16 bit定點數(shù),然后用8 bit的索引,共256個共享的權值,然后通過反向傳播算法[7]修正原始權值與共享權值的差值。壓縮率公式如下: 

    rgzn1-gs1.gif

其中,n為參數(shù)量,b為量化的比特數(shù),k為b bit能表示的類數(shù)(256類)。式(1)代入數(shù)據(jù)求得壓縮率大約為4倍。

4 實驗結果

    系統(tǒng)設計使用Xilinx公司的ZYNQ-7000 xc7z020clg400-1芯片作為實驗平臺,該芯片內部有85 000個邏輯單元、4.9 MB的Block RAM、220個DSP48單元、1 GB片外DRAM,滿足本系統(tǒng)所需。CPU平臺使用Core i5 9400f,主頻為2.9 GHz,GPU平臺使用GTX 1060,GPU主頻為1.5 GHz,顯存帶寬為160 GB/s。將實驗結果與CPU、GPU平臺以及基準設計[5]對比,資源使用情況如表1所示,實驗結果如表2所示。

rgzn1-b1.gif

rgzn1-b2.gif

    本文硬件平臺的工作頻率為100 MHz,識別每張圖片時間為0.27 ms,功耗為1.95 W,性能達到了27.74 GOPS/s,分別是CPU、GPU平臺的10.24倍、3.08倍,以及基準設計的1.56倍,能效比優(yōu)于CPU、GPU平臺以及基準設計[5]。在數(shù)據(jù)量化為16 bit定點數(shù)之后,識別率達到95%,沒有造成精度損失。

5 結論

    本文設計了一種基于FPGA的卷積神經網絡加速系統(tǒng)。首先使用ORL人臉數(shù)據(jù)庫,在卷積神經網絡模型LeNet-5上訓練,然后用短定點數(shù)對神經網絡進行量化,再使用索引與索引表的方式進一步壓縮模型的全連接層,最終壓縮率達到了4倍。同時,從并行結構設計、流水線技術、時序合并等方式增加系統(tǒng)并行性,通過對模型稀疏性的利用,極大地加速了模型運算。本文使用的CNN模型壓縮方法和利用稀疏性加速的方法理論上也適用于其他的硬件平臺,在嵌入式終端部署更具有優(yōu)勢。在與CPU、GPU平臺以及相關文獻的設計的對比分析后,本文設計在性能和能耗比上都優(yōu)于此前的方案。

參考文獻

[1] KRIZHEVSKY A,SUTSKEVER I,HINTON G.ImageNet classification with deep convolutional neural networks[C].NIPS. Curran Associates Inc.,2012.

[2] WANG D,XU K,JIANG D.PipeCNN:an OpenCL-based open-source FPGA accelerator for convolution neural networks[C].2017 International Conference on Field Programmable Technology(ICFPT).IEEE,2017.

[3] 宋宇鯤,高曉航,張多利,等.Sigmoid函數(shù)的分段非線性擬合法及其FPGA實現(xiàn)[J].電子技術應用,2017,43(8):49-51.

[4] 王昆,周驊.基于深度學習的實時識別硬件系統(tǒng)框架設計[J].電子技術應用,2018,44(10):11-14.

[5] 張榜,來金梅.一種基于FPGA的卷積神經網絡加速器的設計與實現(xiàn)[J].復旦學報(自然科學版),2018,57(2):236-242.

[6] HAN S,MAO H,DALLY W J.Deep compression:compressing deep neural networks with pruning, trained quantization and Huffman coding[J].Fiber,2015,56(4):3-7.

[7] CUN LE Y,BOSER B,DENKER J S,et al.Handwritten digit recognition with a back-propagation network[J].Advances in Neural Information Processing Systems,1997,2(2):396-404.



作者信息:

林志文,林志賢,郭太良,林珊玲

(福州大學 物理與信息工程學院,福建 福州350116)

此內容為AET網站原創(chuàng),未經授權禁止轉載。