本發(fā)明屬于數(shù)字圖像處理、模式識別技術領域,具體涉及一種在FPGA+ARM硬件平臺上實現(xiàn)基于多層卷積神經(jīng)網(wǎng)絡的手寫體字符識別方法。
背景技術:
手寫體字符識別就是通過計算機利用數(shù)字圖像處理技術實現(xiàn)圖像中手寫體字符的自動識別。隨著實際應用需求的不斷增長、計算機技術的快速發(fā)展,手寫體字符識別在辦公自動化、文獻檢索、郵件自動分揀、金融、財會等領域都有著重要的實際應用價值。雖然字符本身模式較為簡單,然而一些字符的字形寫法相近,不同人手寫同一字符的形狀差異較大,且存在不規(guī)范的書寫情況,為字符識別帶來干擾,大幅增加了計算機實現(xiàn)手寫體字符識別的復雜性。
對于手寫體字符識別問題,傳統(tǒng)處理方法,包括基于字符結構特征和基于統(tǒng)計特征的方法在內(nèi),都側重于設計者通過分析數(shù)據(jù)特點,人為設計待識別字符的特征,然后通過模式匹配方法進行手寫體字符的識別。盡管在樣本數(shù)據(jù)足夠多的前提下,一些傳統(tǒng)方法可以在設計特征性質良好時取得較好的識別性能,然而此類方法存在嚴重依賴特征設計者經(jīng)驗的特點,因此大規(guī)模應用推廣存在局限性。
近年來,在模式識別、機器學習等人工智能相關領域中,深度學習技術依靠其在算法性能方面的突出表現(xiàn)被業(yè)內(nèi)廣泛關注,成為人工智能領域新一輪的研究熱點。深度學習技術中被廣泛應用的算法模型是卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN),在計算機視覺、語音識別等方面表現(xiàn)突出。典型的CNN模型由兩部分組成:特征提取器和分類器。與傳統(tǒng)的人為設計特征不同,CNN特征提取器通過樣本數(shù)據(jù)自主學習特征,生成輸入數(shù)據(jù)的特征向量,具有較好的魯棒性。該特征向量作為分類器的輸入數(shù)據(jù)進行分類,最終得到輸入數(shù)據(jù)的識別結果。因此對于手寫體字符識別這一類問題,多層卷積神經(jīng)網(wǎng)絡是一種具備大規(guī)模推廣應用能力的方法。
經(jīng)測算,CNN中卷積層和池化層的計算占總計算量的90%以上,因此提高卷積層和池化層計算速度是提升整個算法模型效率的關鍵所在,業(yè)內(nèi)通常采用服務器+高性能GPU的方法以提升計算效率,并取得了令人滿意的加速效果。然而,GPU在帶來高性能計算的同時,也存在功耗大的缺點,對運行環(huán)境和運行時間都有特定的要求,為其實際應用帶來局限性。
與GPU類似,F(xiàn)PGA具有對大量簡單重復計算的并行處理能力,此外,F(xiàn)PGA還具備極低功耗的高效能計算特性,和GPU相比可適用于更多的實際應用場合。
目前利用FPGA加速CNN計算主要有三種方法:
(1)利用軟核CPU實現(xiàn)控制部分,配合FPGA實現(xiàn)算法加速;
(2)利用硬核SoC內(nèi)嵌的硬核ARM Cortex A9 CPU實現(xiàn)控制部分,配合FPGA實現(xiàn)算法加速;
(3)利用云端服務器配合FPGA實現(xiàn)算法加速。
三種方法各有利弊,根據(jù)不同的應用場合,可以選擇不同的加速方案。
技術實現(xiàn)要素:
本發(fā)明的目的在于提出一種計算效率高、能耗低的基于FPGA+ARM多層卷積神經(jīng)網(wǎng)絡的手寫體字符識別方法。
本發(fā)明提出的基于FPGA+ARM多層卷積神經(jīng)網(wǎng)絡的手寫體字符識別方法,具體實現(xiàn)的硬件平臺是Xilinx ZYNQ-7030可編程片上SoC,硬件平臺內(nèi)置FPGA處理器和ARM Cortex A9。充分利用FPGA對大量簡單重復計算的硬件并行處理能力和ARM的靈活可擴展優(yōu)勢,將多層卷積神經(jīng)網(wǎng)絡計算分為兩個部分,其中FPGA端實現(xiàn)占據(jù)90%以上計算量的卷積層和池化層計算,ARM端實現(xiàn)計算量較小的輸入層和全連接層。該方法可實現(xiàn)超過1000張/秒(圖像像素大小28×28)的手寫體字符識別速度,能滿足實際應用需求,處理效率功耗比是主流服務器+GPU方案的10倍以上。
本發(fā)明提出的手寫體字符識別方法,基于一個6層卷積神經(jīng)網(wǎng)絡模型,該卷積神經(jīng)網(wǎng)絡模型包括:1個輸入層,2個卷積層,2個池化層,1個全連接層。卷積核大小為5×5,卷積核滑動步長為1。池化層采用均值法,其滑動窗口大小為2×2,滑動步長為2。待識別手寫體字符圖像像素大小為28×28。經(jīng)測算,卷積層和池化層的計算量為38400次浮點數(shù)運算,輸入層和全連接層的計算量為970次浮點數(shù)運算,卷積層與池化層計算占所有計算量的97%以上,是簡單重復浮點數(shù)運算,因此適于在FPGA端實現(xiàn),利用FPGA的硬件并行處理能力完成卷積層和池化層的大量簡單重復計算。輸入層和全連接層需要根據(jù)不同的輸入圖像及應用進行調(diào)整優(yōu)化,計算量相對較小,適于在ARM端實現(xiàn)。在保證算法模型性能的前提下,大幅降低系統(tǒng)功耗。
基于上述6層卷積神經(jīng)網(wǎng)絡模型,本發(fā)明提出的手寫體字符識別方法,具體步驟為:
一、模型參數(shù)處理與加載
(1)離線訓練所使用的多層卷積神經(jīng)網(wǎng)絡模型;
(2)算法模型離線訓練完畢后,將卷積層的參數(shù)(包括卷積核與偏置量)取負,并保存在ARM端;
(3)系統(tǒng)運行后,首先加載算法模型參數(shù),并通過APB總線傳輸并緩存至FPGA端。
二、待識別圖像預處理
(1)選擇待識別的手寫字符體圖像;
(2)對輸入圖像進行歸一化處理,使其滿足模型的計算需要;
(3)ARM端將歸一化結果通過APB總線傳輸?shù)紽PGA端,經(jīng)FIFO緩存后,存放到Block RAM(塊隨機存儲器)中。
三、卷積和池化計算
在FPGA端對輸入圖像數(shù)據(jù)進行卷積層和池化層計算,算法模型設定了2個卷積層和2個池化層,具體步驟為:
(1)第1個卷積層與池化層計算
對圖像數(shù)據(jù)與網(wǎng)絡模型中第1個卷積層的卷積核進行卷積計算,將結果矩陣的各元素加上網(wǎng)絡模型第1層的偏置參數(shù),利用網(wǎng)絡模型中的激活函數(shù)Sigmoid激活。Sigmoid函數(shù)表達式為:;
例如,輸入圖像大小為28×28像素,第1個卷積層采用1個卷積核,大小為5×5的矩陣。卷積時,滑動窗尺度與卷積核大小相同,橫向與縱向滑動步長均為1,卷積計算結果矩陣的行列均為28-5+1=24。結果矩陣各元素加上偏置參數(shù),再經(jīng)過Sigmoid函數(shù)進行激活后,結果矩陣大小不變。
然后對第1個卷積層計算結果進行池化計算,采用平均值池化方法,滑動窗尺度為2×2,步長為2,將滑動窗口中的4個數(shù)值相加后取均值。例如,第1個卷積層結果矩陣大小為24×24,由于滑動窗口不存在重疊情況,所以池化計算結果矩陣大小為12×12,將其存入Block RAM;
(2)第2個卷積層與池化層計算
將第1個池化層計算結果矩陣作為第2個卷積層計算的輸入數(shù)據(jù),參照第(1)步的實現(xiàn)過程,進行第2個卷積層和第2個池化層計算。第2個卷積層設定3個卷積核,大小均為5×5。第1個池化層計算結果矩陣大小為12×12,第2個卷積層計算結果是3個8×8的矩陣,第2池化層計算結果是3個4×4的矩陣。將第2個池化層結果存入Block RAM。
四、分類識別計算
(1)特征向量從FPGA端傳回ARM端
在FPGA端,將兩層卷積計算與池化計算的結果,即輸入圖像的特征向量傳回ARM端。具體步驟為:將Block RAM中存儲的3個4×4的結果矩陣,經(jīng)過FIFO緩存后,通過APB總線傳輸回ARM端;
(2)Softmax計算獲得識別結果
第(1)步返回的特征向量與網(wǎng)絡模型中的Softmax相關數(shù)據(jù)進行計算并得出結果。具體步驟為:用Softmax權值參數(shù)矩陣乘以特征向量,加上Softmax偏置參數(shù),并通過公式1的Sigmoid函數(shù)計算,在結果中取最大值對應的索引作為結果輸出。其中,Softmax權值矩陣大小為10×48,10表示待識別字符的類別數(shù)量,48表示每個類別的權值數(shù)量。特征向量總計3×4×4=48個浮點數(shù)。Softmax偏置參數(shù)共10個,每種類別1個參數(shù)。在Sigmoid函數(shù)計算后,總計可得10個浮點數(shù),按照從0至9的順序,給出10個數(shù)中最大的數(shù)所對應的索引作為最終的結果輸出;
(3)往復循環(huán),實現(xiàn)多個手寫體字符圖像的識別。
本發(fā)明在相同的網(wǎng)絡模型規(guī)模和相同的手寫體字符圖像的條件下,分別對基于FPGA+ARM和主流服務器+GPU的兩種實現(xiàn)方式進行效率和功耗的對比:
1、基于FPGA+ARM的方法(本發(fā)明方法):ARM端功耗約0.24瓦,F(xiàn)PGA端功耗27.6瓦,功耗總計為27.84瓦。運算效率約1177.8張/秒(圖像像素大小28×28),處理效能比為42.31張/(瓦秒);
2、基于主流服務器+GPU的方法:服務器功耗約為600瓦,GPU功耗235瓦(NVIDIA tesla K20x GPU),功耗總計為835瓦,運算效率約3000張/秒(圖像像素大小28×28),處理效能比為3.59張/(瓦秒)。
本發(fā)明方法的效率功耗比是服務器+GPU方法的10倍以上,具有明顯的高效能計算優(yōu)勢。
本發(fā)明的主要特點是:
(1)提出了一種基于FPGA+ARM多層卷積神經(jīng)網(wǎng)絡的手寫體字符識別方法;
(2)充分利用FPGA的硬件高效并行計算能力和低功耗特性,實現(xiàn)了較高的計算效率能耗比;
(3)本發(fā)明在中低端FPGA+ARM硬件平臺上實現(xiàn)了多層卷積神經(jīng)網(wǎng)絡算法模型,具有較大的實際應用價值。
附圖說明
圖1 基于FPGA+ARM多層神經(jīng)網(wǎng)絡的手寫體字符識別流程圖。
圖2 矩陣轉置計算。
圖3 FPGA功耗情況。
圖4 多層卷積神經(jīng)網(wǎng)絡結構圖。
圖5 卷積計算示意圖。
圖6 池化計算示意圖。
圖7 MNIST數(shù)據(jù)庫(部分)。
圖8 手寫體識別的實測結果。
具體實施方式
以下結合附圖說明本發(fā)明基于FPGA+ARM多層卷積神經(jīng)網(wǎng)絡的手寫體字符識別方法的具體實施。
本發(fā)明方法的計算流程如附圖1所示。具體步驟為:
1、首先離線訓練本發(fā)明所使用的多層卷積神經(jīng)網(wǎng)絡模型,設計采用一個輸入層,兩個卷積層,兩個池化層和一個全連接層。第1個卷積層有1個大小為5×5的卷積核,第2個卷積層7有3個大小為5×5的卷積核,兩個池化層的滑動窗口大小為2×2,滑動步長為2。模型訓練完畢后,將卷積層中的參數(shù)(包括卷積核與偏置量)全部取負,保存在ARM端。
2、系統(tǒng)開始運行后,ARM端加載保存著的網(wǎng)絡模型參數(shù),將網(wǎng)絡模型參數(shù)先通過APB總線傳輸?shù)紽PGA端。
3、用戶根據(jù)系統(tǒng)提示,選擇如附圖7所示的MNIST數(shù)據(jù)庫中一副待識別手寫體圖像輸入系統(tǒng)。ARM端將對輸入圖像進行預處理,通過APB總線將結果圖像傳入FPGA端。
4、根據(jù)附圖4所示的計算流程,參照附圖5和附圖6的卷積計算和池化計算的示意,F(xiàn)PGA端對輸入圖像進行第1個卷積層計算和第1個池化層計算,卷積計算中需要使用的Sigmoid函數(shù)表達式如式(1)所示。
5、參考第4步繼續(xù)對第1個池化層結果進行第2個卷積層計算和第2個池化層計算,結果存入Block RAM。
6、將第2個池化層結果的3個4×4大小的矩陣,通過APB總線傳輸回ARM端。
7、將FPGA端傳回的結果與網(wǎng)絡模型全連接層中的Softmax參數(shù)進行計算,結果再加上Softmax偏置量,最后通過Sigmoid函數(shù)計算,得出最后10個數(shù)。按照0至9的順序,系統(tǒng)將得到10個數(shù)中最大的數(shù)對應的索引作為輸入圖片的分類結果輸出給用戶。
8、系統(tǒng)計算完畢將結果輸出給用戶后,用戶根據(jù)提示是否繼續(xù)進行識別,如不繼續(xù)則系統(tǒng)退出。
上述方法處理附圖7所示MNIST數(shù)據(jù)庫中第1張數(shù)字圖片“7”的實測分類結果如附圖8所示。