范 望,韓俊剛,茍 凡,李 帥
西安郵電大學(xué) 研究生學(xué)院,西安 710121
隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,網(wǎng)絡(luò)安全成了人們關(guān)注的一個重點內(nèi)容。驗證碼主要是用于區(qū)分機器自動程序與人類用戶的差異性,抵御惡意程序,防止濫用網(wǎng)絡(luò)資源。驗證碼自動識別技術(shù)可以提高現(xiàn)有驗證碼安全性,并幫助設(shè)計出更安全的驗證碼,進而有效地確保網(wǎng)絡(luò)安全。
國內(nèi)外學(xué)者在驗證碼的識別領(lǐng)域已有了較多的研究。呂霽綜合了一類神經(jīng)網(wǎng)絡(luò)方法,并將其應(yīng)用于驗證碼識別研究[1];劉歡整體研究了卷積神經(jīng)網(wǎng)絡(luò)在可分割與不可分割驗證碼識別上的應(yīng)用[2];王璐則對粘連字符驗證碼的識別進行了研究[3];LvYanping等人對漢字驗證碼使用卷積神經(jīng)網(wǎng)絡(luò)識別進行深度研究[4];Garg和Pollett提出了使用深層神經(jīng)網(wǎng)絡(luò),開發(fā)一個能夠打破所有基于字符的驗證碼的單一神經(jīng)網(wǎng)絡(luò)[5];Shen Yunhang等人對漢字Touclick CAPTCHAs提出了一種多尺度角結(jié)構(gòu)模型識別[6]。
現(xiàn)如今,深度學(xué)習(xí)技術(shù)被廣泛應(yīng)用于各領(lǐng)域,硬件能力與算法的改進更是使其形成良性循環(huán)。在圖像領(lǐng)域,卷積神經(jīng)網(wǎng)絡(luò)采用隨機梯度下降算法(Stochastic GradientDescent,SGD)[7]和GPU加快訓(xùn)練過程,從而使得訓(xùn)練大量的圖像數(shù)據(jù)更為方便。卷積神經(jīng)網(wǎng)絡(luò)在以往被用來研究驗證碼識別并不少見,但往往是基于Caffe、Mxnet或者Tensorflow框架,本文所有實驗均采用Keras[8]神經(jīng)網(wǎng)絡(luò)框架,旨在探究一種適合識別驗證碼的并且明顯提升準確率的神經(jīng)網(wǎng)絡(luò)框架。Keras實質(zhì)上是一個高層神經(jīng)網(wǎng)絡(luò)庫,它是基于Theano和Tensorflow的深度學(xué)習(xí)庫,是一個極簡單和高度模塊化的神經(jīng)網(wǎng)絡(luò)庫。本文設(shè)計新的網(wǎng)絡(luò)結(jié)構(gòu),在Keras網(wǎng)絡(luò)框架下使用CNN分析研究傳統(tǒng)字母數(shù)字驗證碼與漢字驗證碼[9],并取得了很好的效果。
本文共設(shè)置了兩個實驗來驗證在Keras框架下使用深層神經(jīng)網(wǎng)絡(luò)對驗證碼識別性能的提升。首先,訓(xùn)練傳統(tǒng)字母數(shù)字驗證碼,并將測試結(jié)果進行統(tǒng)計;其次,對漢字驗證碼進行訓(xùn)練與測試。
傳統(tǒng)的字母數(shù)字驗證碼(如圖1所示)的數(shù)據(jù)來源于各大公司網(wǎng)站,本文采取網(wǎng)絡(luò)爬蟲爬取數(shù)據(jù)的方式,對各種字母數(shù)字驗證碼進行獲取,使數(shù)據(jù)具有代表性。其中大部分來自于百度,騰訊,網(wǎng)易云音樂,小部分來自于其他網(wǎng)站以及自己模仿生成的一些四字符驗證碼,數(shù)據(jù)的多樣性保證了系統(tǒng)的穩(wěn)定性。
圖1 傳統(tǒng)的字母數(shù)字驗證碼
最后獲取訓(xùn)練數(shù)據(jù)50 000張,測試數(shù)據(jù)1 000張。采取人工方式為每張驗證碼打上了標記(Label),確保了數(shù)據(jù)的準確性。
為了對比,漢字驗證碼的實驗是以騰訊qq安全中心找回密碼出現(xiàn)的點擊驗證為藍本。點擊驗證碼(如圖2所示)識別的思想就是首先將大圖中的每個字分割下來進行處理,然后放到神經(jīng)網(wǎng)絡(luò)里邊去做預(yù)測;再將小圖中的每個字分割下來進行處理做預(yù)測,然后將大小圖的預(yù)測值進行匹配(計算兩個預(yù)測矩陣的最短歐幾里德距離[10]),匹配成功則返回大圖坐標,點擊即可。
圖2 點擊驗證碼
要做到點擊驗證碼識別的效果,必須保證訓(xùn)練的模型盡可能包含所有漢字的模式,包括漢字的種類、樣式以及各種變換。本文訓(xùn)練數(shù)據(jù)來源于自主生成的驗證碼(如圖3所示)。雖然現(xiàn)存漢字大約有91 251個,但是漢字驗證碼都是一些常用漢字,所以本文提取常用的3 500個漢字,將單個漢字對應(yīng)的標記轉(zhuǎn)換為漢字在txt文件中的序號。隨后生成單字驗證碼進行訓(xùn)練,這樣不僅保證了漢字種類的涵蓋,同樣保證了模型不會存在數(shù)據(jù)冗余。
圖3 漢字驗證碼
漢字的樣式不同主要是字體的不同,在選定3 500個漢字之后,為了使字體覆蓋全面,使用微軟字體庫,方正字體庫的字體相結(jié)合并加上扭曲、旋轉(zhuǎn),噪聲生成了32×32大小的單字驗證碼,其中600 000張用于訓(xùn)練,20 000張用于測試。
本文采用卷積神經(jīng)網(wǎng)絡(luò)開源框架Keras進行實驗研究。服務(wù)器配置如下:
14.04-Ubuntu,CP為Intel酷睿i7-5820K處理器,主頻 3.30 GHz,32 GB內(nèi)存,GPU為 NVIDIA GeForce GTX 970,4 GB顯存。
進行深度學(xué)習(xí)的CNN網(wǎng)絡(luò)結(jié)構(gòu)如下,本文將用此結(jié)構(gòu)對傳統(tǒng)的字母數(shù)字驗證碼(如圖1所示)進行訓(xùn)練,訓(xùn)練的網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
圖4 訓(xùn)練字母數(shù)字驗證碼的網(wǎng)絡(luò)結(jié)構(gòu)
(1)對圖片矩陣進行歸一化等基本處理后,將大小為128×64的驗證碼圖片送入網(wǎng)絡(luò)。
(2)實驗的CNN包含13個卷積層,5個池化層和一個全連接層。
①C1層卷積核大小為3×3,因選擇卷積方式為輸入輸出尺寸一致,所以C1卷積層包含32個大小為128×64的特征圖。每個卷積層之后接特征映射層,采用Re-LU[11]激活函數(shù),實現(xiàn)特征映射的位移不變性。
②C2將激活后的C1作為輸入,再做卷積;C2包含32個大小為128×64的特征圖,其卷積核大小為3×3。
③P1層是將激活后的C2作為輸入的池化層,P1包含32個大小為64×32的特征圖,其局部感受區(qū)域為2×2。
④C3將P1作為輸入,該卷積層包含32個大小為64×32的特征圖,其卷積核大小為3×3。
⑤C4將激活后的C3作為輸入,該卷積層包含32個大小為64×32的特征圖,其卷積核大小為3×3。
⑥P2層是將激活后的C4作為輸入的池化層,P2包含32個大小為32×16的特征圖,其局部感受區(qū)域為2×2。
⑦C5將P2作為輸入,該卷積層包含64個大小為32×16的特征圖,其卷積核大小為3×3。
⑧C6將激活后的C5作為輸入,該卷積層包含64個大小為32×16的特征圖,其卷積核大小為3×3。
⑨C7將激活后的C6作為輸入,該卷積層包含64個大小為32×16的特征圖,其卷積核大小為3×3。
⑩P3層是將激活后的C7作為輸入的池化層,P3包含64個大小為16×8的特征圖,其局部感受區(qū)域為2×2。
其中,K為類別數(shù),圖5表示一個多輸入單輸出神經(jīng)元。
圖5 多輸入單輸出神經(jīng)元
對上式求導(dǎo)得:
隨后對權(quán)值進行優(yōu)化。
進行深度學(xué)習(xí)的CNN網(wǎng)絡(luò)結(jié)構(gòu)如下,本文將用此結(jié)構(gòu)對漢字驗證碼(如圖3所示)進行訓(xùn)練:
(1)對圖片矩陣進行歸一化等基本處理后,將大小為32×32的驗證碼圖片送入網(wǎng)絡(luò)。
(2)實驗的CNN包含10個卷積層,4個池化層和一個全連接層(如圖6所示)。
①C1層卷積核大小為3×3,因選擇卷積方式為輸入輸出尺寸一致,所以C1卷積層包含32個大小為32×32的特征圖。每個卷積層之后接特征映射層,采用Re-LU激活函數(shù),實現(xiàn)特征映射的位移不變性。
②C2將激活后的C1作為輸入,再做卷積;C2包含32個大小為32×32的特征圖,其卷積核大小為3×3。
③P1層是將激活后的C2作為輸入的池化層,P1包含32個大小為16×16的特征圖,其局部感受區(qū)域為2×2。
④C3將P1作為輸入,該卷積層包含64個大小為16×16的特征圖,其卷積核大小為3×3。
⑤C4將激活后的C3作為輸入,該卷積層包含64個大小為16×16的特征圖,其卷積核大小為3×3。
⑥P2層是將激活后的C4作為輸入的池化層,P2包含64個大小為8×8的特征圖,其局部感受區(qū)域為2×2。
⑦C5將P2作為輸入,該卷積層包含128個大小為8×8的特征圖,其卷積核大小為3×3。
圖6 訓(xùn)練漢字驗證碼的網(wǎng)絡(luò)結(jié)構(gòu)
⑧C6將激活后的C5作為輸入,該卷積層包含128個大小為8×8的特征圖,其卷積核大小為3×3。
⑨C7將激活后的C6作為輸入,該卷積層包含128個大小為8×8的特征圖,其卷積核大小為3×3。
為了更好地提取驗證碼特征,本文設(shè)計了上述CNN網(wǎng)絡(luò)結(jié)構(gòu),該網(wǎng)絡(luò)結(jié)構(gòu)對此有著顯著的優(yōu)勢。首先,每個卷積層中使用較小的卷積核(3×3)來捕獲字符復(fù)雜的筆畫特征。其次,使用更多的層來捕獲兩類驗證碼深層結(jié)構(gòu)信息。
對于字符數(shù)字四字符驗證碼,在輸出時直接獲取softmax預(yù)測概率最大的一類;考慮到漢字的復(fù)雜性,在做點擊驗證識別時,將大圖與小圖逐個進行預(yù)測,然后將大小圖的softmax預(yù)測矩陣進行匹配,即計算兩個預(yù)測矩陣的歐幾里德距離,距離最短的兩個預(yù)測矩陣所對應(yīng)的圖片即為匹配成功的圖片。
針對實驗一參數(shù)配置:
優(yōu)化器采用Adam[13],Adam優(yōu)化器是由Kingma和Lei Ba在Adam:A method for stochastic optimization這篇文章中提出來的,它相對于其他優(yōu)化方法對存儲器要求不高,并且非常適合數(shù)據(jù)和參數(shù)較大的問題。超參數(shù)設(shè)置將采用Adam的默認值,選用的塊大小(batch size)為224,采用GPU模式加速訓(xùn)練過程,最大訓(xùn)練迭代次數(shù)為100。訓(xùn)練結(jié)果如表1所示。
表1 實驗一訓(xùn)練結(jié)果
Garg和Pollett[5]提出的深層神經(jīng)網(wǎng)絡(luò)與本文網(wǎng)絡(luò)結(jié)構(gòu)得到的結(jié)果對比如表2所示。
表2 實驗一不同方法結(jié)果對比
針對實驗二參數(shù)配置:
優(yōu)化器仍然采用Adam,超參數(shù)設(shè)置部分改變。本文將學(xué)習(xí)率(learning rate)lr設(shè)置為0.000 1,其余的采用Adam的默認值,選用的塊大?。╞atch size)為384,采用GPU模式加速訓(xùn)練過程,最大訓(xùn)練迭代次數(shù)為25。訓(xùn)練結(jié)果如表3。
表3 實驗二訓(xùn)練結(jié)果
LvYanpin[4]等人提出的基于卷積神經(jīng)網(wǎng)絡(luò)的方法與本文的卷積網(wǎng)絡(luò)結(jié)構(gòu)得到的實驗結(jié)果對比如表4所示。
表4 實驗二不同方法結(jié)果對比
實驗二以點擊驗證為藍本,對于漢字的分割以及處理采用HSV[14]與邊緣檢測[15]結(jié)合的方法。邊緣檢測是基于提取圖像中不連續(xù)部分的特征,根據(jù)閉合的邊緣確定區(qū)域的一種方法。John Canny在A Computational Approach to Edge Detection這篇文章中詳細對邊緣檢測這種計算方法進行說明,通過這個思路提取的漢字效果較好,但對于一些驗證碼背景會出現(xiàn)一些不連續(xù)部分,比如像一些山的棱角,這樣邊緣檢測會提取出部分背景,造成誤差。本文采用HSV方法就會避開這個問題,圖片通常是以RGB格式存儲,難以分離出顏色,可以將其轉(zhuǎn)換到HSV空間進行顏色分離。HSV事實上就是描述一種比RGB更加詳細準確的顏色之間的聯(lián)系,同時也簡化了一些復(fù)雜的計算。其中H指hue(色相),是色彩的最基本屬性,通常就是指顏色名稱;S指saturation(飽和度),是表示色彩的純度,值越高色彩越純;V指value(色調(diào))。本文使用HSV分割的思路是使用OPENCV將圖片從RGB空間轉(zhuǎn)化到HSV空間;由于點擊驗證驗證碼中的漢字顏色有限,所以很容易給出待檢測區(qū)域的H、S、V值,用形態(tài)學(xué)的膨脹和腐蝕算子,可以使檢測出的區(qū)域形成一個整體;找出物體的輪廓,再找出檢測區(qū)域的中心,依據(jù)這個中心對檢測區(qū)域畫框,截取。為了提高分割效果,本文借鑒了張國權(quán)[14]等提出的在HSV空間中顏色距離的定義,并根據(jù)定義的顏色距離,用Sobel梯度算子的變形對彩色圖像在顏色分量上求出分割邊界,這種方法得到的分割漢字更清晰。
采用邊緣檢測與HSV結(jié)合的辦法,有效地使分割的漢字清晰,使驗證碼自動識別率提高,通過這種方法得到的數(shù)據(jù)如圖7所示。點擊驗證碼測試的結(jié)果如表5所示。
圖7 處理后數(shù)據(jù)圖
表5 點擊驗證碼測試結(jié)果
本文設(shè)計基于Keras神經(jīng)網(wǎng)絡(luò)框架的CNN,有效地提高了漢字驗證碼以及常見字符驗證碼的識別率;即使對訓(xùn)練數(shù)據(jù)加入扭曲、旋轉(zhuǎn)、背景噪聲,預(yù)測時依然表現(xiàn)出很強的魯棒性。鑒于點擊驗證識別有待提高,后期將會繼續(xù)加大訓(xùn)練數(shù)據(jù),囊括各路漢字驗證碼進行訓(xùn)練,旨在建立真正意義上的漢字驗證碼高效自動識別。最終的目標是不再區(qū)分字符種類,實現(xiàn)所有驗證碼高效自動識別系統(tǒng)。
[1]呂霽.基于神經(jīng)網(wǎng)絡(luò)的驗證碼識別技術(shù)研究[D].福建泉州:華僑大學(xué),2015.
[2]劉歡,邵蔚元,郭躍飛.卷積神經(jīng)網(wǎng)絡(luò)在驗證碼識別上的應(yīng)用與研究[J].計算機工程與應(yīng)用,2016,52(18):1-7.
[3]王璐,張榮,尹東,等.粘連字符的圖片驗證碼識別[J].計算機工程與應(yīng)用,2011,47(28):150-153.
[4]Lv Yingping,Cai Feipeng,Lin Dazhen,et al.Chinese character CAPTCHA recognition based on convolutionneural network[C]//Proceedings of the IEEE Congress on Evolutionary Computation(CEC).Vancouver,BC,Canada:IEEE,2016:4854-4859.
[5]Garg G,Pollett C.Neural network CAPTCHA crackers[C]//Proceedings of the Future Technologies Conference(FTC).San Francisco,CA,USA:IEEE,2016:853-861.
[6]Shen Yunhang,Ji Rongrong,Cao Donglin,et al.Hacking Chinese touclick CAPTCHA by multiscale corner structure model with fast pattern matching[C]//Proceedings of the ACM International Conference on Multimedia(MM’14).New York,NY,USA:ACM,2014:853-856.
[7]Bottou L.Large-scale machine learning with stochastic gradient descent[C]//Proceedings of COMPSTAT’2010.Heidelberg,Germany:Physica-Verlag HD,2010:177-186.
[8]Ketkar N.Deep learning with python[M].California:Apress,2017:95-109.
[9]Algwil A,Ciresan D,Liu Beibei,et al.A security analysis of automated chinese turing tests[C]//Proceedings of the 32nd Annual Conference on Computer Security Applications.New York,NY,USA:ACM,2016:520-532.
[10]周志華.機器學(xué)習(xí)[M].北京:清華大學(xué)出版社,2016.
[11]Hara K,Saito D,Shouno H.Analysis of function of rectified linear unit used in deep learning[C]//Proceedings of the International Joint Conference on Neural Networks(IJCNN).Killarney,Ireland:IEEE,2015:1-8.
[12]Zang Fei,Zhang Jiangshe.Softmax discriminant classifier[C]//Proceedings of the 2011 Third International Conference on Multimedia Information Networking and Security(MINES).Shanghai,China:IEEE,2011:16-19.
[13]Kingma D,Ba J.Adam:A method for stochastic optimization[EB/OL].(2017-01-30)[2017-05-10].http://arxiv.org/abs/1412.6980.
[14]張國權(quán),李戰(zhàn)明,李向偉,等.HSV空間中彩色圖像分割研究[J].計算機工程與應(yīng)用,2010,46(26):179-181.
[15]Canny J.A computational approach to edge detection[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,1986,8(6):679-698.