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