基于深度学习的验证码识别
[摘 要]验证码被广泛应用于网络环境中对人和计算机行为进行区分,能有效防止自动化脚本的恶意入侵.针对验证码识别问题提出基于深度神经网络的验证码特征提取和识别方法.将灰度化的验证码图像直接作为输入,通过构建7层卷积神经网络对字符由低级到高级的特征表达,并选取 Relu函数为非线性激励函数,对验证码图片进行字符特征提取与验证码的识别.采用人工智能深度学习框架 Tensorflow 对卷积神经网络模型进行训练,通过验证码数据集进行测试.测试结果表明,该模型能有效识别不同复杂程度的验证码,并具有较好的鲁棒性与泛化能力.
[关键词]深度学习;卷积神经网络;验证码识别;非线性激励函数;人工智能
在网络环境中,验证码可以区分出用户是计算机还是人,这种公共全自动程序能有效抵御互联网中某些恶意的操作,如用户批量注册、社区恶意发帖、密码暴力破解等.常用的验证码是由数字、字母或文字组成的图片,并通过不同程度的遮掩与扭曲增加验证码的识别难度[1].对于人而言,识别率能达到90%,对于计算机识别就比较困难.常用的验证码识别方法有模版匹配法、支持向量机(SVM)识别法及神经网络识别法.模板匹配法直接,方便,但不具有旋转不变性和尺度不变性,其识别率和鲁棒性不高,如文献[2]通过逆向分析制作模版和整体识别技术实现了对无法自动分割验证码的正常识别. 传统的机器学习方法[3G4]在字符识别上取得了不错
网络在处理图像二维结构数据上有明显的优势,可以直接将图像作为输入,自动学习图像特征,提取出具有平移和变形不变性的特征表示[10]. 本文提出了基于卷积神经网络的验证码特征提取与识别的方法,能够准确、高效识别各种复杂的字符型验证码.
1 卷积神经网络
卷积 神 经 网 络 是一种建立在传统神经网络基础上的深度学习网络.在结构上,它主要由单个或多个卷基层和池化层(也叫下采样层)组合而成.图1为由一个卷积层和一个池化层组成的卷积神经网络提取
图像特征的过程.
的效果,但这类方法需要对图片进行预处理,分割字
,
b
Wx+ 1
bx+ 1
分割和特征提取,因此有一定的局限性,如文献[5]
对字符图像分割、特征提取后采用支持向量机的字符验证码识别方法对教务系统验证码的识别达到
100%;文献[6]采用轮廓差投影与水滴算法结合分
1.1 卷积层
Cx
图 1 卷积和池化过程
Sx+ 1
,
割字符,然后再利用 KNN 算法识别字符.
采用卷积来代替传统神经网络的全连接 卷积
随着深度学习在图像识别和模式识别领域的发展,其在字符识别上的应用也越来越广泛[7G9].与传统的人工特征设计相比,深度神经网络能有效提升分类识别效率.卷积神经网络作为常用的深度神经
层的每一个神经元都只和前一层一个局部窗口内的神经元相连,构成一个局部网络,这个局部窗口被称为卷积核[11].每个卷积核与前一层的特征图像进行卷积操作时,在同一层面上输入数据具有相同的
权值[12].卷积层的局部感知与权值共享的特点,能够减少卷积神经网络的训练参数,提高迭代效率. 把卷积核看作是k1 ×k2 的滑动窗口,并按一定的步长在验证码图像上滑动,扫描图像上的所有位置,能够有效检测到验证码图像的边缘、线段、角点等视觉 初级特征.经过多层叠加的卷积层网络能从上一层特征图像中分析并提取出抽象程度更高的图像特征.
将包含n 个通道的图像n1 ×n2 作为输入xi ,卷积核k 的大小为k1 ×k2,经过卷积操作后生成m个通道m1 ×m2 的图像作为输出xj ,计算过程:
xl =f( xl-1 kl +bl ) (1)
其中, 为卷积运算符,bl 为偏置项,f()为激活函数.
1.2 池化层
输入图像通过不同的卷积核经过卷积操作后输出特征图像,对特征图像进行池化处理能有效解决直接对特征图像进行分类计算量大的问题.池化层不会改变矩阵的深度,但是可以缩小矩阵的大小,即特征图像经过池化操作后通道数不变,特征的维数降低,不仅能有效抵抗图像的旋转、缩放、平移等问题,还能够防止过拟合现象[13].
常用的池化方法包括最大池化、平均池化和随机池化.根据相关理论,图像特征提取的误差主要来自两方面:邻域大小受限造成的估计值方差增大;
卷积层参数误差造成估计均值的偏移[14]. 最大池
易饱和,出现梯度弥散的现象,在接近收敛时,变换太缓慢,易造成信息丢失.Relu 函数会使部分神经元输出为0,造成稀疏性. 利用这一特性不仅能够缓解过拟合现象,也更接近真实的神经元激活模型.
Sigmoid函数: f(x)= 1+1e-x (3)
Tanh函数: f(x)=ex -e-x (4)
Softplus函数: f(x)=log(1+ex ) (5)
Relu函数: f(x)= max(x,0) (6)
1. 0
0. 5
0
- 0. 5
- 1. 0
- 3 - 2 - 1 0 1 2 3
x
- Sigmoid、Tanh模型
3
2
1
0
- 1
- 3 - 2 - 1 0 1 2 3
x
- Softplus、Relu模型
图 2 常用非线性激励函数图像
2 卷积神经网络的设计与实现
,
化,即邻域内特征点取最大,它是被使用最多的池化
卷积神经网络在处理二维图像时 能有效抵抗
层结构,能够减小第二种误差;平均池化,即对邻域内特征点求平均值,能够减小第一种误差;随机池化,即通过对像素点按照数值大小赋予概率,再按概率进行亚采样.随机池化介于最大池化和平均池化之间,在平均意义上与平均池化近似,在局部意义上则服从最大池化准则.
经过池化处理后,特征图像的通道数保持不变而像素变小,其计算公式:
xl =f(ldown(xl-1)+bl ) (2)
平移、缩放及其他形式扭曲,因此通过构建卷积神经网络对字符型验证码图片进行特征提取与识别具有显著优势.针对字符验证码的识别,在 LeNetG5 模型的基础上,通过添加操作层并优化各层的参数设计出7层结构网络. 将验证码图像从输入层输入; 经过两次循环连接的卷积层与池化层提取出验证码 图像的特征,在池化层的下采样作用下降低上层计算的复杂度,防止过拟合;将得到的输出图像经过两
层全连接层,并使用式(6)的非线性激活函数 Relu
其中, l 表示池化系数,bl 表示偏置项,down()
实现图像特征的位移不变性,以及随机丢弃部分中
βj j
表示池化函数.
1.3 非线性变换
间结果,提高模型的抗干扰性和鲁棒性. 训练网络输出节点的个数为字符(包括0-9以及大小写字母
非线性变换层是用非线性激励函数处理上一层特征图像的操作. 它能对图像进行平滑分类,使神经网络具有更强的表达能力,从而能够模拟更复杂的模型. 常用非线性激励函数有 Sigmoid、Tanh、
Softplus、Relu等函数,见式(3)-(6),其模型如图2
所示.Sigmoid 与 Tanh 作为激励函数时,计算量大,反向传播求误差梯度时,求导计算量也很大,容
a-z和 A-Z)个数的总和,最后将训练模型接入线性的softmax回归模型对验证码进行识别.卷积神经网络结构如图3所示.
对于卷积神经网络中每层的参数及输出如下.
1)输入层,输入图像为验证码的灰度图,图像尺寸大小为28×28;
C1: 32@28 28
C3: 32@14 14
S2: 32@14 14
S4: 64@7 7
F5: 512 F6: 96 Output:62
Input: 28 28
#fl §"
#fl
K½'
Softmax
K½'
§"
图 3 卷积神经网络结构图
2)C1层,对输入图像采用32个大小为5×5 的卷积核进行卷积操作,且步长为1,边界使用“0”填充,得到32个大小为28×28的特征图,在对网络训练的过程中,总共需要学习的参数为832个(每个卷积核有5×5=25个参数,且每个卷积核对应一个偏差项,总共32个卷积核);
3)S2层,对 C1层的输出进行最大池化运算,池化层选用2×2 的核且步长为2 进行池化,得到32张14×14特征图. 对于每个池化层需要训练两个参数(权重系数与偏差项),共有64个参数;
4)C3 层,第二次卷积操作,卷积核的大小为5
×5,步长为1,边界使用“0”填充,总共的参数个数为(5×5×32+1)×64,输 出 64 张 14×14 的特
征图;
5)S4层,第二层池化层,输入为矩阵为14×14
×64,使用的池化层与S2 层相同,输出为64 张7×
7的特征图,共有2×64个训练参数;
6)F5层,第一层全连接层,将输入为7×7×64的矩阵展成长度为3136 的向量,输出为512 的节点,总共的训练参数为(512+1)×96个参数;
7)F6层,第二层全连接层,输入节点数512 个,输出节点数96,即每个字符对应8×12 的比特图编码,总共有96×62个参数;
8)Softmax层,将所有的特征输入到该层,进行
分 类,分 类 结 果 为 62,对 应 字 符 a-z、A - Z
3 实验过程与分析
在深度学习的训练过程中需要大量的数据来训练构建的网络模型. 目前没有公开的验证码数据集,采用网页中验证码的生成机制自动生成验证码作为训练数据的来源. 生成验证码图片的大小为
28×28,在生成验证码的过程中对字符进行不同程度旋转、扭转、平移、加入噪点及字符重叠等处理,验证码的字符包含数字0—9,大小写字母a—z和 A—
Z,并选取常用的字体 Times,Arial,Calibri. 通过对生成的验证码彩色图片进行灰度化处理,以提高训练和测试的速度,然后将得到的灰度图片制作成
Tensorflow 易读取的 TFRecord 格式的数据集.
TFRecord数据集中验证码图片总数为60000 张,其中训练样本集的数量为50000 张,测试样本集的数量为10000张.
该网络使用谷歌开源的 Tensorflow 深度学习框架,分别采用逐个样例训练(EET)方式和批量样例训练(BT)方式对模型进行训练.实验中针对 BT训练方式设计批尺寸参数batch_size= 50,其他参数的设置,EET 训练方式与 BT 训练方式相同. 损失函数的计算使用交叉熵cross_entropy;优化模型使用 AdamOptimizer()来使得损失函数cross_enG
tropy最小,参数值为(1e-4);训练过程中还添加了
dropout层[15G16],能够防止过拟合现象,其参数 keep
及0-9.
其各层相关参数如表1所示.
_prob = 0.5,最大训练迭代次数为10000.通过以上参数对建立好的模型进行训练,并利用 TensorG
表1 卷积神经网络各层参数设置
命名 类别 窗口大小/步长 输出尺寸
C1 Convolution 5×5/1 28×28×32 S2 Maxpooling 2×2/2 14×14×32 C3 Convolution 5×5/1 14×14×64 S4 Maxpooling 2×2/2 7×7×64 F5 Fullyconnection - 512
F6 Fullyconnection - 96
Output Softmax - 62
board可视化工具查看迭代次数与训练精确度的曲线图(图4).
1.0
0.8
0.6
0.4
0.2
0 2000 4000 6000 8000 10000
½fi'(
图 4 迭代次数与精确度的曲线
从图4 中可见,迭代初始阶段验证码识别的准
确率不高,随着迭代次数的增加,平均识别准确度不断提高.在迭代1000次后,模型的平均识别准确度变化缓慢;在迭代次数达到5500 次后,模型的平均识别准确度基本保持稳定. 采用 EET 训练方式的平均识别精度最终收敛于92%,而采用 BT 训练方
化能力.
[ 参 考 文 献 ]
[] , ,
式的平均识别精度最终几乎收敛于100%,采用 BT
1 温明莉 赵轩 蔡梦倩.基于深度学习的端到端验证码
训练方式比 EET 训练方式的平均识别精度提高了
8%左右.实验结果证明,该模型的迭代收敛速度很快,且采用BT 训练方式比 EET 训练方式的平均识别精度高,训练好的模型对字符型验证码有很高的识别度.
实验中选取了500张网页中生成的字符验证码图片对上面训练好的模型进行验证.这里选取包含不同字符大小、不同字体、字符有一定的旋转角度、部分字符有重叠的情况以及字符有不同程度干扰的 图片集,尽量涵盖不同复杂性的验证码图片. 截取网页中生成的字符验证码的图片样例,经过灰度化后如图5所示.
识别[J].无线互联科技,2017(14):85G86.
[2] 王泽建.基于模板整体匹配的验证码识别算法研究与实现[D].厦门:厦门大学,2012.
[3] 孟凯.基于 SVM 的空心验证码识别技术研究[D].重庆:重庆邮电大学,2017.
[4] 包乾,李文超,张庆东.Android平台下的验证码识别研究[J].科技通报,2017,33(9):73G75,219.
[5] 杨雄.基于 Python语言和支持向量机的字符验证码识别[J].数字技术与应用,2017(4):72G74.
[6] 汪洋,许映秋,彭艳兵.基于 KNN 技术的校内网验证码识别[J].计算机与现代化,2017(2):93G97.
[7] 刘欢,邵蔚元,郭跃飞.卷积神经网络在验证码识别上的应用与研究[J].计算机工程与应用,2016,52(18):
[] 1G7.
8 陈超,毛坚桓,刘寅.基于卷积神经网络的铁路货运网站验证码识别[J].指挥信息系统与技术,2016,7(4):
[] 91G96. , ,
9 Ahmed E Jones M Marks T K.Animproveddeep
图 5 验证码灰度图样例
选取的500张网页生成图片调整为符合模型的输入格式,使用上面已训练好的模型对图片进行识别,并与自生成的验证码图片识别结果对比(表2).由表2可知,在相同实验次数下网页生成的验证码的识别率比自生成验证码的识别率要低. 经过分
析,网页中生成的相似字符(如“0”和“o”、“D”,“S”
learningarchitectureforpersonreGidentification[C]// Proceedingsof2015 IEEE Conference on Computer Vision and Pattern Recognition.Washington D.C.,
USA:IEEEPress,2015:3908G3916.
[10]潘翔,王恒.基于深度学习的车牌相似字符识别[J].计算机科学,2017,44(S1):229G231,247.
[11]牛连强,陈向震,张胜男,等.深度连续卷积神经网络模型构建与性能分析[J].沈 阳工业大学学报,2016,38 (6):662G666.
和“5”等)比自生成的验证码要多.
[12]刘威,刘尚,白润才,等.互学习神经网络训练方法研究
[J].计算机学报,2017,40(6):1291G1308.
表2 字符型验证码识别率
验证码类别 验证总次数 正确识别次数 正确识别率/% 自生成验证码 2000 1986 99.3
网页验证码 2000 1904 95.2
4 结论
通过构建深度卷积神经网络,采用 EET 和 BT 两种方式训练网络模型,并将其应用到验证码的识别中,从而完成验证码的特征提取与验证码识别. 通过实验证明深度学习能够自动学习并提取字符的
特征,在字符验证码的识别上有很高的准确率,该模
[13]Cogswell M,AhmedF,Girshick R,etal.Reducing overfittingindeepnetworksbydecorrelatingrepresenG tations[A]//internationalconferenceonlearningrepG resentations(ICLR),2016.
[14]南阳,白瑞林,李新.卷积神经网络在喷码字符识别中的应用[J].光电工程,2015,42(4):38G43.
[15]Hinton G E,SrivastavaN,Krizhevsky A,etal.ImG provingneuralnetworksbypreventingco-adaptation offeaturedetectors[J].ComputerScience,2012,3 (4):212G223.
[16]范晓杰,宣士斌,唐凤,等.基于 Dropout卷积神经网络的行为识别 [J].广 西民族大学学报 (自 然科学版),
型对图像的平移、旋转、噪声等有较强的抵抗性.针对更复杂的验证码和含有相似字符的验证码,可以通过丰富训练集样本来提高卷积模型的鲁棒性及泛