李俊陽 雷鑫 宋宇 賽琳偉
摘 要: 本文在GoogLeNet網絡基礎上搭建了一個適合手寫漢字識別的卷積神經網絡。研究建立了新的手寫漢字訓練集,新訓練集綜合了現有的訓練集并剔除了其中的錯誤,同時加入印刷體訓練集,增加書寫風格的多樣性。訓練神經網絡時采用隨機梯度下降算法,并加入動量項加速網絡參數的收斂,使用正則項防止過度擬合,最終訓練出的神經網絡在訓練集上的正確率為99.56%,在驗證集上的正確率達到96%,并具有很好的泛化能力。
關鍵詞: 手寫漢字識別;卷積神經網絡;深度學習
Abstract:This paper builds a Convolution Neural Network suitable for handwritten Chinese character recognition based on GoogLeNet network. The research has set up a new training set of handwritten Chinese characters. The new training set integrates the existing training set and removes the errors in them. At the same time the research has added a printed training set to increase the variety of handwriting styles. In the training of neural network a stochastic gradient descent algorithm is used and the momentum term is added to accelerate the convergence of the network parameters. The regular item is used to prevent overfitting. The final neural network reaches an accuracy rate of 99.56% on the training set and 96% on the validation set which has a good generalization.
Key words: handwritten Chinese character recognition;Convolution Neural Networks;deep learning
引言
漢字錄入是中文信息處理的首要條件,當前,大量的中文文獻是以掃描件形式整理存放的,這給后續處理制造了困擾,因而亟需漢字識別軟件將其轉化成文本信息[1]。漢字識別分為印刷體識別和手寫體識別。早在上世紀60年代,即已開啟了漢字印刷體識別的研究。目前,對印刷體的識別研究已經較為成熟[2]。相對來說,手寫漢字的隨意性大,比印刷體識別要困難許多。手寫漢字識別根據數據采集的方式又可分為聯機識別和脫機識別。具體地,在聯機識別中,計算機能獲得輸入字符的筆畫順序,因此比脫機識別獲得的信息更多,更容易做到辨識甄別[3]。再加上拍照或掃描的過程中,不同的光照、分辨率、紙張等都會帶來干擾。由此可知,脫機手寫漢字識別遠比聯機識別要呈現出更多的限制要求。而時下的聯機識別已經得到了有效解決[4]。手寫漢字文本的識別需要先將文本切分成單個的漢字,而后再進行識別。本文將只是考慮研究單個手寫漢字的識別問題。
迄今為止,脫機手寫識別雖然可見到許多研究,但實際識別過程中,其精度卻很難達到研究提供的數值效果。當遇到真實、無限制的手寫樣本時,很多算法的識別率便會出現明顯的降低。究其原因即在于漢字的獨特性和手寫體漢字風格的多樣性,這些因素給手寫體漢字識別增加了攻關難度。在實際應用中將尤顯突出,且可重點表現如下方面:
(1)漢字數量多。參照中國漢字基本集GB2312-80的標準可知,常用的第一級漢字類別有3 755個,第二級漢字類別有3 008個,總計為6 763個。因此,對于漢字識別系統來說,要能夠正確識別如此多種類的漢字將頗具現實挑戰性。
(2)結構復雜。漢字有各種筆劃,筆劃又組成各種字根,字根按照一定規律分布在各個子空間中,形成不同的字形。可以看出,這種構字方式相當復雜,筆劃相互交錯,給漢字識別在一定程度上設定了研究阻礙。
(3)相似字多。漢字中有很多相似字,有的只差一“點”或一“捺”,這些相似字容易混淆,因此在漢字特征提取和分類器設計上,對這些相似字必須給予特別的注意。
(4)書寫風格多變。每個人的書寫風格千差萬別,即便是同一個漢字,由不同的人書寫出來,差異也是顯而易見的,要從成百上千種風格中提取出本質不變的特征則并非易事。此外,書寫紙張的好壞,字形的大小,掃描設備的優劣,噪聲的干擾等,都會給漢字識別研究工作產生影響、帶來困難。因此手寫漢字識別仍是一個有待研發完善的熱點項目課題。
傳統的手寫漢字識別先提取漢字的特征,例如采用Gabor、Gradient和HoG濾波。而后再調用分類器進行分類。常用的分類器有二次判別函數(MQDF)、支持向量機(SVM)、隱馬爾科夫模型(HMM)等。手寫漢字識別的一個新的研究熱潮源起于2006年,同時伴隨著一些新的手寫數據庫的發布,研究方向也逐漸從孤立的漢字識別過渡到更加真實、無限制的文本識別。同時,由于深度學習技術的發展[5],深度神經網絡則運用到手寫漢字識別上,其良好的表達能力能夠包容漢字的復雜結構和書寫風格的多樣性,因此也取得了相當不錯的應用效果。在最近幾年中,手寫體字符的識別率在逐漸提升。
在研究過程中,網羅搜集了各種手寫體漢字數據庫,調整數據庫中圖片亮度,剔除錯誤標簽和圖片,還自行生成了一個印刷體字庫,然后設計合并了這些數據庫,形成研究需要的訓練集。接著,又搭建了卷積神經網絡模型,使用訓練集對其進行訓練,提高了單個手寫體漢字的識別正確率,并探討分析了卷積神經網絡的識別機理。
1 訓練集
本項目的識別目標是全部一級漢字,共3 755個。一級漢字約占全部漢字使用量的99%。訓練集為一個n×64×64×1的圖像數組和一個n×1的標簽數組,其中n=(300+300+138)份×3 755個,為漢字個數。標簽數組的取值范圍為[0,3 755]。具體來說,0表示非漢字,1~3 755與漢字的國標碼順序對應。
訓練集的來源分為3部分。第一個來源是中科院自動化所發布的HWDB1.1數據集,如圖1(a)所示。該數據集包含300份一級漢字。圖像為8位,書寫較為疏放偏草。該數據集字跡較暗,對其亮度進行了調整。將每個像素開方,由于像素取值為[0,1],開方之后取值范圍不變,但數值卻有所增加。這就完成了數據集的變量操作。該訓練集中還夾雜有一些錯誤,將會對訓練造成干擾,因此需要剔除。這些錯誤約占1.5%,大部分為標簽錯誤,有少量的涂抹圖片。此外,剔除了一些根本無法識別的圖像。
第二部分是HCL2000數據集,如圖1(b)所示。該數據集由北京郵電大學模式識別實驗室發布,包含1 000份一級漢字,是目前規模最大的脫機手寫漢字庫。數據為二值化模式,書寫較為工整。該數據集更加利于識別,為了突出不易識別的HWDB1.1訓練集,增強模型識別能力,HCL2000只擷取了其中的300份。HCL2000數據集中的錯誤主要為生成訓練集時漢字的切割錯誤造成的空白。
第三部分為網絡上收集的印刷體,來源網站為http://www.diyiziti.com/List,如圖1(c)所示。采集了138份字庫。有些字庫包含繁體字,對其進行了過濾剔除。最后對這3個訓練集合并展開研究訓練。
1.1訓練集 (b) HLC2000訓練集 (c)印刷體訓練集
2 卷積神經網絡訓練
本次研究中,將給出神經網絡模型設計如圖2所示。
3 手寫漢字識別
3.1 神經網絡模型
研究中的神經網絡由GoogLeNet改進而來,網絡結構如圖2所示。網絡走向為從上往下,每一層的輸入為上一層的輸出。輸入層大小為64×64×1。首先,使用64個7×7的卷積核對輸入圖像做卷積;然后做大小為5×5、步幅為3的池化,此時輸出數組大小為22×22×64;接下來,是9個inception單元,每個單元后圖像的特征數逐漸增加,直至累加為1 440個3×3的圖像;最后,將3×3×1 440的圖像展開為一維,又續接一個大小為4 000的全連接層,再接一個大小為3 756的softmax層作為輸出層。
每個inception單元組合不同卷積核的卷積結果,并以此為基礎再做批規范化。第一個inception單元先接一個BatchNormalization層,將上一層的結果批規范化;然后BatchNormalization的輸出作為輸入,分別延伸出3個分支。第一個分支是32個1×1的卷積、第二個分支為48個1×1的卷積,又接96個3×3的卷積、最后一個分支是3×3的池化,又接16個1×1的卷積;最后將3個分支的輸出用concatenate層組合,由此得到的輸出數組大小為22×22×(32+96+16)=22×22×144。總地說來,每個inception單元都是將數個大小不同的卷積結果和一個池化組合,每種卷積之前先接一個1×1的卷積,有一個單獨的1×1卷積,池化則是在后面續接一個1×1的卷積。
第二個inception單元先將上一個inception的輸出批規范化,然后分別引申出5個分支:包含48個1×1的卷積核,還包含3×3、3×9、9×3的卷積,都是先接數個1×1的卷積,卷積核數分別為120、4、4。此外,還包含一個池化層接16個1×1的卷積。這5個分支組合之后的特征數為48+120+4+4+16=192。
第三個inception單元有3個分支,前2個分支都是卷積。與前述不同的是,這2個卷積的步長都為2,因此卷積之后的圖像大小變為11×11,池化的步長也隨即變換為2,最后3個分支得到的圖像大小相同,將其合并之后圖像大小縮變為11×11。共有3個這樣的圖像大小改變的inception,3次縮小之后最終圖像大小為3×3。每個inception單元處理后,圖像的特征數逐漸增加,最終為1 440個。所以,經過9個inception單元后,輸出數組大小為3×3×1 440;而后接一個概率為0.2的dropout層;再接一個大小為4 096的全連接層;此后,又接一個概率為0.5的dropout,最后接大小為3 756的softmax層作為輸出。輸出向量表示該漢字屬于每個類的概率。
3.2 訓練
隨機初始化后,可得到網絡初始權重。訓練采用隨機梯度下降算法,學習率為0.1,動量項為0.9,正則項中權值衰減系數為10-6。為了驗證識別正確率的真實性并且提高網絡模型的泛化能力,研究中將自行建立的漢字數據庫劃分為訓練集和驗證集。
圖3為訓練集和驗證集的誤差結果曲線。由圖3可知,隨著迭代次數的增加,訓練集誤差不斷減小,而驗證集誤差也隨之減小;當迭代次數超過10次后,驗證集的識別誤差小于4%,不再降低,至此便可以停止訓練,網絡參數達到了最優化。此時的訓練集正確率為99.56%。
4 優化和分析
網絡運行最初采用了64個7×7的卷積。分析這64個卷積核發現,這些并不是筆畫的局部特征,而是類似二維碼的圖像,如圖4所示。由此看來,卷積神經網絡的設計即在試圖運用這64個卷積核作為一組基,去線性組合局部圖像。而這一點也突顯了與人的思維在根本上的差異與不同。
5 結束語
本文基于GoogLeNet網絡設計提出了一個手寫漢字識別的卷積神經網絡。原始手寫體漢字數據庫中存在較多錯誤,這些錯誤會導致各種漢字識別模型的正確率陷于瓶頸將難于提高,而剔除這些錯誤形成新的訓練集,再對模型進行訓練,對于識別正確率的提高具有良好積極作用。
卷積神經網絡在手寫漢字識別領域具有較大優勢,就是利用不同于人的思維方式去提取漢字特征,通過層層抽象提取,得到類似于二維碼的更適合機器識別的圖像,由此來實現進一步的有效漢字識別。
參考文獻
[1] 王正群. 手寫體漢字識別研究[D]. 南京:南京理工大學,2001.
[2] 江波,史鳳波. 文字識別領域中模式識別技術的應用[J]. 科技資訊,2015(27):6-7.
[3] 金連文. 手寫體漢字識別的研究[D]. 廣州:華南理工大學,1996.
[4] 張輝. 大規模聯機手寫漢字識別數據庫整理、統計與實驗分析[D]. 廣州:華南理工大學,2012.
[5] 尹寶才,王文通,王立春. 深度學習研究綜述[J]. 北京工業大學學報,2015,41(1):48-59.