電子科技大學(xué)電子科學(xué)與工程學(xué)院 周 航 賀雅娟
近年來,卷積神經(jīng)網(wǎng)絡(luò)(CNN)在機(jī)器視覺等方面取得了巨大成功。為提升嵌入式設(shè)備上運(yùn)行CNN的速度和能效,本文針對LeNet-5網(wǎng)絡(luò)模型,先對該網(wǎng)絡(luò)模型進(jìn)行感知量化訓(xùn)練,特征圖和權(quán)重量化為8位整型數(shù)據(jù)。然后設(shè)計(jì)一種卷積神經(jīng)網(wǎng)絡(luò)加速器系統(tǒng),該片上系統(tǒng)(SoC)采用Cortex-M3為處理器,所提出的系統(tǒng)處理一張MNIST圖像所需時(shí)間5.3ms,精度達(dá)到98.2%。
CNN已成功應(yīng)用于圖像識別等應(yīng)用,隨著CNN解決更復(fù)雜的問題,計(jì)算和存儲的需求急劇增加。然而,在一些低功耗的邊緣計(jì)算設(shè)備中,功耗是重要指標(biāo)。目前的研究主要針對CNN推理階段模型的壓縮和量化。大多數(shù)設(shè)計(jì)都用定點(diǎn)計(jì)算單元代替浮點(diǎn)單元。ESE采用12位定點(diǎn)權(quán)重和16位定點(diǎn)神經(jīng)元設(shè)計(jì),Guo等在嵌入式FPGA上使用8位單元進(jìn)行設(shè)計(jì)。但之前的設(shè)計(jì)主要采用Zynq或者HLS開發(fā),功耗較大。
本文設(shè)計(jì)了一種基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)加速系統(tǒng)。首先,通過感知量化訓(xùn)練的方法,實(shí)現(xiàn)了將浮點(diǎn)CNN模型的各層權(quán)重和特征圖量化成8比特整型;其次,通過采用單層時(shí)分復(fù)用的方式,設(shè)計(jì)流水線架構(gòu)提高數(shù)據(jù)吞吐率;再次,設(shè)計(jì)基于Cortex-M3的SoC;最后,采用MNIST手寫數(shù)字進(jìn)行方案和功能驗(yàn)證。
LeNet-5是一個典型的卷積神經(jīng)網(wǎng)絡(luò)模型,不包含輸入一共有7層。分別為3層卷積層,2層池化層,以及2層全連接層。
針對目前CNN模型較大,參數(shù)多且不適合在移動設(shè)備上使用,Google團(tuán)隊(duì)提出了一種量化方案。該方案在推理過程中使用純整。量化方案是量化整數(shù)q到實(shí)數(shù)r的映射,如公式(1)所示:
其中常數(shù)S和Z是量化參數(shù)。S表示比例系數(shù),是一個任意的正實(shí)數(shù)。Z表示零點(diǎn)。CNN中主要的操作,比如卷積層的卷積,以及全連接層的乘累加,都可以看成是矩陣乘法??紤]實(shí)數(shù)兩個N×N的矩陣r1和r2的乘積r3=r1r2。將每個矩陣ra的項(xiàng)表示為ra(r,j),其中1≤i,j≤N,用qa(r,j)表示量化項(xiàng),根據(jù)矩陣乘法的定義,得到:
乘以浮點(diǎn)數(shù)M,可以轉(zhuǎn)化成先乘以定點(diǎn)數(shù)M1,再進(jìn)行右移n+31。
將公式(2)中所有零點(diǎn)Z1,Z2,Z3都設(shè)為0,可以大大簡化推理階段的運(yùn)算。另外將偏置加法和激活函數(shù)合并到其中。比例系數(shù)Sbias=S1S2,零點(diǎn)Zbias=0。由于選用的激活函數(shù)是ReLU,所以只需要將結(jié)果鉗位到[0,255]。
本系統(tǒng)采用CPU+FPGA的架構(gòu),包括AHB互聯(lián)矩陣、Cortex-M3處理器、DMA、緊耦合存儲器、雙端口緩存、AHB2APB橋和CNN加速器,如圖1所示。
圖1 系統(tǒng)框圖
存儲器部分包含ITCM,DTCM和雙端口RAM。ITCM存放程序鏡像文件;DTCM作為堆棧區(qū);Dual RAM作為權(quán)重?cái)?shù)據(jù),輸入特征圖,以及中間、最終結(jié)果緩存區(qū),一端連接L1級總線,CPU和DMA均可以訪問,另一端連接CNN加速器。
CNN加速器設(shè)計(jì)的整體結(jié)構(gòu)如圖2所示,并行方案采用輸出通道和權(quán)重卷積核內(nèi)部并行,同時(shí)計(jì)算6個輸出通道,以及卷積核25個乘法器同時(shí)計(jì)算。
圖2 CNN加速器整體結(jié)構(gòu)
特征圖行緩沖的窗口尺寸為5x5,可以通過數(shù)據(jù)選擇器選擇輸入特征圖的寬度。權(quán)重特征圖的行緩沖設(shè)計(jì)同理,由于卷積核均為5x5,所以不需要數(shù)據(jù)選擇器。
乘累加陣列輸入為25個8位特征圖和25個8位權(quán)重,對應(yīng)相乘后采用加法樹方式累加,最后得到1個位寬為21的有符號數(shù)。
偏置加法器用于累加偏置或者中間結(jié)果。選擇哪一個是由數(shù)據(jù)選擇器控制,輸出一個32位結(jié)果。
量化激活模塊包含一個32x32位的乘法器,用于將累加結(jié)果和乘法系數(shù)相乘,再經(jīng)過右移,鉗位到[0,255],經(jīng)過四舍五入得到量化的結(jié)果。
池化模塊設(shè)計(jì)思路同卷積模塊,采用最大池化。包含3個比較器和一個行緩沖,針對不同層可以選擇不同長度的特征圖,窗口尺寸為2x2。
本文采用的FPGA是Xilinx公司的Artix-7XC7A200T芯片,開發(fā)環(huán)境為Vivado 2018.3。卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練和推理采用Pytorch 1.7.1。實(shí)驗(yàn)的數(shù)據(jù)集是MNIST數(shù),CNN模型采用LeNet-5。
本文的SoC工作的頻率為100MHz,識別一張MNIST圖片的時(shí)間為5.3ms,F(xiàn)PGA的功耗由Vivado的Report Power工具獲得,僅為0.448W。本文處理單幀的時(shí)間比較長,但是功耗是其他文獻(xiàn)的四分之一。由于采用感知量化,識別正確率FPGA實(shí)現(xiàn)和軟件實(shí)現(xiàn)一致,達(dá)到98.2%。實(shí)驗(yàn)結(jié)果對比如表1所示。
表1 實(shí)驗(yàn)結(jié)果對比
結(jié)論:為了解決嵌入式設(shè)備上實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)速度慢和功耗大的問題,本文提出了一種卷積神經(jīng)網(wǎng)絡(luò)加速系統(tǒng)。首先對卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行感知量化,得到8比特的權(quán)重、特征值和量化參數(shù)。采用Cortex-M3作為處理器設(shè)計(jì)片上系統(tǒng),大大降低了功耗。本設(shè)計(jì)在Artix-7 Xc7a200T上實(shí)現(xiàn)了LeNet-5。通過MNIST數(shù)據(jù)集,實(shí)驗(yàn)結(jié)果表明本設(shè)計(jì)保持了準(zhǔn)確性,降低了功耗。