,
(武汉理工大学 理学院,武汉 430070)
手写数字识别在教育、邮政、银行以及商业等诸多领域有着重要的应用。目前研究者们提出了许多手写数字识别的方法,如多尺度特征和神经网络相融合的方法[1]、基于原型生成技术的方法[2]、基于AP和BP神经网络的方法[3]、基于概率测度支持向量机(support vector machine,SVM)的方法[4]等,但是上述方法对特征的表达能力不足,容易受到外界环境的影响,不能达到高识别率的要求。
近年来,卷积神经网络(convolutional neural network,CNN)在手写数字识别方面取得了很好的表现,它对图像识别具有自动提取特征的能力,避免了传统识别方法中复杂的特征提取和数据重建的过程;它的局部感受野、权值共享和下采样特性保证了图像对位移、缩放和扭曲的鲁棒性。从功能上CNN可以看作是特征提取器与分类器的结合体,深层结构和大量的学习参数决定了CNN是很好的特征提取器。CNN在算法和结构上与BP神经网络都比较相似,因此具有与BP神经网络相同的缺点,如训练时间长、训练可能收敛到局部最优、容易出现过拟合现象等。为了使CNN变得更加完善、识别效果更好,近来不少学者对CNN提出了结构改进和算法优化的策略。文献[5]提出一种基于暹罗网络的深度神经网络模型的手写字符识别方法,识别率达到98%,但是该模型没有很好地获取样本的差异性特征。文献[6]提出一种二进制CNN深度学习模型用于行人再识别,并取得了很好地识别效果,但该模型不能很好地学习样本的高级特征。文献[7]提出一种多通道输入的CNN改进方法。在进行网络训练之前,先对输入图像进行多尺度超像素分割,得到3个通道的输入,再将3个通道的信息输入网络进行训练。实验证明,CNN的多通道改进方法在图像识别、图像匹配等方面效果明显。文献[8]在利用CNN进行图像识别时,提出将卷积核设定为加权PCA矩阵的形式,完成隐层神经元之间的映射,充分利用每层的映射结果,通过生成码本的方式产生最终的特征向量。传统CNN在完成特征提取后,多采用RBF或softmax分类器进行分类识别,但随着SVM、稀疏表示和流形学习等浅层分类器的不断发展,它们的分类性能也有了很大的提高,因此研究者将CNN模型与性能更优的分类器进行结合。文献[9]提出将CNN与 SVM相结合的方法进行手写数字识别,通过在MNIST数据集上的实验证明了CNN分类层的分类能力不如一些传统的分类器。文献[10]提出一种CNN层间特征融合的方法并与流形分类器相结合解决年龄识别问题。
鉴于此,本文以试卷卷头手写分数为例,提出一种基于改进CNN的算法(CNN-1)来研究手写数字识别问题。先通过多层特征融合和混合采样的方式,充分提取图像特征信息;再对训练算法进行改进,提高网络的训练速度,减少识别所需时间;最后通过SVM分类器进行分类识别,提高识别率。实验结果表明,该算法有效的减少了训练时间,提高了手写数字的识别率。
试卷卷头手写分数识别的首要环节是通过预处理获取单个手写分数字符。它的具体步骤包括灰度化、图像倾斜矫正、手写分数区域提取、二值化、去框线、去噪声、字符分割、归一化等,主要过程是手写分数区域的提取和字符分割。
主要预处理过程方法如下。
(1)手写分数区域的提取。鉴于手写分数区域是表格框线结构,所以采用Hough变换[11]检测手写分数区域。提取手写分数区域时,考虑到书写随意性导致的字符出分数栏下框线的情况,需提取手写分数出下框线部分的区域,保留字符信息。
(2)字符分割。字符分割分为每题分数的分割和两位分数的分割,对于每题分数的分割选择与垂直框线相同的位置进行分割。由于教师书写的随意性,两位手写分数存在粘连和未粘连的情形。对于未粘连分数,采用连通域分割法[12];对于粘连的分数,采用改进的滴水算法[13],该算法首先是对字符的笔划粘连部分利用距离变换提取中心线,然后计算字符笔划的倾斜角度来指导水滴在中心线上端和下端的渗漏方向,最终形成一条分割路径,实现粘连字符的分割。
其它预处理过程方法如下。
(1)灰度化、二值化、归一化。对原图像RGB三个分量加权平均得到灰度图像。采用全局阈值的Ostu算法实现最佳阈值T的自动选取,进行二值化处理。为了增加特征提取的准确性,将分割完成后的字符图像统一大小归一化到32×32像素。
(2)图像倾斜矫正、去框线、去噪声。由于人为操作等因素,通过摄像头获取试卷卷头图像时可能存在一定的倾斜,采用Hough变换检测直线并调整倾斜。同时检测手写分数区域的水平框线和垂直框线,通过滤波去除图像框线。框线去除后,与框线存在粘连的字符会在粘连处发生断裂,根据框线与字符在粘连处的行值和列值相等的特点对断裂字符进行补充。对于手写分数区域离散噪声点的消除,求待测像素f(x,y)周围8个像素的平均值a,若|f(x,y)-a|的值大于或等于127.5,则该点是噪声点,将其值设置为255,若小于127.5,则保持原值不变。
如图1所示,典型的CNN结构主要由输入层、卷积层(C1、C3、C5)、池化层或下采样层(S2、S4)、全连接层(F层)和输出层组成。
图1 典型的卷积神经网络结构图
CNN通过“卷积+下采样”的结构进行特征提取。输入层为单个手写数字图像T,用Xi表示网络第i层的特征图(X0=T)。若Xi为卷积层,则Xi表示为:
Xi=f(Xi-1*Ki+bi)
(1)
其中Ki为可训练的卷积核,bi为偏置,“*”表示卷积运算,f(x)为激活函数。
常用的激活函数有sigmoid函数、tanh函数和ReLu函数。本文选用ReLu函数[14]作为卷积层的激活函数,其表达式为:
f(x)=max(0,x)
(2)
ReLu函数较其它激活函数的优点是:(1)它使网络一部分神经元的输出为0,从而使网络具有一定的稀疏性、减少计算复杂度;(2)使网络具有更强的分类能力,减小了参数间的相互依懒性,缓解了过拟合问题的发生;(3)它的导数只为0或1,在误差反向传播时较少出现梯度消失。
下采样层是对卷积层得到的每个特征图中n*n区域内的像素进行采样操作,使特征图的尺寸减小。常见的采样操作有均值采样和最大值采样。若Xi为下采样层,则均值采样和最大值采样表达式分别为:
Xi=f(WiPmean(Xi-1)+bi)
(3)
Xi=f(WiPmax(Xi-1)+bi)
(4)
其中:Pmean(x)、Pmax(x)分别表示均值采样操作和最大值采样操作,Wi为权值,bi为偏置。
下采样的主要作用是:(1)在保留原始特征信息的前提下,对特征图进行降维,避免陷入维数灾难,并且对平移、旋转等变形具有很好的鲁棒性;(2)对特征图进行压缩,降低计算复杂度。
本文对CNN中“卷积+下采样”的图像特征提取方式进行以下两个方面的改进:
(1)传统CNN是图像经过一层层的映射,映射到最后只将输出层作为特征提取结果,这样在中间层就会丢失很多重要的图像特征,从而影响识别率。本文受Wang等[10]层间特征融合思想的启发,在输出图像特征提取结果时,不仅仅只采用最后一层的输出结果,而是对输入图像在网络中每一层的映射结果都进行输出,再利用主成分分析(Principal Component Analysis,PCA)法[15]对提取的全部输出特征进行降维处理,将其融合为多层深度特征。
(2)在下采样过程中通过引入均值采样和最大值采样相结合的方式(混合采样)来增加采样层的多样性。这种方式可以兼顾到均值采样和最大值采样获得的特征值,从而提取更丰富的图像特征,稳定性较高,混合采样表达式为:
(5)
Xi=f(WiTi+bi)
(6)
通过对特征提取方式的改进来弥补原来单一的输出层和采样层特征提取的不足,实现图像特征的充分提取与融合,改进的CNN特征提取结构,如图2所示。
图2 改进的CNN特征提取结构图
卷积神经网络的训练过程采用反向传播(BP)算法,CNN通过正向计算和反向传播,不断调整权值和阈值使网络的均方误差函数不断减小,直至达到网络可以接受的精度要求。但是BP算法存在一些缺陷,如训练效率不高、训练时间长、容易出现过拟合现象;训练过程振荡、收敛速度慢、易陷入局部最优等。因此本文采用以下方法克服BP算法在网络训练过程中存在的缺陷:
(1)在全连接层添加dropout[16]随机隐退。在网络训练过程中,随机的将一部分神经元的输出值以概率P设置为0,减少模型参数,简化模型,可以有效的防止过拟合现象,提高网络泛化能力。
(2)采用增加动量项的梯度下降法避免网络陷入局部最优。由于BP算法在权值调整过程中,只按照t时刻的误差梯度方向调整,没有考虑到t-1时刻的误差梯度方向,从而在训练过程中出现动荡、收敛速度慢等现象。为此,在权值调整公式中通过增加动量项来反映权值调整经验的积累,含有动量项的权值调整[17]公式为:
ΔWij(t)=ηδipj+αΔWij(t-1)
(7)
其中α为动量因子(0<α<1),η为学习速率(0<η<1),δi为误差项,pj为节点的输出,ΔWij(t)为第t次训练后权值的调整量。从(7)式中可以看出,增加动量项的作用是将前一次的权值调整量取一部分迭加到本次的权值调整量中,避免出现局部最优。
(3)学习速率自适应调整策略加快网络收敛速度。BP算法收敛速度慢的一个重要原因是学习速率选择不当,选择合适的学习速率,可以加快网络的训练速度。本文通过学习速率自适应调整策略,动态改变学习速率,使学习速率能够根据误差的变化趋势自适应的调整大小。将(7)式中的学习速率η改进为以t为变量的时间序列函数,则自适应学习速率η的调整公式为:
(8)
其中β1、β2分别为学习速率增加和减小的比例因子(β1>1、0<β2<1),ξ为允许反弹误差系数(ξ>1),E(t)为网络误差。经过一次权值调整之后,如果网络误差减小,则在下次调整时可以增加学习速率,从而加快网络收敛速度;如果网络误差增大且大于前一次误差的ξ倍时则需要减小学习速率,其它情况则保持学习速率不变。
本文算法分为网络训练和图像识别两部分,网络训练流程如图3所示。
图3 网络训练流程图
主要算法步骤如下。
(1)将训练样本图片进行预处理后输入改进的卷积神经网络;
(2)用符合高斯分布的小随机数对网络中的连接权值、阈值进行初始化,并设定精度控制参数;
(3)逐层计算网络各层的输出值:
a(l)=f(z(l))
(9)
z(l)=W(l)a(l-1)+b(l)
(10)
其中a(l)表示第l层的输出值,z(l)表示第l层的激活值,f(x)为激活函数,W(l)为第l层的权值,b(l)为第l层的偏置;
(4)计算各网络层的残差δ(l):
(11)
其中y为目标输出值,f′(x)为激活函数的导数;
(5)利用增加动量项的梯度下降法对网络参数权值W和偏置b进行微调,公式如下:
(12)
其中ΔWij为权值变化量,Δbi为偏置变化量;
(6)更新训练样本,并判断是否达到要求的网络精度或迭代次数。若达到,则网络训练完毕;若没有达到,则继续之前的步骤,反复迭代训练网络参数,直到满足要求;
(7)将测试样本图片进行预处理后输入已经训练好的网络中,并由SVM分类器得出分类结果。
手写体数字识别是一个多分类问题,包含0到9这10个数字,常用的SVM多分类方法有“一对一”、“一对多”和有向无环图(DAG)法,本文选用SVM一对一多分类法。
在训练i,j两类样本间的分类器时,需要解决如下最优化问题:
(13)
选取适当的核函数K(x,x)=(φ(x),φ(x)),可以使SVM在高维核空间中通过分类函数将样本进行线性分类。常用的核函数有:线性核函数、多项式核函数、sigmoid核函数、RBF核函数等,本文选用RBF核作为SVM分类器的核函数:
(14)
采用“投票法”进行类别的判断:对待测样本x,依次用45个分类函数进行判别。i,j两类间的最优分类函数为f(x)=sgn((wij)Tφ(x)+bij),若f(x)≥0,则i类得一票;反之,则j类得一票。当遍历完所有分类函数后,根据得票数来确定待测样本x所属的类别。
本文算法计算量主要来源于CNN的图像卷积过程,图像尺寸、卷积核的数量与大小、卷积层的数量等因素均会影响算法的计算速度。
单个卷积核对一幅图像进行卷积操作计算量为:
(15)
其中kij表示大小为m×n的卷积核,T表示大小为W×K的输入图像。
CNN通常采用多个卷积层以及各层采用不同数量的卷积核来提取输入图像的不同特征,当卷积层数量和卷积核数量增加时,计算量也会增加。因此,CNN对输入图像进行卷积操作计算量为:
(16)
其中:P表示卷积层数量,Q表示卷积核数量。
为了验证算法的性能,实验分为两部分:在自制试卷卷头手写分数数据集上进行研究性实验和在MNIST数据集上进行验证性实验。实验环境为Windows 10操作系统,仿真平台为MATLAB R2014a,
各种算法的实验结果均为运行10次取平均值。
为了提高识别率和保证较好的识别效果,结合文献[18]中的经验参数和多次实验结果,实验参数设为:动量因子α=0.5,初始自适应学习速率η=0.01,学习速率增加的比例因子β1=1.05,学习速率减小的比例因子β2=0.7,允许反弹误差系数ξ=1.04,惩罚因子C=128,核参数δ=0.2。
实验是在网络的不同迭代次数下,通过识别率和运行时间(训练时间和测试时间)来评价算法的性能。识别率计算公式如下:
(17)
其中:nc为测试时正确识别的样本数,N为测试时识别的样本总数。
实验1 为了研究算法的性能,进行自制样本集试卷卷头的手写分数识别。首先通过摄像头获取试卷卷头样本图像并对其进行预处理得到单个手写分数样本集。预处理后的样本大小为32×32,部分预处理及样本集图像如图4(a)-(h)所示。
图4 部分预处理和样本集图像
本实验采用2 000张图片作为训练样本,1 000张图片作为测试样本。为了探究不同的采样操作和dropout层对实验的影响,在本文算法(CNN-1)其它件都相同的情况下,分别在采样层采用均值采样(CNN-2)和最大值采样(CNN-3),在采样层采用混合采样但在全连接层不添加dropout (CNN-4),将以上方法进行对比实验,实验结果如表1和图5所示。
表1 几种不同方法下的实验结果比较
图5 不同算法的识别结果对比图
由表1和图5的结果可知: CNN-1、CNN-2、CNN-3的运行时间相差不多,但CNN-1的识别率却明显高于CNN-2和CNN-3,说明混合采样优于均值采样和最大值采样,可以更加充分的获取图像特征信息,提高识别率。实验时设置CNN-1中dropout层的dropout_ratio值为0.5,即经过dropout层后每个输出节点的值都以50%的概率置为0,CNN-4较CNN-1没有在全连接层添加dropout随机隐退,识别率比CNN-1低0.12%,运行时间比CNN-1多16.2s,说明dropout层对本实验的识别效果有一定的贡献。
由于不同的核函数和分类方法具有不同的适应性和识别效果,因此选用不同的多分类方法和核函数可以构造不同的SVM分类器。为了研究SVM多分类方法和核函数对识别率的影响,采用几种常用的多分类方法和核函数进行对比实验,结果如表2所示。
从表2中可以看出:不同多分类方法及核函数的选择对识别率和运行时间都有一定的影响。对于分类方法来说,采用一对一多分类方法比采用一对多和DAG时的识别率要高,而采用一对多和DAG分类方法的识别率相差不大,在运行时间上一对一多分类方法也具有一定的优势。对于同种分类方法不同的核函数来说,采用RBF核函数时的识别率最高,并且明显优于其它三种核函数。所以SVM采用一对一多分类法和RBF核函数相结合的策略识别效果最好。
表2 基于不同多分类方法与核函数的实验结果对比
实验2 为了证明算法的普适性,在MNIST数据集上进行验证性实验。MNIST数据集由手写数字0到9的图像组成,包含6万张训练样本和1万张测试样本,而且每张图像都经过尺度归一化,大小均为28×28像素。下面将CNN-1算法与LeNet-5、文献[9]的算法进行对比实验,实验结果如表3和图6所示。
表3 CNN-1与LeNet-5、文献[9]算法
图6 不同算法在MNIST上的识别结果对比图
LeNet-5与文献[9]算法的区别在于分类层分别使用softmax和SVM分类器,由表3可知它们的运行时间分别为49.43min和37.14min,使用SVM分类器的时间明显比softmax的短。这是因为对于softmax分类器来说,当某类的概率大于0.9时就意味着分类正确,但是损失函数会继续计算,直到概率接近于1,这样会增加运行时间;SVM分类器则更专注于分类错误的样本,对已经分类正确的样本不再处理,从而能大幅度的提高训练速度和识别率。由表3和图6可知,CNN-1在文献[9]算法的基础上对网络结构和训练算法做的针对性改进,提高了识别率也减少了运行时间,更有利于解决手写数字的识别问题。实验证明:CNN-1算法在MNIST数据集上相比其它算法同样具有优越性,从而验证了CNN-1算法的普适性和有效性。
本文针对试卷卷头的手写分数识别问题提出了改进卷积神经网络的手写数字识别算法。分别从网络特征提取方法和训练算法上对传统卷积神经网络进行了改进,通过多层融合深度特征和混合采样层充分提取图像的特征和信息,增加动量项和自适应学习速率的方式来减小训练时间、提高训练速度,采用SVM 分类器进行分类识别,提高识别率。在MNIST数据集上进行验证性实验,实验结果表明该算法有效的提高了网络的训练速度和识别率,减少了运行时间。下一步工作将考虑如何通过多尺度池化的思想进一步改进卷积神经网络,使网络能够接受任意尺寸的输入图像,同时保持较好的识别效果和时效性。