謝東陽(yáng), 李麗宏, 苗長(zhǎng)勝
(河北工程大學(xué) 信息與電氣工程學(xué)院,河北 邯鄲 056038)
手寫(xiě)體數(shù)字識(shí)別是光學(xué)字符識(shí)別(Optical Character Recognition,OCR)的一個(gè)分支,是利用計(jì)算機(jī)將圖片中的文字信息轉(zhuǎn)換為計(jì)算機(jī)語(yǔ)言的過(guò)程。數(shù)字識(shí)別是一種圖像分類(lèi)問(wèn)題,一直是機(jī)器深度學(xué)習(xí)的一個(gè)熱點(diǎn)研究問(wèn)題,在快遞單號(hào)、財(cái)務(wù)報(bào)表、手寫(xiě)票據(jù)等領(lǐng)域廣泛應(yīng)用[1-2]。數(shù)字識(shí)別的重點(diǎn)在于算法對(duì)圖像本身的特征提取,傳統(tǒng)的分類(lèi)算法都存在特征提取不充分的問(wèn)題,如貝葉斯分類(lèi)法、K最近鄰算法、支持向量機(jī)(Support Vector Machines,SVM)、BP(Back Propagation)神經(jīng)網(wǎng)絡(luò)等[3]。
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)的出現(xiàn),極大地提高了手寫(xiě)數(shù)字識(shí)別的準(zhǔn)確率。CNN是由美國(guó)學(xué)者Cun提出的一種深度前饋人工神經(jīng)網(wǎng)絡(luò),包括卷積層、池化層、全連接層和輸出層[4]。CNN通過(guò)對(duì)提取到的圖像特征自動(dòng)學(xué)習(xí),能夠獲得更高層次的特征表達(dá),使學(xué)習(xí)到的特征信息具有更好的泛化能力[5]。鄧長(zhǎng)銀等[6]通過(guò)改變LeNet-5模型的網(wǎng)絡(luò)層數(shù)、激活函數(shù)以及輸入圖片的尺寸,相較傳統(tǒng)方法識(shí)別率有所提高。茹曉青[7]等提出了一種基于形變卷積神經(jīng)網(wǎng)絡(luò)的識(shí)別方法,利用形變卷積代替VGG16模型中的普通卷積,提高了多變外觀數(shù)字的識(shí)別精度。陳玄等[8]提出了一種融合卷積神經(jīng)網(wǎng)絡(luò),通過(guò)融合兩種網(wǎng)絡(luò)的高級(jí)特征,增加網(wǎng)絡(luò)層的高級(jí)尺寸,增強(qiáng)網(wǎng)絡(luò)的表達(dá)能力,識(shí)別的精度高于兩種模型單獨(dú)使用。
盡管卷積神經(jīng)網(wǎng)絡(luò)在圖像分類(lèi)任務(wù)中表現(xiàn)優(yōu)越,但是對(duì)于分辨率較小的圖像,深度網(wǎng)絡(luò)會(huì)浪費(fèi)過(guò)多的計(jì)算資源。本文以AlexNet網(wǎng)絡(luò)結(jié)構(gòu)為基礎(chǔ),減小模型的卷積核尺寸與數(shù)量,引入Inception-Resnet模塊提升算法的特征提取能力,并使用批標(biāo)準(zhǔn)化 (Batch Normalization,BN)加快模型的訓(xùn)練速度。通過(guò)對(duì)實(shí)驗(yàn)結(jié)果的分析,驗(yàn)證了本文方法的有效性。
AlexNet是由多倫多大學(xué)的Krizhevsky等[9]在2012年提出的,并在當(dāng)年的ImageNet大賽上打破了圖像分類(lèi)的記錄獲得了比賽的冠軍,使圖像分類(lèi)的準(zhǔn)確率提高了一倍多。
AlexNet的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,AlexNet網(wǎng)絡(luò)模型結(jié)構(gòu)簡(jiǎn)潔,由5層卷積層、2層隱藏全連接層和一層輸出全連接層組成。整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)使用ReLu代替Sigmoid作為激活函數(shù),能有效地解決Sigmoid在層數(shù)較多的網(wǎng)絡(luò)結(jié)構(gòu)中出現(xiàn)的梯度彌散問(wèn)題。同時(shí)網(wǎng)絡(luò)在全連接層后添加Dropout操作,利用隨機(jī)隱退神經(jīng)元個(gè)數(shù)的方法,在網(wǎng)絡(luò)的訓(xùn)練過(guò)程中減少模型的參數(shù)量,能夠有效地防止過(guò)擬合現(xiàn)象的出現(xiàn)。在Relu激活函數(shù)后添加局部響應(yīng)歸一化(Local Response Norm,LRN),通過(guò)對(duì)局部神經(jīng)元?jiǎng)?chuàng)建響應(yīng)競(jìng)爭(zhēng)機(jī)制,提高了網(wǎng)絡(luò)的泛化能力。使用重疊的最大池化層代替平均池化,很好地解決了平均池化的模糊問(wèn)題,同時(shí)在一定程度上提高了圖像特征的豐富性。AlexNet模型相比于LeNet5和傳統(tǒng)的機(jī)器學(xué)習(xí)方法具有更高的識(shí)別精度,但是本身的參數(shù)量巨大,模型的訓(xùn)練時(shí)間長(zhǎng),識(shí)別速度慢。
圖1 AlexNet網(wǎng)絡(luò)模型Fig.1 AlexNet network model
Inception模塊將多個(gè)卷積層與一個(gè)池化層并聯(lián)在網(wǎng)絡(luò)中,模型在訓(xùn)練的過(guò)程中自主選擇使用哪種方式獲取特征信息,不需要人為地確定參數(shù),是一種高效的稀疏結(jié)構(gòu),有利于提取到豐富的特征[10]。使用多種尺寸的卷積核,提取不同層次的特征,增加了特征的多樣性。Inception將不同尺寸的特征融合在一起有利于后面的分類(lèi)任務(wù)。并利用小卷積代替大卷積,使用1×n,n×1的非對(duì)稱(chēng)卷積代替n×n的卷積核,大大減少了網(wǎng)絡(luò)的參數(shù)量,提升了網(wǎng)絡(luò)的運(yùn)算速度。Inception結(jié)構(gòu)增加了網(wǎng)絡(luò)的寬度,在深層卷積神經(jīng)網(wǎng)絡(luò)中能提高網(wǎng)絡(luò)的魯棒性和泛化能力。
殘差網(wǎng)絡(luò)(Residual Network,ResNet)是He[11]在2016年提出的一種深層卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),用于解決在模型深度加大時(shí)出現(xiàn)的網(wǎng)絡(luò)退化現(xiàn)象,提升網(wǎng)絡(luò)的深度。ResNet運(yùn)用殘差學(xué)習(xí)的思想,在數(shù)據(jù)傳輸過(guò)程中添加一個(gè)shortcut連接,使信息可以直接傳輸?shù)饺我粚?,保護(hù)了信息的完整性,能獲得表達(dá)能力更強(qiáng)的特征,加速網(wǎng)絡(luò)的訓(xùn)練。
Inception-Resnet-v2模型是谷歌團(tuán)隊(duì)在2016年發(fā)布的卷積神經(jīng)網(wǎng)絡(luò),是Szegedy在Inception結(jié)構(gòu)的基礎(chǔ)上與ResNet相結(jié)合提出的一種新的網(wǎng)絡(luò)結(jié)構(gòu),使網(wǎng)絡(luò)的深度進(jìn)一步增加,并增強(qiáng)了網(wǎng)絡(luò)的非線(xiàn)性,加速了網(wǎng)絡(luò)的訓(xùn)練。
(1)
(2)
對(duì)輸入進(jìn)行歸一化處理
(3)
式中:ε為一個(gè)極小值,防止分母為0,k表示當(dāng)前的維度。這樣就將每個(gè)batch的輸入數(shù)據(jù)歸一化到N(0, 1)的正態(tài)分布。但是只對(duì)數(shù)據(jù)進(jìn)行歸一化可能會(huì)改變?cè)据斎霐?shù)據(jù)的特性或分布,會(huì)影響到當(dāng)前層所學(xué)習(xí)到的特征,所以又引入了兩個(gè)超參數(shù)對(duì)正態(tài)分布進(jìn)行平移和縮放:
(4)
式中:γ表示縮放,β表示平移,一般初始化γ=1,β=0。
BN層使模型可以使用大的學(xué)習(xí)率,加快網(wǎng)絡(luò)的收斂速度;有類(lèi)似于Dropout和正則化的效果,能防止網(wǎng)絡(luò)的過(guò)擬合問(wèn)題,提高模型的泛化能力。
原始AlexNet模型的輸入尺寸為224×224,為了使AlexNet模型能應(yīng)用于MINIST數(shù)據(jù)集,將模型的第一個(gè)卷積層的卷積核從11×11改為5×5,步長(zhǎng)從4改為1,改變后的模型剛好能實(shí)現(xiàn)分辨率為28×28的MINIST數(shù)據(jù)集的識(shí)別任務(wù),得到了99.33%的識(shí)別精度。
更改后的AlexNet模型雖然能實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別,但是Conv1和Conv2使用的是5×5的大卷積核,相對(duì)于28×28分辨率的圖像來(lái)說(shuō)尺寸較大,不能提取到足夠的細(xì)節(jié)特征。為了提取更多的細(xì)節(jié)特征,使用兩個(gè)3×3的卷積核堆疊,以獲取和5×5卷積核相同的感受野,同時(shí)能減少模型的參數(shù)量。將模型中前兩層最大池化的池化核從3×3修改為2×2,縮小特征圖尺寸的同時(shí),進(jìn)一步地減少了模型的參數(shù)量。
但是AlexNet的Conv3、Conv4和Conv5這三個(gè)卷積層的特征圖尺寸都為3×3,特征圖尺寸過(guò)小,通過(guò)卷積層的堆疊并不能提取到足夠的特征信息,反而會(huì)浪費(fèi)計(jì)算資源。為了獲得更加豐富的特征信息,使用改進(jìn)后的Inception-resnet結(jié)構(gòu)替換原模型中的Conv3和Conv4,使模型能學(xué)習(xí)到不同尺寸的特征信息,提升模型的特征提取能力,有助于分類(lèi)器的分類(lèi)。改進(jìn)后的Inception-resnet結(jié)構(gòu)如圖2所示,在模塊中每層卷積層之后添加BN層,將數(shù)據(jù)規(guī)范化處理,增快網(wǎng)絡(luò)的收斂速度。
圖2 添加的Inception-resnet模塊Fig.2 Inception-resnet module added
在AlexNet模型中使用了兩個(gè)隱藏全連接層,由于全連接層的參數(shù)量巨大,因此刪除一個(gè)全連接層,降低模型的參數(shù)量。為了使模型能夠快速收斂,在每一個(gè)卷積層之后,激活函數(shù)之前使用BN對(duì)數(shù)據(jù)進(jìn)行規(guī)范化處理,加速網(wǎng)絡(luò)的訓(xùn)練。改進(jìn)后模型的具體參數(shù)說(shuō)明如表1所示。
表1 改進(jìn)模型具體參數(shù)
本實(shí)驗(yàn)平臺(tái)為戴爾筆記本,處理器為Intel(R) Core(TM) i5,4 GB內(nèi)存,主頻:1.7 GHz。運(yùn)行環(huán)境為Win10 64操作系統(tǒng),編譯器為Pycharm,編程語(yǔ)言為Python。
MNIST數(shù)據(jù)集是一個(gè)手寫(xiě)體數(shù)字識(shí)別數(shù)據(jù)集,包含50 000條訓(xùn)練數(shù)據(jù)集和10 000條測(cè)試數(shù)據(jù)集。數(shù)據(jù)集包含250個(gè)不同人手寫(xiě)的阿拉伯?dāng)?shù)字0~9,共10類(lèi)手寫(xiě)體數(shù)字圖像。每條數(shù)據(jù)集由圖像和標(biāo)簽組成,每張圖像的大小為28×28=784的一維數(shù)組,標(biāo)簽類(lèi)型為One-Hot-Encoding編碼格式。部分?jǐn)?shù)據(jù)集圖像如圖3所示。
圖3 MNIST數(shù)據(jù)集部分圖像Fig.3 Partial images of the MNIST data set
本文以AlexNet模型為基礎(chǔ)融合Inception-ResNet-C結(jié)構(gòu)進(jìn)行算法的改進(jìn),在MNIST數(shù)據(jù)集上進(jìn)行驗(yàn)證,設(shè)置訓(xùn)練的mini-batch為32,訓(xùn)練周期為30次,每次的訓(xùn)練樣本數(shù)為1 875。使用Adam優(yōu)化器對(duì)梯度反向傳播進(jìn)行優(yōu)化,初始學(xué)習(xí)率設(shè)置為0.001,經(jīng)過(guò)2個(gè)世代val-Loss不減少將學(xué)習(xí)率下調(diào)為原來(lái)的一半,加入Early Stopping機(jī)制,當(dāng)val-loss經(jīng)過(guò)6個(gè)世代不再減少時(shí)停止網(wǎng)絡(luò)的訓(xùn)練。圖4(a)為AlexNet網(wǎng)絡(luò)與本文算法在MNIST數(shù)據(jù)集上的訓(xùn)練損失函數(shù)曲線(xiàn)圖,可以看出本文算法在訓(xùn)練過(guò)程中的收斂速度快于AlexNet網(wǎng)絡(luò),說(shuō)明改進(jìn)后的算法提高了模型的訓(xùn)練速度。圖4(b)為兩種算法的測(cè)試準(zhǔn)確率曲線(xiàn)圖,可以看出改進(jìn)后的算法在測(cè)試時(shí)的識(shí)別率高于AlexNet模型,說(shuō)明改進(jìn)后的方法有效地提升了手寫(xiě)數(shù)字識(shí)別的精度。
圖4 模型訓(xùn)練與測(cè)試效果對(duì)比圖Fig.4 Comparison of model training and test results
本文方法是在AlexNet基礎(chǔ)上進(jìn)行的改進(jìn),其參數(shù)量從2.1×107減少到8×105為原來(lái)的1/26,模型訓(xùn)練一個(gè)世代的時(shí)間從1 400 s減少到280 s,為原來(lái)的1/5,大大加快了訓(xùn)練的速度,并且比AlexNet的準(zhǔn)確率提高了0.33%。為了驗(yàn)證本文算法的有效性,與其他算法進(jìn)行比較,結(jié)果如表2所示。實(shí)驗(yàn)結(jié)果表明改進(jìn)后的算法有效地提高了網(wǎng)絡(luò)的檢測(cè)精度。
表2 不同算法的比較
本文提出基于改進(jìn)AlexNet卷積神經(jīng)網(wǎng)絡(luò)的手寫(xiě)體數(shù)字識(shí)別方法,利用Inception-resnet模塊提取多層特征并融合,提高了模型特征的學(xué)習(xí)能力;通過(guò)BN層對(duì)輸入數(shù)據(jù)進(jìn)行批歸一化處理,有效地提升了模型的泛化能力;減少模型卷積核的數(shù)量,大大減少了網(wǎng)絡(luò)的參數(shù)量,提升了模型的訓(xùn)練速度。利用MNIST手寫(xiě)體數(shù)字集進(jìn)行實(shí)驗(yàn),本文算法的檢測(cè)精度達(dá)到了99.66%,相比于AlexNet模型提升了0.33%,與LeNet5模型相比提升了0.44%,證明了本文算法的有效性。