侯 杰,倪建成
(曲阜師范大學 軟件學院,山東 曲阜 273165)
脫機手寫體漢字識別已有近50年的研究歷史,因為漢字類別數(shù)較大(參照GB2312-80 標準,常用漢字有6763 個類別)、易混淆的相似字形多以及書寫風格的多樣性使其一直是模式識別領域的研究難點。傳統(tǒng)的手寫體漢字識別分為三個步驟:圖像預處理、特征提取與分類。預處理一般通過模糊化、灰度化、二值化以及歸一化等方法來實現(xiàn),目的是加強圖像的有用特征、去除其他無關的噪聲,從而使得特征提取更加方便[1]。特征提取是從原始輸入中提取能表達特定漢字本身而又區(qū)別于其他漢字的無冗余性低維圖像特征,目前效果較好的是一些統(tǒng)計特征,如Gabor 特征、Gradient 特征、HOG特征[2-3]。傳統(tǒng)方法中常用的分類器有SVM[4]、線性判別分析(LDA)[5]和修正二次判別函數(shù)(MQDF)[6]。近年來基于修正二次判別函數(shù)的方法依然是研究熱點,然而作為效果最優(yōu)的傳統(tǒng)識別方法,修正二次判別函數(shù)在典型手寫體漢字數(shù)據(jù)集CASIA-HWDB 和ICDAR2013 上的識別準確率都還沒有達到93%[6-8]。
隨著計算資源性能的提高和大量標注數(shù)據(jù)集的出現(xiàn),基于深度學習特別是卷積神經(jīng)網(wǎng)絡(CNN)的方法在計算機視覺和模式識別領域取得了巨大的成功[9~11],對手寫體漢字的識別也逐漸由傳統(tǒng)方法轉(zhuǎn)變?yōu)榛谏窠?jīng)網(wǎng)絡的方法。多列深度神經(jīng)網(wǎng)絡(MCDNN)[12]被認為是第一個將CNN 成功應用到手寫體漢字識別的模型,在ICDAR2013 數(shù)據(jù)集上取得了95.78%的準確率,其使用不同的數(shù)據(jù)集訓練了八個網(wǎng)絡,每個網(wǎng)絡都含有四個卷積層和兩個全連接層。Wu 等人[13]采用基于CNN 的模型在ICDAR 數(shù)據(jù)集上實現(xiàn)了94.77%的準確率,獲得了2013 年ICDAR 脫機手寫體識別競賽的第一名,第二年他們通過采用4 種交替訓練松弛卷積神經(jīng)網(wǎng)絡(ATR-CNN)的集成模式[14]來改進模型,達到了96.06%的準確率。2015 年Zhong 等人將傳統(tǒng)的Gabor 特征提取與CNN 結(jié)合提出了HCCR-Gabor-GoogLeNet[15],在ICDAR2013 數(shù)據(jù)集上的識別準確率為96.35%,是在該數(shù)據(jù)集上第一個超越人類表現(xiàn)的模型。2017 年Zhang 等人[16]將傳統(tǒng)的歸一化Gradient 特征映射與CNN 結(jié)合,并采用一個適配層后在ICDAR2013 數(shù)據(jù)集上取得了97.37%的準確率。
以上模型雖然取得了不錯的識別效果,但大都存在調(diào)優(yōu)參數(shù)多、網(wǎng)絡收斂慢、存儲模型空間大等問題。由此,本文設計了一個基于GoogLeNet 的卷積神經(jīng)網(wǎng)絡HCCR-IncBN,該模型利用了Inception模塊稀疏連接的優(yōu)點,對同一輸入特征映射進行多個尺度上的卷積操作,并多次使用1x1 卷積核來壓縮數(shù)據(jù),在增加網(wǎng)絡深度的同時能夠保證對計算資源的高效利用;為了加快模型收斂,在整個網(wǎng)絡結(jié)構(gòu)中充分應用了BN 算法。在實驗階段,以數(shù)據(jù)集CASIA-HWDB1.1 為訓練集來識別3755 個常用簡體漢字,在ICDAR2013 數(shù)據(jù)集上取得了95.94%的準確率;另外,以數(shù)據(jù)集MNIST 作為實驗數(shù)據(jù),在測試集上取得了99.37%的識別準確率。
提高深度神經(jīng)網(wǎng)絡表現(xiàn)的最直接方式就是增加網(wǎng)絡的深度和寬度,經(jīng)典的AlexNet 和VGG 網(wǎng)絡正是以此設計網(wǎng)絡結(jié)構(gòu)達到了更好的效果,但這會使得計算參數(shù)過多,消耗大量計算資源甚至造成過擬合問題。文獻[10]提出的GoogLeNet 通過向網(wǎng)絡中引入稀疏性可以在很大程度上解決上述問題,組成GoogLeNet 的基本模塊為Inception,它把相關性強的特征先聚集到一起,每一種尺寸的卷積輸出都作為總特征的一部分。
圖1(a)和圖1(b)分別展示了Inception-v1和Inception-v2 的 模 塊 結(jié) 構(gòu)。Inception-v1 模 塊采用的卷積核大小分別為1x1、3x3 和5x5。與Inception-v1 相比,Inception-v2 模塊將5x5 的卷積操作分成了兩個3x3 的卷積操作,使得計算效率進一步提升,本文采用的是Inception-v2 模塊。模塊中1x1 卷積操作的主要作用是壓縮輸入數(shù)據(jù)的通道數(shù)從而減少參數(shù)計算量,該操作可以使得卷積參數(shù)降低到原來的三分之一。為了保證Inception 模塊中三個尺寸的卷積操作和最大池化操作的輸出可以進行維度上的連接,需要將卷積操作的步長設置為1、Padding 方式設置為‘SAME’,將池化操作的步長也設置為1。
圖1 Inception 模塊結(jié)構(gòu)圖
圖2 展示了HCCR-IncBN 模型的結(jié)構(gòu)以及每層輸出特征映射的維度。該模型一共有15 層(只計算卷積層和全連接層),包括3 個卷積層、5 個Inception 模塊和2 個全連接層。原始輸入為64x64大小的灰度圖像。模型開始是兩組“卷積+最大池化”操作,卷積核大小為3x3,步長為1,最大池化操作的池化窗口為2x2,步長為2,整個模型中的四次卷積操作都采用此參數(shù)配置。第二個池化操作后是5 個Inception 模塊,其中在Inception2和Inception4 后設置了最大池化層,在最后一個Inception 模塊后設置了1x1 的卷積操作,該操作將4x4x608 的特征映射壓縮為4x4x256。1x1 卷積操作完成后需要將特征映射扁平化為4096 維的向量,之后開始全連接層的操作,第一個全連接層包含1024個神經(jīng)元,輸出層神經(jīng)元的具體個數(shù)根據(jù)不同的數(shù)據(jù)集來設置(HWDB 數(shù)據(jù)集設置為3755)。在HCCRIncBN 模型中,所有卷積層(包括Inception 模塊中的卷積層)和全連接層后面都連接了一個BN 層,即在ReLu 激活函數(shù)之前先執(zhí)行BN 算法。HCCR-IncBN 模型涉及的計算參數(shù)數(shù)量為6849035,按照存儲一個浮點數(shù)需要4 個字節(jié)計算,存儲模型所需的存儲空間約為26.12MB。表1 列出了5 個Inception 模塊中各卷積操作濾波器個數(shù)的具體設置。
表1 Inception 模塊各卷積操作的濾波器個數(shù)
圖2 HCCR-IncBN 手寫體漢字識別模型
批量標準化(Batch Normalization, BN)[17]方法用來解決神經(jīng)網(wǎng)絡在訓練過程中出現(xiàn)的內(nèi)部協(xié)變量轉(zhuǎn)移問題(Internal Covariate Shift),由于在訓練神經(jīng)網(wǎng)絡的過程中前一層參數(shù)一直更新,導致后一層輸入不斷變化。如果神經(jīng)網(wǎng)絡在每次迭代中都要重新學習不同的數(shù)據(jù)分布,網(wǎng)絡就會很難收斂,深層網(wǎng)絡的訓練困難就在于此。針對此問題,在每一層的輸出后面增加一個BN 層,將網(wǎng)絡下一層的輸入都標準化為均值為0、方差為1 的分布,從而可以達到固定數(shù)據(jù)分布、降低內(nèi)部協(xié)變量轉(zhuǎn)移的目的。對于神經(jīng)網(wǎng)絡的某一層,假設輸入為d維的數(shù)據(jù):x=(x1,…,xd),對每個維度進行歸一化的公式為:
式中y(k)代表最終標準化后的數(shù)據(jù),參數(shù)γ(k)和β(k)分別代表縮放參數(shù)和偏移參數(shù),x^(k)是基于整個訓練集的直接標準化結(jié)果,其計算細節(jié)如下:
在實際訓練過程中,難以讓每一個訓練步驟都使用整個訓練集,在神經(jīng)網(wǎng)絡的訓練中優(yōu)化損失函數(shù)一般都采用最小批次梯度下降法,對于BN 算法,只要每一個批次都取樣于相同的分布,那么也可以使用一個批次數(shù)據(jù)的均值和方差來完成BN 標準化過程。考慮樣本數(shù)為m的最小批次B:B={x1…m},整個BN 算法過程描述如下。
算法1 BN 算法
輸入:最小批次的樣本數(shù)據(jù):B={x1…m}以及要被學習的參數(shù)γ,β輸出:{yi=BNγ,β(xi)}
本文使用TensorFlow 深度學習平臺來實現(xiàn)HCCR-IncBN 模型,初始學習率設為0.001,按照指數(shù)衰減的方式更新學習率,使用Adam 梯度下降算法最小化損失函數(shù),最小批次設置為128。為了避免過擬合,在全連接層后面使用了dropout 機制以及對權(quán)重參數(shù)添加了L2 范數(shù)約束,dropout 數(shù)值設置為0.6,權(quán)重衰減率設置為10-4,另外也使用了‘早?!瘷C制來控制訓練過程。實驗的硬件條件為Intel(R) Xeon(R) Gold 6130、NVIDIA Tesla P100;操作系統(tǒng)為Ubuntu 16.04,系統(tǒng)內(nèi)存為256G,基礎配置為CUDA9.0,python3.7,TensorFlow1.14。
實驗使用包含3755 個類別的大規(guī)模數(shù)據(jù)集CASIA-HWDB1.1 來訓練模型,該數(shù)據(jù)集由300 人書寫,共有1 121 749 個樣本。測試數(shù)據(jù)為數(shù)據(jù)集ICDAR2013,由60 人書寫,共有224 419 個樣本。輸入圖片大小為64x64,設置訓練周期為6 個epoch(一個epoch 含有8 763 次迭代),訓練時間僅為3個小時。
圖3(a)和(b)顯示了數(shù)據(jù)集HWDB1.1 訓練過程中準確率和損失函數(shù)的變化,可以看出模型在訓練迭代到3000 次左右時損失函數(shù)就降到了1.0以下,第20 000 次迭代后測試準確率普遍保持在95%以上,對數(shù)據(jù)集ICDAR2013 的最終識別準確率如表2 所示。
圖3 數(shù)據(jù)集HWDB1.1 訓練過程中準確率和損失函數(shù)變化
表2 ICDAR2013 數(shù)據(jù)集識別結(jié)果
表3 展示了基于ICDAR2013 數(shù)據(jù)集的不同識別方法的比較??梢钥闯?,與表中的方法1、2 相比,HCCR-IncBN 模型在識別準確率和模型參數(shù)的數(shù)量方面都具有較大的優(yōu)勢。方法1 是2013 年ICDAR 手寫體識別比賽的冠軍,其輸入表示很小,但是模型存儲量高達2460MB。隨著算法的改進和網(wǎng)絡的優(yōu)化,近幾年一些成功的模型涉及的計算參數(shù)數(shù)量逐步降低。方法2 是ATR-CNN 的單一模型,其輸入是1x48x48 的二值化圖像,但是模型存儲量約是我們的兩倍。方法3 也是基于GoogLeNet,在識別準確率方面HCCR-IncBN 比其低了0.41%,但是在模型存儲方面我們更優(yōu)一些,具體來說,HCCR-Gabor-GoogLeNet 使 用 的 是Inception-v1 模 塊且提取了原圖像的Gabor 特征,其輸入表示大小為9x120x120,而HCCR-IncBN 模型是基于Inception-v2模塊,輸入表示大小為1x64x64,且訓練集只使用了HWDB1.1。方法4 致力于設計一個緊湊型的CNN 網(wǎng)絡來提高手寫體識別的效率,在模型存儲方面具有很大的優(yōu)越性,與之相比,HCCR-IncBN模型的輸入表示較小,且方法4 的模型在訓練過程中要不斷的進行卷積層的低秩分解和修剪權(quán)重的操作,模型訓練期間會耗費大量的時間和計算資源。
表3 各手寫體漢字識別方法的比較
為進一步評估模型的識別能力,使用MNIST數(shù)據(jù)集進行了手寫體數(shù)字的識別實驗。HCCRIncBN 模型輸入設置為28x28,由于MNIST 數(shù)據(jù)集較小,為增強泛化能力,將dropout 數(shù)值修改為0.5。共訓練了14040 次,在測試集上的識別準確率為99.37%。表4 展示了在MNIST 數(shù)據(jù)集上不同識別方法的比較,可以看出HCCR-IncBN 模型具有最高的識別準確率。
表4 不同識別模型的比較
本文設計了一個15 層的深度卷積神經(jīng)網(wǎng)絡模型HCCR-IncBN 用于漢字的手寫體識別。該模型充分利用了Inception 模塊稀疏連接的優(yōu)點,保存整個模型僅需26MB 的存儲空間,在獲得較優(yōu)識別準確率的同時能夠較快的收斂(使用HWDB1.1 數(shù)據(jù)集訓練模型僅需3 個小時)。HCCR-IncBN 模型在ICDAR2013 和MNIST 數(shù)據(jù)集上分別取得了95.94%和99.37%的識別準確率,優(yōu)于當下大部分識別模型。在今后的工作中,我們會嘗試設計更緊湊的CNN 模型來提高模型的識別效率,另外,將模型與手寫體漢字的特定領域知識(如字符形狀歸一化、傳統(tǒng)Gradient 特征與Gabor 特征提取等)相結(jié)合來進一步探索提高模型的識別準確率。