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