郭小燕,陈 鹏,,张 明,张绿云,马楚奇
(1.甘肃农业大学 信息科学技术学院,甘肃 兰州 730070;2.河池学院 大数据与计算机学院,广西 宜州 546300;3.兰州城市学院 信息工程学院,甘肃 兰州 730070)
支付宝、微信等第三方快捷支付方式的快速发展对传统银行卡支付业务带来极大挑战,银行卡号数字自动识别技术可提高银行卡支付效率及便捷性,使其更好地参与市场竞争[1]。由于图像的背景、光照、对比度等因素会对图像的识别效率和准确率造成干扰,且Sigmoid 激活函数在神经网络的梯度反向传递时易产生梯度爆炸或梯度消失问题。鉴于此,本文提出基于改进PCA_CNN 的银行卡号识别模型,旨在提高抗干扰能力,缓解梯度消失问题。
卷积神经网络凭借其优越的性能备受广大学者关注,并成为当下研究热点,其已在图像识别领域取得系列研究成果。李尚林等[2]提出基于卷积神经网络(CNN)的银行卡数字识别框架,能显著提高银行卡数字识别准确率。黄睿等[3]利用Tensorflow 框架搭建CNN 网络实现手写数字识别,其准确率高于传统Softmax 模型。Druki 等[4]提出七层卷积神经网络模型以提高复杂背景下的图像识别效率。Gao 等[5]提出DCNN 深度学习模型以增强图像目标识别的自动特征提取能力。
以上研究均得较好效果,但由于卷积神经网络的参数量极大,卷积核需依靠大量学习确定,将造成时间和算力浪费。本文使用改进PCA_CNN 的银行卡识别模型,利用PCA算法选取CNN卷积核,与传统CNN网络通过反复迭代获取卷积核相比,PCA_CNN 极大缩短了学习训练时间,解决了传统CNN 在特定时间内识别准确率不高和收敛速度不足的问题,从而提升网络整体性能。为进一步提高识别效果,本文对传统的Sigmoid 函数进行改进,防止网络随卷积层数增加而出现过拟合,从而导致权重无法更新。采用自然光下手机拍摄的2 000 张银行卡照片对PCA_CNN 网络模型进行测试,证明改进PCA_CNN 的模型能对银行卡号进行有效自动识别,为银行卡便捷支付提供技术保障。
在实际支付过程中,由于银行卡可能存在破损、折痕、污点、字迹不清晰等情况,且拍摄时可能出现光线较暗、曝光过度、手机抖动等问题,因此银行卡图像常常含有噪声,会对图像识别造成干扰,故将数据送入识别程序之前,应进行预处理以保证识别质量。
对图像进行灰度化操作可降低干扰因素,使银行卡数字轮廓更清晰,减少网络计算量,提高运算效率[6]。图像灰度化处理可采用最大值法[7]、平均值法[8]、加权平均法[9]。由于加权平均法可最大程度降低干扰,对图像进行灰度化处理的同时能够实现图像增强,且能够清晰有效地提取银行卡数字轮廓,故本文采用该方法进行图像灰度化处理。以上3种方法图像识别对比效果如图1所示。
Fig.1 Graying effect of image图1 图像灰度化效果
银行卡图像中,除卡号区域外,还有其他图案、银行logo,银联标识等区域,因此在银行卡图像中有效提取卡号区域是后期对卡号识别的关键步骤。针对卡号区域提取,设计的区域锁定法可对卡号区域精准提取分割,主要步骤如下:
(1)提取银行卡轮廓。采用王文豪等[10]改进的Canny算法提取银行卡轮廓,结果如图2所示。
Fig.2 Image contour extraction图2 图像轮廓提取
(2)区域填充。在轮廓提取基础上,使用日本学者大津展之在1979 年提出的最大类间方差法(OTSU)[11]进行二值化处理,用形态学闭操作消除轮廓中的黑色部分,并填充闭合区域,将银行卡数字区域连接作为待选卡号区域,结果如图3所示。
(3)卡号提取。利用水平和垂直投影获取银行卡四周边界,采用区域锁定法获取数据区域,从而获取银行卡号,流程如图4所示。
Fig.3 Using OTSU to select the bank card number area图3 使用OTSU选取银行卡号区域
Fig.4 Flow of bank card number area locking图4 银行卡号区域锁定流程
依据银行卡锁定区域与已提取边缘轮廓的银行卡图像进行重叠对比,裁剪出数字组区域图像,如图5所示。
Fig.5 Partial bank card digital area cutting characters图5 部分银行卡数字区域切割字符
在CNN 训练过程中,初始权重随机生成,因此在迭代次数有限时不能迅速找到误差收敛方向,从而影响收敛速度与精度[12]。Chan 等[13]提出利用PCA 选取CNN 卷积核的网络PCANet,可大幅度提高训练速度。本文基于PCANet 设计用于银行卡识别的PCA_CNN 模型,以获得更优识别结果,如图6所示。
Fig.6 Flow of improved PCA_CNN algorithm图6 改进的PCA_CNN算法流程
(1)卷积核确定。假定输入尺寸为m×n,对于其进行t=k×k块采样得到s=(n-k+1) × (m-k+1)个图像块,将每个图像块连接成一个t*s矩阵,利用PCA 获得前l1个特征向量,作为后续卷积运算的卷积核,如图7所示。
Fig.7 Selection of convolution kernel图7 卷积核选取
(2)两阶段卷积。在PCA_CNN 模型中,共经历两阶段卷积,卷积核个数分别为l1 和l2,因此,单个输入图像经过两次卷积后,变成l1 ×l2个特征图。
第一阶段:通过块采样及PCA 选取的特征矩阵作为第一阶段卷积核,如图8所示。
Fig.8 The first stage convolution图8 第一阶段卷积
第二阶段:对第一阶段卷积获得的l1个特征图进行块采样,通过PCA 获得l2 个特征矩阵,作为第二阶段卷积核进行卷积运算,每个输入图像均得到l1 ×l2 个特征图,如图9所示。
Fig.9 The second stage convolution图9 第二阶段卷积
将卷积所得特征图的每一个像素进行二值化处理,然后将l1 ×l2 个特征图分成l1 个组,组内的l2 个图像堆叠起来,每l2 个(0,1)像素组成一个0-2l2-1的十进制哈希编码。
使每张哈希编码后的特征图分成B 个块并统计其直方图,然后将第i副输入图像中第j副特征图对应的直方图组成标记为Bhis(t)(1 ≤j≤l1)的向量,输入图像fi对应的图像特征如式(1)所示。
其中,Bhist()表示将第i副输入图像中第l1 副特征图所对应直方图组成的向量,其标记为Bhis(t)(1 ≤j≤l1)。
分析识别阶段主要对已提取特征的图像进行数字识别,如图10所示。
Fig.10 Improved convolutional neural network model图10 改进的卷积神经网络模型
(1)输入层。为保障最终分类识别准确率及收敛时间,将预处理后的银行卡号数字图像作为输入,并设置输入层图像大小为28*28。
(2)卷积层C1。对银行卡号输入矩阵进行卷积运算。利用卷积操作提取原始图像特征,使用PCA 产生的16 个卷积核对每幅输入图像进行卷积运算生成16 个大小为28*28 的特征图。为增强模型表达力及缓解神经网络中梯度反向传递时存在的梯度爆炸和梯度消失问题[14],将Sigmoid 激活函数进行改进。如式(2)所示,采用分段单调递增可缓解深度学习中的梯度消失问题。
Fig.11 Improvement of activation function图11 激活函数改进
(3)池化层S1。对图像进行降维处理并保留其有效信息,保证CNN 在旋转、平移、伸缩时的稳健性。本文使用平均池化获得16个大小为14*14的特征图。
(4)卷积层C2。采用第二阶段卷积产生的32 个卷积核对网络上层输出图像进行特征提取,获得32 个大小为14*14的特征图,同时采用式(2)中的激活函数。
(5)池化层S2。获得32个大小为7×7的特征图。
(6)输出层。采用全连接方式与S2 层特征图连接。在S2 层32 个大小为7×7 的特征图中,共包含192 个神经元。由于该研究需对共10 类银行卡数字进行分类识别,故将输出层神经元数设定为10,最终得出1 920 个连接参数。
使用PCA 将卷积层C1、C2 的卷积核参数初始化,初始化后的卷积特征可视化效果如图12所示。
Fig.12 Example of convolution feature visualization图12 卷积特征可视化图示例
银行卡训练数据为手机拍摄的2 000 张银行卡图像,原始图像大小为64*64,通道数为3。为防止训练数据受不同光照强度、倾斜角度、遮挡程度等噪声干扰,应对训练数据进行预处理,训练数据类别及数量如表1 所示。随机采取70%的数据进行训练,30%的数据进行测试。
Table 1 Training data categories and quantities表1 训练数据类别及数量
将改进的PCA_CNN 模型、PCA_CNN 模型及CNN 模型在识别准确率和Loss 值方面进行20 次对比实验,实验结果如表2 所示。可以看出,改进的PCA_CNN 模型在识别准确率和Loss 值方面都优于PCA_CNN 模型和CNN 模型,改进的PCA_CNN 模型在平均准确率方面比PCA_CNN 模型高2.12%,比CNN 模型高2.97%,Loss 值比PCA_CNN 模型低1.01%,比CNN 模型低6.73%。如图13 所示,在迭代起始阶段,改进的PCA_CNN 算法准确率明显高于PCA_CNN 模型和CNN 模型,当迭代次数达到125 次后,3种算法准确率均开始收敛,并且改进的PCA_CNN 模型准确率明显高于其他两种模型,表明改进的PCA_CNN 模型在迭代次数较少的情况下优势明显,准确率与性能均有一定优势。综合来看,改进的PCA_CNN 模型明显优于PCA_CNN 模型和CNN 模型。
Table 2 Comparison of improved PCA_CNN with PCA_CNN and CNN 表2 改进的PCA_CNN与PCA_CNN、CNN比较
Fig.13 Accuracy comparison of improved PCA_CNN with PCA_CNN and CNN 图13 改进的PCA_CNN、PCA_CNN、CNN准确率比较
为验证模型有效性,将改进的PCA_CNN 模型与传统机器学习进行比较,实验结果如图14所示。
Fig.14 Comparison of accuracy of the improved PCA_CNN with other methods图14 改进后的PCA_CNN与其他方法准确率比较
使用Canny算子、大津法等进行银行卡图像预处理,对数字图像区域进行分割与提取,使得模型对背景、光照、折损、污点等情况具有较强的抗干扰性。再将预处理结果分别应用于改进的PCA_CNN 模型、传统BP 神经网络[15],SVM 模型[16]、Bayes 决策理论[17]、暹罗网络模型[18]进行识别对比,结果如表3 所示。可以看出,待测试模型除SVM算法外,准确率均在96%以上,其中BP 为96%、SVM 为90.65%、Bayes 为96%、暹罗网络为97.91%、改进的PCA_CNN 为98.53%。从结果来看,PCA_CNN 较传统神经网络、机器学习算法具有一定优势。
Table 3 Comparison of recognition performance of different methods表3 不同方法识别性能比较
使用手机等非专业设备在自然光下拍摄银行卡可能存在背景不一、光照强弱不一等问题,并且银行卡本身可能存在破旧、污点、折损、字迹不清等问题。因此,在银行卡卡号识别问题上,本文首先对图像进行图像灰度化处理、形态学处理、数字区域分割提取等预处理操作,使其具有较强抗干扰性,对背景、光照具有一定容错能力;然后将PCA 算法用于选取CNN 神经网络卷积核,同时在卷积层使用新的激活函数,建立改进的PCA_CNN 模型,利用改进的模型进行银行卡识别;最后与CNN、BP 神经网络、SVM 模型,Bayes 算法,暹罗网络模型进行对比。结果表明,改进的PCA_CNN 模型在准确率方面具有显著优势,可用于银行卡识别。将该模型应用于车牌号识别、人脸识别等,则是未来研究重点探索的方向。