袁柱
(廣東工業(yè)大學(xué)計算機學(xué)院,廣州 510006)
作為秦始皇統(tǒng)一六國后官方指定的文字,小篆廣泛存在于牌匾、印章、碑文等地方。但由于中國漢字經(jīng)過了多次的演變和簡化,距今兩千多年的小篆和現(xiàn)如今的簡體漢字相差甚遠,普通人或許可以通過搜索引擎查找出某些簡體漢字所對應(yīng)的小篆字體,卻很難認出牌匾或印章中的小篆是哪些漢字,所指何意,更別說古籍中成文的小篆。因此,在很多時候,我們需要一種從小篆轉(zhuǎn)換到簡體漢字的方法。但是由于中國的漢字個數(shù)眾多,小篆字體較為復(fù)雜,很長一段時間內(nèi)都沒有找到一種較好的識別方法。
最近幾年來,隨著深度學(xué)習(xí)的興起和不斷地發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)在圖像識別領(lǐng)域上取得了大量突破性的成果。從奠基性的LeNet[],到將卷積神經(jīng)網(wǎng)絡(luò)發(fā)揚光大的AlexNet[2]、VGG[3]、GoogLeNet[4]、ResNet等,都在越來越復(fù)雜的場景下,進一步地提高了圖像識別的準確率。眾多的模型結(jié)構(gòu)證明,卷積神經(jīng)網(wǎng)絡(luò)所學(xué)習(xí)到的特征可以超越手工提取的特征,而經(jīng)過良好設(shè)計的卷積神經(jīng)網(wǎng)絡(luò)模型比傳統(tǒng)的機器學(xué)習(xí)模型在圖像識別領(lǐng)域更具有優(yōu)勢。與此同時,眾多取得成功的網(wǎng)絡(luò)模型也為從業(yè)者提供了方向上的指導(dǎo)。本文基于識別小篆字體的目的,在AlexNet的基礎(chǔ)上設(shè)計了適合于識別小類別小篆字體的模型,并取得了較好的結(jié)果。
本文使用的小類別小篆數(shù)據(jù)集是通過網(wǎng)絡(luò)爬取和多人手寫的方式所得。該數(shù)據(jù)集包含20類小篆的字體,分別代表了20個姓氏。每類小篆字體都包含了120張訓(xùn)練數(shù)據(jù)和60張測試數(shù)據(jù),每張圖片的規(guī)格都是112×112像素顏色不同的png格式。
圖1 部分訓(xùn)練數(shù)據(jù)集
大規(guī)模的數(shù)據(jù)集是成功應(yīng)用深度卷積神經(jīng)網(wǎng)絡(luò)的前提。由于構(gòu)建的數(shù)據(jù)集較小,因此需要通過數(shù)據(jù)增廣(Data Augmentation)技術(shù)來對訓(xùn)練圖像做一系列的隨機改變,產(chǎn)生更多相似卻又不相同的訓(xùn)練樣本。本文用到的數(shù)據(jù)增廣技術(shù)包括:小角度的旋轉(zhuǎn)、平移和拉伸[5]。小角度的旋轉(zhuǎn)包括向左旋轉(zhuǎn)和向右旋轉(zhuǎn)一定的角度。由于漢字有上下左右之別,本文的旋轉(zhuǎn)的角度范圍在-25°~+25°之間。平移包括將文字從原來的位置沿著X軸和Y軸的方向平移到另外一個地方去。由于CNN對圖像具有平移不變性,文字的位置雖然發(fā)生了變化,但平移之后的圖像,CNN依然能夠探測出來。拉伸將文字沿著某個方向增大文字的覆蓋范圍。
圖2 數(shù)據(jù)增廣
通過上述的四種數(shù)據(jù)增廣技術(shù),可以產(chǎn)生大量的訓(xùn)練樣本,從而擴大訓(xùn)練數(shù)據(jù)集的規(guī)模,豐富樣本空間中的樣本個數(shù)。
在原始的數(shù)據(jù)集中,小篆字體包含不同的顏色。由于字體的顏色與字體的識別在本文并無本質(zhì)的關(guān)系,因此在訓(xùn)練網(wǎng)絡(luò)之前,需要將所有的字體圖片都轉(zhuǎn)換為灰度圖片,用黑白兩色就可以完整地表達了特征的信息。
基于AlexNet模型結(jié)構(gòu)的設(shè)計思想,構(gòu)建了適用于小篆識別的卷積神經(jīng)網(wǎng)絡(luò)模型。為了加快模型的訓(xùn)練,在該模型的基礎(chǔ)上引入了批量歸一化(Batch Normalization,BN)算法。
批量歸一化算法是由谷歌研究院Sergey Ioffe[6]提出來的,該算法通過減輕神經(jīng)網(wǎng)絡(luò)訓(xùn)練時的內(nèi)部協(xié)變量偏移(Internal Covariate Shift),從而有效地提高神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度。在模型的訓(xùn)練過程中,批量歸一化算法利用小批量訓(xùn)練樣本上的均值和方差,不斷調(diào)整神經(jīng)網(wǎng)絡(luò)的中間輸出,使整個神經(jīng)網(wǎng)絡(luò)在各層的中間輸出數(shù)值更穩(wěn)定,從而更容易訓(xùn)練。
假設(shè)神經(jīng)網(wǎng)絡(luò)中某層的輸入是大小為m的小批量數(shù)據(jù)X={x1,…,xm},其中小批量X中任意的樣本xi∈Rd,1≤i≤m。對小批量X求均值和方差:
接著標準化xi中的每一維度,得到:
其中?是一個大于0很小的常數(shù),是為了保證分母大于0。
在上面標準化的基礎(chǔ)上,批量歸一化引入了兩個可以學(xué)習(xí)的d維向量模型參數(shù):拉伸參數(shù)γ和偏移參數(shù)β,它們與?分別做按元素乘法和加法計算:
得到的yi就是批量歸一化算法對于輸入xi的輸出。
在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中,批量歸一化算法常常作為網(wǎng)絡(luò)模型中的一層BN層,且通常應(yīng)用在卷積層和全連接層中。在對卷積層做批量歸一化的時候,BN層通常加在卷積計算之后、應(yīng)用激活函數(shù)之前。在對全連接層做批量歸一化的時候,BN層通常加在仿射變換和激活函數(shù)之間。本文選擇除了輸出層外,對所有的全連接層和卷積層做批量歸一化處理。
與AlexNet相似,本文構(gòu)建的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)主要由卷積層、池化層和全連接層組成。卷積層具有較強的特征抽象和提取的能力,通過多個卷積核能夠?qū)W到多種不同的特征。池化層對卷積層輸出的特征圖做聚合統(tǒng)計,降低特征圖的維度。與AlexNet不同的是,為了提高模型的訓(xùn)練速度,本文的模型在卷積層和全連接層中均加入了BN層。此外,與ImageNet數(shù)據(jù)集相比,考慮到本文所使用的數(shù)據(jù)集的真實情況,在一定程度上減少卷積層的通道個數(shù),降低部分卷積層的卷積核大小。具體模型結(jié)構(gòu)如圖3所示。
圖3 CNN模型結(jié)構(gòu)
在該模型中,池化層maxpooling都設(shè)計為步幅(strides)為 2、填充(padding)為 0、池化區(qū)域為 3×3 的固定結(jié)構(gòu)。卷積層的結(jié)構(gòu)如表1所示。
表1 卷積層的結(jié)構(gòu)
對于每個輸入數(shù)據(jù),該模型將進行如下處理:
首先,數(shù)據(jù)將通過一個包含了64個通道、卷積核大小為7×7的卷積層C1,卷積計算后輸出的中間數(shù)據(jù)變?yōu)?4張規(guī)格為54×54的特征圖,接著經(jīng)過池化層,特征圖的大小變成了26×26。
其次,上一層的特征圖輸入到第二個卷積層C2時(C2包含了128個通道、卷積核大小為5×5),經(jīng)過卷積計算后得到了128張26×26的特征圖,同樣經(jīng)過池化層后規(guī)格變?yōu)?2×12。
隨后,數(shù)據(jù)將經(jīng)過三個相似的卷積層,每個卷積層中卷積核大小都是 3×3,strides為 1,padding為 1;前兩層包含256個通道,最后一層卷積層包含128個通道。上一層特征圖經(jīng)過連續(xù)的三個卷積層后規(guī)格依然是128張12×12的特征圖,再進行池化處理后,特征圖的規(guī)格變?yōu)?28張5×5,展開成為128×5×5=3200維的向量連接到三個全連接層上。三個全連接層的神經(jīng)元個數(shù)分別為1024、512和20。其中最后一層的20代表類別的個數(shù)。得到20個神經(jīng)元的輸出后,進行Softmax處理,即對于每個神經(jīng)元的輸出,進行如下計算:其中k代表輸出神經(jīng)元的個數(shù),V代表輸出i層第i個神經(jīng)元的輸出。
最后,在每個卷積層中,卷積計算過后,都會進行批量歸一化的處理,處理過后經(jīng)過ReLU激活函數(shù)作為下一層的輸入。同樣的,除了最后一層輸出層外,其他兩個全連接層在ReLU激活函數(shù)之前都經(jīng)過了批量歸一化的處理。
模型的訓(xùn)練優(yōu)化算法為帶有動量(momentum)的小批量隨機梯度下降(SGD)算法[7],初始學(xué)習(xí)率learning_rate設(shè)定為0.01,momentum設(shè)定為0.9。模型每迭代15次計算一次模型在當(dāng)前小批量數(shù)據(jù)上的識別準確率。在模型的訓(xùn)練過程中,盡可能大地設(shè)置訓(xùn)練循環(huán)次數(shù),當(dāng)觀察到模型在測試集上地識別準確率不再增加時,停止訓(xùn)練過程。
實驗環(huán)境:Windows 10操作系統(tǒng)、NVIDIA GTX 1650顯卡、8G內(nèi)存,深度學(xué)習(xí)框架為TensorFlow[8]。
本文采用對照實驗的方法,一組是不做批量歸一化處理,另外一組對卷積層和全連接層做批量歸一化處理。實驗結(jié)果如圖5、圖6所示,兩組實驗都能達到較好的識別效果,訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集的識別率均可達到了94%。值得注意的是,不做批量歸一化處理的模型最少需要經(jīng)過500次的迭代才能夠收斂,而經(jīng)過批量歸一化處理的模型僅需要300次的迭代就可以收斂了。實驗表明,設(shè)計良好的卷積神經(jīng)網(wǎng)絡(luò)對小類別的小篆識別能夠達到較好的識別效果;批量歸一化處理可以明顯提高網(wǎng)絡(luò)模型的收斂速度。
圖4 無批量歸一化
圖5 有批量歸一化
本文通過多種數(shù)據(jù)增廣技術(shù)擴大了訓(xùn)練數(shù)據(jù)集,基于AlexNet設(shè)計了用于識別小類別小篆字體的網(wǎng)絡(luò)模型,取得了94%的識別準確率。同時探討了批量歸一化算法對模型訓(xùn)練的加速效果,為小篆字體識別的研究和模型的訓(xùn)練加速提供了新的思路,在工程上具有一定的實際意義。