黎光艷,王修暉
中國(guó)計(jì)量大學(xué) 信息工程學(xué)院 浙江省電磁波信息技術(shù)與計(jì)量檢測(cè)重點(diǎn)實(shí)驗(yàn)室,杭州 310018
手寫字符識(shí)別在結(jié)合了諸如深度學(xué)習(xí)之類的人工智能技術(shù)后,越來越多地在移動(dòng)端和手持設(shè)備中使用,學(xué)生的作業(yè)圖像會(huì)被收集起來進(jìn)一步分析處理[1],但它仍然是一個(gè)具有挑戰(zhàn)性的問題。在低年級(jí)數(shù)學(xué)算術(shù)題的識(shí)別與評(píng)閱過程中,由于學(xué)生書寫不規(guī)范而導(dǎo)致數(shù)字之間重疊和粘連使得手寫字符分割識(shí)別效果不盡人意,如何提升現(xiàn)有方法的準(zhǔn)確率和運(yùn)行效率,是圖像處理與模式識(shí)別領(lǐng)域的重要研究?jī)?nèi)容。根據(jù)數(shù)字的粘連程度,姚紅革等人[2]使用MNIST數(shù)據(jù)集生成了100%重疊數(shù)據(jù)集進(jìn)行識(shí)別,為真實(shí)情況下的粘連數(shù)字識(shí)別提供了新思路。
傳統(tǒng)的手寫數(shù)字識(shí)別大都使用MNIST數(shù)據(jù)集進(jìn)行識(shí)別,且隨著卷積神經(jīng)網(wǎng)絡(luò)的提出,國(guó)內(nèi)外對(duì)手寫字符的識(shí)別研究也更加深入。Goodfellow等人[3]通過使用dropout技術(shù)設(shè)計(jì)了maxout模型來對(duì)手寫字符進(jìn)行識(shí)別。He等人[4]在ReLU激活函數(shù)的基礎(chǔ)上,提出了一種參數(shù)修正線性單元(parametric rectified linear unit,PReLU),在幾乎不增加額外參數(shù)的前提下提升了字符識(shí)別模型的擬合能力。Ma等人[5]提出了一種基于特定的多特征提取和深度分析的有效手寫數(shù)字識(shí)別方法。為了方便提取數(shù)字特征,Ignat等人[6]結(jié)合了旋轉(zhuǎn)和邊緣濾波之類的基本圖像處理技術(shù),使用k最近鄰(k-NN)和支持向量機(jī)(SVM)作為分類器。Srivastava等人[7]提出了一種組合架構(gòu)的神經(jīng)網(wǎng)絡(luò)系統(tǒng),該系統(tǒng)使用自組織映射(SOM)以及反向傳播的概念從MNIST數(shù)據(jù)集中識(shí)別手寫數(shù)字。Nyide等人[8]將不同粒度級(jí)別的類似Haar的過濾器應(yīng)用于手寫數(shù)字圖像,通過增加類似Haar的過濾器粒度來提高分類精度。Urazoe等人[9]將三種旋轉(zhuǎn)不變性學(xué)習(xí)方法應(yīng)用于CNN架構(gòu)來進(jìn)行手寫字符識(shí)別,解決了數(shù)據(jù)增強(qiáng)時(shí)原始數(shù)字和旋轉(zhuǎn)數(shù)字之間的沖突。上述研究在MNIST上都取得了不錯(cuò)的效果,但只是針對(duì)單字符數(shù)據(jù)集,無法對(duì)粘連數(shù)字進(jìn)行識(shí)別。
深度卷積神經(jīng)網(wǎng)絡(luò)的快速發(fā)展推動(dòng)了手寫字符的實(shí)時(shí)檢測(cè),但是大量的網(wǎng)絡(luò)參數(shù)會(huì)帶來計(jì)算資源和存儲(chǔ)資源的消耗,從而使目標(biāo)識(shí)別的速度難以達(dá)到實(shí)時(shí)的要求,也難以部署到移動(dòng)端設(shè)備中。模型壓縮是一類解決在資源受限條件下進(jìn)行神經(jīng)網(wǎng)絡(luò)部署的通用方法[10],可以對(duì)分類模型進(jìn)行壓縮來提升檢測(cè)的實(shí)時(shí)性。NasNet[11]在小型數(shù)據(jù)集上搜索架構(gòu)構(gòu)建塊,然后將塊傳送到更大的數(shù)據(jù)集。通過堆疊單元格應(yīng)用于數(shù)據(jù)集中,顯著提高了模型的泛化能力,MobileNet[12]基于簡(jiǎn)化的架構(gòu),該架構(gòu)使用深度可分離卷積來構(gòu)建輕量級(jí)深度神經(jīng)網(wǎng)絡(luò),可廣泛用于物體檢測(cè),圖像分類等實(shí)驗(yàn)。對(duì)網(wǎng)絡(luò)進(jìn)行壓縮的方法還有剪枝[13-14]、量化[15-16]和低秩分解[17-18]。除此之外,還可以通過更有效的卷積[19-21]設(shè)計(jì)更加緊湊的結(jié)構(gòu),或使用知識(shí)蒸餾[22-25],從一個(gè)大的“教師”模型中提取知識(shí)來幫助訓(xùn)練一個(gè)小的“學(xué)生”模型,這樣可以提高“學(xué)生”模型的性能。
綜上所述,現(xiàn)有的手寫字符識(shí)別方法大多基于單個(gè)數(shù)字的識(shí)別,對(duì)于圖像中存在的粘連數(shù)字采用普通的分割方法難以準(zhǔn)確分割出來,并且強(qiáng)行分割粘連數(shù)字會(huì)使分割后的字符丟失部分特征,從而影響對(duì)手寫數(shù)字的識(shí)別。雖然通過增加卷積神經(jīng)網(wǎng)絡(luò)的深度可以顯著改善手寫字符識(shí)別效果,但是,其計(jì)算時(shí)間和內(nèi)存消耗也同時(shí)增加。在低功率的嵌入式終端設(shè)備的實(shí)際應(yīng)用場(chǎng)景中,計(jì)算資源和存儲(chǔ)資源是部署深度CNN模型的約束條件。
典型的解決思路是使用模型壓縮技術(shù)來壓縮分類任務(wù)中網(wǎng)絡(luò)的結(jié)構(gòu),最大程度地減小模型結(jié)構(gòu),降低模型存儲(chǔ)所需要的空間。使得模型壓縮后的輕量級(jí)網(wǎng)絡(luò)可以保持原始網(wǎng)絡(luò)的分類精度,甚至可以接近或超越原網(wǎng)絡(luò)的性能。
本文的主要?jiǎng)?chuàng)新如下:
(1)網(wǎng)絡(luò)結(jié)構(gòu):借用Inception[26]思想,通過適當(dāng)分解的卷積和正則化的方式,將ResNet[27]殘差結(jié)構(gòu)和注意力機(jī)制融合,構(gòu)建了多分支輕量級(jí)殘差網(wǎng)絡(luò)GluNumNet。該模型能有效提取圖片特征,在保證分類網(wǎng)絡(luò)分類準(zhǔn)確率的同時(shí)使得模型的計(jì)算開銷與內(nèi)存開銷充分降低。
(2)擴(kuò)充數(shù)據(jù)集:在MNIST數(shù)據(jù)集基礎(chǔ)上,制作了90類復(fù)合數(shù)字,重疊率在50%到75%之間隨機(jī)生成,以便提高手寫數(shù)字在粘連情況下不易分割的整體識(shí)別率。采用圖像變換技術(shù),對(duì)MNIST進(jìn)行數(shù)據(jù)增廣,解決樣本不平衡的問題。
(3)模型壓縮:將提出的模型采用知識(shí)蒸餾策略來學(xué)習(xí)深度神經(jīng)網(wǎng)絡(luò)ResNet101,在降低模型大小的同時(shí)不影響其識(shí)別精度,使得壓縮后的模型在資源受限的樹莓派上也能高效運(yùn)行。
由于小學(xué)生在書寫字符的過程中會(huì)產(chǎn)生粘連現(xiàn)象,影響了對(duì)此類字符的識(shí)別。為了提高低年級(jí)數(shù)學(xué)算術(shù)題中粘連手寫數(shù)字的識(shí)別率和運(yùn)行效率,本文提出一種多分支輕量級(jí)殘差網(wǎng)絡(luò)的手寫字符識(shí)別方法。首先,在MNIST公開數(shù)據(jù)集的基礎(chǔ)上制作了10到99這90類兩位數(shù)的復(fù)合數(shù)字?jǐn)?shù)據(jù)集,將其與MNIST數(shù)據(jù)集和7類數(shù)學(xué)符號(hào)混合得到107類手寫字符數(shù)據(jù)集,作為本文實(shí)驗(yàn)的研究對(duì)象。并使用ResNet101對(duì)其進(jìn)行建模生成手寫字符識(shí)別模型。然后,構(gòu)建了一種多分支的輕量級(jí)注意力殘差網(wǎng)絡(luò)GluNumNet,該網(wǎng)絡(luò)借用Inception思想,將ResNet殘差結(jié)構(gòu)和注意力機(jī)制融合,作為學(xué)生網(wǎng)絡(luò)對(duì)深度模型進(jìn)行學(xué)習(xí)。
本文實(shí)驗(yàn)的數(shù)據(jù)集為107類手寫字符,將其分為訓(xùn)練集和測(cè)試集。首先,將訓(xùn)練集先通過深度網(wǎng)絡(luò)ResNet101訓(xùn)練出深度模型,采用知識(shí)蒸餾的方法,使用自己構(gòu)建的輕量級(jí)模型GluNumNet對(duì)深度模型的網(wǎng)絡(luò)參數(shù)和損失函數(shù)進(jìn)行學(xué)習(xí),其中教師網(wǎng)絡(luò)的損失函數(shù)為:
學(xué)生網(wǎng)絡(luò)的損失函數(shù)為:
其中,y是真實(shí)標(biāo)簽的one-hot編碼,q是教師網(wǎng)絡(luò)的輸出結(jié)果,p是學(xué)生網(wǎng)絡(luò)的輸出結(jié)果。α為0到1之間的小數(shù),用來微調(diào)損失函數(shù)的值來增強(qiáng)模型識(shí)別的效果。
這個(gè)過程叫作知識(shí)蒸餾,最后,確定溫度參數(shù)T,訓(xùn)練出輕量級(jí)神經(jīng)網(wǎng)絡(luò)識(shí)別模型??傮w網(wǎng)絡(luò)模型如圖1所示。
圖1 網(wǎng)絡(luò)模型圖Fig.1 Network model diagram
本文提出的基于多分支的注意力殘差網(wǎng)絡(luò)手寫字符識(shí)別方法網(wǎng)絡(luò)框架如圖1中的虛線框所示。GluNum-Net網(wǎng)絡(luò)主體結(jié)構(gòu)是由三個(gè)塊狀結(jié)構(gòu)block串聯(lián)而成,每個(gè)塊狀結(jié)構(gòu)后面緊跟一個(gè)最大池化層。
塊狀結(jié)構(gòu)block結(jié)合了Inception的分支思想,ResNet的殘差結(jié)構(gòu)以及scSE注意力機(jī)制。為減少參數(shù)總量,GluNumNet學(xué)習(xí)了Inception用兩個(gè)3×3的卷積代替5×5的大卷積的方式,在降低參數(shù)的同時(shí)建立了更多的非線性變換,使得CNN對(duì)特征的學(xué)習(xí)能力更強(qiáng)。使用該結(jié)構(gòu)可將稀疏矩陣聚類為較為密集的子矩陣來提高計(jì)算性能。如圖2,block的輸入是由4個(gè)分支組成,分支0是由一個(gè)BasicConv2d組成,分支1是由兩個(gè)BasicConv2d組成,分支2是由三個(gè)BacscicConv2d組成,分支3是由一個(gè)平均池化和BasicConv2d組成,輸入的張量分別經(jīng)過這個(gè)四個(gè)分支,然后將結(jié)果cat拼接在一起。這樣可以將視覺信息在不同的尺度上進(jìn)行處理然后聚合,同時(shí)從不同尺度提取特征,并最后做特征融合。
圖2 多分支的注意力殘差結(jié)構(gòu)Fig.2 Multi-branch attention structure
然后再經(jīng)過一個(gè)scSE(spatial and channel squeeze &excitation block)注意力機(jī)制模塊,scSE模塊由從sSE和cSE組成,cSE模塊是一種通道注意力模塊,具體流程如下:使用global average pooling方法將feature map從[C,H,W]變?yōu)閇C,1,1],對(duì)兩個(gè)1×1×1卷積進(jìn)行信息處理,得到C維的向量。然后使用sigmoid函數(shù)進(jìn)行歸一化,得到對(duì)應(yīng)的mask,最后通過channel-wise相乘,得到經(jīng)過信息校準(zhǔn)過的feature map。而sSE模塊是一種空間注意力模塊,具體分析如下:對(duì)feature map直接使用1×1×1卷積,features從[C,H,W]變?yōu)閇1,H,W],然后使用sigmoid進(jìn)行激活得到spatial attention map,施加到原始feature map中,完成空間的信息校準(zhǔn)。scSE是這兩個(gè)模塊的并聯(lián),將分別通過sSE和cSE模塊的輸入特征相加,得到更為精準(zhǔn)校準(zhǔn)的feature map,最后將結(jié)果與輸入張量相加,作為該block的輸出。scSE的結(jié)構(gòu)如圖3所示。通過引入注意力機(jī)制,可以使得網(wǎng)絡(luò)在眾多的輸入信息中聚焦當(dāng)前任務(wù)中更加關(guān)鍵的信息,抑制無用信息,解決信息過載問題,同時(shí)提高任務(wù)處理的效率和準(zhǔn)確性。
圖3 scSE模塊示意圖Fig.3 Schematic diagram of scSE module
其中BasicConv2d是由一個(gè)包含殘差結(jié)構(gòu)的卷積,一個(gè)BatchNormalization和一個(gè)Relu激活函數(shù)組成。如圖4。
圖4 殘差結(jié)構(gòu)卷積Fig.4 Residual structure convolution
殘差結(jié)構(gòu)來自于2015年何凱明等人[27]提出的神經(jīng)網(wǎng)絡(luò)ResNet,其在傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)中引入殘差學(xué)習(xí)(residual learning)的思想,以解決深層網(wǎng)絡(luò)訓(xùn)練時(shí)梯度彌散和精度下降的問題,使得網(wǎng)絡(luò)的性能不會(huì)因?yàn)樯疃鹊脑黾佣档?。在?duì)比多個(gè)CNN模型的基礎(chǔ)上,發(fā)現(xiàn)使用ResNet的效果最好且穩(wěn)定。如圖5為ResNet的殘差結(jié)構(gòu)。
圖5 殘差結(jié)構(gòu)Fig.5 Residual structure
BatchNormalization的作用就是將輸入值進(jìn)行標(biāo)準(zhǔn)化,計(jì)算所有的均值和標(biāo)準(zhǔn)差,使用這些值來對(duì)數(shù)據(jù)進(jìn)行規(guī)范化,降低scale的差異至同一個(gè)范圍內(nèi)。這樣做有助于結(jié)合數(shù)據(jù)特征進(jìn)行更好的訓(xùn)練,一方面提高梯度的收斂程度,加快模型的訓(xùn)練速度;另一方面使得每一層可以盡量面對(duì)同一特征分布的輸入值,減少了變化帶來的不確定性,也降低了對(duì)后層網(wǎng)絡(luò)的影響,各層網(wǎng)絡(luò)變得相對(duì)獨(dú)立,緩解了訓(xùn)練中的梯度消失問題。Relu激活函數(shù)增加了神經(jīng)網(wǎng)絡(luò)各層之間的非線性關(guān)系。經(jīng)過3個(gè)block的特征提取,復(fù)用以及融合,再經(jīng)過一個(gè)全連接層,輸出分類結(jié)果。
不同的人在書寫數(shù)字的過程中,都會(huì)產(chǎn)生不同程度的粘連,因此,將制作復(fù)合數(shù)字?jǐn)?shù)據(jù)集來模擬手寫數(shù)字過程中會(huì)產(chǎn)生的粘連現(xiàn)象。制作方法為將第一張MNIST圖片的右邊部分與第二張圖片的左邊部分進(jìn)行重疊,對(duì)MNIST灰度圖像的每個(gè)像素值進(jìn)行二進(jìn)制“或”操作。重疊率d為兩張圖片重疊部分占整張圖片的百分比,再將第一張圖片左邊,重疊圖片,第二張圖片右邊進(jìn)行拼接,得到一張粘連數(shù)字的圖片。通過循環(huán)操作生成90類復(fù)合數(shù)字的訓(xùn)練集和測(cè)試集,每一張粘連數(shù)字的拼接都采用隨機(jī)的重疊率。實(shí)驗(yàn)中制作了重疊率在d=0.5到d=0.75之間的數(shù)據(jù)集,每類粘連數(shù)字制作10 000張訓(xùn)練集和1 000張測(cè)試集。不同重疊率下的數(shù)字粘連情況如圖6所示。
圖6 不同重疊率下的粘連數(shù)字示例Fig.6 Examples of adhesion numbers under different overlap ratios
要識(shí)別的字符為0到99共100個(gè)數(shù)字,以及加號(hào)“+”、減號(hào)“-”、乘號(hào)“×”、除號(hào)“÷”、等于“=”、左括號(hào)“(”、右括號(hào)“)”這7類常見算術(shù)運(yùn)算符,共107類。將單個(gè)字符和復(fù)合數(shù)字進(jìn)行混合進(jìn)行訓(xùn)練。由于90類復(fù)合數(shù)字每類有10 000張,而單字符訓(xùn)練集每類只有6 000張,這種樣本不平衡問題降低了對(duì)107類字符的整體識(shí)別率。因此,采用圖像變換技術(shù),對(duì)單字符進(jìn)行數(shù)據(jù)增廣。從每類數(shù)據(jù)集隨機(jī)取4 000張,隨機(jī)旋轉(zhuǎn)?5°到5°的角度,旋轉(zhuǎn)后產(chǎn)生的圖片邊角用255像素填充。此外,將單字符和復(fù)合字符進(jìn)行了歸一化處理,結(jié)果如圖7所示。
圖7 圖像歸一化Fig.7 Image normalization
本文通過研究現(xiàn)有的輕量級(jí)神經(jīng)網(wǎng)絡(luò)模型,對(duì)比其在字符識(shí)別任務(wù)上的優(yōu)劣,最終選用知識(shí)蒸餾作為模型壓縮的方法。知識(shí)蒸餾由Hinton首次提出,該方法可以看作是知識(shí)遷移,將復(fù)雜模型的輸出和數(shù)據(jù)的真實(shí)標(biāo)簽去訓(xùn)練簡(jiǎn)單網(wǎng)絡(luò),并保留接近于復(fù)雜網(wǎng)絡(luò)的性能[23]。如圖8所示,知識(shí)蒸餾的主要步驟包括:
圖8 知識(shí)蒸餾示意圖Fig.8 Schematic diagram of knowledge distillation
(1)在原始數(shù)據(jù)集上,使用硬目標(biāo),用傳統(tǒng)方式訓(xùn)練好一個(gè)教師網(wǎng)絡(luò)。
(2)建立學(xué)生網(wǎng)絡(luò)模型,模型的輸出采用傳統(tǒng)的softmax函數(shù),擬合目標(biāo)為one-hot形式的訓(xùn)練集輸出,它們之間的距離記為loss1。
(3)將訓(xùn)練完成的教師網(wǎng)絡(luò)的softmax分類器加入溫度參數(shù)T,作為具有相同溫度參數(shù)softmax分類器的學(xué)生網(wǎng)絡(luò)的擬合目標(biāo),它們之間的距離記為loss2。
(4)引入?yún)?shù)alpha,將loss1×(1-alpha)+loss2×alpha作為學(xué)生網(wǎng)絡(luò)訓(xùn)練時(shí)使用的loss,訓(xùn)練網(wǎng)絡(luò)。
(5)將教師網(wǎng)絡(luò)的輸出結(jié)果軟目標(biāo)q作為學(xué)生網(wǎng)絡(luò)的目標(biāo),訓(xùn)練學(xué)生網(wǎng)絡(luò),使得學(xué)生網(wǎng)絡(luò)的結(jié)果p接近于q。
軟標(biāo)簽的計(jì)算方法為:
其中,zi表示第i類的輸入數(shù)據(jù),qi表示第i類經(jīng)過softmax輸出的軟標(biāo)簽。其中T為溫度參數(shù),用來放大暗知識(shí),將軟化后的輸入作為softmax層的輸入,并將其輸出的軟標(biāo)簽作為訓(xùn)練學(xué)生網(wǎng)絡(luò)時(shí)的目標(biāo),λ用來調(diào)節(jié)交叉熵的比重。
學(xué)生網(wǎng)絡(luò)的硬標(biāo)簽通過logsoftmax的輸出概率和教師網(wǎng)絡(luò)的軟標(biāo)簽通過softmax的輸出概率計(jì)算出來,輸入到KLDivLoss損失函數(shù)中,由此計(jì)算訓(xùn)練中的loss2。KL散度定義如下:
其中,P(x)是作為硬目標(biāo)的真實(shí)分布,Q(x)是擬合分布,xi是將輸出進(jìn)行LogSoftmax變換后的標(biāo)簽。
另一方面,在深度學(xué)習(xí)分類任務(wù)中,對(duì)于標(biāo)簽label的處理通常編碼為one-hot形式,即為硬標(biāo)簽。但這種標(biāo)簽方式會(huì)因模型要盡可能去擬合one-hot標(biāo)簽,容易造成過擬合,無法保證模型的泛化能力。因此,在知識(shí)蒸餾過程中使用標(biāo)簽平滑(label smoothing regularization,LSR),即軟標(biāo)簽,可以防止過擬合。
使用軟標(biāo)簽的目的是放大輸出中的暗知識(shí),為學(xué)生網(wǎng)絡(luò)訓(xùn)練提供更多的信息,如圖9所示,左邊為識(shí)別數(shù)字69時(shí)的概率圖,可以看到,識(shí)別為69的概率最大,而其他數(shù)字的概率較低,且?guī)缀踅咏鼮榱悖疫厼檐浕蟮臉?biāo)簽概率分布,可以看到,經(jīng)過暗知識(shí)放大后每個(gè)概率值更加明顯。這是因?yàn)?,使用軟?biāo)簽后,放大了沒有被用到的暗知識(shí),使得其他數(shù)字的概率大大提升,這些為識(shí)別數(shù)字提供了更多的信息。通過將硬標(biāo)簽中的值平滑為0到1之間的浮點(diǎn)數(shù),讓其他類別的概率凸顯得更加明顯,使得標(biāo)簽沒有那么絕對(duì)化,可以從軟標(biāo)簽中學(xué)習(xí)到更多信息,從而能夠提升整體的效果。
圖9 軟化后的概率大小對(duì)比Fig.9 Comparison of probability after softening
實(shí)驗(yàn)數(shù)據(jù)集:利用MNIST數(shù)據(jù)集進(jìn)行擴(kuò)充后,含有10萬張訓(xùn)練樣本和1萬張測(cè)試樣本。7類數(shù)學(xué)符號(hào)一共含70 000張訓(xùn)練樣本和7 000張測(cè)試樣本。復(fù)合數(shù)字?jǐn)?shù)據(jù)集一共有90類,每類復(fù)合數(shù)字都由10 000個(gè)訓(xùn)練樣本和1 000個(gè)測(cè)試樣本組成,含有數(shù)字10到99。將擴(kuò)充后的單字符數(shù)據(jù)集與復(fù)合數(shù)字?jǐn)?shù)據(jù)集進(jìn)行混合訓(xùn)練,共107類。
實(shí)驗(yàn)環(huán)境:硬件環(huán)境為NVIDIA TITAN X顯卡,128 GB運(yùn)行內(nèi)存,Intel E5-2678V3處理器。軟件環(huán)境為Ubuntu16系統(tǒng),Python3.6和Pytorch1.0開發(fā)環(huán)境。
數(shù)據(jù)預(yù)處理流程為:首先,由于生成復(fù)合數(shù)字時(shí)使用了隨機(jī)重疊率,所得圖片大小不統(tǒng)一,將圖片縮放為32×32,并對(duì)圖像每邊填充4個(gè)像素,把32×32擴(kuò)展至40×40;其次,進(jìn)行隨機(jī)裁剪、隨機(jī)左右翻轉(zhuǎn)和隨機(jī)鏡像、傾斜度為15°的隨機(jī)旋轉(zhuǎn)等操作,生成多樣化的訓(xùn)練數(shù)據(jù);最后,為了加快模型訓(xùn)練時(shí)通過梯度下降法搜索最優(yōu)解的速度,對(duì)圖像進(jìn)行標(biāo)準(zhǔn)化處理,RGB每個(gè)通道歸一化用到的均值mean為(0.507 0,0.486 5,0.440 9),方差std為(0.267 3,0.256 4,0.276 1)。
訓(xùn)練策略:訓(xùn)練過程中,數(shù)據(jù)加載使用了多線程的方式,其中訓(xùn)練集進(jìn)程數(shù)為4,測(cè)試集進(jìn)程數(shù)為2。
超參設(shè)置:教師網(wǎng)絡(luò)的訓(xùn)練使用了SGD優(yōu)化器,其中Nesterov參數(shù)為0.9,權(quán)重衰減系數(shù)為5E?4。損失函數(shù)使用交叉熵,學(xué)習(xí)率衰減方式初始為lr=0.1,在第15和25個(gè)epoch將學(xué)習(xí)率除以10,并以批量大小128訓(xùn)練30個(gè)epoch。學(xué)生網(wǎng)絡(luò)采用學(xué)習(xí)率為0.001的Adam優(yōu)化器對(duì)網(wǎng)絡(luò)訓(xùn)練30個(gè)epoch,alpha參數(shù)設(shè)置為0.95,溫度參數(shù)T設(shè)置為2,在完全相同的條件下訓(xùn)練5次,取測(cè)試集的平均識(shí)別結(jié)果。
教師網(wǎng)絡(luò)使用ResNet101,學(xué)生網(wǎng)絡(luò)采用GluNum-Net,對(duì)107類手寫字符進(jìn)行混合訓(xùn)練。對(duì)比其實(shí)驗(yàn)精度以及模型壓縮對(duì)實(shí)驗(yàn)精度的影響,并使用指標(biāo)Top1和Top5錯(cuò)誤率進(jìn)行量化評(píng)測(cè)。
為了驗(yàn)證本文方法在手寫字符上的分級(jí)識(shí)別效果,使用現(xiàn)有分類網(wǎng)絡(luò)ResNet101、ResNet152、Vgg16、Vgg19等4種網(wǎng)絡(luò)進(jìn)行了對(duì)比,訓(xùn)練過程與訓(xùn)練超參數(shù)完全相同,并保存最好的模型。在此基礎(chǔ)上,對(duì)107類手寫字符數(shù)據(jù)集進(jìn)行模型訓(xùn)練,在訓(xùn)練時(shí)設(shè)置同樣的參數(shù),其中,Batch Size為128、epoch為30、學(xué)習(xí)率為0.01,并在第15和25個(gè)epoch時(shí),將學(xué)習(xí)率降低到原來的1/10。
表1為在不同分類網(wǎng)絡(luò)上,對(duì)107類單字符數(shù)據(jù)集進(jìn)行模型訓(xùn)練的結(jié)果。經(jīng)多次驗(yàn)證,在107類單字符數(shù)據(jù)集上,基于ResNet101的字符識(shí)別精度較高。雖然模型大小高于Vgg模型,但是由于尋找的是精度表現(xiàn)最好的網(wǎng)絡(luò),以便于學(xué)生網(wǎng)絡(luò)能學(xué)習(xí)到更好的知識(shí),所以不用考慮模型的大小。因此,將錯(cuò)誤率表現(xiàn)最低的ResNet101作為教師網(wǎng)絡(luò)。而由于ResNet152層數(shù)過深,導(dǎo)致出現(xiàn)過擬合現(xiàn)象,使得結(jié)果反而不如ResNet101。
表1 在107類字符數(shù)據(jù)集上對(duì)比基準(zhǔn)方法(深度網(wǎng)絡(luò))Table 1 Contrast reference method on 107 class character datase(tdeep network)
為了對(duì)比出GluNumNet在知識(shí)蒸餾上的有效性,選用了現(xiàn)有的輕量級(jí)神經(jīng)網(wǎng)絡(luò)InceptionV3,NasNet,MobileNet作為參照,同時(shí)選用了ResNet18來對(duì)比出深度網(wǎng)絡(luò)的有效性。對(duì)比表1中ResNet101和表2中ResNet18的結(jié)果,ResNet101在Top1和Top5的結(jié)果均優(yōu)于ResNet18,ResNet101的錯(cuò)誤率在Top1時(shí)僅有2.61%,而ResNet18的錯(cuò)誤率在Top5時(shí)就達(dá)到了3.06%,可以發(fā)現(xiàn),殘差結(jié)構(gòu)在網(wǎng)絡(luò)層數(shù)深的時(shí)候,表現(xiàn)出更好的效果。雖然InceptionV3的結(jié)果與本文方法相差不多,但是參數(shù)量卻明顯上升。而本文提出的方法使用了1×1的小卷積,這樣能保證計(jì)算量低,同時(shí)由于加入了殘差結(jié)構(gòu),使得將輸出反饋給輸入時(shí),數(shù)據(jù)豐富的特征被充分利用,得出更好的效果。將本文提出的方法對(duì)比于其他幾種輕量級(jí)網(wǎng)絡(luò),GluNumNet在手寫字符數(shù)據(jù)集上效果均優(yōu)于其他模型,也降低了模型參數(shù)。如表2。
表2 在107類字符數(shù)據(jù)集上對(duì)比基準(zhǔn)方法(輕量級(jí)網(wǎng)絡(luò))Table 2 Contrast reference method on 107 class character datase(tlightweight network)
使用知識(shí)蒸餾分別對(duì)模型進(jìn)行優(yōu)化,并將表1中效果最好的ResNet101作為教師網(wǎng)絡(luò),指導(dǎo)學(xué)生模型GluNumNet的學(xué)習(xí),損失函數(shù)均采用交叉熵函數(shù)。表3給出了在alpha為0.95和溫度為2的條件下五次測(cè)試的平均效果。其中ResNet18在學(xué)習(xí)了ResNet101之后,Top1錯(cuò)誤率降低了3.94%,這說明,當(dāng)需要網(wǎng)絡(luò)模型精度高同時(shí)模型小的時(shí)候,可以使用知識(shí)蒸餾的方法來提升淺層網(wǎng)絡(luò)的性能,使得淺層網(wǎng)絡(luò)學(xué)到更深的知識(shí)。而將本文方法GluNumNet與其他幾種結(jié)果較好的輕量級(jí)神經(jīng)網(wǎng)絡(luò)進(jìn)行對(duì)比,結(jié)果顯示,本文提出的方法更具有效性,且在教師網(wǎng)絡(luò)的指導(dǎo)下表現(xiàn)得更好,精度提升了1.09%,模型大小比壓縮前減少了37.9%,更有利于部署到移動(dòng)端等實(shí)際場(chǎng)景。
表3 本文方法GluNumNet與其他輕量級(jí)網(wǎng)絡(luò)的知識(shí)蒸餾效果對(duì)比Table 3 Methods of GlunumNet and other lightweight network knowledge distillation results
上面的實(shí)驗(yàn)是在固定參數(shù)alpha為0.95和溫度參數(shù)為2時(shí)的實(shí)驗(yàn)效果,為了對(duì)比參數(shù)對(duì)知識(shí)蒸餾效果的影響,將取不同的值來獲得最佳實(shí)驗(yàn)效果。表4是不同參數(shù)對(duì)107類字符識(shí)別的影響,展示數(shù)據(jù)為Top1錯(cuò)誤率,可以看出,使用GluNumNet對(duì)深度網(wǎng)絡(luò)進(jìn)行學(xué)習(xí)時(shí),采用alpha為0.95和T為10時(shí),錯(cuò)誤率最低,僅有2.78%。
表4 不同參數(shù)對(duì)GluNumNet結(jié)果的影響Table 4 Impact of different parameters on GluNumNet單位:%
在4 GB內(nèi)存樹莓派上,使用知識(shí)蒸餾后的GluNum-Net模型進(jìn)行測(cè)試,實(shí)驗(yàn)5次后取平均結(jié)果,實(shí)驗(yàn)結(jié)果如表5所示。從中可以看出,使用知識(shí)蒸餾后的學(xué)生網(wǎng)絡(luò)精度逼近于教師網(wǎng)絡(luò)的結(jié)果,Top1僅有2.78%,模型大小也縮減為18.82 MB,說明多分支的殘差結(jié)構(gòu)充分提取了特征,采用的小卷積結(jié)構(gòu)也降低了模型的參數(shù)量,引入的注意力機(jī)制提高了任務(wù)處理的效率和準(zhǔn)確性。同時(shí),結(jié)合表4可以看出,在同樣進(jìn)行知識(shí)蒸餾的條件下,alpha和T值越高越能提升網(wǎng)絡(luò)性能。綜上所述,通過GluNumNet和知識(shí)蒸餾的方法,每張圖片測(cè)試時(shí)間耗時(shí)最短,且模型規(guī)模減小,可以在計(jì)算資源受限的樹莓派等終端上運(yùn)行,證明了本文方法的有效性。
表5 知識(shí)蒸餾后的識(shí)別效果Table 5 Identification effect after knowledge distillation
針對(duì)低年級(jí)數(shù)學(xué)算術(shù)題圖像中手寫字符粘連導(dǎo)致影響識(shí)別率的問題,本文將MNIST數(shù)據(jù)集通過隨機(jī)重疊和拼接方式進(jìn)行組合,制作了90類復(fù)合數(shù)字?jǐn)?shù)據(jù)集,并提出多分支輕量級(jí)殘差網(wǎng)絡(luò)的手寫字符識(shí)別方法。借用Inception思想,采用多分支結(jié)構(gòu),融合了ResNet殘差結(jié)構(gòu)和注意力機(jī)制,提高網(wǎng)絡(luò)的特征學(xué)習(xí)能力。然后,將107類字符混合訓(xùn)練出輕量級(jí)網(wǎng)絡(luò)模型對(duì)手寫字符圖像進(jìn)行識(shí)別,使得粘連字符在沒有正確分割的時(shí)候也能達(dá)到較好的識(shí)別效果。此外,通過知識(shí)蒸餾將深度模型進(jìn)行壓縮,使蒸餾后的網(wǎng)絡(luò)可以接近深層網(wǎng)絡(luò)的精度,同時(shí)加快識(shí)別速度,減少內(nèi)存的消耗,使其能在資源受限的樹莓派等嵌入式設(shè)備上運(yùn)行,解決了因?yàn)榻K端設(shè)備的計(jì)算資源不足而無法高效使用深度模型的問題。
在未來的工作中,除了考慮使用知識(shí)蒸餾來進(jìn)行模型壓縮之外,找出更好的模型壓縮方法,使得網(wǎng)絡(luò)在不依賴于深度網(wǎng)絡(luò)的同時(shí)能達(dá)到高精度低參數(shù)的效果,將是下一步提高準(zhǔn)確率以及降低模型復(fù)雜度的研究重點(diǎn)。