文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.191000
中文引用格式: 林志文,林志賢,郭太良,等. 基于FPGA加速的卷積神經(jīng)網(wǎng)絡(luò)識別系統(tǒng)[J].電子技術(shù)應(yīng)用,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.
0 引言
隨著近些年深度學(xué)習(xí)的迅速發(fā)展和廣泛的應(yīng)用,卷積神經(jīng)網(wǎng)絡(luò)(CNN)[1]已經(jīng)成為檢測和識別領(lǐng)域最好的方法,它可以自動地從數(shù)據(jù)集中學(xué)習(xí)提取特征,而且網(wǎng)絡(luò)層數(shù)越多,提取的特征越有全局性。通過局部連接和權(quán)值共享可以提高模型的泛化能力,大幅度提高了識別分類的精度。并且隨著物聯(lián)網(wǎng)的發(fā)展,部署嵌入式端的卷積神經(jīng)網(wǎng)絡(luò)要處理大量的數(shù)據(jù),這將會消耗大量的資源與能量,而嵌入式設(shè)備通常用電池維持工作,頻繁更換電池將會提高成本,因此對于推斷階段的運算加速以及低功耗設(shè)計有重要實際意義。
CNN的不同卷積核的運算之間是相互獨立的,而且全連接層的矩陣乘法不同行之間也是獨立的,因此神經(jīng)網(wǎng)絡(luò)的推斷在CPU平臺上串行計算的方式是非常低效的。GPU可以通過流處理器實現(xiàn)一定的并行性,但是缺乏對于網(wǎng)絡(luò)并行結(jié)構(gòu)的深度探索,不是最優(yōu)的方案。而基于FPGA的神經(jīng)網(wǎng)絡(luò)可以更好地實現(xiàn)網(wǎng)絡(luò)并行計算與資源復(fù)用,因此本文采用FPGA加速卷積神經(jīng)網(wǎng)絡(luò)運算。
此前已有一些基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)加速器,WANG D設(shè)計了流水線卷積計算內(nèi)核[2];宋宇鯤等人針對激活函數(shù)進(jìn)行設(shè)計優(yōu)化[3];王昆等人通過ARM+FPGA軟硬件協(xié)同設(shè)計的異構(gòu)系統(tǒng)加速神經(jīng)網(wǎng)絡(luò)[4];張榜通過雙緩沖技術(shù)與流水線技術(shù)對卷積優(yōu)化[5]。本文針對卷積神經(jīng)網(wǎng)絡(luò)的并行性以及數(shù)據(jù)與權(quán)值的稀疏性,對卷積層和全連接層進(jìn)行優(yōu)化,根據(jù)卷積核的獨立性設(shè)計單指令多數(shù)據(jù)(Single Instruction Multiple Data,SIMD)的卷積與流水線結(jié)構(gòu),提高計算速度與資源效率,利用全連接層數(shù)據(jù)極大的稀疏性,設(shè)計稀疏矩陣乘法器減少計算冗余,然后對模型參數(shù)定點優(yōu)化,最后將實驗結(jié)果與CPU、GPU平臺以及基準(zhǔn)設(shè)計[5]進(jìn)行比較分析。
1 CNN模型與網(wǎng)絡(luò)參數(shù)
1.1 CNN模型
CNN是基于多層感知機(jī)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),典型的CNN模型由輸入層、卷積層、全連接層、輸出層和分類層組成,如圖1所示。由輸入層讀取圖像數(shù)據(jù),由卷積層通過多個卷積核分別和輸入圖卷積生成多個特征圖,再由池化層降維提取特征圖信息。經(jīng)過幾個卷積層后,再將特征圖展開成向量,輸入給全連接層,經(jīng)過全連接層與輸出層的矩陣運算得到輸出,然后再通過Softmax分類層得到分類概率輸出。
本文CNN模型結(jié)構(gòu)如圖2所示,該結(jié)構(gòu)包含兩個卷積層、兩個池化層、一個全連接層,一個輸出層、一個使用Softmax的分類層,其中激活函數(shù)不算作一層,共7層的網(wǎng)絡(luò)結(jié)構(gòu)。其中兩個卷積層的輸出特征圖個數(shù)分別為16、32,卷積核大小為3×3,移動步長為1,輸出尺寸與輸入相同,系統(tǒng)使用線性修正單元(Rectified Linear Units,ReLU)作為激活函數(shù)。全連接層和輸出層分別有1 024和40個神經(jīng)元。由圖2計算得權(quán)值與偏置的數(shù)量,本文模型共4 765 416個參數(shù),其中全連接層占了99%的參數(shù)。
由于分類層是用輸出層的值通過Softmax函數(shù)求得每個分類的概率,而Softmax函數(shù)的運算消耗大量的運算資源,而且對結(jié)果沒有影響,這是不必要的運算開銷,因此用輸出值來判別即可。
1.2 CNN網(wǎng)絡(luò)參數(shù)
根據(jù)所選的網(wǎng)絡(luò)結(jié)構(gòu),本文使用TensorFlow框架搭建模型,學(xué)習(xí)率設(shè)置為0.000 1,使用自適應(yīng)學(xué)習(xí)率優(yōu)化算法Adam加速模型收斂,訓(xùn)練選擇ReLU激活函數(shù)增加模型參數(shù)的稀疏性,使用交叉熵作為損失函數(shù),加入L2正則化項減小過擬合。訓(xùn)練了50輪后,模型在ORL人臉數(shù)據(jù)庫的正確率達(dá)到95%,滿足實際應(yīng)用需要。
神經(jīng)網(wǎng)絡(luò)模型推斷降低一定的精度不會影響準(zhǔn)確率,而且在FPGA上定點數(shù)比起浮點數(shù)的計算更有效率,所以將模型參數(shù)由32 bit浮點數(shù)量化為16 bit定點數(shù),由深度壓縮[6]中的方法,將16 bit的定點數(shù)權(quán)值再用8 bit的索引表示,索引表的值共28=256個,然后通過反向傳播算法[7]更新索引表后,將索引和索引表存在外部存儲器中。
2 CNN系統(tǒng)硬件設(shè)計
本系統(tǒng)針對CNN模型結(jié)構(gòu)以及數(shù)據(jù)與參數(shù)的特點進(jìn)行設(shè)計和優(yōu)化,卷積同一層內(nèi)不同特征圖的計算有天然的并行性,不同層之間因為不是獨立的,無法同時進(jìn)行計算,而全連接層和輸出層都可以使用卷積層的PE來完成乘法運算。系統(tǒng)設(shè)計如圖3所示。
首先通過控制器從外部存儲器DDR3中讀取圖像數(shù)據(jù)到輸入緩沖區(qū),輸入緩沖區(qū)通過移位寄存器設(shè)計,通過固定窗口讀取數(shù)據(jù)。讀取權(quán)值索引到權(quán)值緩沖區(qū),然后由索引讀取權(quán)值輸入給卷積的處理單元(Processing Element,PE),經(jīng)過每層的卷積后加上偏置,用ReLU函數(shù)激活,再經(jīng)過池化操作降維,然后特征圖經(jīng)過非零檢測模塊統(tǒng)計稀疏性,讀取對應(yīng)的非零神經(jīng)元的權(quán)值,然后由稀疏矩陣乘法器(Sparse Matrix-Vector Multiplication,SPMV)完成矩陣乘法,加上偏置后輸出給輸出層。輸出層復(fù)用卷積層的PE完成矩陣乘法,然后遍歷輸出值求出最大值對應(yīng)的神經(jīng)元序號即為預(yù)測值。
2.1 卷積層硬件設(shè)計優(yōu)化
如圖4所示,卷積層采用移位寄存器作為輸入緩存,本文卷積層的卷積核尺寸為3×3,每次讀取9個權(quán)值,使用9個定點小數(shù)乘法器,然后使用4層加法樹結(jié)構(gòu)將結(jié)果與偏置相加。然后通過ReLU函數(shù)激活,該函數(shù)表達(dá)式為y=max(0,x),因此只要判斷輸入數(shù)據(jù)的符號位即可,使用一個數(shù)據(jù)選擇器即可完成運算,消耗一個時鐘。第一層卷積的不同卷積核是獨立計算的,所以使用16個PE同時計算,然后通過流水線技術(shù),可以在一個時鐘周期內(nèi)產(chǎn)生16個卷積輸出,輸出數(shù)據(jù)的延遲包括讀取數(shù)據(jù)延遲和加法樹的延遲。
2.2 池化層設(shè)計優(yōu)化
池化層用于對輸入特征圖降低維度和提取信息,池化分為平均值池化和最大值池化,本文使用最大值池化,池化尺寸為2×2,步長為2。池化層使用比較器得到最大值,經(jīng)過兩次比較得到結(jié)果。經(jīng)研究發(fā)現(xiàn),池化操作不影響卷積操作,因此設(shè)計了池化與卷積的并行計算,如圖5所示。并行操作節(jié)省了池化運算的時間,加快了網(wǎng)絡(luò)的計算速度。
2.3 全連接層與輸出層的設(shè)計與優(yōu)化
2.3.1 全連接層
全連接層將所有輸入特征圖和輸出向量相連接,每個神經(jīng)元的值由卷積層特征圖加權(quán)求和得到。本文多次實驗發(fā)現(xiàn)全連接層有大量為零的神經(jīng)元,如圖6所示。因此可以利用神經(jīng)元的稀疏性減少乘法的操作,設(shè)計如圖7所示稀疏矩陣乘法器。首先通過非零元檢測模塊,得到不為零的神經(jīng)元,然后復(fù)用卷積層的PE來計算非零神經(jīng)元與權(quán)值的乘加操作。這樣可以重復(fù)利用運算資源,并大大降低運算的時間復(fù)雜度,提高運算速度。
2.3.2 輸出層
輸出層對全連接層神經(jīng)元做矩陣運算,然后通過Softmax層得到所有分類的概率。但是由于Softmax函數(shù)含有指數(shù)運算,需要消耗大量運算資源和時間,而且對結(jié)果沒有影響,因此將Softmax層移除,直接使用輸出層值的大小來分類。本文多次實驗發(fā)現(xiàn)輸出層沒有稀疏性,大部分神經(jīng)元不為零,輸出層的計算復(fù)用SPMV的第二個部分進(jìn)行計算,由PE與串行加法器組成,分別計算輸出層的40個分類的值,40個運算單元共用一路數(shù)據(jù)輸入,采用滑動窗口讀取數(shù)據(jù),多路PE同時計算,由串行加法器輸出結(jié)果。最后遍歷求得輸出值最大值,并輸出分類結(jié)果。
3 數(shù)據(jù)量化與模型壓縮
本文模型使用了兩個卷積層、一個全連接層、一個輸出層的結(jié)構(gòu),使用參數(shù)量由前文所述有476萬參數(shù),而全連接層又占了99%的參數(shù),因此主要針對全連接層進(jìn)行數(shù)據(jù)壓縮。對于所有層的參數(shù)進(jìn)行數(shù)據(jù)量化,從原本模型64 bit浮點數(shù)量化為16 bit定點數(shù),然后用8 bit的索引,共256個共享的權(quán)值,然后通過反向傳播算法[7]修正原始權(quán)值與共享權(quán)值的差值。壓縮率公式如下:
其中,n為參數(shù)量,b為量化的比特數(shù),k為b bit能表示的類數(shù)(256類)。式(1)代入數(shù)據(jù)求得壓縮率大約為4倍。
4 實驗結(jié)果
系統(tǒng)設(shè)計使用Xilinx公司的ZYNQ-7000 xc7z020clg400-1芯片作為實驗平臺,該芯片內(nèi)部有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。將實驗結(jié)果與CPU、GPU平臺以及基準(zhǔn)設(shè)計[5]對比,資源使用情況如表1所示,實驗結(jié)果如表2所示。
本文硬件平臺的工作頻率為100 MHz,識別每張圖片時間為0.27 ms,功耗為1.95 W,性能達(dá)到了27.74 GOPS/s,分別是CPU、GPU平臺的10.24倍、3.08倍,以及基準(zhǔn)設(shè)計的1.56倍,能效比優(yōu)于CPU、GPU平臺以及基準(zhǔn)設(shè)計[5]。在數(shù)據(jù)量化為16 bit定點數(shù)之后,識別率達(dá)到95%,沒有造成精度損失。
5 結(jié)論
本文設(shè)計了一種基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)加速系統(tǒng)。首先使用ORL人臉數(shù)據(jù)庫,在卷積神經(jīng)網(wǎng)絡(luò)模型LeNet-5上訓(xùn)練,然后用短定點數(shù)對神經(jīng)網(wǎng)絡(luò)進(jìn)行量化,再使用索引與索引表的方式進(jìn)一步壓縮模型的全連接層,最終壓縮率達(dá)到了4倍。同時,從并行結(jié)構(gòu)設(shè)計、流水線技術(shù)、時序合并等方式增加系統(tǒng)并行性,通過對模型稀疏性的利用,極大地加速了模型運算。本文使用的CNN模型壓縮方法和利用稀疏性加速的方法理論上也適用于其他的硬件平臺,在嵌入式終端部署更具有優(yōu)勢。在與CPU、GPU平臺以及相關(guān)文獻(xiàn)的設(shè)計的對比分析后,本文設(shè)計在性能和能耗比上都優(yōu)于此前的方案。
參考文獻(xiàn)
[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].電子技術(shù)應(yīng)用,2017,43(8):49-51.
[4] 王昆,周驊.基于深度學(xué)習(xí)的實時識別硬件系統(tǒng)框架設(shè)計[J].電子技術(shù)應(yīng)用,2018,44(10):11-14.
[5] 張榜,來金梅.一種基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)加速器的設(shè)計與實現(xiàn)[J].復(fù)旦學(xué)報(自然科學(xué)版),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.
作者信息:
林志文,林志賢,郭太良,林珊玲
(福州大學(xué) 物理與信息工程學(xué)院,福建 福州350116)