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