秦 波,顧乃杰,張孝慈,林傳文
(中國(guó)科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 網(wǎng)絡(luò)計(jì)算與高效算法實(shí)驗(yàn)室,合肥 230027)
(安徽省計(jì)算與通信軟件重點(diǎn)實(shí)驗(yàn)室,合肥 230027)
(中國(guó)科學(xué)技術(shù)大學(xué) 先進(jìn)技術(shù)研究院,合肥 230027)
驗(yàn)證碼(Completely Automated Public Turing test to tell Computers and Humans Apart,CAPTCHA)是一種用于區(qū)分人類行為與機(jī)器行為的算法.作為互聯(lián)網(wǎng)行業(yè)通用的基礎(chǔ)安全策略,驗(yàn)證碼擔(dān)負(fù)著保護(hù)網(wǎng)絡(luò)賬號(hào)安全體系的第一道防御,用以驗(yàn)證和防范機(jī)器程序的惡意行為,如何提升驗(yàn)證碼的安全性并防止自動(dòng)破解程序,已經(jīng)成為一個(gè)至關(guān)重要的問(wèn)題.
作為深度神經(jīng)網(wǎng)絡(luò)的一種,卷積神經(jīng)網(wǎng)絡(luò)(Convolutionional Neural Networks,CNN)在圖像識(shí)別領(lǐng)域內(nèi)表現(xiàn)出優(yōu)異的性能[1],且大大優(yōu)于傳統(tǒng)的機(jī)器學(xué)習(xí)方法.較傳統(tǒng)方法而言,CNN的主要優(yōu)勢(shì)在于卷積層提取的圖像特征具有很強(qiáng)的表達(dá)能力,避免了傳統(tǒng)識(shí)別技術(shù)存在的數(shù)據(jù)預(yù)處理、人工設(shè)計(jì)特征等問(wèn)題.在具備足夠的標(biāo)注樣本的情況下,只需要定義一個(gè)合適的網(wǎng)絡(luò)模型,就能夠取得遠(yuǎn)高于傳統(tǒng)方法所取得的識(shí)別效果.
本文設(shè)計(jì)了一種基于卷積神經(jīng)網(wǎng)絡(luò)的圖像驗(yàn)證碼識(shí)別方法,對(duì)傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練中存在的模型復(fù)雜、輸出層參數(shù)冗余等問(wèn)題進(jìn)行了改進(jìn).本文通過(guò)卷積層級(jí)聯(lián)、殘差學(xué)習(xí)、全局池化和分組卷積等技術(shù)手段,在保證網(wǎng)絡(luò)識(shí)別精度的前提下,壓縮了模型規(guī)模.
鑒于驗(yàn)證碼在互聯(lián)網(wǎng)的廣泛應(yīng)用,國(guó)內(nèi)外學(xué)者對(duì)驗(yàn)證碼的設(shè)計(jì)和識(shí)別進(jìn)行了廣泛的研究.Zhang和Wang[2]利用傳統(tǒng)圖像處理方法并結(jié)合KNN算法進(jìn)行驗(yàn)證碼識(shí)別研究.李興國(guó)等人[3]提出一種滴水算法分割驗(yàn)證碼.Lu等人[4]分別提出了不同的字符分割算法并結(jié)合SVM分類算法及BP神經(jīng)網(wǎng)絡(luò)進(jìn)行字符識(shí)別.Yan等人[5]分析并研究了現(xiàn)有微軟驗(yàn)證碼的缺陷,并設(shè)計(jì)了虛擬問(wèn)答及基于情感方法對(duì)驗(yàn)證碼進(jìn)行識(shí)別.Mori和Malik[6]利用形狀上下文方法對(duì)驗(yàn)證碼進(jìn)行了識(shí)別研究.
深度神經(jīng)網(wǎng)絡(luò)在科學(xué)研究中被廣泛使用,Yann LeCun等人[7]提出了基于CNN的文字識(shí)別系統(tǒng)LeNet-5.Hinton等人[8]提出的深度置信網(wǎng)絡(luò)(Deep Belief Network,DBN)可以更快地訓(xùn)練深度網(wǎng)絡(luò).在圖像應(yīng)用中,CNN采用隨機(jī)梯度下降(Stochastic Gradient Decent,SGD)和GPU (Graphics Processing Unit)加快了深度網(wǎng)絡(luò)的訓(xùn)練速率.IDSIA實(shí)驗(yàn)室[9]針對(duì)手寫(xiě)中文漢字識(shí)別提出一種多列CNN模型,通過(guò)訓(xùn)練多個(gè)CNN網(wǎng)絡(luò)并對(duì)結(jié)果進(jìn)行簡(jiǎn)單的平均集成實(shí)現(xiàn)并行訓(xùn)練.Zhong等人[10]提出一種HCCR-GoogLeNet模型,利用GoogLeNet的網(wǎng)絡(luò)結(jié)構(gòu)并引入手寫(xiě)漢字的多尺度多方向特征,完成脫機(jī)手寫(xiě)中文漢字識(shí)別.范望等人[11]構(gòu)造出卷積神經(jīng)網(wǎng)絡(luò)用于漢字驗(yàn)證碼識(shí)別.針對(duì)不分割的驗(yàn)證碼識(shí)別,Google研究人員[12]采用概率模型和卷積神經(jīng)網(wǎng)絡(luò)開(kāi)發(fā)了一種無(wú)需字符分割的街道門(mén)牌識(shí)別系統(tǒng),對(duì)門(mén)牌準(zhǔn)確率高達(dá)90%.Yann LeCun等人[13]采用空間位移神經(jīng)網(wǎng)絡(luò)(SDNN)和隱馬爾科夫模型(HMM)對(duì)帶有粘連的手寫(xiě)字符進(jìn)行識(shí)別.Shi等人[14]利用CNN和R N N結(jié)合思想,提出一種卷積循環(huán)神經(jīng)網(wǎng)絡(luò)(CRNN)完成驗(yàn)證碼的整體識(shí)別.
本文提出的卷積神經(jīng)網(wǎng)絡(luò)模型主要由以下模塊組成: 級(jí)聯(lián)卷積層、殘差層以及分類池化層,如圖1所示,下面對(duì)這些結(jié)構(gòu)進(jìn)行具體介紹.
圖1 本文網(wǎng)絡(luò)結(jié)構(gòu)
圖2 級(jí)聯(lián)卷積層
(1) 參數(shù)量
假設(shè)圖2中所有數(shù)據(jù)有C個(gè)通道,下面將比較3個(gè) 3 ×3卷積核和1個(gè)卷積核的參數(shù)量.
由公式(1)和(2)可知,兩者的參數(shù)量倍數(shù)為:
(2) 感受野
感受野(Receptive Field)計(jì)算方法如下:
隨著網(wǎng)絡(luò)深度的增加,網(wǎng)絡(luò)出現(xiàn)無(wú)法收斂、性能退化等問(wèn)題[16].主要原因在于經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)參數(shù)梯度值等于所有前層參數(shù)梯度的乘積,當(dāng)淺層的參數(shù)梯度值過(guò)小就容易產(chǎn)生梯度消失的問(wèn)題,從而影響到網(wǎng)絡(luò)的表現(xiàn)性能.研究顯示,殘差結(jié)構(gòu)[17]不僅能夠解決網(wǎng)絡(luò)深度深而性能退化的問(wèn)題,而且也解決了梯度消失的問(wèn)題.
下面將對(duì)殘差層進(jìn)行分析.為了不失一般性,從第l層到第L層的前向過(guò)程可表示為:
可以看出,網(wǎng)絡(luò)參數(shù)學(xué)習(xí)過(guò)程實(shí)際上等價(jià)于對(duì)前面層的參數(shù)梯度的求和過(guò)程,即從是線性疊加的過(guò)程,因而允許網(wǎng)絡(luò)深度增加,而不會(huì)出現(xiàn)梯度消失的問(wèn)題.
圖3 殘差模塊
圖4 卷積分組
假如輸入特征圖個(gè)數(shù)為N,該層的卷積核(kernel)個(gè)數(shù)為M,計(jì)算下一層特征圖是利用M個(gè)kernel和N個(gè)輸入特征圖.引入group后,計(jì)算下一層特征圖則利用M/group個(gè)kernel和N/group個(gè)輸入特征圖.
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)中,卷積層和池化層等用于特征提取,隨后利用一到多個(gè)全連接層將學(xué)習(xí)到的特征空間隱式地映射到樣本標(biāo)記空間,最后在輸出層由softmax激活函數(shù)完成目標(biāo)分類任務(wù).全連接層的弊端在于參數(shù)過(guò)多,容易出現(xiàn)過(guò)擬合等情況.本文使用分類池化層來(lái)替代全連接層[18](圖5).這里分類池化層實(shí)際上是全局平均池化層(圖6),其沒(méi)有需要優(yōu)化的參數(shù),從而可以避免出現(xiàn)過(guò)擬合情況.同時(shí)其對(duì)空間信息求和,因而對(duì)空間變換更加健壯.
圖5 分類池化層
圖6 全局平均池化層
圖6顯示是全局平均池化層,輸出特征圖的計(jì)算方法如下:
本文結(jié)構(gòu)的具體網(wǎng)絡(luò)參數(shù)見(jiàn)表1.其中Conv1_x和Pool1是級(jí)聯(lián)卷積層,Conv2_x至Conv5_x是殘差層,Pool2是分類池化層.
本文在深度學(xué)習(xí)框架Caffe的基礎(chǔ)上,實(shí)現(xiàn)了基于卷積神經(jīng)網(wǎng)絡(luò)的圖像驗(yàn)證碼識(shí)別方法.
實(shí)驗(yàn)平臺(tái)使用Intel XeonE5-2620 v2 2.1 GHZ CPU,126 GB 內(nèi)存,以及 NVIDIA Tesla K40m GPU.其中Tesla K40m GPU單精度峰值4.29 Tflops,顯存為12 GB GDDR5,顯存帶寬為288 Gbytes/sec.
本文實(shí)驗(yàn)數(shù)據(jù)以鐵路購(gòu)票網(wǎng)站驗(yàn)證碼和正方教務(wù)系統(tǒng)驗(yàn)證碼為例.
(1) 購(gòu)票網(wǎng)站驗(yàn)證碼
購(gòu)票網(wǎng)站驗(yàn)證碼共收集109 900張,包含圖形302類,訓(xùn)練圖片數(shù)112 599張; 包含中文詞組302類,訓(xùn)練圖片數(shù)39 931張.對(duì)于驗(yàn)證碼識(shí)別之前,首先需要對(duì)驗(yàn)證碼進(jìn)行預(yù)處理操作,分割成單獨(dú)子圖和中文漢字或詞組.具體購(gòu)票網(wǎng)站驗(yàn)證碼如圖7所示.
表1 網(wǎng)絡(luò)參數(shù)
圖7 購(gòu)票網(wǎng)站驗(yàn)證碼
(2) 正方教務(wù)系統(tǒng)驗(yàn)證碼
正方教務(wù)系統(tǒng)驗(yàn)證碼由字母和數(shù)字構(gòu)成,共包含33類,訓(xùn)練驗(yàn)證碼數(shù)5950張.對(duì)于驗(yàn)證碼識(shí)別之前,需要對(duì)驗(yàn)證碼進(jìn)行預(yù)處理,包含去噪以及分割等步驟.該驗(yàn)證碼如圖8所示.
圖8 正方教務(wù)系統(tǒng)驗(yàn)證碼
鐵路購(gòu)票網(wǎng)站驗(yàn)證碼包含圖形驗(yàn)證碼和中文驗(yàn)證碼.
(1) 圖形驗(yàn)證碼
對(duì)于圖形分割部分,由于驗(yàn)證碼中八張子圖尺寸與位置均固定,故考慮直接設(shè)置分割點(diǎn)實(shí)現(xiàn)分割.同時(shí),對(duì)于圖片數(shù)較少的類別,采取數(shù)據(jù)增強(qiáng)方式來(lái)擴(kuò)充訓(xùn)練數(shù)據(jù)集,主要包括圖像縮放、旋轉(zhuǎn)和顏色變換等.
對(duì)于圖形識(shí)別部分,圖形驗(yàn)證碼共302類,訓(xùn)練集圖片82 599張,測(cè)試集圖片30 000張.實(shí)驗(yàn)參數(shù)如下:訓(xùn)練mini-batch大小設(shè)置為32,訓(xùn)練最大迭代為250 000次.訓(xùn)練過(guò)程中前100 000次迭代的學(xué)習(xí)率為0.01,后面每隔40 000次學(xué)習(xí)率衰減1/10,梯度更新方法為Momentum,值設(shè)置為0.9.本文測(cè)試傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)模型,包含AlexNet[1],GoogLeNet[19]以及ResNet50[17],并與本文方法進(jìn)行比較,實(shí)驗(yàn)結(jié)果如表2.
表2 模型在圖形驗(yàn)證碼上的準(zhǔn)確率和模型大小
(2) 中文驗(yàn)證碼
對(duì)于字符分割部分,本文利用垂直投影算法分割出單個(gè)詞組,而并非是中文字符.該方法好處是盡可能避免切分單字帶來(lái)的誤差.下面是中文詞組分割的算法.
算法1 基于中文詞組分割算法
1) 從驗(yàn)證碼中截取出中文漢字部分ChiWords;
2) 對(duì)ChiWords進(jìn)行灰度化、二值化處理,得到BChiWords;
3) 從BChiWords中依次統(tǒng)計(jì)出每列黑色像素點(diǎn)個(gè)數(shù)BNP;
4) 設(shè)置閾值T1,T2.如果BNP小于閾值T1,則說(shuō)明此位置有可能是分割點(diǎn),記連續(xù)分割點(diǎn)的起止位置s和t.如果時(shí),保存s和t.
5) 根據(jù)結(jié)果切分中文詞組,并獲取下一張驗(yàn)證碼,返回第1)步.
6) 直至終止條件滿足,結(jié)束.
對(duì)于字符識(shí)別部分,中文驗(yàn)證碼包含中文詞組302類,訓(xùn)練集圖片數(shù)27 982張,測(cè)試集圖片11 949張.基于字符分割識(shí)別實(shí)驗(yàn),本文利用開(kāi)源Tesseract軟件實(shí)驗(yàn)和基于AlexNet模型的中文識(shí)別實(shí)驗(yàn),實(shí)驗(yàn)記為SplitAlexNet; 基于詞組分割識(shí)別實(shí)驗(yàn),主要考慮AlexNet,GoogLeNet,ResNet50和本文方法.實(shí)驗(yàn)結(jié)果見(jiàn)表3.
表3 模型在中文驗(yàn)證碼上的準(zhǔn)確率和模型大小
(3) 整體驗(yàn)證碼
實(shí)驗(yàn)數(shù)據(jù)為購(gòu)票網(wǎng)站驗(yàn)證碼,測(cè)試驗(yàn)證碼988張,與上述實(shí)驗(yàn)使用的數(shù)據(jù)集不同.
整體驗(yàn)證碼識(shí)別過(guò)程: 首先對(duì)驗(yàn)證碼預(yù)處理,然后對(duì)中文詞組和子圖識(shí)別.中文詞組識(shí)別結(jié)果與詞組標(biāo)注結(jié)果進(jìn)行比對(duì),如果詞組識(shí)別無(wú)誤,將符合詞組的子圖識(shí)別結(jié)果下標(biāo)與標(biāo)簽文件進(jìn)行比較(圖9).實(shí)驗(yàn)結(jié)果見(jiàn)表4.
圖9 整體識(shí)別過(guò)程
表4 模型在整體驗(yàn)證碼上的準(zhǔn)確率和模型大小
從表2可知,本文方法參數(shù)量最少,大小為24.96 MB.且在測(cè)試集的top1準(zhǔn)確率最高,比AlexNet,GoogLeNet,ResNet50分別高1.24%,0.44%,0.06%.
表3的結(jié)果顯示,基于字符分割識(shí)別的方法,詞組識(shí)別準(zhǔn)確率較低,其中較好的模型是SplitAlexNet,其top1準(zhǔn)確率達(dá)到75.20%; 基于中文詞組識(shí)別的方法,本文方法準(zhǔn)確率達(dá)到99.14%,高于傳統(tǒng)的AlexNet,GoogLeNet,ResNet50神經(jīng)網(wǎng)絡(luò)模型準(zhǔn)確率.與此同時(shí)本文方法參數(shù)量最少,分別比傳統(tǒng)神經(jīng)網(wǎng)絡(luò)參數(shù)量降低9.40倍,23.25倍,1.26倍和3.32倍.
從表4可知,本文提出的整體驗(yàn)證碼識(shí)別準(zhǔn)確率要比其它網(wǎng)絡(luò)模型高,且模型更小.
該驗(yàn)證碼訓(xùn)練集圖片4630張,測(cè)試集圖片1320張.本文測(cè)試傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)模型,包含AlexNet,GoogLeNet,ResNet50,并與本文方法進(jìn)行對(duì)比.
實(shí)驗(yàn)參數(shù)如下: 訓(xùn)練mini-batch大小設(shè)置為32,訓(xùn)練最大迭代30 000次.訓(xùn)練過(guò)程中前8 000次學(xué)習(xí)率為0.001,后面每隔6 000次學(xué)習(xí)率衰減1/10,梯度更新方法為Momentum,值設(shè)置為0.9.
通過(guò)表5和表6可知,準(zhǔn)確率方面,本文方法的準(zhǔn)確率不低于傳統(tǒng)神經(jīng)網(wǎng)絡(luò)模型; 模型大小方面,本文方法參數(shù)量比AlexNet,GoogLeNet和ResNet50要少.
表5 模型在字符上的準(zhǔn)確率及模型大小
表6 模型在正方驗(yàn)證碼上的準(zhǔn)確率及模型大小
本文重點(diǎn)考慮在不影響模型準(zhǔn)確率的前提下,進(jìn)一步減少模型的參數(shù)量,即模型規(guī)模.通過(guò)上述實(shí)驗(yàn)可以看到,本文網(wǎng)絡(luò)結(jié)構(gòu)是基準(zhǔn)模型中參數(shù)量最少的,同時(shí)驗(yàn)證碼的識(shí)別效果比其它網(wǎng)絡(luò)要好.接下來(lái)將具體分析原因.
一是模型參數(shù)量縮減方面.本文利用級(jí)聯(lián)卷積層減少了網(wǎng)絡(luò)參數(shù),增加了網(wǎng)絡(luò)的非線性.同時(shí)在殘差層調(diào)整卷積分組個(gè)數(shù),利用全連接層替換.這幾個(gè)方面的改進(jìn)能夠很明顯地看出網(wǎng)絡(luò)規(guī)模變小.
本文調(diào)整卷積分組的個(gè)數(shù),一方面使得卷積層計(jì)算加快,模型參數(shù)量減少,同時(shí)也影響識(shí)別的準(zhǔn)確率,下面將實(shí)驗(yàn)說(shuō)明卷積分組對(duì)網(wǎng)絡(luò)結(jié)構(gòu)準(zhǔn)確率的影響.
(1) 卷積分組實(shí)驗(yàn)
卷積分組不僅能夠降低網(wǎng)絡(luò)的規(guī)模,同時(shí)卷積分組個(gè)數(shù)也影響著網(wǎng)絡(luò)的識(shí)別率.本文將對(duì)分組個(gè)數(shù)進(jìn)行實(shí)驗(yàn),考慮在不同的分組下,本文方法的準(zhǔn)確率變化情況.
為了說(shuō)明卷積分組對(duì)實(shí)驗(yàn)準(zhǔn)確率的影響,將在圖形驗(yàn)證碼和中文驗(yàn)證碼上進(jìn)行實(shí)驗(yàn)分析.通過(guò)表7和表8容易看出,對(duì)于不同數(shù)據(jù)集最優(yōu)的group選擇也不同.
表7 卷積分組對(duì)圖形驗(yàn)證碼準(zhǔn)確率影響
表8 卷積分組對(duì)中文驗(yàn)證碼準(zhǔn)確率影響
(2) 特征圖可視化
通過(guò)特征圖可視化能夠更好地理解網(wǎng)絡(luò)的特征學(xué)習(xí)過(guò)程,下圖是利用本文方法識(shí)別的最后層可視化結(jié)果.
圖10顯示的是本文方法在最后層特征圖的激活程度.可以看出無(wú)論是中文詞組還是圖形驗(yàn)證碼,相同類別的圖片在最后層的激活程度相似,而不同類別之間的激活程度卻迥然不同.
圖10 最后層特征圖可視化結(jié)果
本文利用卷積層級(jí)聯(lián)、殘差學(xué)習(xí)、全局池化、卷積分組等方法,提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)的驗(yàn)證碼識(shí)別方法.實(shí)驗(yàn)表明該方法較傳統(tǒng)網(wǎng)絡(luò)模型具有參數(shù)量少的特點(diǎn),而且有著更高的識(shí)別準(zhǔn)確率.此外,本文還討論了卷積分組對(duì)準(zhǔn)確率的影響,并通過(guò)實(shí)驗(yàn)選出性能最優(yōu)的卷積分組.接下來(lái)的工作將繼續(xù)優(yōu)化網(wǎng)絡(luò)模型結(jié)構(gòu),同時(shí)也將根據(jù)本文的實(shí)驗(yàn)結(jié)果分析如何提升驗(yàn)證碼的安全性.