時間:2020年09月23日 分類:科學(xué)技術(shù)論文 次數(shù):
〔摘要〕 驗證碼是很多網(wǎng)站為防止用戶利用計算機批量注冊、頻繁登錄及進(jìn)行某些惡意操作 而采取的一種有效防護(hù)措施.為了確保驗證碼的安全可靠性,驗證碼識別技術(shù)相繼產(chǎn)生.針對常見 的數(shù)字驗證碼識別問題,提出了基于 CNN 的識別方法,對生成的數(shù)字驗證碼進(jìn)行預(yù)處理后,使用 Keras對 CNN 模型進(jìn)行訓(xùn)練,在驗證碼測試集測試取得了98.8%的識別準(zhǔn)確率.
〔關(guān)鍵詞〕 深度學(xué)習(xí);Python;驗證碼;卷積神經(jīng)網(wǎng)絡(luò)
0 引言
在當(dāng)前網(wǎng)絡(luò)環(huán)境中,驗證碼本身是用來區(qū)分人機的一種全自動驗證程序,在 一 定 程 度 上 提 高 了 網(wǎng) 絡(luò) 防御力,又被稱為“反向圖靈測試”.目前,多數(shù)網(wǎng)站在用戶注冊、登錄、下載甚至發(fā)表評論等情況下都用驗 證碼進(jìn)行驗證,從而保證合法有效的用戶權(quán)益.一般要求人類的識別率達(dá)到90%以上,機器的識別率低于 0.01%[1] .
驗證碼的分類有滑塊驗證碼、文本驗證碼、圖像驗證碼、拼圖驗證碼等,本文主要研究由四位數(shù)字 組成的圖片驗證碼. 深度學(xué)習(xí)中應(yīng)用最為廣泛的卷積神經(jīng)網(wǎng)絡(luò) CNN,在原來多層神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上,加入了特征學(xué)習(xí)部分, 用來模仿人腦對信號處理,成為了圖像識別方向最熱門的技術(shù),在圖像特征提取與識別中優(yōu)勢明顯.鑒 于 CNN 有很好的特征提取能力,因此本文采用 CNN 對驗證碼進(jìn)行識別.
1 相關(guān)研究工作
隨著驗證碼在人工智能領(lǐng)域的突出作用,國內(nèi)外學(xué)者在驗證碼的識別方法上有著廣泛的探索與研究.文 獻(xiàn)[2]和文獻(xiàn)[3]分別利用殘差設(shè)計和調(diào)整卷積分組數(shù)量對圖像驗證碼進(jìn)行識別[2,3] .文獻(xiàn)[4]提出對驗證碼 無須預(yù)分割的端對端的識別方法[4] .文獻(xiàn)[5]提出改進(jìn)識別空心驗證碼的方法[5] .
目前,對于 CNN 的研究及應(yīng)用更為廣泛.Hinton等人在2006年提出深度置信網(wǎng)絡(luò)(DBN)用于處理特 征降維以加快訓(xùn)練深度網(wǎng)絡(luò)[6] .2012年繼 AlexKrizhevsky提出比較有利于網(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)用在多個領(lǐng)域.文獻(xiàn)[9]提出端到端的單步進(jìn)行文本驗 證碼識別的通用算法[9] .文獻(xiàn)[10]提出了改進(jìn) LeNet-7系統(tǒng)以提高紅外圖像行人檢測率[10] .文獻(xiàn)[11]采用 CNN 進(jìn)行語音模型訓(xùn)練,以處理語音中信號多樣性的問題[11] .文獻(xiàn)[12]提出SA-CNN 以提升視覺情感分析 的效果[12] .
2 驗證碼獲取及預(yù)處理
2.1 驗證碼訓(xùn)練集與測試集
本文采用在 Python3編程環(huán)境下使用深度學(xué)習(xí)框架 Keras進(jìn)行網(wǎng)絡(luò)模型搭建,利用 PIL(PythonIma-gingLibrary)圖像處理庫批量生成各項參數(shù)可調(diào)的數(shù)字驗證碼圖片,包括圖片大小、格式、干擾點等,自動生 成3000張4位數(shù)字圖片驗證碼,默認(rèn)圖片大小為60×160,RGB格式,包含少量的干擾點、線條及扭曲.本 文使用其中的2400張圖片作為訓(xùn)練集訓(xùn)練網(wǎng)絡(luò)參數(shù),600張圖片作為測試集測試網(wǎng)絡(luò)識別的效果.訓(xùn)練集 與測試集無交叉重疊.
2.2 驗證碼圖片預(yù)處理
2.2.1 灰度化處理
對于自動生成的 RGB格式 圖片驗證碼,可以看出 會有噪點、線條及相互連接等一 定的干 擾 來 模 擬 網(wǎng) 絡(luò) 環(huán) 境 中 的 驗證碼.由于灰度圖像的像素點 變化范圍較RGB格式的圖像像素點小得多,因而在進(jìn)行圖像處理時,會首先進(jìn)行灰度化圖像.灰度化方法一 般有分量法、平均值法、最大值法、加權(quán)平均法.本文采用加權(quán)平均法提取灰度圖,將原RGB圖像三個分量的 像素值以不同的權(quán)重進(jìn)行加權(quán)平均后得到的像素值作為灰度值,其常用的計算公式如下: Gray =0.2989R+0.5780G+0.1140B 其中,Gray表示所求坐標(biāo)(i,j)位置處的像素值,R,G,B 分別為三個分量的坐標(biāo)(i,j)位置的像素值.
2.2.2 二值化處理
圖像的二值化處理,是指將灰度圖像像素點的灰度值由某個閾值劃分為兩部分,使圖像顯示出明顯的黑色及白色效果,便于對圖像進(jìn)一步處理,使圖像計算更為簡單,且有利于凸顯出關(guān)注目標(biāo)的輪廓.
3 網(wǎng)絡(luò)模型設(shè)計
3.1 卷積神經(jīng)網(wǎng)絡(luò)概念
CNN 以二維矩陣數(shù)據(jù)形式輸入,與傳統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)(DeepNeuralNetwork,DNN)的不同在于其隱 藏層的神經(jīng)元僅與局部區(qū)域(即局部感受野)輸入層的神經(jīng)元相連.在結(jié)構(gòu)上,它主要由多個卷積層和池化組 合而成. 卷積層采用卷積來代替?zhèn)鹘y(tǒng) DNN 的全連接,卷積層的每一個神經(jīng)元只和前一層的一個局部窗口即感 受野的神經(jīng)元相連,構(gòu)成卷積核.卷積核在卷積操作時對應(yīng)的權(quán)值和偏移值共享,使得 CNN 的訓(xùn)練簡單化, 提高了迭代效率. 池化,目的是降維,能夠簡化卷積層的輸出參數(shù),提高所提取特征的魯棒性.
特征圖像經(jīng)過池化操作后通 道數(shù)不會改變.下采樣尺度為2*2的池化,應(yīng)用頻率非常高,其效果相當(dāng)于高度和寬度縮減一半,大大降低 了模型參數(shù). 激活函數(shù)的作用是為了增加神經(jīng)網(wǎng)絡(luò)模型的非線性,從而提升神經(jīng)網(wǎng)絡(luò)模型表達(dá)能力,解決線性模型所 不能解決的問題.不同的激活函數(shù)帶來的效果有一定的差異,從計算量、梯度消失、反向傳播求誤差等多方面 考慮,sigmoid函數(shù)在 BP神經(jīng)網(wǎng)絡(luò)中用得較多,目前 ReLu函數(shù)及其改進(jìn)函數(shù)在 CNN 中用得較多. 損失函數(shù),是用來衡量模型的預(yù)測值與真實值不一 致 的 程 度,從 而 評 估 模 型 的 好 壞.神 經(jīng) 網(wǎng) 絡(luò) 優(yōu) 化 的 過程實質(zhì)就是最小化損失函數(shù)的過程,損失函數(shù)越小,說明模型的預(yù)測值愈 接 近 真 實 值,模型的健壯性也就越好.
4 實驗過程與分析
本文選擇 Adam 梯度下降算法作為模型優(yōu)化器,輸出1×40的向量表示識別結(jié)果,損失函數(shù)采用binary _crossentropy. 在該模型訓(xùn)練中發(fā)現(xiàn),batch_size的設(shè)置值也極為重要,若設(shè)置得太小會增加訓(xùn)練時間且不利于損失函 數(shù)的收斂,設(shè)置得太大容易陷入局部最小值.通過比較訓(xùn)練效果,最終在本次實驗中選取 batch_size為32, epochs為10,在測試集上的驗證碼識別率達(dá)到98.8%.
軟件工程教學(xué)論文:軟件工程與信息安全實踐課程研究與探索
5 總結(jié)
本文針對網(wǎng)站中常見的數(shù)字驗證碼利用4層卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練模型并進(jìn)行識別,取得了不錯的識別率, 對于驗證碼識別相關(guān)領(lǐng)域的研究及應(yīng)用具有一定的借鑒意義.當(dāng)然,也有不足之處,通過在神經(jīng)網(wǎng)絡(luò)中每層 進(jìn)行兩次卷積操作時,雖然能夠提取出到更多的圖像特征和減少很多參數(shù),使得神經(jīng)網(wǎng)絡(luò)在較少的訓(xùn)練次數(shù) 下得到更好的訓(xùn)練結(jié)果,但也在一定程序上增加了過擬合的風(fēng)險.
參考文獻(xiàn):
[1] CHELLAPILLA K,LARSON K,SIMARDP,etal.Designinghumanfriendlyhumaninteractionproofs[C]//Procofthe SIGCHIConferenceonHumanFactorsinComputingSystems,NewYork:ACM,2005:711-720
[2] 晉大鵬,張?zhí)煨模瑒?濤.基于 Python和 CNN 的驗證碼識別[J].軟件工程,2019,22(6):1-4
[3] 秦 波,顧乃杰,張孝慈,等.基于卷積神經(jīng)網(wǎng)絡(luò)的圖像驗證碼識別[J].計算機系統(tǒng)應(yīng)用,2018,27(11):142-148 [
4] 崔 新,白培瑞,張 策,等.一種基于端對端深度卷積神經(jīng)網(wǎng)絡(luò)的驗證碼識別方法[J].山東科技大學(xué)學(xué)報(自 然 科 學(xué) 版), 2020,39(2):111-117
作者:張國榮,劉炳君,付成麗