黄为新,陶 杨,张继超,苏 笛,牛 砚
(1.吉林大学 计算机科学与技术学院;2.吉林大学 数学学院,吉林 长春 130012)
发票数字识别本质上属于光学字符识别领域中的一个分支——印刷体数字识别。光学字符识别技术被广泛应用于各方面,如铁轨路牌识别[1]、快递单号识别、身份证号码识别[2]等,对人们的日常生产和生活产生了重要影响。而对印刷体数字识别的研究也有很多,如孟岩等[3]总结了印刷体数字识别基本流程,提出采用摄像头而非扫描仪并结合数字图像处理技术和光学字符识别(Optical Character Recognition,OCR)的方法将成为该领域研究的主流方向;卿东升等[4]对通过结构特征识别数字的方法作进一步改进,提出一种基于二进制的算法。近年来的研究主要围绕神经网络技术,周泽华等[5]提出设计结构合理、收敛性强的BP 神经网络,识别率较高。
印刷体数字识别是将图片中0~9 的数字转变为计算机可识别的信息,而发票号码识别要做的工作更加具体。传统的发票信息获取绝大多数依靠人力,由于涉及对数字敏感的金融领域,这要求对单个数字的识别率很高。因此,设计出一套可以智能快速准确地识别发票单号的系统尤为必要。
一个完整成熟的数字识别系统包括:图像获取、图像预处理、图像字符切割、字符识别。本文通过网络爬虫技术,从互联网上获取发票图像样本;通过噪声处理、图像二值化等方法对图像作初步处理;通过投影法进行字符切割,从而获取独立的数字;最后是本文的核心工作——发票数字识别。与发票数字识别最接近的是手写体数字识别。一般而言,手写数字的处理更加复杂,目前手写数字识别问题已得到很好地解决。柳回春等[6]分析了手写数字识别情况,从而给人以启发——可以将其运用到印刷体数字识别上。这里不得不提及一个有名的数据集——MNIST手写字符数据集,它由LeCun 等[7]建立,包含10 个阿拉伯数字(0~9)一共60 000 张训练图片和10 000 张测试图片。在通过MNIST 数据集训练完备的手写数字神经网络Lenet上测试的准确率已达0.993 2,但在导入搜集好的印刷体数字图片并进行测试后,发现准确率仅为0.810 0,没有达到预期效果。直接将手写数字网络用于发票数字识别并不是一种好的解决方案,但这种尝试给予人一定启发,即可以对训练好的手写数字神经网络进行调整,例如网络参数和结构,从而提高印刷体数字识别准确率。
当训练和测试的样本域分布不同时,需采用迁移学习相关算法加以实现,本文采用的3 种方法都是建立在前人提出的比较完善的理论体系之上。例如,卷积神经网络(Convolutional Neural Networks,CNN)用于图像识别的方法比较常用,是利用数据样本构造一个“黑盒子”,将待测图片输入其中便可以得到它的类别。Li 等[8]提出一种高效卷积神经网络的前向和后向传播算法,用于对图像进行像素级分类并且消除了所有冗余计算;Pan 等[9]系统总结了迁移学习相关理论,与传统机器学习不同的是,它无需对目标任务进行重新训练;Ganin 等[10]提出的神经网络领域对抗训练理论是在一般神经网络训练中加入新的梯度反转层,自适应地完成深特征提取任务,实现在相似但分布不同数据集之间的训练与测试;Dan 等[11]提出的Tradaboost是迁移学习的一种算法,它指当源数据集和目标数据集处于不同分布时,同时利用带有标签的源数据集和带有标签的目标数据集,通过不同分布的训练数据训练出一个分类器,用于目标数据分类。上述文献为本实验提供了理论依据和指导,本文将几种迁移学习方法模型综合运用于发票数字识别,以寻求较优解决办法。本文结合了MNIST 数据集,通过网络爬虫获取和处理手造发票数字的样本集,并积极改进Lenet-5 的网络结构以适应该数据集。实验结果表明,运用Lenet-5 提取发票数字特征并用支持向量机(Support Vector Machine,SVM)进行训练的方法,准确率较高,且稳定性较好。
实验所用的发票图片样本均采用网络爬虫技术从各大搜索引擎网站爬取,类似百度、搜狐。但原始的发票图片不能直接运用于后续数字识别实验模块,要经过一系列处理步骤,如框定发票号码区域、灰度化和二值化、投影法分割、人工筛选,得到单个数字的图片用于后续训练。
发票单号识别系统具有交互性,可以人为框定发票号码区域,通过鼠标按下、拖动、松开以确定框选区域,同时计算机追踪鼠标按下和松开位置,再截出对应的发票单号区域,也称为“感兴趣”区域。灰度化和二值化可以简化处理,提高算法分割效率。灰度化使用Python-opencv 包自带函数,而二值化方法有自适应阈值二值化、均值二值化、最大类间方差法等。通过多次试验和比较,分割算法中最大类间方差法效率最高、准确率最好。二值化后,采用投影法进行分割,数字的图片是白底黑字,只有两种像素,从垂直和水平方向分别得到像素分布,黑色像素个数发生较大变化说明接近有数字的区域,如此可以大致确定数字位置。结合两个方向黑色像素分布的直方图就可以给该数字框定一个矩形并截取出来。虽然得到的数字图片大小不一,但可以在周围填充空白,并使用双线性差值形成预期大小为28×28 PX 的数字图片,用来形成样本集。发票图片预处理过程如图1 所示。
Fig.1 The preprocessing process of invoice pictures图1 发票图片预处理过程演示
为了形成统一的发票印刷体数字图片数据集,需进行一定的人工筛选。保证数据集要具有以下特点:各类样本比例平衡,数字要清晰得足以用肉眼分辨,数字标签要准确。最终形成的数据集一共2 000 张图片,包括0~9,大小为28×28 PX。发票数字数据集示例如图2 所示。
Fig.2 An example of the invoice number dataset图2 发票数字数据集示例
本文采用上述发票数字数据集进行实验,选取测试时间、识别时间和准确率作为评价标准。测试平台配置如下:操作系统:Windows 10;使用语言:Python 3.6;深度学习框架:Tensorflow(1.14.0);硬件环境:CPU Intel i5-7200U 2.50GHz,内存8GB。实验结果表明,3 种方法均可用于发票印刷体数字识别,但准确度有差异,稳定性有高低。研究发现,通过CNN 提取特征并用于SVM 的方法准确率较高、识别时间较短,能够很好地满足发票数字识别要求,具有很好的通用性和鲁棒性。
印刷体数字识别训练是多分类学习过程,本文采用一对一(One-Versus-One,OVO)的算法,将印刷体数字0~9一共10 个类别两两配对,产生10*9/2=45 个分类器,最后由每个分类器分类结果投票产生。在算法中,弱分类器选择二分类的SVM,迭代次数设为5,采用3 次多项式核,最终分类器为每次迭代中分类器的加权和。算法的核心在于每个弱分类器都会分配一个初始权重并随着迭代和计算误差进行调整。
印刷体数字图片大小为28×28 PX,输入SVM 的向量大小即为784×1。训练图片数量为61 200 个,其中60 000个来自于MNIST 手写数字集,1 200 个为0~9 的带有标签的印刷体数字训练数据。经过测试,准确率达0.967 5,训练和测试时间共为8 244.866 7s。
相比于MNIST 手写数字集,印刷体数字样本数量较少。但两种数据集是相似的,具有共同特征。Lenet-5 采用MNIST 这种大型的数据集进行训练,本身就具备了提取事物基础特征和整体抽象特征的能力。鉴于此,考虑采用微调办法,可以减少训练时间和资源,有效地提高准确率,降低出现模型过拟合、不收敛风险。
Lenet-5 是用于手写字符识别的卷积神经网络,准确率高、效果好。由于搜集的印刷体数字图片大小为28×28 PX,卷积神经网络的结构层次需要随之改变。本实验中Lenet-5 的网络结构如图3 所示。
Fig.3 Lenet-5 network structure in this experiment图3 本实验中Lenet-5 网络结构
第一层卷积层输入的是原始图像,大小为28×28×1;其输出是第二层输入,是一个28×28×32 的节点矩阵;第三层卷积层的输入矩阵大小为14×14×32,第四层池化层输入矩阵大小为14×14×64,第五层全连接层在Lenet-5 相关文献中被称为卷积层,但实质上与全连接层并无区别,如果将输入矩阵中的7×7×64 的节点拉成一个向量,则输入节点变为3 136 个,输出节点为512 个;第六层全连接层输出节点个数为10 个。每一层的参数个数可以用式(1)计算。
在微调中,所有层的参数都参与训练,以达到更好的训练效果。准备好的印刷体数字训练集用来训练60 次,而每一次训练中大小设为50,通过损失函数与学习率之间的函数关系图,学习率确定最优为5e-5。该实验准确率经过反复测试,为0.997 5,整个实验训练时间达165.807 6s,测试400 个样本的时间为0.531 1s,模型可准确且实时地给出发票单号识别结果。
实验中采取第3 种方法即在Lenet-5 提取特征后,用SVM 预测获得结果。在构造的Lenet-5 卷积神经网络结构中,两层全连接层的输入都是一个向量。向量是由Lenet-5 的特征提取器所提取到的特征,相比而言对样本的其它变换方法更加科学,因而更不容易出现过拟合,还可以降低训练维数。使用SVM 的优势在于能够解决小样本、高维度以及卷积神经网络容易出现局部极小值的问题。两者优势互补,有效减少计算复杂性,加快训练[12]。本文选取第一层全连接输出、长度为512 的特征向量,而原来的样本维数是28×28=784,起到减少训练时间的作用。对于印刷体数字识别十分类问题,SVM 依旧采取一对一策略,以二分类器的结果集成获得最终多分类结果,核函数采用线性核。具体训练步骤如图4 所示。
Fig.4 The specific steps of CNN feature extraction and SVM training图4 CNN 特征提取并用SVM 训练具体步骤
该方法达到的平均准确率为99.75%,与第二种方法微调的准确率几近相同,但不同的是其平均训练时间为0.900 2s,远远小于后者,当输入测试样本时,测试时间也仅为0.303 3s。这样的反应速度能够决定发票识别系统的实时性,再结合其准确度高、鲁棒性好的优势,符合系统既定目标。经过分析发现,在小样本训练集的情况下,这种方法优势更加明显,且特征提取更加科学,能在SVM 中发挥重要作用。
本文主要实现并比较了3 种运用在发票数字识别上的迁移学习算法。在工作前期搜集发票图片,进行一系列预处理步骤,获取到用于训练的发票数字数据集,高可靠度在一定程度上提高了数字识别效率。此外,经过大量测试发现,Tradaboost 算法准确率略低于其它方法;Lenet-5的微调算法准确率高,但训练时间和识别时间较长。而运用卷积神经网络Lenet-5 提取发票数字的特征并用于SVM进行训练的方法,其准确度高、稳定性和实时性好,具有良好识别效果,这种算法适合用来构建一套完整可靠的发票数字识别系统。本实验灵活运用了各种适用于小样本数据集的迁移学习方法,在训练集样本数量较小的情况下,结果已经较优。下一步将扩大训练集,使模型具有较好稳定性和更高准确率。