基于卷积循环神经网络的不定长验证码识别

2021-10-16 16:30黎秋宇
现代信息科技 2021年7期
关键词:卷积神经网络

摘要:验证码是目前大部分网站用来防止批量注册、刷票等恶意操作的图灵测试手段。为了帮助开发者设计出更缜密的安全策略,将生成的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—),男,汉族,福建龙岩人,本科在读,研究方向:深度学习。

猜你喜欢
卷积神经网络
基于深度神经网络的微表情识别
卷积神经网络中减少训练样本时间方法研究
卷积神经网络语言模型研究
基于卷积神经网络的车辆检索方法研究
基于卷积神经网络温室智能大棚监控系统的研究
基于深度卷积神经网络的物体识别算法
深度学习算法应用于岩石图像处理的可行性研究
基于深度卷积网络的人脸年龄分析算法与实现
深度学习技术下的中文微博情感的分析与研究
基于卷积神经网络的树叶识别的算法的研究