張國(guó)榮,劉炳君,付成麗
(忻州師范學(xué)院 計(jì)算機(jī)系,山西 忻州 034000)
在當(dāng)前網(wǎng)絡(luò)環(huán)境中,驗(yàn)證碼本身是用來(lái)區(qū)分人機(jī)的一種全自動(dòng)驗(yàn)證程序,在一定程度上提高了網(wǎng)絡(luò)防御力,又被稱為“反向圖靈測(cè)試”.目前,多數(shù)網(wǎng)站在用戶注冊(cè)、登錄、下載甚至發(fā)表評(píng)論等情況下都用驗(yàn)證碼進(jìn)行驗(yàn)證,從而保證合法有效的用戶權(quán)益.一般要求人類的識(shí)別率達(dá)到90%以上,機(jī)器的識(shí)別率低于0.01%[1].驗(yàn)證碼的分類有滑塊驗(yàn)證碼、文本驗(yàn)證碼、圖像驗(yàn)證碼、拼圖驗(yàn)證碼等,本文主要研究由四位數(shù)字組成的圖片驗(yàn)證碼.
深度學(xué)習(xí)中應(yīng)用最為廣泛的卷積神經(jīng)網(wǎng)絡(luò)CNN,在原來(lái)多層神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上,加入了特征學(xué)習(xí)部分,用來(lái)模仿人腦對(duì)信號(hào)處理,成為了圖像識(shí)別方向最熱門的技術(shù),在圖像特征提取與識(shí)別中優(yōu)勢(shì)明顯.鑒于CNN有很好的特征提取能力,因此本文采用CNN對(duì)驗(yàn)證碼進(jìn)行識(shí)別.
隨著驗(yàn)證碼在人工智能領(lǐng)域的突出作用,國(guó)內(nèi)外學(xué)者在驗(yàn)證碼的識(shí)別方法上有著廣泛的探索與研究.文獻(xiàn)[2]和文獻(xiàn)[3]分別利用殘差設(shè)計(jì)和調(diào)整卷積分組數(shù)量對(duì)圖像驗(yàn)證碼進(jìn)行識(shí)別[2,3].文獻(xiàn)[4]提出對(duì)驗(yàn)證碼無(wú)須預(yù)分割的端對(duì)端的識(shí)別方法[4].文獻(xiàn)[5]提出改進(jìn)識(shí)別空心驗(yàn)證碼的方法[5].
目前,對(duì)于CNN的研究及應(yīng)用更為廣泛.Hinton等人在2006年提出深度置信網(wǎng)絡(luò)(DBN)用于處理特征降維以加快訓(xùn)練深度網(wǎng)絡(luò)[6].2012年繼Alex Krizhevsky提出比較有利于網(wǎng)絡(luò)優(yōu)化和訓(xùn)練的AlexNet[7]后,更多更深的神經(jīng)網(wǎng)絡(luò)被提出,如著名的VGGNet就是在AlexNet的基礎(chǔ)上加深并用小卷積(3*3)提高了在ImageNet數(shù)據(jù)集上的精度.2015年,何愷明等人提出了殘差網(wǎng)絡(luò)(DRN),因有殘差連接使得隨著網(wǎng)絡(luò)深度的顯著提升,誤差卻不斷下降[8].如今,CNN被應(yīng)用在多個(gè)領(lǐng)域.文獻(xiàn)[9]提出端到端的單步進(jìn)行文本驗(yàn)證碼識(shí)別的通用算法[9].文獻(xiàn)[10]提出了改進(jìn)LeNet-7系統(tǒng)以提高紅外圖像行人檢測(cè)率[10].文獻(xiàn)[11]采用 CNN進(jìn)行語(yǔ)音模型訓(xùn)練,以處理語(yǔ)音中信號(hào)多樣性的問(wèn)題[11].文獻(xiàn)[12]提出SA-CNN以提升視覺(jué)情感分析的效果[12].
本文采用在Python 3編程環(huán)境下使用深度學(xué)習(xí)框架Keras進(jìn)行網(wǎng)絡(luò)模型搭建,利用 PIL( Python Imaging Library)圖像處理庫(kù)批量生成各項(xiàng)參數(shù)可調(diào)的數(shù)字驗(yàn)證碼圖片,包括圖片大小、格式、干擾點(diǎn)等,自動(dòng)生成3 000張4位數(shù)字圖片驗(yàn)證碼,默認(rèn)圖片大小為60×160,RGB格式,包含少量的干擾點(diǎn)、線條及扭曲.本文使用其中的2 400張圖片作為訓(xùn)練集訓(xùn)練網(wǎng)絡(luò)參數(shù),600張圖片作為測(cè)試集測(cè)試網(wǎng)絡(luò)識(shí)別的效果.訓(xùn)練集與測(cè)試集無(wú)交叉重疊.部分驗(yàn)證碼樣本示例圖如圖1所示.
圖1 驗(yàn)證碼樣本
2.2.1 灰度化處理
對(duì)于自動(dòng)生成的RGB格式圖片驗(yàn)證碼,從圖1中可以看出會(huì)有噪點(diǎn)、線條及相互連接等一定的干擾來(lái)模擬網(wǎng)絡(luò)環(huán)境中的驗(yàn)證碼.由于灰度圖像的像素點(diǎn)變化范圍較RGB格式的圖像像素點(diǎn)小得多,因而在進(jìn)行圖像處理時(shí),會(huì)首先進(jìn)行灰度化圖像.灰度化方法一般有分量法、平均值法、最大值法、加權(quán)平均法.本文采用加權(quán)平均法提取灰度圖,將原RGB圖像三個(gè)分量的像素值以不同的權(quán)重進(jìn)行加權(quán)平均后得到的像素值作為灰度值,其常用的計(jì)算公式如下:
Gray=0.298 9R+0.578 0G+0.114 0B
其中,Gray表示所求坐標(biāo)(i,j)位置處的像素值,R,G,B分別為三個(gè)分量的坐標(biāo)(i,j)位置的像素值.
2.2.2 二值化處理
圖像的二值化處理,是指將灰度圖像像素點(diǎn)的灰度值由某個(gè)閾值劃分為兩部分,使圖像顯示出明顯的黑色及白色效果,便于對(duì)圖像進(jìn)一步處理,使圖像計(jì)算更為簡(jiǎn)單,且有利于凸顯出關(guān)注目標(biāo)的輪廓.
二值化操作的關(guān)鍵在于閾值的選取.本文中閾值設(shè)為200,預(yù)處理前的圖片與預(yù)處理后的圖片對(duì)比如圖2與圖3所示.
CNN以二維矩陣數(shù)據(jù)形式輸入,與傳統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Network,DNN)的不同在于其隱藏層的神經(jīng)元僅與局部區(qū)域(即局部感受野)輸入層的神經(jīng)元相連.在結(jié)構(gòu)上,它主要由多個(gè)卷積層和池化組合而成.
卷積層采用卷積來(lái)代替?zhèn)鹘y(tǒng)DNN的全連接,卷積層的每一個(gè)神經(jīng)元只和前一層的一個(gè)局部窗口即感受野的神經(jīng)元相連,構(gòu)成卷積核.卷積核在卷積操作時(shí)對(duì)應(yīng)的權(quán)值和偏移值共享,使得CNN的訓(xùn)練簡(jiǎn)單化,提高了迭代效率.
池化,目的是降維,能夠簡(jiǎn)化卷積層的輸出參數(shù),提高所提取特征的魯棒性.特征圖像經(jīng)過(guò)池化操作后通道數(shù)不會(huì)改變.下采樣尺度為2*2的池化,應(yīng)用頻率非常高,其效果相當(dāng)于高度和寬度縮減一半,大大降低了模型參數(shù).
激活函數(shù)的作用是為了增加神經(jīng)網(wǎng)絡(luò)模型的非線性,從而提升神經(jīng)網(wǎng)絡(luò)模型表達(dá)能力,解決線性模型所不能解決的問(wèn)題.不同的激活函數(shù)帶來(lái)的效果有一定的差異,從計(jì)算量、梯度消失、反向傳播求誤差等多方面考慮,sigmoid函數(shù)在BP神經(jīng)網(wǎng)絡(luò)中用得較多,目前ReLu函數(shù)及其改進(jìn)函數(shù)在CNN中用得較多.
損失函數(shù),是用來(lái)衡量模型的預(yù)測(cè)值與真實(shí)值不一致的程度,從而評(píng)估模型的好壞.神經(jīng)網(wǎng)絡(luò)優(yōu)化的過(guò)程實(shí)質(zhì)就是最小化損失函數(shù)的過(guò)程,損失函數(shù)越小,說(shuō)明模型的預(yù)測(cè)值愈接近真實(shí)值,模型的健壯性也就越好.
本次實(shí)驗(yàn)中,采用的神經(jīng)網(wǎng)絡(luò)模型共四層,前三層每層進(jìn)行兩次卷積操作和一次池化操作,第四層為全連接層,結(jié)構(gòu)如圖4所示.
圖4 網(wǎng)絡(luò)結(jié)構(gòu)
具體定義代碼如圖5所示.
圖5 定義CNN結(jié)構(gòu)的代碼
本文選擇Adam梯度下降算法作為模型優(yōu)化器,輸出1×40的向量表示識(shí)別結(jié)果,損失函數(shù)采用binary_crossentropy.
在該模型訓(xùn)練中發(fā)現(xiàn),batch_size的設(shè)置值也極為重要,若設(shè)置得太小會(huì)增加訓(xùn)練時(shí)間且不利于損失函數(shù)的收斂,設(shè)置得太大容易陷入局部最小值.通過(guò)比較訓(xùn)練效果,最終在本次實(shí)驗(yàn)中選取batch_size為32,epochs為10,在測(cè)試集上的驗(yàn)證碼識(shí)別率達(dá)到98.8%.
訓(xùn)練情況和測(cè)試結(jié)果分別如圖6和圖7所示.
本文針對(duì)網(wǎng)站中常見(jiàn)的數(shù)字驗(yàn)證碼利用4層卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練模型并進(jìn)行識(shí)別,取得了不錯(cuò)的識(shí)別率,對(duì)于驗(yàn)證碼識(shí)別相關(guān)領(lǐng)域的研究及應(yīng)用具有一定的借鑒意義.當(dāng)然,也有不足之處,通過(guò)在神經(jīng)網(wǎng)絡(luò)中每層進(jìn)行兩次卷積操作時(shí),雖然能夠提取出到更多的圖像特征和減少很多參數(shù),使得神經(jīng)網(wǎng)絡(luò)在較少的訓(xùn)練次數(shù)下得到更好的訓(xùn)練結(jié)果,但也在一定程序上增加了過(guò)擬合的風(fēng)險(xiǎn).