文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.182417
中文引用格式: 王昆,周驊. 基于深度學(xué)習(xí)的實(shí)時(shí)識(shí)別硬件系統(tǒng)框架設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2018,44(10):11-14.
英文引用格式: Wang Kun,Zhou Hua. Design of real-time recognition hardware system framework based on deep learning[J]. Application of Electronic Technique,2018,44(10):11-14.
0 引言
近年來(lái)隨著深度學(xué)習(xí)的迅速發(fā)展[1-3],卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network)被廣泛使用[4-5],特別是在圖像識(shí)別場(chǎng)景中的應(yīng)用[6-7]。為滿足更多場(chǎng)景應(yīng)用,需要設(shè)計(jì)出一種能夠根據(jù)實(shí)際場(chǎng)景需求可替換不同CNN網(wǎng)絡(luò)模型的系統(tǒng)框架。雖然CNN的使用廣泛,但是目前應(yīng)用CNN的硬件平臺(tái)主要是通過(guò)普通處理器CPU來(lái)實(shí)現(xiàn)的[8-9],其電路架構(gòu)并不適合作為CNN實(shí)現(xiàn)的計(jì)算平臺(tái),因?yàn)镃NN當(dāng)中的模型結(jié)構(gòu),其內(nèi)部的每層卷積運(yùn)算都只與當(dāng)前卷積層的卷積核相關(guān),與其他層的運(yùn)算是互相獨(dú)立的,所以CNN的結(jié)構(gòu)是一種并行的,使得CPU整體的計(jì)算效率較低。而現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)作為一種高度密集型計(jì)算加速器件,具有可重配置特性,利用硬件描述語(yǔ)言完成相關(guān)結(jié)構(gòu)設(shè)計(jì)實(shí)現(xiàn),因此可使用FPGA的硬件結(jié)構(gòu)特性實(shí)現(xiàn)CNN的計(jì)算加速。
ZYNQ是Xilinx公司設(shè)計(jì)的一種FPGA+ARM的芯片,該芯片通過(guò)使用AXI總線互聯(lián)技術(shù)將FPGA與ARM整合在一起,從而可充分發(fā)揮出兩種器件結(jié)構(gòu)的優(yōu)勢(shì)。
本文使用ZYNQ作為實(shí)現(xiàn)平臺(tái),采用軟硬件協(xié)同的方式,通過(guò)ARM完成輸入圖像數(shù)據(jù)的實(shí)時(shí)采集、存儲(chǔ)和顯示,利用FPGA的硬件電路特性完成卷積神經(jīng)網(wǎng)絡(luò)的硬化實(shí)現(xiàn),設(shè)計(jì)出了一種基于深度學(xué)習(xí)的實(shí)時(shí)識(shí)別硬件系統(tǒng)框架,從而可根據(jù)實(shí)際需求選擇合適的網(wǎng)絡(luò)模型。為了驗(yàn)證系統(tǒng)硬件框架設(shè)計(jì)的功能性,本文采用MNIST和Fashion MNIST數(shù)據(jù)集訓(xùn)練的兩個(gè)CNN網(wǎng)絡(luò)模型作為系統(tǒng)框架的功能驗(yàn)證。整體系統(tǒng)框架結(jié)構(gòu)如圖1所示。
1 圖像采集存儲(chǔ)及顯示
1.1 圖像采集存儲(chǔ)
系統(tǒng)設(shè)計(jì)使用OV7670 CMOS攝像頭進(jìn)行系統(tǒng)視頻圖像數(shù)據(jù)的實(shí)時(shí)獲取,并且將其分辨率配置為320像素×240像素,輸出數(shù)據(jù)為RGB565色彩格式。由于不同模塊之間的工作時(shí)鐘不同,因此需要根據(jù)圖像采集模塊的控制信號(hào)和攝像頭的時(shí)鐘信號(hào),將采集到的實(shí)時(shí)視頻數(shù)據(jù)流存儲(chǔ)至雙口FIFO中進(jìn)行跨時(shí)鐘域處理,然后通過(guò)數(shù)據(jù)總線將圖像數(shù)據(jù)存儲(chǔ)在ZYNQ的雙端口的BRAM當(dāng)中,從而使得整個(gè)系統(tǒng)能夠?qū)Σ杉膱D像數(shù)據(jù)進(jìn)行讀取和處理。
1.2 圖像顯示
系統(tǒng)框架設(shè)計(jì)中使用ILI9341作為控制芯片,分辨率為320×240的2.8寸TFT顯示屏作為視頻圖像數(shù)據(jù)的輸出顯示,然后通過(guò)SPI總線接口協(xié)議完成對(duì)攝像頭模塊獲取到的每一幀圖像數(shù)據(jù)進(jìn)行發(fā)送傳輸。圖像顯示模塊通過(guò)數(shù)據(jù)總線將TFT顯示屏的ILI9341控制模塊連接在雙端口的BRAM上,根據(jù)雙口BRAM當(dāng)中的存儲(chǔ)數(shù)據(jù)量進(jìn)行圖像數(shù)據(jù)的高速讀取,將讀取到的圖像數(shù)據(jù)存儲(chǔ)至雙口FIFO當(dāng)中進(jìn)行存儲(chǔ)及讀取,從而實(shí)現(xiàn)將攝像頭采集的視頻圖像數(shù)據(jù)進(jìn)行顯示。同時(shí)根據(jù)CNN網(wǎng)絡(luò)模型的幀控制信號(hào)及運(yùn)算完成控制信號(hào),將圖像數(shù)據(jù)讀取至CNN網(wǎng)絡(luò)模型當(dāng)中進(jìn)行運(yùn)算識(shí)別,識(shí)別完成后也將運(yùn)算結(jié)果更新至雙端口FIFO進(jìn)行結(jié)果輸出顯示。
2 卷積神經(jīng)網(wǎng)絡(luò)硬件設(shè)計(jì)及實(shí)現(xiàn)
系統(tǒng)框架中的可替換網(wǎng)絡(luò)模塊設(shè)計(jì)實(shí)現(xiàn)了兩個(gè)結(jié)構(gòu)一致的CNN網(wǎng)絡(luò)模型,其結(jié)構(gòu)如圖2所示,該CNN網(wǎng)絡(luò)模型結(jié)構(gòu)由1個(gè)輸入層、6個(gè)卷積層、3個(gè)池化層、1個(gè)全連接層和 1個(gè)輸出層共12層構(gòu)成。
其中第1層、第12層為輸入層和輸出層。輸入層完成經(jīng)過(guò)預(yù)處理調(diào)整后的一幀圖像數(shù)據(jù)輸入,由于用來(lái)驗(yàn)證系統(tǒng)框架設(shè)計(jì)的兩種訓(xùn)練數(shù)據(jù)集為MNIST和Fashion MNIST數(shù)據(jù)集,因此網(wǎng)絡(luò)的輸入層均為28×28的窗口,輸入數(shù)據(jù)為784個(gè)。輸出層連接的權(quán)重個(gè)數(shù)為16×11=176個(gè),輸出結(jié)果為11種,其中一種為無(wú)效。
第2、3、5、6、8、9層均為卷積層。輸出特征圖的個(gè)數(shù)分別為4、4、8、8、16、16個(gè),每層卷積核大小為3×3,移動(dòng)步長(zhǎng)均為1,并且卷積運(yùn)算結(jié)果的圖像尺寸大小與輸入圖像一致,激活函數(shù)選擇便于硬件實(shí)現(xiàn)的ReLU作為激活函數(shù)且無(wú)偏置,每一層的參數(shù)分別為:
第2層:權(quán)重為3×3×4=36個(gè)
第3層:權(quán)重為3×3×4×4=144個(gè)
第5層:權(quán)重為3×3×4×8=288個(gè)
第6層:權(quán)重為3×3×8×8=576個(gè)
第8層:權(quán)重為3×3×8×16=1 152個(gè)
第9層:權(quán)重為3×3×16×16=2 304個(gè)
因此整個(gè)卷積層總共有4 500個(gè)參數(shù)。
第4、7、10層為池化層。在池化層也采用卷積運(yùn)算,卷積核大小為2×2,使用最大池化方法。
2.1 網(wǎng)絡(luò)模型參數(shù)
根據(jù)設(shè)定的網(wǎng)絡(luò)結(jié)構(gòu)及選用的方法,通過(guò)使用Keras深度學(xué)習(xí)庫(kù)的函數(shù)式模型來(lái)進(jìn)行CNN整體網(wǎng)絡(luò)結(jié)構(gòu)的搭建,同時(shí)將網(wǎng)絡(luò)的學(xué)習(xí)率設(shè)置為0.001,選擇隨機(jī)梯度下降法SGD作為學(xué)習(xí)方法,經(jīng)過(guò)130次迭代訓(xùn)練后完成兩種CNN網(wǎng)絡(luò)模型的建立,并且將訓(xùn)練好的網(wǎng)絡(luò)模型參數(shù)進(jìn)行存儲(chǔ)。最終建立的整體網(wǎng)絡(luò)性能如圖3所示,可以看出隨著迭代次數(shù)的增加,網(wǎng)絡(luò)的性能逐漸提升,并經(jīng)過(guò)測(cè)試后,CNN網(wǎng)絡(luò)的整體精度可以達(dá)到97.14%,其性能基本能夠滿足實(shí)際應(yīng)用的需要。
由于FPGA本身并不適合進(jìn)行浮點(diǎn)運(yùn)算,因此為了實(shí)現(xiàn)FPGA的網(wǎng)絡(luò)硬化,必須將所生成的網(wǎng)絡(luò)模型參數(shù)
進(jìn)行定點(diǎn)數(shù)處理,但因?yàn)樗傻木W(wǎng)絡(luò)模型參數(shù)數(shù)值范圍較大,會(huì)使得定點(diǎn)數(shù)所需位數(shù)較多從而消耗大量的硬件邏輯資源,所以本文首先對(duì)網(wǎng)絡(luò)模型中的權(quán)值參數(shù)進(jìn)行歸一化處理,然后尋找出最優(yōu)定點(diǎn)數(shù)表示的位數(shù)使得權(quán)值參數(shù)所需位數(shù)最小且不影響整體網(wǎng)絡(luò)的精度。通過(guò)Python讀取網(wǎng)絡(luò)參數(shù)并進(jìn)行最優(yōu)尋找后系統(tǒng)設(shè)計(jì)使用12位位寬進(jìn)行定點(diǎn)數(shù)表示,并將轉(zhuǎn)換后網(wǎng)絡(luò)模型的權(quán)值參數(shù)按照一定的順序存儲(chǔ)至片內(nèi)BRAM中。
2.2 卷積層硬件實(shí)現(xiàn)
在系統(tǒng)框架設(shè)計(jì)的卷積層中,為了實(shí)現(xiàn)卷積運(yùn)算,需要將BRAM中存儲(chǔ)的圖像數(shù)據(jù)進(jìn)行緩沖處理。因?yàn)橐M(jìn)行卷積運(yùn)算,其過(guò)程是將輸入的每一幀圖像數(shù)據(jù)與每一層所對(duì)應(yīng)卷積層的卷積核Kernel所重疊的部分進(jìn)行對(duì)位相乘相加,所以必須使得輸入的數(shù)據(jù)與卷積核的大小相匹配。在系統(tǒng)設(shè)計(jì)中利用移位寄存器(Shift Register)來(lái)實(shí)現(xiàn)對(duì)圖像數(shù)據(jù)的緩沖處理,通過(guò)移位寄存器能夠?qū)RAM當(dāng)中的圖像數(shù)據(jù)進(jìn)行緩存處理并且能夠進(jìn)行移位操作,使得圖像數(shù)據(jù)與對(duì)應(yīng)的卷積核進(jìn)行對(duì)位卷積運(yùn)算。由于設(shè)計(jì)中的輸出圖像與輸入圖像數(shù)據(jù)大小一致,因此還需要對(duì)輸入圖像數(shù)據(jù)進(jìn)行填充操作以保證輸出后的特征圖大小保持不變,且通過(guò)移位寄存器使得系統(tǒng)能夠在運(yùn)行時(shí)實(shí)現(xiàn)單周期的卷積運(yùn)算,提升了系統(tǒng)的計(jì)算效率。當(dāng)卷積運(yùn)算完成后還需要經(jīng)過(guò)激活函數(shù),系統(tǒng)設(shè)計(jì)中使用了ReLU函數(shù)作為輸出激活函數(shù),該函數(shù)的輸出取決于輸入數(shù)值大小,當(dāng)輸入數(shù)值大于零時(shí)輸出原輸入值,小于零時(shí)輸出零,因此硬件容易實(shí)現(xiàn),系統(tǒng)中使用比較器實(shí)現(xiàn)激活函數(shù),從而完成卷積層的計(jì)算,進(jìn)而提取當(dāng)前層的輸入圖像特征。
2.3 卷積層運(yùn)算并行優(yōu)化
由于整個(gè)CNN網(wǎng)絡(luò)模型中的每個(gè)計(jì)算模塊是互不相關(guān)且獨(dú)立的,充分體現(xiàn)出了其結(jié)構(gòu)能夠進(jìn)行并行運(yùn)算的特性,尤其是在進(jìn)行卷積運(yùn)算時(shí),而FPGA本身的硬件電路結(jié)構(gòu),也使其具有進(jìn)行并行運(yùn)算的特點(diǎn)。因此在整體系統(tǒng)框架設(shè)計(jì)中均采用了并行化的實(shí)現(xiàn)方法,框架設(shè)計(jì)中為每個(gè)卷積層的卷積核進(jìn)行了卷積核組的設(shè)定,根據(jù)特征圖輸入和運(yùn)算后特征輸出的個(gè)數(shù)來(lái)確定卷積核組的數(shù)量,來(lái)并行地對(duì)設(shè)定的每個(gè)卷積核組進(jìn)行卷積運(yùn)算,獲取輸入圖特征。因?yàn)橄到y(tǒng)框架設(shè)計(jì)中對(duì)池化層中的最大采樣也采用了卷積運(yùn)算來(lái)完成,所以本系統(tǒng)框架設(shè)計(jì)能夠?qū)崿F(xiàn)單時(shí)鐘周期528次卷積運(yùn)算,與普通CPU的運(yùn)算時(shí)間相比較,本系統(tǒng)框架的計(jì)算效率得到了明顯提高。系統(tǒng)框架卷積運(yùn)算優(yōu)化設(shè)計(jì)具體結(jié)構(gòu)如圖4所示。
圖4中xi為特征數(shù)據(jù)輸入,wij分別是卷積核組中的不同卷積核權(quán)值,ki為不同的卷積核組,ci為特征數(shù)據(jù)輸出。
2.4 Softmax函數(shù)分類器
輸入圖像數(shù)據(jù)通過(guò)整體網(wǎng)絡(luò)中的卷積層和采樣層計(jì)算后完成對(duì)輸入圖像數(shù)據(jù)的特征提取,然后還需要將其與最后的輸出層進(jìn)行全連接才能最終獲取圖像數(shù)據(jù)的分類結(jié)果。系統(tǒng)框架設(shè)計(jì)中使用了Softmax函數(shù)作為分類器來(lái)實(shí)現(xiàn)對(duì)圖像數(shù)據(jù)的分類結(jié)果輸出。由于Softmax函數(shù)的概率分布計(jì)算是通過(guò)指數(shù)運(yùn)算得出的,且概率分布的計(jì)算結(jié)果為浮點(diǎn)數(shù),而FPGA本身的硬件結(jié)構(gòu)會(huì)使指數(shù)計(jì)算耗費(fèi)較長(zhǎng)時(shí)間,因此設(shè)計(jì)中通過(guò)查表法將計(jì)算后的指數(shù)運(yùn)算結(jié)果存儲(chǔ)至BRAM當(dāng)中,然后根據(jù)輸入圖像數(shù)據(jù)的特征值作為地址來(lái)查找所對(duì)應(yīng)的指數(shù)結(jié)果。當(dāng)一幀輸入圖像數(shù)據(jù)經(jīng)過(guò)CNN網(wǎng)絡(luò)模塊計(jì)算識(shí)別后,將結(jié)果更新至顯示模塊的BRAM當(dāng)中,并且也會(huì)通過(guò)藍(lán)牙控制模塊同時(shí)將結(jié)果發(fā)送至上位機(jī)進(jìn)行識(shí)別結(jié)果顯示。
3 系統(tǒng)測(cè)試與分析
系統(tǒng)設(shè)計(jì)中的具體硬件使用Xilinx公司的ZYNQ-7000 xc7z010clg400-1芯片作為試驗(yàn)平臺(tái),該芯片內(nèi)部擁有28k個(gè)邏輯單元,2.1 Mb的嵌入式存儲(chǔ)器,80個(gè)嵌入式乘法器,片內(nèi)資源較為豐富,基本能夠滿足系統(tǒng)框架中的CNN模型硬件設(shè)計(jì)所需要的資源。CPU軟件訓(xùn)練平臺(tái)使用Core i7-8700k處理器,主頻為3.4 GHz。使用Vivado 2018.1開(kāi)發(fā)工具完成整個(gè)硬件平臺(tái)工程。
測(cè)試過(guò)程中,分別使用對(duì)應(yīng)MNIST和Fashion MNIST數(shù)據(jù)集的測(cè)試樣本進(jìn)行實(shí)際測(cè)試,通過(guò)攝像頭對(duì)200個(gè)20種類別的圖像數(shù)據(jù)進(jìn)行實(shí)時(shí)視頻采集、顯示及識(shí)別,部分測(cè)試結(jié)果如圖5所示。
可以看出整個(gè)系統(tǒng)框架設(shè)計(jì)能夠完成對(duì)圖像數(shù)據(jù)的實(shí)時(shí)采集和顯示,同時(shí)可根據(jù)實(shí)際需要替換不同的CNN網(wǎng)絡(luò)模型且均能夠?qū)崿F(xiàn)對(duì)結(jié)果的正確識(shí)別,從而實(shí)現(xiàn)了多場(chǎng)景下的需求并增加了一定的靈活性。
系統(tǒng)框架設(shè)計(jì)中主要的硬件資源消耗及功耗估算如表1所示。
系統(tǒng)設(shè)計(jì)因?yàn)橹惺褂昧舜罅康腂RAM和FIFO進(jìn)行權(quán)值數(shù)據(jù)與圖像數(shù)據(jù)的存儲(chǔ),使得BRAM的硬件邏輯資源消耗較多,但可以看出實(shí)驗(yàn)所用使用的ZYNQ器件基本能夠滿足本文所設(shè)計(jì)的系統(tǒng)框架。
4 結(jié)論
本文設(shè)計(jì)了一種基于深度學(xué)習(xí)的實(shí)時(shí)識(shí)別硬件系統(tǒng)框架,采用軟硬件協(xié)同的方式,利用ZYNQ中的ARM部分實(shí)現(xiàn)了對(duì)圖像數(shù)據(jù)的采集及顯示,通過(guò)FPGA部分實(shí)現(xiàn)了CNN網(wǎng)絡(luò)模型的硬件設(shè)計(jì),并對(duì)整個(gè)卷積層進(jìn)行了并行運(yùn)算優(yōu)化,使得整個(gè)系統(tǒng)能夠在單時(shí)鐘周期內(nèi)同時(shí)處理所有卷積層中的528次卷積運(yùn)算,提升了運(yùn)算速度。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)框架能夠根據(jù)不同的場(chǎng)景應(yīng)用需求選擇適合的CNN網(wǎng)絡(luò)模型進(jìn)行圖像實(shí)時(shí)采集、顯示與準(zhǔn)確識(shí)別,結(jié)合ZYNQ器件中高度模塊化設(shè)計(jì)使得整個(gè)系統(tǒng)框架具有移植性高的特性,且系統(tǒng)整體運(yùn)行時(shí)識(shí)別速度快、所需功耗低。
參考文獻(xiàn)
[1] Pei Jifang,Huang Yulin,Huo Weibo,et al.SAR automatic target recognition based on multiview deep learning framework[J].IEEE Transactions on Geoscience and Remote Sensing,2018,56(4):2196-2210.
[2] LECUN Y,BENGIO Y,HINTON G.Deep learning[J].Nature,2015,521(7553):436-444.
[3] 朱虎明,李佩焦,李成,等.深度神經(jīng)網(wǎng)絡(luò)并行化研究綜述[J].計(jì)算機(jī)學(xué)報(bào),2018,41(2):1-23.
[4] 王海,蔡英鳳,賈允毅,等.基于深度卷積神經(jīng)網(wǎng)絡(luò)的場(chǎng)景自適應(yīng)道路分割算法[J].電子與信息學(xué)報(bào),2017,39(2):263-269.
[5] 蔣兆軍,成孝剛,彭雅琴,等.基于深度學(xué)習(xí)的無(wú)人機(jī)識(shí)別算法研究[J].電子技術(shù)應(yīng)用,2017,43(7):84-87.
[6] 許少尉,陳思宇.基于深度學(xué)習(xí)的圖像分類方法[J].電子技術(shù)應(yīng)用,2018,44(6):116-119.
[7] 胡振,傅昆,張長(zhǎng)水.基于深度學(xué)習(xí)的作曲家分類問(wèn)題[J].計(jì)算機(jī)研究與發(fā)展,2014,51(9):1945-1954.
[8] 張榜,來(lái)金梅.一種基于FPGA的卷積神經(jīng)網(wǎng)絡(luò)加速器的設(shè)計(jì)與實(shí)現(xiàn)[J].復(fù)旦學(xué)報(bào)(自然科學(xué)版),2018,57(2):236-242.
[9] 周飛燕,金林鵬,董軍.卷積神經(jīng)網(wǎng)絡(luò)研究綜述[J].計(jì)算機(jī)學(xué)報(bào),2017,40(6):1229-1251.
作者信息:
王 昆,周 驊
(貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,貴州 貴陽(yáng)550025)