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