摘要:驗證碼是目前大部分網(wǎng)站用來防止批量注冊、刷票等惡意操作的圖靈測試手段。為了幫助開發(fā)者設(shè)計出更縝密的安全策略,將生成的5 000張混合英數(shù)的不定長驗證碼作為訓(xùn)練集,基于PyTorch學(xué)習(xí)框架,使用卷積循環(huán)神經(jīng)網(wǎng)絡(luò)來訓(xùn)練模型,CTC算法對標(biāo)簽進行對齊,實現(xiàn)對不定長驗證碼的識別。實驗表明,最終該模型對不定長驗證碼的識別準(zhǔn)確率達到了99.2%。
關(guān)鍵詞:驗證碼識別;卷積神經(jīng)網(wǎng)絡(luò);循環(huán)神經(jīng)網(wǎng)絡(luò);卷積循環(huán)神經(jīng)網(wǎng)絡(luò)
中圖分類號:TP391.41? ? ? 文獻標(biāo)識碼: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,F(xiàn)ujian Normal University,F(xiàn)uzhou? 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? 引? 言
隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,網(wǎng)絡(luò)安全逐漸進入公眾視野,用來區(qū)分人類和機器的驗證碼的重要性也漸漸凸顯。與普通的字符不同的是,驗證碼中的字符都會被進行一定的干擾處理,例如通過旋轉(zhuǎn)、縮放、重疊、加入干擾符、改變顏色等處理,使得驗證碼不能通過傳統(tǒng)的制作字庫識別的方法或者使用ORC進行識別。驗證碼已經(jīng)演化出多個種類并且還在不斷增加,除了傳統(tǒng)的驗證碼外,目前使用量較多的還有滑塊、旋轉(zhuǎn)驗證碼等等。由于驗證碼應(yīng)用的普及,目前也出現(xiàn)了對其相關(guān)的研究,以幫助開發(fā)者設(shè)計出更縝密的安全策略,除此之外,驗證碼識別的研究將使用到包括深度學(xué)習(xí)、圖像處理在內(nèi)的多種技術(shù),具有重要的研究意義。
近年來,有許多研究學(xué)者提出了不同的自動化識別的解決辦法。殷光等[1]使用了SVM分類進行了定長驗證碼的識別。王曉鵬將BP神經(jīng)網(wǎng)絡(luò)與遺傳算法結(jié)合進行了識別[2]。但傳統(tǒng)的設(shè)計分類器的方法有明顯的缺陷,需要手動進行特征提取,且過程較為煩瑣。目前使用較為廣泛是使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)進行驗證碼的分類以實現(xiàn)識別,雖然對某些類型的驗證碼有較高的識別率,但在處理不定長驗證碼、字符重疊、多干擾的驗證碼類型時,單一的使用CNN識別效果則不夠理想。
由于不定長驗證碼特點是標(biāo)簽長度不一,所以不能使用傳統(tǒng)的分割后識別的處理方法,基于此,本文將使用結(jié)合了CNN與循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的卷積循環(huán)神經(jīng)網(wǎng)絡(luò)(CRNN)[3],并通過CTC算法對不定長的標(biāo)簽進行對齊,從而很好地適配了驗證碼不定長的特點。
1? 深度神經(jīng)網(wǎng)絡(luò)概述
1.1? CNN
CNN由許多層疊加組成,其中包括:
(1)輸入層。將數(shù)據(jù)進行特殊處理并傳入神經(jīng)網(wǎng)絡(luò)。
(2)卷積層。通過卷積核來提取特征,并且卷積核的屬性可以根據(jù)實際情況的需要來人為的調(diào)整,使得該層能夠更容易的提取到更多的特征。
(3)池化層。該層可以減少網(wǎng)絡(luò)的計算負(fù)荷,并且同時能夠?qū)⑿枰奶卣鞅A簟?/p>
(4)全連接層。在全連接層前進行了多個卷積層和池化層的堆疊進行特征提取,而后通常使用全連接層將數(shù)據(jù)展開成一維并完成分類操作。
(5)Softmax層。可以通過將結(jié)果顯示成概率以展示分類結(jié)果。
CNN的經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)有LeNet、VGGNet、ResNet[4]等。從早期的LeNet開始,研究學(xué)者發(fā)現(xiàn)不斷增加網(wǎng)絡(luò)結(jié)構(gòu)的深度,就可以使得模型得到更多更高級的特征,從而提高分類的準(zhǔn)確率。之后,有學(xué)者發(fā)現(xiàn)持續(xù)的增加網(wǎng)絡(luò)結(jié)構(gòu)的深度會出現(xiàn)梯度消失或者爆炸的問題,導(dǎo)致訓(xùn)練結(jié)果難以收斂,于是便有學(xué)者提出了殘差網(wǎng)絡(luò)來解決此的問題,ResNet便是其中一個深度殘差網(wǎng)絡(luò)模型,該網(wǎng)絡(luò)是基于VGG網(wǎng)絡(luò)改進得到的。
1.2? RNN
常見的RNN有長短期記憶網(wǎng)絡(luò)和Bi-RNN等,例如LSTM(Long Short-Term Memory,LSTM)[5]網(wǎng)絡(luò),該網(wǎng)絡(luò)可以用于解決序列的問題,并且具有記憶性,可以將上個時刻所學(xué)習(xí)到的內(nèi)容有選擇性地傳輸至下一時刻,在此過程中該網(wǎng)絡(luò)需要使用到輸入門:控制當(dāng)前時刻需要輸入的信息的數(shù)量;遺忘門:控制了上個時刻需要包括保留信息的數(shù)量;輸出門:控制需要傳遞至下一部分的信息數(shù)量。通過三個門進行信息數(shù)據(jù)的篩選,LSTM模型結(jié)構(gòu)如圖1所示。
1.3? CRNN
CRNN則是CNN與RNN的組合,它一般包含了三層,分別為卷積層:用來提取特征;RNN層:使用的是LSTM網(wǎng)絡(luò),同樣進行特征提取;翻譯層:此層可以將RNN提取出的特征進行轉(zhuǎn)換為結(jié)果。CRNN絡(luò)結(jié)合了兩個網(wǎng)絡(luò)的優(yōu)勢,非常適合應(yīng)用在不定長文本的識別中,它不僅可以進行特征提取還可以生成一系列的序列化標(biāo)簽。此網(wǎng)絡(luò)在識別不定長驗證碼中有明顯的優(yōu)勢,CRNN可以不需要切割驗證碼,將驗證碼識別的文本問題轉(zhuǎn)化成了對圖像的序列識別問題。
2? 模型訓(xùn)練
2.1? 網(wǎng)絡(luò)結(jié)構(gòu)
本文使用CRNN進行模型的訓(xùn)練。用于圖像分類的CNN模型有許多種,使用過大的網(wǎng)絡(luò)對于用來訓(xùn)練的GPU要求更高,且由于本文傳入的圖片大小不足原始的224×224,所以若不改動ResNet18網(wǎng)絡(luò)來使用經(jīng)過多層的學(xué)習(xí)后會使得圖像特征過小,所以本文使用的是改造過的ResNet18網(wǎng)絡(luò)來提取特征,然后使用LSTM網(wǎng)絡(luò)進行序列特征提取,其中LSTM使用的是雙向LSTM,再使用全連接層進行分類,最后通過CTC算法對不定長的標(biāo)簽進行對齊。考慮到該驗證碼的大小、訓(xùn)練機器的GPU性能,以及ResNet18的網(wǎng)絡(luò)結(jié)構(gòu),本文對ResNet18網(wǎng)絡(luò)進行了一定的修改,選取了其前四層的網(wǎng)絡(luò)結(jié)構(gòu),并修改了輸入的圖片的大小。
改造后的ResNet18網(wǎng)絡(luò)結(jié)構(gòu)如表1所示,輸入為80× 176×3的圖像,卷積層使用4層架構(gòu),第一層使用大小為7×7,步長為2的卷積核。其余層均使用了大小為3×3,步長為2的卷積核,其中,第二層進行了池化操作,最后輸出為圖像數(shù)據(jù)為5×11×256。
2.2? 標(biāo)簽處理
將訓(xùn)練集的標(biāo)簽進行分割制作碼表,使得每個字符與其所在碼表位置的下標(biāo)形成映射關(guān)系,本文準(zhǔn)備的驗證碼標(biāo)簽有0~9,A~Z,一共36個不同字符,按照字典順序?qū)⑵浞謩e編碼為0~35。因輸入到網(wǎng)絡(luò)的標(biāo)簽需要有相同的長度,故將標(biāo)簽長度設(shè)置為最大標(biāo)簽長度,在本文準(zhǔn)備的驗證碼樣本中,標(biāo)簽的最大長度為5個字符,而其余長度不足5的標(biāo)簽本文使用“_”進行補充,并將“_”加入碼表,編碼為36。
2.3? 圖像預(yù)處理
在將圖片輸入網(wǎng)絡(luò)前,需要對訓(xùn)練集圖像進行統(tǒng)一的處理,以幫助網(wǎng)絡(luò)能夠更好地提取特征。本文首先對圖片進行了灰度化處理,然后進行圖片縮放,再進行歸一化處理,歸一化處理的參數(shù)需要提前對圖片進行計算得出,除此之外,還有許多其他的圖片處理方式,可以根據(jù)圖片的具體情況、特點等自由選擇,例如二值化、濾波、模糊等處理,不同的處理方式可能會對模型的特征提取有不同的影響,需要開發(fā)者根據(jù)經(jīng)驗以及多次嘗試才能測試出最優(yōu)處理方案。同理,在測試過程中使用的測試集圖像也需要做相同的圖像處理操作,才可保證預(yù)測結(jié)果的準(zhǔn)確度。
2.4? 訓(xùn)練
訓(xùn)練流程如圖2所示。訓(xùn)練前加載網(wǎng)絡(luò)并將其推至GPU上,使用DataLoader函數(shù)來進行訓(xùn)練集的讀取,在讀取訓(xùn)練集時進行圖片順序的打亂,有助于模型的收斂,若圖片數(shù)量過大,可以通過設(shè)置num_workers參數(shù)來選擇讀取需要的線程數(shù)量。訓(xùn)練過程中使用Adam優(yōu)化器來更新參數(shù),CTC損失函數(shù)來計算預(yù)測損失值并反向傳播,ReduceLROnPlateau方法來自動調(diào)整學(xué)習(xí)率,該方法可通過設(shè)置patience參數(shù)來指定在訓(xùn)練過程中損失值幾次為相同結(jié)果時,自動修改學(xué)習(xí)率,以達到激活的目的。最后將測試集的準(zhǔn)確率數(shù)據(jù)變化記錄并可視化,此功能的實現(xiàn)用到了tensorboard,訓(xùn)練過程中若需要查看圖像,則可使用cv2.imshow方法來顯示圖像配合輸出預(yù)測值,達到直觀查看訓(xùn)練正確率的效果。參數(shù)設(shè)置上,初始學(xué)習(xí)率為0.001,batch_size為16,圖片固定縮放大小為(80,176),epoch數(shù)量為100次,每結(jié)束一次epoch便保存一次模型,并將測試集放入當(dāng)前模型進行正確率測試,將結(jié)果記錄至可視化圖表中。
2.5? 訓(xùn)練結(jié)果
測試集正確率變化如圖3所示,該圖顯示了每1 000次的迭代后準(zhǔn)確率變化情況。當(dāng)識別的正確率浮動變化較小且保持一段時間時即可結(jié)束訓(xùn)練,選擇準(zhǔn)確率最高的模型作為最終模型進行測試。對2 000張測試集驗證碼進行測試后,通過比對預(yù)測結(jié)果和標(biāo)簽結(jié)果進行計算該模型的預(yù)測正確率,最終得出該模型的準(zhǔn)確率為99.2%。
3? 結(jié)? 論
本文針對不定長類型驗證碼的結(jié)構(gòu)特點,從實現(xiàn)端到端的識別以及基于圖像的序列識別角度出發(fā),設(shè)計了基于CRNN的不定長驗證碼識別方法,即首先針對圖片特點進行圖像預(yù)處理,再通過使用CRNN結(jié)合CTC訓(xùn)練模型,并且該模型在2 000張測試集中該模型準(zhǔn)確率達到99.2%。結(jié)果表明,目前通過使用深度學(xué)習(xí)可以輕松繞過驗證碼的測試,并且還能擁有極高的識別率。隨著深度學(xué)習(xí)研究的不斷深入,圖像識別技術(shù)也將不斷發(fā)展,驗證碼的安全性也隨之降低,因此,在將來的驗證碼發(fā)展中,在保障用戶安全性與體驗的同時,需要設(shè)計出更縝密的安全策略,為網(wǎng)絡(luò)安全添磚加瓦。
參考文獻:
[1] 殷光,陶亮.一種SVM驗證碼識別算法 [J].計算機工程與應(yīng)用,2011,47(18):188-190+194.
[2] 王曉鵬.驗證碼識別系統(tǒng)的研究及實現(xiàn) [D].廣州:華南理工大學(xué),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—),男,漢族,福建龍巖人,本科在讀,研究方向:深度學(xué)習(xí)。