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