張承強,張永愛,顧興權
(1.福州大學 物理與信息工程學院,福建 福州 350116; 2.西安電子科技大學 通信工程學院,陜西 西安 710000)
在我國的各種古代藝術門類中,最具標志性,最能集中地、典型地、鮮明地、持續而廣泛地表現民族精神和時代精神的藝術,非書法莫屬[1]。數字化的書法字體臨摹成為了很多大眾的愛好,數字化的手寫字識別往往和深度學習相結合。深度學習是新興的機器學習研究領域,旨在研究怎樣從數據中自動地更好地提取多層特征表示,其核心思想是通過數據驅動的方式,采用一系列的非線性(如激活函數)變換,從原始數據中提取由低層到高層、由具體到抽象、由一般到特定語義的特征[2]。ResNet(Residual Neural Network)是由微軟研究院的He Kaiming等四名華人提出的強大深度學習網絡[3-4],在ILSVRC2015比賽中取得冠軍,ResNet的結構可以極快地加速神經網絡[5-6]的訓練,模型的準確率也有比較大的提升,本文的深度學習網絡采用的就是ResNet網絡。
目前,在線的名人書法臨摹基本上都是照著某名人的書法臨摹再比較相似度,且都是觸屏書寫[7-8]。觸屏書寫存在靈敏度強弱、屏幕大小和數字量化等因素而導致的手寫字細節丟失問題,而本文的系統平臺是在現實的紙等實物上進行書寫后再拍照進行上傳,有很多的細節能夠保留且很方便,只要制作的名人書法字越精細,對細節的比較就越充分。此外,現今的在線名人書法臨摹也限制了用戶書寫行為,只能對著名人的字進行臨摹,本文的系統平臺除此之外,還可以把日常的手寫字與多位名人字進行比較,再展示與其最相似的名人真跡字并分析其結果。本文的平臺可以面向大眾娛樂,方便快捷地將自己的手寫字與名人字比較。
ResNet借鑒了以往網絡結構的優點,使用殘差學習方法解決了在信息傳遞時出現的信息丟失、損耗等問題,整個網絡只需要學習輸入與輸出不同的那一部分,使得網絡學習的目標和難度得到簡化。與傳統的卷積神經網絡相比,ResNet提出了兩種映射,恒等映射(identity mapping)和殘差映射(residual mapping)。圖1是一個簡單的Residual Block,恒等映射就是圖1中的曲線(Shortcut Connection)跳過2層權重(層數是可變的,也可以是3層)后把X直接送到2層后的ReLU層的映射,之所以稱為恒等,是因為X跳過了權重層,沒有經過任何計算,即G(X)=X;殘差映射指普通網絡原來的部分。

圖1 Residual Block
曲線部分使得每一個殘差塊很容易地學習到恒等映射結果,并且在反向傳播時可以使梯度直接傳播到更淺的層。在傳統卷積神經網絡上多次使用Residual Block,就形成了殘差網絡(Residual Network,ResNet)。殘差網絡解決了傳統極深網絡的退化問題,讓訓練極深的網絡成為可能[9]。殘差網絡最常見的層數有50層和101層等。
ResNet50即共50層的殘差網絡,如圖2所示,包括conv1,conv2.x,conv3.x,conv4.x和conv5.x卷積層,以及輸出層。每個卷積層包含有7×7,3×3和1×1大小的數量不等的卷積核,以及池化(pool)層和激活(ReLU)層。

圖2 ResNet50網絡配置
本文的ResNet50網絡使用目前流行的深度學習庫TensorFlow搭建,首先需要對數據進行預處理,本文自制了名人書法字數據集并將其與普通中文字數據集合在一起,以增加模型訓練的數據量;為了增強模型的泛化能力以提高準確率,本文將數據集進行數據增強,接著對圖片進行大小尺寸的調整,本實驗將圖片尺寸調整為224×224的大小;TensorFlow官方推薦的訓練數據標準格式是tfrecord格式,此格式能夠將圖片數據和標簽一起存儲成二進制文件,能夠在TensorFlow中實現快速地復制、移動、讀取和存儲操作,由于本文使用TensorFlow庫進行模型搭建,可再將上述的數據集制作成tfrecord格式[10]。
數據預處理完成后,就開始搭建ResNet50網絡,導入TensorFlow庫和加載預訓練模型,設置batch_size、學習率和網絡輸入的大小,指定模型保存路徑,損失函數選擇sigmoid交叉熵,優化器選擇Adam,并設置其他相關參數[11]。
設置完所有的參數后,對模型進行訓練,如圖3和圖4所示,分別是模型訓練過程中的精度曲線和損失值(loss)曲線。

圖3 迭代次數與準確率的關系圖

圖4 迭代次數與損失值的關系圖
本文的字相似度算法比現有的傳統字相似度算法簡單,且符合直觀感受,有易理解和計算量小等特點。
該算法分為以下幾步,為便于論述,將手寫字圖片和名人書法字圖片分別設為圖片A和圖片B。
(1)將圖片A和圖片B灰度化。最初的圖片是三通道的彩色圖,需要將其灰度化為單通道圖片以便下面只在單通道上二值化。
(2)自定義二值化。將圖片A和圖片B中的每個像素值大于設定的閾值(比如100)的像素點全部設為255,否則設為0。對于白紙黑字的手寫字,經過實驗得出閾值取100能有很好的二值圖,即小斑點和劃痕相對較少。
(3)處理圖片A和B中的細小斑點、小劃痕、孤立點和噪音等像素,將其全部設為255 (此步驟是為了下一步截字精確)。
(4)分別將圖片A和B中的字恰好截取出來,得到圖片A1和B1。精確截字是為了在計算字之間的相似度時減少背景的影響。
(5)將圖片A1的尺寸設置為與圖片B1相同,得到圖片A2和B1。同尺寸后才能用步驟(7)中算法進行相似度的計算。名人書法字的尺寸不作改變是為了要保持其字的形狀不變,所以將手寫字設為與其同尺寸。
(6)分別將圖片A2和B1顏色取反,得到圖片A3和B2。取反之后的圖片變成了白字黑背景的圖片,因為像素值為255表示白色,0表示黑色,所以白字黑背景進行相似度計算時才是對字進行相似度比較,不然黑字白背景其實是對背景進行相似度計算。
(7)將圖片A3和B2采用修改的均方誤差算法[12](即PMSE)進行相似度計算,原理如式(1),得到的計算結果就是圖片A和B的相似度值。

(1)
其中,m為圖片的寬,n為圖片的高,I(i,j)和K(i,j)分別表示兩張不同圖片在(i,j)點的像素值。
改進的均方誤差算法的Python代碼實現如下:
def Pmse(imageA,imageB):
err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
err /= float(imageA.shape[0] * imageA.shape[1]*255*255)
return 1-err
相似度算法的實際實現過程如圖5所示。不過一般名人書法字最終的反色二值圖會預先制作好存放在數據庫中,這樣做一方面是為了減少系統平臺處理時間,另一方面名人書法字由于歲月的侵蝕可能會出現一些非理性的臟點,需要人工處理好再存于數據庫中。
字相似度算法在不同手寫字與不同名人真跡字之間的實際比較效果如圖6所示,其中的名人真跡字和手寫字是經過上述步驟(1)~(6)處理后的,組別1和組別2中的名人真跡字是相同的真跡字,手寫字是不同的,從相似值的大小來看組別1更相似,也更符合人的主觀感受;組別2和組別3的名人真跡字是不同的,手寫字是相同的,從相似值的結果看組別3更相似,也更符合人的主觀感受;組別4中的名人真跡字與手寫字主觀感受上看起來很像,但由于名人真跡字邊緣過于粗糙而使相似度的值沒有超過0.9。通過實驗認為相似度的值超過0.88(即88%)為手寫字的結構基本準確(即相似)。

圖5 字相似度計算實例流程圖

圖6 字相似度算法效果
本文的字相似度算法比書法字骨架提取、骨架相似度計算和點化形態相似度計算等綜合性算法顯然更簡單和計算量更小,具有代碼易實現、實時性明顯和通用性(其他文字亦可)等特點,效果直觀上無區別,優勢明顯。
本文開發的基于深度學習的在線手寫字與名人書法字相似度比較Android平臺,將Android、Web服務器、深度學習和字相似度算法結合在一起。整個平臺有四大模塊,分別為Android應用的圖片上傳模塊[13]、識別模塊、字相似度計算模塊和Android應用顯示結果模塊。Android應用的圖片上傳模塊:用戶可以進行本地相冊的圖片上傳或對手寫字拍照后再上傳;識別模塊:上傳的圖片被Web網站接收并預處理后,通過已訓練好的文字深度學習模型(即ResNet50模型)識別用戶提交的圖片,成功識別為某字;字相似度計算模塊:在成功識別后,Web網站[14]會將上傳的圖片與數據庫中各名人書法字的該字圖片進行相似度的計算,并返回結果;Android應用顯示結果模塊:顯示內容包括用戶提交的圖片、最相似的名人真跡圖片、相似值和分析結果等信息。在線Android平臺結構如圖7所示。

圖7 在線Android系統平臺
Android應用的圖片上傳模塊的顯示界面如圖8所示,這是一個用HTML+CSS+Javascript技術簡單設計的網頁頁面[15],Android應用是一個定制的瀏覽器,Webview方法已經設置了指定的Web服務器網址,在打開Android應用時會訪問指定的Web網站,Web網站將會響應設計好的網頁頁面代碼,通過HTTP協議將代碼發送到Android端,定制的瀏覽器會解析頁面代碼進行頁面渲染。Android應用的顯示界面也可以做成微信小程序等界面[16]。

圖8 Android應用已選定圖片的界面
Android應用顯示結果模塊的顯示界面如圖9所示,圖8上傳手寫字到Web服務器之后,服務器處理完成后會將處理結果返回給Android端,Android界面會展示返回的處理結果,該界面展示的信息有識別到的手寫字、相似度計算的結果、手寫字圖片和最相似的名人字圖片以及簡單評價等。

圖9 后臺處理結果展示
本文將自制的名人真跡字數據集和普通中文數據集合在一起訓練了ResNet50模型,訓練好的ResNet50網絡對手寫漢字的識別精度非常高;改進的字相似度算法對手寫字與名人真跡字的相似度計算的結果完全符合人的主觀感受且計算量不大,適合做Android端與服務器端的在線相似度識別計算任務;最后將訓練好的ResNet50模型和字相似度算法放在搭建好的Web網站上,再與Android應用相結合,實現了一個實時在線手寫字與名人真跡字的相似度比較系統。此外本平臺若增加鋼筆字和水筆等字的數據集,也可對鋼筆和水筆的名人真跡字進行相似度的計算。