麥艮廷,梁 艷,潘家輝,黃嘉琳,陳禧琳,佘依聰
(華南師范大學(xué) 軟件學(xué)院,佛山 528225)
中國書法藝術(shù)不但是中華民族的瑰寶,更是人類的共同財富.隨著信息化的不斷發(fā)展,書法作為中國傳統(tǒng)藝術(shù)急需被繼承與弘揚.針對手寫體字符識別的研究由來已久,書法字作為一種特殊的手寫體,由于存在不同字體風(fēng)格以及不同人所寫書法存在個體差異等原因,對書法字體識別研究帶來極大的挑戰(zhàn).手寫漢字書法字體識別的研究,不僅為智能字符識別提供一種新的解決方案,而且對于弘揚中華傳統(tǒng)文化,為廣大書法愛好者學(xué)習(xí)、欣賞和傳承書法藝術(shù)提供極大的幫助,具有重要的理論價值和社會意義.
早期書法字體識別主要采用基于傳統(tǒng)機(jī)器學(xué)習(xí)的方法.段銀雷[1]通過K-means 方法進(jìn)行分類,但在聚類過程中需要人工參與調(diào)試參數(shù),未能完全實現(xiàn)自動分類.肖斌等人[2]在特征提取方面采用了邊緣法、骨架法、筆畫法的思想,并且利用SVM 方法對特征樣本進(jìn)行識別,但該方法在不同網(wǎng)格區(qū)域中并未通過加權(quán)處理來加強(qiáng)關(guān)鍵區(qū)域位置特征所占比重.Zhang 等人[3]提出一種多尺度特征提取方法,在不同尺度參數(shù)下構(gòu)造一系列最優(yōu)特征空間,并采用嵌套子集馬氏距離分類器實現(xiàn)字符識別,在常規(guī)數(shù)據(jù)集和草書數(shù)據(jù)集測試,分別獲得99.3%和88.4%的準(zhǔn)確率.但是基于傳統(tǒng)機(jī)器學(xué)習(xí)的算法泛化性不強(qiáng),無法對存在多種風(fēng)格的大規(guī)模書法字體數(shù)據(jù)進(jìn)行有效分類.Gao 等人[4]提出一種基于檢索的快速識別方案,設(shè)計出一種新穎的形狀描述符,用于表示書法字符圖像,以進(jìn)行高效有效的檢索,但其對噪聲等干擾比較敏感.
近年來隨著深度學(xué)習(xí)相關(guān)理論的發(fā)展和完善,深度學(xué)習(xí)模型由于具有較強(qiáng)的特征學(xué)習(xí)能力,受到眾多學(xué)者關(guān)注,應(yīng)用于漢字書法識別領(lǐng)域.曲延直[5]采用改進(jìn)后的深度殘差網(wǎng)絡(luò)ResNet-50 對漢字書法進(jìn)行識別,在自建的數(shù)據(jù)集進(jìn)行實驗,證明該模型能通過增加網(wǎng)絡(luò)深度提高模型性能.但由于訓(xùn)練所用的數(shù)據(jù)集規(guī)模較小,對模型的訓(xùn)練產(chǎn)生一定影響,在測試集僅獲得90.6%的準(zhǔn)確率.Gao 等人[6]通過實驗證明了利用深度卷積神經(jīng)網(wǎng)絡(luò)提取的深度特征比手工設(shè)計的特征能更好地捕獲書法風(fēng)格信息.Melnyk 等人[7]提出一種用于離線HCCR的高性能CNN-Melnyk 網(wǎng)絡(luò),僅對一種風(fēng)格的手寫數(shù)據(jù)進(jìn)行訓(xùn)練,其精度可達(dá)到97.61%,但并未說明對于多種漢字風(fēng)格的數(shù)據(jù)的識別效果如何.Zou等人[8]研究CNN 模型的損失函數(shù),提出字符分類和相似度排序監(jiān)督信號是互補(bǔ)的,最終準(zhǔn)確率為95.58%,但該方法僅針對硬筆手寫漢字進(jìn)行識別.許嘉諭等人[9]采用GoogLeNet Inception-v3 模型判斷書法作品圖像的書法風(fēng)格,然后利用ResNet-50 殘差網(wǎng)絡(luò)進(jìn)行單字字形識別,但該方法僅針對楷書和篆書兩種字體進(jìn)行識別,適用性較低.
稠密卷積神經(jīng)網(wǎng)絡(luò)(dense convolutional network,DenseNet)[10]是2017年由Huang 等人提出的一種經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)[11]架構(gòu).DenseNet 通過任意兩層之間的直接連接加強(qiáng)特征的傳遞,更有效地利用了特征,同時其核心模塊dense block的設(shè)計使得網(wǎng)絡(luò)不容易過擬合.與其他CNN 模型相比,DenseNet 具有明顯優(yōu)勢.然而,傳統(tǒng)的DenseNet 網(wǎng)絡(luò)在池化規(guī)則、訓(xùn)練策略等方面仍需要進(jìn)一步優(yōu)化.同時,該網(wǎng)絡(luò)中的參數(shù)存在大量冗余,逐層連接的模式使得網(wǎng)絡(luò)中的每一層均需依賴于它上面所有層的特征,影響其計算效率.
因此,針對中國書法字體數(shù)量龐大、結(jié)構(gòu)復(fù)雜、變形繁多的特點,本文提出一種改進(jìn)的DenseNet 模型用于漢字書法字體識別,從池化規(guī)則、訓(xùn)練策略、模型裁剪3 個方面進(jìn)行優(yōu)化,降低計算復(fù)雜度和模型復(fù)雜度.結(jié)合數(shù)據(jù)增強(qiáng)方法,我們對改進(jìn)后的DenseNet網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練與測試.實驗結(jié)果表明,與傳統(tǒng)的DenseNet 網(wǎng)絡(luò)相比,改進(jìn)的DenseNet 網(wǎng)絡(luò)獲得了更高的識別準(zhǔn)確率,同時,在計算效率方面也明顯優(yōu)于傳統(tǒng)的DenseNet 網(wǎng)絡(luò).本文所提方法具有更強(qiáng)的魯棒性與泛化能力,為現(xiàn)實場景中的計算機(jī)輔助書法字體識別提供了高效的解決方案.
DenseNet 是密集型網(wǎng)絡(luò)模型,一般具有L層的傳統(tǒng)卷積網(wǎng)絡(luò)具有L個連接(每一層與其后一層之間有一個連接),而DenseNet 具有L(L+1)/2個直接連接.這一結(jié)構(gòu)使得參數(shù)的重用性增大,在一定程度上防止了過擬合現(xiàn)象的發(fā)生.DenseNet 由5 個Dense block 組成,而Dense block 采用了激活函數(shù)在前,卷積層在后的順序,即BN-ReLU-Conv的順序,這種方式也被稱為預(yù)激活,DenseNet的結(jié)構(gòu)如圖1所示.
圖1 DenseNet的5 層結(jié)構(gòu)圖
DenseNet的L層都實現(xiàn)了一個非線性變換Ki(·),其中,i表示第i層,假設(shè)輸入圖像為h0,那么,第i層的輸出hi可根據(jù)下式計算得到:
從式(1) 可見,第i層以之前所有層的特征映射h0,h1,···,hi?1作為輸入,提升了網(wǎng)絡(luò)層間的信息流,使得其更易于訓(xùn)練[12].
為了適應(yīng)中國書法字體數(shù)量龐大、結(jié)構(gòu)復(fù)雜、變形繁多的特點,本文從池化規(guī)則、訓(xùn)練策略、模型裁剪3 個方面對傳統(tǒng)的DenseNet 網(wǎng)絡(luò)進(jìn)行改進(jìn),具體如下:
(1)將傳統(tǒng)DenseNet 網(wǎng)絡(luò)的最大池化規(guī)則和平均池化規(guī)則進(jìn)行融合,設(shè)計了區(qū)域權(quán)值比例池化規(guī)則,從而減少特征提取的誤差;
(2)采用Nadam 算法對模型訓(xùn)練效果進(jìn)行優(yōu)化,讓模型能夠進(jìn)行自適應(yīng)學(xué)習(xí)率調(diào)整,提高模型收斂速度和模型的性能,加強(qiáng)對不同風(fēng)格書法字體的特征提取;
(3)針對存在的連接冗余問題,提出一種可行的基于剪枝算法[13]的模型裁剪策略,對DenseNet 網(wǎng)絡(luò)中貢獻(xiàn)不大的BN 層進(jìn)行裁剪,得到更輕量的漢字書法識別模型,從而提高模型的計算效率.
1.2.1 網(wǎng)絡(luò)結(jié)構(gòu)的確定
DenseNet 算法有4 種網(wǎng)絡(luò)結(jié)構(gòu),分別為DenseNet-121、DenseNet-169、DenseNet-201、DenseNet-264.書法漢字識別與一般的圖像識別任務(wù)有所不同,書法漢字圖片一般為黑白色,比彩色圖片所具有的特征少了許多.同時,相同漢字不同風(fēng)格的字體形狀相差不大,特征不明顯,因此需要更深的網(wǎng)絡(luò)來獲取特征[14].經(jīng)過實驗,DenseNet-201 與DenseNet-264 所能達(dá)到的識別率是最高的,但DenseNet-264 與DenseNet-201 相比,識別率并無明顯的提升,因此本文選取DenseNet-201作為基礎(chǔ)模型,并以此進(jìn)行改進(jìn),最終得到的DenseNet網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示.
圖2 改進(jìn)的DenseNet 網(wǎng)絡(luò)結(jié)構(gòu)
1.2.2 設(shè)計區(qū)域權(quán)值比例池化規(guī)則進(jìn)行特征提取
卷積神經(jīng)網(wǎng)絡(luò)特征提取的誤差主要來自兩個方面[15],一方面是鄰域大小受限造成的估計值方差增大;另一方面是卷積層參數(shù)誤差造成估計均值的偏移[16].DenseNet 中的平均池化(average-pooling)規(guī)則[17]能夠有效地減少第1 種誤差,但是容易造成正負(fù)激活值互相抵消的情況出現(xiàn),從而導(dǎo)致丟失重要信息.而最大池化(max-pooling)規(guī)則[18]可以減少第2 種誤差,但不能解決第1 種誤差,因此本文設(shè)計了區(qū)域權(quán)值比例池化(regional-weight-pooling,RWP)規(guī)則,將最大池化與平均池化規(guī)則進(jìn)行融合,最大程度地減少這兩種誤差.
設(shè)輸入數(shù)據(jù)為M×N矩陣,采樣核大小為n,使用區(qū)域權(quán)值比例池化規(guī)則進(jìn)行池化,則池化窗口區(qū)域數(shù)據(jù)為a1,a2,···,an,每個數(shù)據(jù)的權(quán)值比例為w1,w2,···,wn,則該池化窗口區(qū)域的池化結(jié)果r可根據(jù)式(2)計算得到:
其中,
在計算權(quán)值wi時,為保證其均為正數(shù),對池化窗口區(qū)域數(shù)據(jù)加上一個最小值amin的絕對值,最小值amin根據(jù)式(4)計算得到:
1.2.3 采用Nadam 算法優(yōu)化模型訓(xùn)練效果
傳統(tǒng)的DenseNet 模型一般采用SGD (stochastic gradient descent)優(yōu)化算法,但SGD 下降速度慢,更新參數(shù)較為頻繁,使得代價函數(shù)容易發(fā)生嚴(yán)重的震蕩,而且容易收斂到局部最優(yōu)點.考慮到Nadam 優(yōu)化器[19]的參數(shù)更新不受梯度伸縮變換影響[20],能實現(xiàn)學(xué)習(xí)率的自動調(diào)整,且能夠更好更快地找準(zhǔn)梯度下降的方向,更容易達(dá)到一個全局最優(yōu)點,同時,Nadam 優(yōu)化器實現(xiàn)簡單,計算高效,因此,本文采用Nadam 算法對模型進(jìn)行優(yōu)化,讓模型能夠更好地進(jìn)行自適應(yīng)學(xué)習(xí)率調(diào)整.
設(shè)待優(yōu)化參數(shù)為ε,目標(biāo)函數(shù)為f(ε),學(xué)習(xí)率為α,用k表示每個epoch,則k時刻的梯度gk可通過下式計算獲得:
根據(jù)歷史梯度計算一階動量Fk和二階動量Sk,其中,前者是各個時刻梯度方向的指數(shù)移動平均值,后者用于度量歷史時刻的梯度更新頻率[21],兩者的初始值均為0,具體計算公式如下:
其中,β1和β2表示兩個超參數(shù),前者控制一階動量,后者控制二階動量.β1的經(jīng)驗值為0.9,這就意味著下降方向主要是此前累積的下降方向,并略微偏向當(dāng)前時刻的下降方向.β2的經(jīng)驗值為0.999,說明二階動量基本取決于此前累積的梯度更新頻率.在迭代初期,Fk和Sk容易趨于0,因此引入偏置糾正,如式(8)和式(9)所示:
根據(jù)式(10) 自適應(yīng)調(diào)整學(xué)習(xí)率:
接著根據(jù)式(8)與(10)計算當(dāng)前時刻的下降梯度:
最后根據(jù)下降梯度更新參數(shù)ε:
1.2.4 采用自適應(yīng)裁剪策略對模型進(jìn)行裁剪
傳統(tǒng)的DenseNet 網(wǎng)絡(luò)連接冗余[22],導(dǎo)致計算效率較低.Liu 等人[23]采用BN 層歸一化激活值的方法,實現(xiàn)高效鑒別和剪枝不重要的層.受該方法的啟發(fā),本文提出自適應(yīng)裁剪策略,設(shè)計基于剪枝算法的模型裁剪策略,利用L1 正則化對通道進(jìn)行剪枝以實現(xiàn)網(wǎng)絡(luò)瘦身.
首先,令DenseNet網(wǎng)絡(luò)中的BN層的γ參數(shù)作為網(wǎng)絡(luò)瘦身的縮放因子,以減少剪枝給網(wǎng)絡(luò)帶來的額外開銷.接著,利用L1正則化使得網(wǎng)絡(luò)中的一些縮放因子的大小趨向于0,縮放因子的大小越接近于0,表明該縮放因子對應(yīng)的通道越不重要.而具體要剪掉哪些通道,需要通過一個閾值進(jìn)行判斷.假設(shè)裁剪閾值為T,先對所有縮放因子的絕對值進(jìn)行升序排序,將該序列中前T位置的縮放因子所對應(yīng)的通道剪掉,最后得到一個較少參數(shù)、運行時內(nèi)存占用小、計算量較低的緊湊網(wǎng)絡(luò).
2.1.1 收集書法作品集并建立字庫
由于目前公開的書法字?jǐn)?shù)據(jù)集較少,并且數(shù)據(jù)集規(guī)模無法滿足本實驗的需求,故采用爬蟲技術(shù)收集漢字,從國學(xué)大師網(wǎng)站(www.guoxuedashi.com)分別爬取楷書、行書、隸書和篆書4 類字體的常用3 500 個漢字的單字圖像.進(jìn)行預(yù)處理后,對每一張圖片進(jìn)行人工審核,確保每張圖片都是合格的,最后得到4 類字體的常用漢字單字字庫.分類字體數(shù)據(jù)集規(guī)模如表1所示.
表1 分類字體數(shù)據(jù)集
2.1.2 圖像預(yù)處理
為了使神經(jīng)網(wǎng)絡(luò)能夠更好地提取圖像的數(shù)據(jù)特征,本文先對圖像進(jìn)行預(yù)處理.首先對圖像進(jìn)行尺寸歸一化,處理后的圖像尺寸均為224×224.為了降低噪聲對漢字識別的準(zhǔn)確性和魯棒性的影響,采用高斯濾波對圖像進(jìn)行平滑去噪[24],指定高斯核的大小為3×3.通過加權(quán)平均對圖像進(jìn)行灰度化并采用大類間方差法(OTSU)對圖像進(jìn)行全局二值化處理[25],使字體和背景分別為黑白兩色.最后對處理后的圖像進(jìn)行數(shù)據(jù)增強(qiáng),對同一張字體圖像采用15%范圍內(nèi)隨機(jī)水平、垂直平移和隨機(jī)放大的方案,最終得到原基礎(chǔ)上10 倍的數(shù)據(jù)量.
考慮到漢字在圖像中的位置不一致會對識別的結(jié)果造成一定的影響,本文采用連通域提取的方法,保留連通域內(nèi)的部分,即圖像中的漢字部分.由于漢字的筆劃不一定完全粘連,例如“氵”部首可能會被分成3 個連通域,因此對提取的連通域計算并集,組成最大連通域.根據(jù)該區(qū)域的頂點坐標(biāo)值對圖像進(jìn)行裁剪,得到最終的目標(biāo)漢字區(qū)域.圖像預(yù)處理過程如圖3所示.
圖3 圖像預(yù)處理過程
本文提出了一種改進(jìn)的DenseNet 卷積網(wǎng)絡(luò)的手寫書法字體識別算法,其軟硬件平臺:CPU:Intel(R)CORE(TM) i5-8250U 3.40 GHz;GPU:NVIDIA GeForce RTX 2060;操作系統(tǒng):Windows 10 專業(yè)版;深度學(xué)習(xí)框架:TensorFlow 2.2.為了驗證本文提出的書法字體識別算法的有效性,本文采取兩種訓(xùn)練策略,一種為將每種風(fēng)格字體的識別模型分開進(jìn)行訓(xùn)練,最終得到4 個不同風(fēng)格的字體內(nèi)容識別模型;另一種為將4 種風(fēng)格字體數(shù)據(jù)集進(jìn)行融合,形成一個字體風(fēng)格混合數(shù)據(jù)集進(jìn)行訓(xùn)練,最終得到一個可以識別楷書、隸書、篆書、行書4 種風(fēng)格字體的字體內(nèi)容識別模型.經(jīng)過最終調(diào)整,本文提出的網(wǎng)絡(luò)模型參數(shù)設(shè)置如下:depth=40,growth_rate=10,bottleneck=True,reduction=0.5,初始學(xué)習(xí)率設(shè)置為0.001,batch為64,其余對比算法則采用GitHub 項目源碼進(jìn)行訓(xùn)練測試.為確定本文算法中網(wǎng)絡(luò)訓(xùn)練時epoch 參數(shù)的大小,我們采用第2 種訓(xùn)練策略進(jìn)行訓(xùn)練和驗證,實驗結(jié)果如圖4所示.
從圖4可發(fā)現(xiàn),在epoch為25 時,曲線已趨于平緩,模型的識別準(zhǔn)確率和損失值基本不再變化,說明模型已經(jīng)收斂,此時識別準(zhǔn)確率已趨于穩(wěn)定且已達(dá)到最優(yōu)值.因此在后續(xù)的實驗中,epoch 設(shè)置為25.
圖4 本文算法的識別準(zhǔn)確率及損失函數(shù)變化趨勢圖
為了確定模型裁剪的閾值,本文使用傳統(tǒng)DenseNet-201 網(wǎng)絡(luò)模型,選取行書數(shù)據(jù)集進(jìn)行測試,實驗結(jié)果如表2所示.
由表2可知,當(dāng)模型裁剪閾值小于30%時,識別率變化不大,均能達(dá)到91%以上,這說明被裁剪部分的模型連接存在冗余.當(dāng)模型裁剪閾值逐漸增大時,識別率也隨之下降.當(dāng)閾值為70%時,識別率下降到31.69%.因此,我們最終把模型裁剪閾值設(shè)置為30%,在保證識別性能的前提下,降低了模型的計算量.
表2 使用不同閾值進(jìn)行模型裁剪的識別結(jié)果(%)
為了驗證本文算法的有效性和可靠性,本文分別對楷書、篆書、隸書和行書4 種風(fēng)格字體的識別模型進(jìn)行訓(xùn)練.將數(shù)據(jù)集按照8:2的比例劃分訓(xùn)練集和測試集,使用改進(jìn)的DenseNet-201 算法對其進(jìn)行訓(xùn)練.我們在測試集測試了本文算法,同時與傳統(tǒng)DenseNet-201、ResNet-50[26]、AlexNet[15]、GoogLeNet V4[27]、DPN-92[28]5 種算法進(jìn)行對比,識別結(jié)果如表3所示.
從表3可以看到,本文方法針對楷書、篆書、行書、隸書4 種風(fēng)格字體的平均識別率為94.69%,比傳統(tǒng)DenseNet-201 算法高1.78%,能夠準(zhǔn)確識別出絕大部分單字書法圖像內(nèi)容.雖然DPN 結(jié)合了ResNet和DenseNet的優(yōu)點,參數(shù)更少,但書法圖像所包含的特征信息太多,DPN 無法提取到更多有用的分類特征,因此在書法字體識別任務(wù)中表現(xiàn)較差,平均識別率僅為82.94%.AlexNet的網(wǎng)絡(luò)結(jié)構(gòu)較為簡單,無法很好地提取到書法圖像的特征,平均識別率也僅為83.92%.傳統(tǒng)DenseNet-201、ResNet-50、GoogLeNet V4 由于其網(wǎng)絡(luò)結(jié)構(gòu)較深,因此表現(xiàn)不錯,平均識別準(zhǔn)確率均達(dá)到90%以上.雖然傳統(tǒng)DenseNet-201 算法所訓(xùn)練的隸書識別模型準(zhǔn)確率高于本文改進(jìn)的DenseNet 算法所訓(xùn)練得到的模型,但從總體來分析,本文改進(jìn)的DenseNet算法平均識別率明顯高于其他5 種算法模型,這說明經(jīng)過改進(jìn)后的DenseNet-201 算法在書法字體識別任務(wù)中可以獲得更高的性能.
表3 在分類字體數(shù)據(jù)集的識別結(jié)果比較
為了進(jìn)一步提高對各種風(fēng)格單字書法圖片的識別率,本文將4 種風(fēng)格的書法字體圖片進(jìn)行混合,形成一個字體風(fēng)格混合的數(shù)據(jù)集,我們稱之為混合字體數(shù)據(jù)集,圖片總數(shù)為315 659 張.數(shù)據(jù)集也是按照8:2的比例劃分訓(xùn)練集和測試集.對模型進(jìn)行訓(xùn)練后的實驗結(jié)果如表4所示.同時,表4也列出了傳統(tǒng)DenseNet-201、ResNet-50、AlexNet、GoogLeNet V4、DPN-92 算法在混合字體數(shù)據(jù)集的測試結(jié)果.
表4 在混合字體數(shù)據(jù)集的識別結(jié)果比較
從表4的實驗結(jié)果可以看到,與另外5 種算法相比,本文方法獲得了最高的平均識別率96.13%,比傳統(tǒng)DenseNet-201 算法高出2.26%.此外,與在分類字體數(shù)據(jù)集的實驗結(jié)果相比,傳統(tǒng)DenseNet-201、ResNet-50、GoogLeNet V4 以及本文方法均取得了更高的平均識別率,說明隨著數(shù)據(jù)集的增大,模型能夠?qū)W習(xí)到更多的特征.但值得注意的是,AlexNet和DPN-92 模型在混合字體數(shù)據(jù)集取得了更低的平均識別率,這可能是因為所選模型沒有能力學(xué)習(xí)這么大的訓(xùn)練數(shù)據(jù)集,或者發(fā)生過擬合現(xiàn)象而導(dǎo)致的.
本文提出了一種改進(jìn)的DenseNet 網(wǎng)絡(luò)用于漢字書法字體識別,通過設(shè)計區(qū)域權(quán)值比例池化規(guī)則進(jìn)行特征提取,合理地減少了卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提取時帶來的誤差;采用Nadam 算法對DenseNet 網(wǎng)絡(luò)進(jìn)行了優(yōu)化,讓模型能夠進(jìn)行自適應(yīng)學(xué)習(xí)率調(diào)整,加強(qiáng)對不同風(fēng)格書法字體的特征提取;針對傳統(tǒng)DenseNet 模型存在的冗余問題,本文提出了一種可行的自適應(yīng)模型裁剪方案,以得到更緊湊的漢字書法字體識別模型.本文算法在分類字體數(shù)據(jù)集和混合字體數(shù)據(jù)集分別取得了94.69%和96.13%的識別率,明顯優(yōu)于另外幾種常見的卷積神經(jīng)網(wǎng)絡(luò)模型.在未來的工作中,我們將引入更多風(fēng)格字體進(jìn)行研究,進(jìn)一步優(yōu)化算法模型,提高算法的泛化性能.