APP下载

基于Attention 的卷积神经网络验证码识别研究

2023-07-11王子翱李英玲尚正宇李贵兵

关键词:字符灰度注意力

王子翱,李英玲,2,尚正宇,李贵兵,2

(1.西南民族大学计算机科学与工程学院,四川 成都 610041;2.西南民族大学计算机系统国家民委重点实验室,四川 成都 610041)

验证码作为一种被广泛使用的区分人机的方案,在防范自动化程序侵扰方面有着举足轻重的地位.但是随着各种验证码识别模型准确率的提升,验证码安全性也迎来了巨大的挑战[1].各大软件服务提供商的安全验证措施难以区分真正的人和计算机,使得验证码这一有效的安全防护措施变得形同虚设.验证码的破解和设计研究相辅相成,互为助益,其破解方法可以促进验证码设计的不断提升,同时设计复杂度的加大也促使其破解方法不断革新. 从研究现状来看,目前的文本验证码识别技术普遍存在验证码预处理过度导致图片信息丢失过多、仅使用特征的浅层信息作为模型的输入、对提取特征的融合不充分等问题[2].本文拟针对上述存在的问题,提出了一种基于注意力机制的卷积神经网络模型,该模型首先是预处理阶段,对于输入的验证码图片,经由灰度化、去噪、二值化三个阶段对图片进行预处理,不使用字符分割操作,尽量多的保留图片的细节特征;其次是特征提取阶段,将预处理之后的验证码图片输入到VGG16 网络当中,提取出图片特征;接着是特征融合阶段,对于提取到的多个特征,使用注意力机制对其进行加权操作[3],模拟人眼识别验证码时集中注意力的过程,再输入到卷积神经网络当中,训练得到验证码识别模型.最后,基于测试数据集,从模型的识别准确率方面对模型进行测试.实验结果表明,本文提出的方法的验证码识别平均准确率能达到93.27%,对比ResNet、CNN 和CNN7 基线方法,分别提升了8%、10%和22%.

1 相关工作

1.1 验证码识别

随着验证码被广泛的应用于各大网站,近些年,学术界对于验证码的研究也越来越普遍.目前业界对于验证码的识别研究随着图形图像技术和深度学习技术的崛起而飞速发展.

高海昌等人[4]通过使用水平分割和投影分割相结合的方式、从像素点数最少的位置进行分割,在对未粘连的字符验证码识别方面具有良好的识别效果.Song 和Mu 等人[5]针对字符粘连的情况提出了一种基于水滴算法的优化分割算法,该算法采取了类似水滴下落的方式,对于分割路径的选择时是对于当前位置的分割点而言,下一个位置的分割点由其左、右、下、左下、右下五个位置的像素点共同确定,该分割方法避免直线分割所带来的问题.段晨等人[6]对卷积神经网络进行改进,提出了一种将全连接层替换为卷积层的全卷积神经网络模型,该模型对于特征的利用会更加的充分.

考虑到验证码字符经常出现扭曲和粘连的情况,预处理操作的好坏会直接影响到特征的提取过程,预处理不当则无法提取到准确的字符特征,使得经过卷积神经网络训练时得不到最优模型;其次,如果采取的是浅层的神经网络模型,网络深度和宽度的限制也制约了对特征的有效利用,从而直接限制了识别率的提升.

1.2 注意力机制

注意力机制类似于人集中注意力的过程,在深度学习的相关领域,不同的工作针对其下游任务对注意力机制进行改进并加以利用.注意力机制计算每个候选向量的重要程度,使用softmax 函数将这些分数归一化为权重,再把这些权重分配给对应的候选向量,以此得到注意力结果,即加权平均向量[7]. Chen 等人[8]认为现有的注意力机制模型大体上是空间的,但是这种空间注意力机制并不能有效的符合注意力机制的初衷,Chen 等人提出一种新的卷积神经网络,称为SCA-CNN,该网络引入了通道注意力机制,提出结合CNN 中三个重要属性的注意力机制的应用,取得了很好的效果.Lu 等人[9]针对图像描述任务,认为非视觉词更多的依赖语言信息而不是视觉信息,因此论文引进了一个参数来控制注意力机制中视觉信息和历史信息的比重,提出了带有视觉哨兵的适应注意力模型.Vaswani 等人[10]的工作表明,仅仅使用自注意力机制就可以在机器翻译任务上得到非常好的效果.

为解决特征融合上的问题,本文采用基于Attention 的卷积神经网络模型,在模型的训练过程中基于注意力机制自动学习不同的特征的权重,从而模拟对不同字符识别时注意力的分布状态,将分散的注意力集中于当前识别的字符之上,以此来提高模型的识别准确率.

1.3 卷积神经网络

作为深度学习模型的重要分支,卷积神经网络在计算机视觉任务中得到广泛的应用,卷积神经网络使用卷积操作对输入图像进行特征提取,有效地从大量样本中学习特征表达,模型泛化能力更强.Krizhevsky等人[11]提出AlexNet,大幅提升了图形分类等任务的性能,但随着网络结构的加深,过拟合、梯度消失等问题也随之更加突出. Simonyan 等人[12]提出了VGGNet,继承了AlexNet 的框架,通过堆叠采用3 ×3 小卷积核的卷积层,增加了网络深度,提升了网络性能,VGGNet 包含5 种结构,其中最常用的是VGGNet-19和VGGNet-16. He 等人[13]提出了残差卷积神经网络ResNet,进一步加深网络的同时提升了图像分类任务的性能,缓解了随着网络深度的增加,梯度消失和网络优化的问题.为确保网络中各层之间信息流最大化,Huang 等人[14]提出了密集连接卷积神经网络DenseNet,DenseNet 由密集块组成,采用前馈的方式将所有层直接相连,每一层都从其前部所有层获得输入,并以同样的方式将其输出传至后续层,这种方式对特征进行复用,进一步缓解了梯度消失问题.

总的来说,目前业界的文本验证码识别技术普遍存在以下问题[15]:1)验证码预处理不当导致图片信息丢失过多,提取不到足够的特征信息;2)仅使用特征的浅层信息作为模型的输入,受局部感受野的限制而丢失特征,3)对于提取到的特征没有进行充分的融合.

针对上述存在的问题,本研究首先使用Otsu 算法对图片进行预处理,得到特征完整的验证码图片;其次,构建VGG16 网络来深度提取验证码的特征信息[16];最后,利用注意力机制自动筛选重要特征,实现基于Attention 的特征融合. 基于上述的设计,本模型可以提高验证码识别准确率.

2 基于注意力机制的卷积神经网络验证码识别模型

本文提出基于注意力机制的卷积神经网络验证码识别模型(简称AVC),其技术路线如图1 所示.首先对于输入的验证码图片,经过灰度化去除颜色干扰、清洗去除噪点、二值化区分前景和背景三个过程进行预处理;将预处理之后的验证码图片输入到VGG16 网络当中进行特征提取,得到验证码字符特征信息;接着,引入注意力机制对特征进行加权操作,实现重要特征的自动筛选,再利用卷积神经网络对提取到的特征进行深度融合,最终构建出验证码识别模型.具体包括如下四个步骤:

图1 基于Attention 的卷积神经网络验证码识别技术路线图Fig.1 Roadmap of captcha recognition technology based on attention-based convolutional neural network

步骤一:使用灰度化、去噪、二值化对验证码图片进行预处理操作;

步骤二:通过VGG16 网络提取预处理之后的图片特征;

步骤三:利用Attention 机制分配特征权重并输入到神经网络之中进行特征的深度融合;

步骤四:训练模型并进行预测.

2.1 图片预处理

常见的验证码图片预处理过程包含灰度化、二值化、去噪、边缘匹配等操作.本文为了减小预处理对验证码图片细节的影响,选取了灰度化、去噪、二值化三个步骤.通过这三个操作降低了验证码图片的背景干扰,突出验证码图片中字符的特征,从而使得后续VGG16 模型能够提取到更多的特征信息,有助于训练出性能更加稳定的模型,提高字符识别的准确度.

2.1.1 灰度化

为了消除验证码图片的颜色带来的干扰,本文对验证码图片进行灰度化处理,该操作可以在很大程度上保留验证码图片的像素分布特征和图片细节,大大降低了验证码识别过程中的难度,提高了识别成功的可能性.

本文从字符验证码的特征出发,考虑到验证码图片颜色繁杂、对比度较高等情况,选取了加权平均值的灰度处理方式:

其中R(x,y)、G(x,y)、B(x,y) 分别代表位置(x,y)处的红、绿、蓝三种颜色的像素值,Gray(x,y)代表经过加权处理之后的灰度值.为了更加真实的模拟人眼的识别过程,本文根据通用的灰度值转化标准[17],将式(1)中的参数确定为C0=0.59,C1=0.30,C2=0.11,采取加权的方式对验证码图片进行进一步的处理.

验证码图片的灰度化后,得到只包含RGB 三种亮度的黑白图片,即一个包含验证码图片颜色深度的像素矩阵,矩阵值的范围为(0,255),每一个不同的值代表着原始图片中不同的像素值.

2.1.2 去噪

去噪是为了排除背景的干扰,避免干扰点对后续二值化操作产生影响,从而提取到更多、更准确的图片信息.

如图2 所示,本文采取的去噪方法主要是连通域去噪算法[20],该算法是根据当前像素点周围的像素点来确定该点是否为噪点.

图2 连通域去噪算法示意图Fig.2 connected domain denoising algorithm

如图2 中左侧图像所示,当该像素点为孤立像素点时,那么此处必为噪点,因此可以将此点的灰度值改为白色(255).如图2 中右侧图像所示,如果当前点不为孤立的像素点,即该点周围还有其他的像素点,则可以依据公式(2)来进行判断,式中x,y分别代表坐标值,dst代表当前坐标像素的灰度值.当该点周围有五个点及以上的灰度值为255 时,代表该点是一个噪点,即可将此点归为背景部分,反之,则归为前景部分.基于上述原理,可以去除图片的部分的噪点.

2.1.3 二值化

二值化是为了将验证码字符和背景区分开来,将前景使用黑色(0 表示),背景使用白色(255 来表示),用以突出前景,方便特征提取.

二值化的输入为去噪之后的验证码图片,二值化最关键的一环便是确定阈值k,本文使用Otsu 算法[18-19]来求得全局阈值k,该算法通过最大化前景与背景图像的类间方差来选取阈值.Otsu 算法不受验证码图像亮度和对比度的影响,能够明显地分割出前景字符目标,并且由于验证码字符目标与背景面积差距较小,避免了类间方差函数呈现多峰对结果产生的负面影响.其计算方法如下所示:

其中,前景像素个数为num1,所占总的像素个数比例为p1,前景所有像素点的灰度值的平均值为Gray1;背景像素个数为num2,所占总的像素个数为p2,背景所有像素点的灰度值的平均值为Gray2. 函数关系式F代表的是前景和背景之间的方差,当方差最大的时候,说明前景和背景的区分度越高.

通过枚举阈值(k∈[0,255]) ,可以得到前景和背景个数随阈值取值不同而变化的情况,当函数关系式F取得最大值时,此时所选定的阈值k即为所求的全局阈值.依据下式8 将大于阈值的像素点设定为白色(255),小于等于阈值的像素点设置为黑色(0):

2.2 基于VGG16 的特征提取

本文采用VGG16 神经网络模型,相较于传统卷积神经网络,该网络从如何节约计算资源以及如何加深网络的角度进行改进,通过3 ×3 卷积核的串联与堆叠,提取图像领域内更多细节特征,从而提升对验证码字符表征的学习能力,本文构建的VGG16 模型结构如图3 所示.

图3 基于VGG16 的特征向量提取Fig.3 Feature vector extraction based on VGG16

由图3 可见,该网络由5 个卷积块以及全连接层构成,每个卷积块由卷积层和池化层组成,全连接层由3 个连续的全连接操作组合而成.相较于传统卷积神经网络模型,VGG16 使用较小的3 ×3 卷积核,连续的小尺寸卷积核相比于大尺寸卷积核具有更好的非线性,在不降低模型参数数量以及保证感受野的同时,减少卷积计算量使模型更快地收敛.其次,该模型使用2 ×2 的池化核,更小的池化核保证了对更加细节的信息进行捕捉,且最大池化操作可以更加容易地感受到图像上的变化,从而深化模型对验证码字符细节特征的学习,为后续基于Attention 的特征融合提供细粒度的、可靠的特征基础.

2.3 基于Attention 的特征融合

本文采用基于注意力机制的卷积神经网络进行特征融合,注意力机制通过对不同的特征进行加权操作,实现对重要特征的自动筛选. 卷积神经网络的输入不再是固定长度的中间特征向量集C,而是经过注意力机制处理后的C’,该过程能减少整体字符对当前字符识别的干扰.基于Attention 的特征融合模型如图4 所示.

图4 基于Attention 的特征融合模型Fig.4 Attention-based feature fusion model

利用Attention 机制对上一阶段提取到的特征向量{X1,X2,… ,Xn} 进行权重分配,从而得到带权重的特征向量{C'1,C'2,…,C'n} ,将该向量输入到CNN中,在进行深度特征融合后得到最终输出项,并解析为字符识别结果.该过程如下图5 所示.

图5 基于注意力机制的特征权重分配Fig.5 Feature weight distribution based on attention mechanism

Attention 机制对输入项的不同特征分配不同的权值,由此可以得到基于特征重要性的一系列特征向量{C'1,C'2,…,C'n} ,其中Ci的计算公式如下式所示:

上式中,at,i,j代表的是当前时刻作用在输入项不同特征上的权值,此权值是激励函数通过一系列的非线性操作生成的,fi,j是输入项的特征向量,通过卷积层和卷积核的共同作用而得到的.

对于输出项的{Y1,Y2,… ,Ym} ,添加注意力机制之后,经由CNN 得到的输出项公式如下所示:

上式中,F是卷积神经网络中为加入非线性操作而添加的激励函数,通过上式可以发现,每一个输出项的结果与对应的输入字符之间有了很强的关联性,这个强关联性通过C'i体现出来,最后得到输出项为字符的识别结果.

3 实验与分析

3.1 实验数据集

验证码图片数据的获取主要有两种获取途径,其一是利用python 网络爬虫进行爬取,这样可以获取所需网站大量的验证码图片,而且具有实践指导意义,但是这样的方式获得的是原始图片,需要进行大量的人工标记,而且对于单一网站上所爬取的验证码图片而言,其验证码形态具有唯一性,不能够产生多样化的字符特性.

为了保证数据的多样性,本文根据图片的各种属性,包括尺寸、扭曲程度、字符个数等信息,调用python 中的captcha 库自动生成验证码[21],在生成的过程中,程序自动对图片进行标记,节省了人工标记的过程.验证码图片由数字和大小写英文字母共同组成,生成的字符在一定程度上扭曲、粘连且具有背景线的干扰,很大程度上模拟了真实场景下的验证码图片,保证了实验数据的真实性.

3.2 评价指标与基线方法

3.2.1 评价指标

本文参考了相关文献[1,22]后,选取了验证码识别领域广泛使用的两个评价项:模型识别准确率、模型识别时间.

(1)模型识别准确率

该评价指标表示模型的识别准确率,其计算公式如下:

其中,Winnum表示预测正确的字符的个数,Losenum表示预测错误的字符个数.当该评价指标的值越小时,代表模型识别准确率越低;值越大,代表识别准确率越高,模型更好.

(2)模型识别时间

该评价指标表示模型预测过程耗时,其计算公式如下:

其中starttime表示预测过程的开始时间,endtime表示预测过程的结束时间.通过比对不同模型的该项评价指标,值越大代表识别过程所需要的时间越长,模型的识别效率就越低下.

3.2.2 基线方法

本文选取了ResNet[13]、卷积神经网络(简称CNN)和传统的七层神经网络(简称CNN7)作为基线[23],并从两个评价指标上将本文提出的模型AVC与之对比.

ResNet 在图像分类领域得到了广泛应用,并在验证码识别工作中取得了很好的成效,ResNet 通过堆叠网络层数来深化模型精度,并引入残差模块来缓解梯度消失、梯度爆炸的问题,从而避免层数加深而带来的精度退化,得到更好的学习效果.

CNN 和CNN7 在验证码识别领域被学者们广泛地用作基线,具有较高的认可度,但是传统的七层神经网络模型因为其层数少,模型的深度和宽度都不够,因此提取到的图片特征不能准确地表示验证码特性;而CNN 网络使用特征的浅层信息作为模型的输入,存在局部感受野的问题,无法提取到图片的深度特征.本文在特征提取和模型方面都进行了改进,使得模型具有更好的识别效果.

3.3 实验结果及分析

3.3.1 模型性能分析

本节从两个方面对模型进行性能分析:①模型训练过程中的损失函数变化;②从模型识别时间、识别准确率两个方面评价模型的性能.图6 展示了模型在训练过程中损失函数随训练轮次的变化情况.

图6 训练集损失函数随训练轮次的变化(左:未取对数 右:取对数)Fig.6 The change of the loss function of the training set with the training round (left:no logarithm,right:logarithm)

如图所示,在训练初期(训练轮次小于5 次),损失函数值随训练轮次的增加迅速下降,该过程由于初期时累计训练的样本数量还比较少,模型还不够稳定,所以损失函数会下降的很快;在训练轮次达到10次之后,loss 几乎没有变化,此时说明模型已经达到了稳定状态.当对损失函数取对数(如右图),可以发现,loss 的值呈持续下降趋势,只是越到训练后期,下降的幅度逐渐变小.

对本文所建立的模型进行了10 次独立重复实验,结果如表1 所示.

表1 AVC 实验识别结果Table 1 AVC experimental results

从表1 中可以看出,本文提出的基于Attention 的卷积神经网络模型识别准确率最高达到94.80%,最低为90.78%.在已有的数据样本上的测试结果表明,AVC 模型具有较好的稳定性,识别准确率的波动在5%以内,每一轮的识别结果显示,每百张验证码平均识别时间在5.5 秒左右,对于单张验证码而言,识别的时间可以接近0.05 s.

但是,在第5 轮实验识别准确率较低,通过分析发现,在本次实验的过程当中,测试样本集当中出现了容易混淆的验证码,该验证码由于较难区分数字‘0’和字母‘O’导致识别出错,改进方案为设置50 张类似的验证码图片,单独对模型进行训练,使得模型记忆这种验证码的特征.

对表中10 次实验所记录的准确率和所用时间求取平均值,模型的识别准确率为93.27%,每百张验证码图片识别所需时间为5.59 s.10 次独立重复实验结果表明,AVC 模型识别准确率最高为94.80%,大部分结果位于92% ~94%之间,模型稳定性高.

3.3.2 AVC 与基线方法的比较

为验证AVC 的性能,本文将提出的方法与Res-Net、CNN 和CNN7 进行对比,四种模型在相同的数据集训练之下,从准确率、时间两个方面进行评价.10次独立重复实验的结果如表2 所示.

表2 AVC、ResNet、CNN、CNN7 实验对比表Table 2 AVC,ResNet,CNN,CNN7 experiment result comparison

从表中可以看出四种模型在相同数据集下不同的识别准确率,对表中的数据分析可得到如下结论.

1)AVC 与ResNet 性能对比

从表2 可以看出,AVC 的平均准确率为93.27%,比ResNet 的平均准确率提高了8%.具体来讲,在10次独立重复实验中,AVC 的准确率总体方差为1.11,ResNet 的准确率总体方差为5.32. 这意味着AVC 不仅准确率要优于ResNet,而且稳定性也要比ResNet更好,这主要是因为AVC 通过VGG16 的特征提取与Attention 分配权重,深度提取到验证码字符的细微特征,在提高准确率的同时保证了稳定性. 在时间性能方面,AVC 平均比ResNet 节约了17%的时间成本,这是因为ResNet 的网络层数与参数更多,也就消耗了更多的训练与预测时间成本.

2)AVC 与CNN 性能对比

为了充分的验证融合了注意力机制的卷积神经网络对于识别准确率的贡献,本文设置了一组对比实验,AVC 与CNN 的性能分析.

通过表2 可以看出,基于同样的数据集对已训练好的两个模型进行预测,对比AVC 与CNN 在10 次独立重复实验下的结果,CNN 的平均识别准确率为84.85%,而AVC 在基于Attention 权重分配和特征融合后,模型相对于CNN 模型识别准确率有所提升,平均提升了10%. 在识别时间上,AVC 与CNN 每百张的识别时间相差在0.1 秒之内,没有增添额外的时间成本.

3)AVC 与CNN7 性能对比

从表2 中可以看出,对比AVC 模型和CNN7 模型在相同数据集的运行结果,十次独立重复实验中,AVC 模型的总体识别准确率为93%,CNN7 的总体识别准确率为76%,AVC 在识别准确率上相较于CNN7平均提升了22%.但是由于AVC 网络模型层数的增加,导致识别时间上比CNN7 略高.

总的来说,①AVC 与ResNet 对比结果显示,AVC识别准确率相较于ResNet 平均性能提高8%,且时间性能相较于ResNet 平均提高了17%.②AVC 与CNN对比结果显示,AVC 识别准确率相较于CNN 平均性能提高10%,表明深度特征提取和注意力机制对模型产生了正面效应,取得了更好的识别效果. ③AVC与CNN7 对比结果显示,AVC 识别准确率相较于CNN7 平均准确率提高了22%.

4 总结

基于目前验证码识别研究面临的预处理不当导致图片信息丢失过多、仅使用特征的浅层信息、对于特征没有进行充分的融合等问题,本文提出了验证码识别模型AVC,首先使用灰度化、去噪、二值化对图片进行预处理操作,规避了对图片细节损失较大的分割操作,尽量多地保留图片的细节特征;其次利用VGG16 模型对预处理之后的验证码进行特征提取;然后进行基于Attention 机制的特征权重分配,再输入到卷积神经网络当中进行深度特征融合;最后通过卷积神经网络进行模型的训练和预测,并且从识别时间和准确率方面对模型进行评价. 实验表明AVC 的平均识别准确率为93.27%,在不增加时间成本的情况下,准确率相对基线方法提升明显,并且具有良好的稳定性.

然而,尽管AVC 在基于英文字符和数组字符所组成的验证码图片上取得了较好的实验结果,但在面对具有庞大字符基数的汉字验证码时,AVC 在字符预处理与特征提取工作上仍有很大的提升空间.未来将引入汉字验证码图片数据集,并对模型结构进行优化,以适应多语言验证码识别的需求.

猜你喜欢

字符灰度注意力
采用改进导重法的拓扑结构灰度单元过滤技术
寻找更强的字符映射管理器
让注意力“飞”回来
基于灰度拉伸的图像水位识别方法研究
字符代表几
一种USB接口字符液晶控制器设计
消失的殖民村庄和神秘字符
“扬眼”APP:让注意力“变现”
基于最大加权投影求解的彩色图像灰度化对比度保留算法
基于灰度线性建模的亚像素图像抖动量计算