


摘要:驗證碼是目前大部分網站用來防止批量注冊、刷票等惡意操作的圖靈測試手段。為了幫助開發者設計出更縝密的安全策略,將生成的5 000張混合英數的不定長驗證碼作為訓練集,基于PyTorch學習框架,使用卷積循環神經網絡來訓練模型,CTC算法對標簽進行對齊,實現對不定長驗證碼的識別。實驗表明,最終該模型對不定長驗證碼的識別準確率達到了99.2%。
關鍵詞:驗證碼識別;卷積神經網絡;循環神經網絡;卷積循環神經網絡
中圖分類號:TP391.41? ? ? 文獻標識碼:A 文章編號:2096-4706(2021)07-0133-03
Undefined Length CAPTCHA Recognition Based on Convolutional
Recurrent Neural Network
LI Qiuyu
(College of Computer and Cyber Security,Fujian Normal University,Fuzhou? 350117,China)
Abstract:CAPTCHA is a Turing test method used by most websites to prevent batch registration,ticket brushing and other malicious operations. In order to help developers design more rigorous security strategies,this paper uses generated 5 000 pieces of mixed English and number undefined length CAPTCHAs as the training set,based on PyTorch learning framework,uses convolutional recurrent neural network to train the model,and the CTC algorithm aligns the labels to realize the recognition of undefined length CAPTCHAs. Experiments show that the recognition accuracy of the model for undefined length CAPTCHAs reaches 99.2%.
Keywords:CAPTCHA recognition;convolutional neural network;recurrent neural network;convolutional recurrent neural network
收稿日期:2021-03-13
0? 引? 言
隨著互聯網的蓬勃發展,網絡安全逐漸進入公眾視野,用來區分人類和機器的驗證碼的重要性也漸漸凸顯。與普通的字符不同的是,驗證碼中的字符都會被進行一定的干擾處理,例如通過旋轉、縮放、重疊、加入干擾符、改變顏色等處理,使得驗證碼不能通過傳統的制作字庫識別的方法或者使用ORC進行識別。驗證碼已經演化出多個種類并且還在不斷增加,除了傳統的驗證碼外,目前使用量較多的還有滑塊、旋轉驗證碼等等。由于驗證碼應用的普及,目前也出現了對其相關的研究,以幫助開發者設計出更縝密的安全策略,除此之外,驗證碼識別的研究將使用到包括深度學習、圖像處理在內的多種技術,具有重要的研究意義。
近年來,有許多研究學者提出了不同的自動化識別的解決辦法。殷光等[1]使用了SVM分類進行了定長驗證碼的識別。王曉鵬將BP神經網絡與遺傳算法結合進行了識別[2]。但傳統的設計分類器的方法有明顯的缺陷,需要手動進行特征提取,且過程較為煩瑣。目前使用較為廣泛是使用卷積神經網絡(CNN)進行驗證碼的分類以實現識別,雖然對某些類型的驗證碼有較高的識別率,但在處理不定長驗證碼、字符重疊、多干擾的驗證碼類型時,單一的使用CNN識別效果則不夠理想。
由于不定長驗證碼特點是標簽長度不一,所以不能使用傳統的分割后識別的處理方法,基于此,本文將使用結合了CNN與循環神經網絡(RNN)的卷積循環神經網絡(CRNN)[3],并通過CTC算法對不定長的標簽進行對齊,從而很好地適配了驗證碼不定長的特點。
1? 深度神經網絡概述
1.1? CNN
CNN由許多層疊加組成,其中包括:
(1)輸入層。將數據進行特殊處理并傳入神經網絡。
(2)卷積層。通過卷積核來提取特征,并且卷積核的屬性可以根據實際情況的需要來人為的調整,使得該層能夠更容易的提取到更多的特征。
(3)池化層。該層可以減少網絡的計算負荷,并且同時能夠將需要的特征保留。
(4)全連接層。在全連接層前進行了多個卷積層和池化層的堆疊進行特征提取,而后通常使用全連接層將數據展開成一維并完成分類操作。
(5)Softmax層。可以通過將結果顯示成概率以展示分類結果。
CNN的經典網絡結構有LeNet、VGGNet、ResNet[4]等。從早期的LeNet開始,研究學者發現不斷增加網絡結構的深度,就可以使得模型得到更多更高級的特征,從而提高分類的準確率。之后,有學者發現持續的增加網絡結構的深度會出現梯度消失或者爆炸的問題,導致訓練結果難以收斂,于是便有學者提出了殘差網絡來解決此的問題,ResNet便是其中一個深度殘差網絡模型,該網絡是基于VGG網絡改進得到的。
1.2? RNN
常見的RNN有長短期記憶網絡和Bi-RNN等,例如LSTM(Long Short-Term Memory,LSTM)[5]網絡,該網絡可以用于解決序列的問題,并且具有記憶性,可以將上個時刻所學習到的內容有選擇性地傳輸至下一時刻,在此過程中該網絡需要使用到輸入門:控制當前時刻需要輸入的信息的數量;遺忘門:控制了上個時刻需要包括保留信息的數量;輸出門:控制需要傳遞至下一部分的信息數量。通過三個門進行信息數據的篩選,LSTM模型結構如圖1所示。
1.3? CRNN
CRNN則是CNN與RNN的組合,它一般包含了三層,分別為卷積層:用來提取特征;RNN層:使用的是LSTM網絡,同樣進行特征提取;翻譯層:此層可以將RNN提取出的特征進行轉換為結果。CRNN絡結合了兩個網絡的優勢,非常適合應用在不定長文本的識別中,它不僅可以進行特征提取還可以生成一系列的序列化標簽。此網絡在識別不定長驗證碼中有明顯的優勢,CRNN可以不需要切割驗證碼,將驗證碼識別的文本問題轉化成了對圖像的序列識別問題。
2? 模型訓練
2.1? 網絡結構
本文使用CRNN進行模型的訓練。用于圖像分類的CNN模型有許多種,使用過大的網絡對于用來訓練的GPU要求更高,且由于本文傳入的圖片大小不足原始的224×224,所以若不改動ResNet18網絡來使用經過多層的學習后會使得圖像特征過小,所以本文使用的是改造過的ResNet18網絡來提取特征,然后使用LSTM網絡進行序列特征提取,其中LSTM使用的是雙向LSTM,再使用全連接層進行分類,最后通過CTC算法對不定長的標簽進行對齊。考慮到該驗證碼的大小、訓練機器的GPU性能,以及ResNet18的網絡結構,本文對ResNet18網絡進行了一定的修改,選取了其前四層的網絡結構,并修改了輸入的圖片的大小。
改造后的ResNet18網絡結構如表1所示,輸入為80× 176×3的圖像,卷積層使用4層架構,第一層使用大小為7×7,步長為2的卷積核。其余層均使用了大小為3×3,步長為2的卷積核,其中,第二層進行了池化操作,最后輸出為圖像數據為5×11×256。
2.2? 標簽處理
將訓練集的標簽進行分割制作碼表,使得每個字符與其所在碼表位置的下標形成映射關系,本文準備的驗證碼標簽有0~9,A~Z,一共36個不同字符,按照字典順序將其分別編碼為0~35。因輸入到網絡的標簽需要有相同的長度,故將標簽長度設置為最大標簽長度,在本文準備的驗證碼樣本中,標簽的最大長度為5個字符,而其余長度不足5的標簽本文使用“_”進行補充,并將“_”加入碼表,編碼為36。
2.3? 圖像預處理
在將圖片輸入網絡前,需要對訓練集圖像進行統一的處理,以幫助網絡能夠更好地提取特征。本文首先對圖片進行了灰度化處理,然后進行圖片縮放,再進行歸一化處理,歸一化處理的參數需要提前對圖片進行計算得出,除此之外,還有許多其他的圖片處理方式,可以根據圖片的具體情況、特點等自由選擇,例如二值化、濾波、模糊等處理,不同的處理方式可能會對模型的特征提取有不同的影響,需要開發者根據經驗以及多次嘗試才能測試出最優處理方案。同理,在測試過程中使用的測試集圖像也需要做相同的圖像處理操作,才可保證預測結果的準確度。
2.4? 訓練
訓練流程如圖2所示。訓練前加載網絡并將其推至GPU上,使用DataLoader函數來進行訓練集的讀取,在讀取訓練集時進行圖片順序的打亂,有助于模型的收斂,若圖片數量過大,可以通過設置num_workers參數來選擇讀取需要的線程數量。訓練過程中使用Adam優化器來更新參數,CTC損失函數來計算預測損失值并反向傳播,ReduceLROnPlateau方法來自動調整學習率,該方法可通過設置patience參數來指定在訓練過程中損失值幾次為相同結果時,自動修改學習率,以達到激活的目的。最后將測試集的準確率數據變化記錄并可視化,此功能的實現用到了tensorboard,訓練過程中若需要查看圖像,則可使用cv2.imshow方法來顯示圖像配合輸出預測值,達到直觀查看訓練正確率的效果。參數設置上,初始學習率為0.001,batch_size為16,圖片固定縮放大小為(80,176),epoch數量為100次,每結束一次epoch便保存一次模型,并將測試集放入當前模型進行正確率測試,將結果記錄至可視化圖表中。
2.5? 訓練結果
測試集正確率變化如圖3所示,該圖顯示了每1 000次的迭代后準確率變化情況。當識別的正確率浮動變化較小且保持一段時間時即可結束訓練,選擇準確率最高的模型作為最終模型進行測試。對2 000張測試集驗證碼進行測試后,通過比對預測結果和標簽結果進行計算該模型的預測正確率,最終得出該模型的準確率為99.2%。
3? 結? 論
本文針對不定長類型驗證碼的結構特點,從實現端到端的識別以及基于圖像的序列識別角度出發,設計了基于CRNN的不定長驗證碼識別方法,即首先針對圖片特點進行圖像預處理,再通過使用CRNN結合CTC訓練模型,并且該模型在2 000張測試集中該模型準確率達到99.2%。結果表明,目前通過使用深度學習可以輕松繞過驗證碼的測試,并且還能擁有極高的識別率。隨著深度學習研究的不斷深入,圖像識別技術也將不斷發展,驗證碼的安全性也隨之降低,因此,在將來的驗證碼發展中,在保障用戶安全性與體驗的同時,需要設計出更縝密的安全策略,為網絡安全添磚加瓦。
參考文獻:
[1] 殷光,陶亮.一種SVM驗證碼識別算法 [J].計算機工程與應用,2011,47(18):188-190+194.
[2] 王曉鵬.驗證碼識別系統的研究及實現 [D].廣州:華南理工大學,2010.
[3] SHI B G,BAI X,YAO C. An End-to-End Trainable Neural Network for Image-Based Sequence Recognition and Its Application to Scene Text Recognition [J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2017,39(11):2298-2304.
[4] HE K M,ZHANG X Y,REN S Q,et al. Deep Residual Learning for Image Recognition [C]//2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR).Las Vegas,NV:IEEE,2016:770-778.
[5] HOCHREITER S,SCHMIDHUBER J. Long Short-Term Memory [J].Neural Computation,1997,9(8):1735-1780.
作者簡介:黎秋宇(2000—),男,漢族,福建龍巖人,本科在讀,研究方向:深度學習。