cnn的英文字符识别系统的设计与实现(源码)

近年来,模式识别、深度学习成为热门研究课题之一。卷积神经网络作为深度学习的一种模型,在手写字符识别上的运用已经比较成熟。本系统结合了图像处理和神经网络的知识,以26个大写字母作为识别体,对采集的英文手写体文本图像进行识别。首先通过文本定位,字符分割、字符大小归一等操作,得到单张英文字符图像。然后利用卷积神经网络的理论基础,设计搭建并训练了一个具有两层卷积层、一个全连接层的神经网络,网络在测试集上的识别率达到90.04%。系统对125个样本进行了测试,其中利用软件生成的手写图像样本识别率达到87.65%,利用画图软件写的图像样本识别率达到83.46%,利用手机拍摄的手写图像样本识别率达到77.32%。关键字CNN; 图像处理; 手写英文; 字符识别The Design and Implementation of English Character Recognition System Based on CNNStudent majoring in computer science and technology SHEN Xue-lian Tutor ZHU Shu-xinAbstract: In recent years,the pattern recognition and the deep learning have become one of the hot research topics.Convolutional Neural Net,as a model of deep learning,has been relatively mature on the application of handwriting character recognition.This system combining the knowledge of image processing with neural network,identifies the English handwriting text image acquired,with 26 capital letters as identifications.Firstly, through text location, character segmentation and size to a first- *好棒文|www.hbsrm.com +Q: @351916072@ 
class operation,I acquired single character image.Then making use of the theoretical basis of CNN, I designed and trained a neural network with two convolutional layers and a fully connected layer.Recognition rate of the neural network reached 90.04% on the test set.Experiments for 125 samples were tested, which recognition rate of handwriting image samples generated by software the reached 87.65%, recognition rate of handwriting image samples written in drawing software reached 83.46%, recognition rate of handwriting image samples taken with my cell phone reached 77.32%.1 绪论1.1 研究背景及意义生活中,纸质版文档不方便携带且易丢失,利用文字识别技术将其转换为数字信息存储在电脑,存储空间占比小,有即时取用的优点。光学字符识别(Optical Character Recognition,OCR)技术能够通过计算机自动进行信息录入,相比人工录入,节省了大量人力和时间,具有很高的研究价值。OCR技术简单说就是把图像上的文字转化为可编辑文本的过程。传统的OCR识别主要利用PCA、LBP等算法对图像进行特征提取,但是人工提取特征操作过程十分繁琐。近年来,深度学习在语音、图像、自然环境处理等领域取得了非常突出的成绩,成为目前最引人瞩目的技术热点之一。深度学习的模型之一卷积神经网络(Convolutional Neural Net,CNN)可以做到自动提取图像特征,这一特点大大改进了OCR技术。目前已经有不少基于CNN的字符识别产品,比如金山OCR可快速将PDF图像转换为可编辑文本。1.2 国内外研究情况1.2.1 国内研究状况2013年,百度成立深度学习研究院[],是目前国内互联网企业第一个把深度学习提到核心技术创新的互联网企业。该企业在3D视觉、人机交互、语音识别、图像识别、自动驾驶等方面均已推出自己的产品。2014年,搜狗公司的搜索事业部在Rank组正式成立了DL项目团队,专门研究如何应用深度学习技术改进网页排序的相关性问题,构建深度神经网络(Deep Neural Net,DNN)模型,将其应用到搜狗网页搜索的LTR排序模型,最终取得了显著的排序效果改进。美团点评将深度学习技术应用于文字识别、目标检测、图像分类、图像质量排序等。基于深度学习的OCR在美团点评中针对手机拍摄的照片进行文字信息提取和识别。汉王科技是以模式识别为核心技术的智能交互软件公司,该公司研发了多种基于图像处理和神经网络的产品,其中汉王PDF OCR广泛应用于我们的学习生活中。1.2.2 国外研究状况2006年,Geoffrey?Hinton[]用贪婪逐层预训练(greedy?layer-wise?pretraining)有效训练了一个深度信念网络。2009-2012年,瑞士人工智能实验室IDSIA的Jürgen?Schmidhuber[]带领研究小组研究发展了递归神经网络和深前馈神经网络。2012年6月,《纽约时报》报道了由著名的斯坦福大学的机器学习教授Andrew Ng[]和在大规模计算机系统方面的世界顶尖专家Jeff Dean[]共同主导的Google Brain项目,项目组利用深度神经网络(Deep Neural Networks,DNN)使系统自我训练发明或领悟了‘猫’的概念。俄罗斯的ABBYY[]软件公司,利用图像分割等技术,开发出的ABBYY FineReader拥有99.8%的识别准确率,OCR技术即刻能够识别文本,转换为几乎所有打印的文档类型,是目前文本识别软件中的佼佼者。2014年3月,Facebook的DeepFace[]项目基于深度学习方法用了9层的神经网络使得人脸识别技术的识别率已经达到了97.25%,十分接近人眼识别的准确率。2016年3月人工智能围棋比赛,由位于英国伦敦的谷歌旗下的团队开发的AlphaGo[]战胜了世界围棋冠军李世石,并以4:1的总比分获胜。AlphaGo的主要工作原理就是深度学习。2 开发工具与系统介绍本文采用MATLAB 2016b和Google Cloud 上的Windows Server。MATLAB是一种功能强大的计算工具,可以进行大量的矩阵运算、绘制复杂的函数和统计数据、实现各种各样的图像处理算法、创建具有实用性的用户界面、连接其他编程语言的程序等。MATLAB开发了功能强大的模块集和工具箱,这些工具是为了让用户使用MATLAB的函数和文件时更加方便,用户可以直接使用工具箱学习而不需要自己编写代码。还有数据样本的大量采集、数据库接口、概率统计、小波分析、信号处理、图像处理、系统辨识等,都在工具箱(Toolbox)家族中有了自己的一席之地。卷积神经网络的训练需要数量庞大的训练集来提取图像特征,因此对计算机配置要求较高。然而本机处理器为1.80 GHz,内存为4GB,配置比较低,最终本系统利用Google云服务的分支——谷歌计算引擎(Google Compute Engine,GCE)提供的Windows Server2012版服务器进行神经网络训练。 本系统利用图像处理和神经网络知识,以26个大写字母作为识别体,对采集的英文手写体文本图像进行识别。首先通过文本定位,字符分割、字符大小归一等操作,得到单张字符图像。然后基于CNN的理论基础设计搭建并训练了一个具有两层卷积层、一个全连接层的神经网络。最后利用训练好的神经网络对分割所得字符图像进行识别,完成了本次英文识别系统的设计与实现。技术路线图如图1所示。/图 1 技术路线图3 图像灰度化由于彩色图像信息量太大,为了提高计算机处理速度,本系统采用对灰度化图像进行处理的方法。系统直接调用img=rgb2gray(img)将RGB图像转化为灰度图,灰度化效果如图2所示。/图 2 灰度图4 图像分割图像分割指的是将图像中有用的特征部分提取出来,除去图像中无用的内容。4.1 文本定位本文采用基于梯度的阈值分割法。传统的阈值分割法都是基于图像的灰度直方图定一个全局阈值进行阈值分割,这样的方法对阈值的设定要求高而且灵活性较小。梯度图像可以更好地适应图像的变化,因此本系统采用在梯度图像上设置一个全局阈值进行图像分割的方法。文本定位具体实现过程如图3所示。/图3 文本定位实现过程图 文本定位效果如图4所示。/图4 文本定位图4.2 图像二值化图像二值化即将图像的每个像素点设置为0或者1,使整个图像呈现黑或白的视觉效果。二值化图像可以使字符分割更易确定数据边缘。系统直接调用函数img=im2bw(img)。二值化效果如图5所示。 / 图 5二值化图 4.2 字符分割方法常见的字符分割方法有垂直投影法和轮廓凹凸检测法。由于垂直投影法对于粘连字符的分割效果不太好,本系统采用轮廓凹凸检测来分割字符。轮廓凹凸检测法的主要思想是先找出图像中所有凹点,然后根据阈值来依次判断此凹点是否为切分点。字符分割具体实现过程如图6所示。/图6 字符分割实现过程图字符分割效果如图7所示。/图7 字符分割图4.3 字符大小归一由于分割出来的图像大小各不相同,而卷积神经网络的输入图像是n*n的形式,所以需要对分割图像进行大小归一。大小归一具体实现过程如图8所示。/图8 大小归一实现过程图4.3.1 滤波处理噪声对图像处理起着很大的作用。因此在进行其他的图像处理的操作之前,需要对图像进行去噪处理。图像滤波可以达到在尽可能保留图像细节特征的条件下对目标图像的噪声进行抑制。常见的图像滤波有均值滤波、中值滤波、高斯滤波。三种滤波处理效果如图9、图10、图11所示。/ / / 图9 均值滤波 图10 中值滤波 图 11 高斯滤波由上图可以看出,用均值滤波处理的实验效果图像十分模糊,削弱了数据,显然不适用。中值滤波和高斯滤波处理的图像比较清晰,但是由于后期还需要进行图像的放缩使图像大小归一,因此本系统选择高斯滤波进行数据加强。4.3.2字符大小归一边缘填充具体操作如下用一个sigma=1 的高斯滤波软化边缘进行数据加强;(2) 为了变成方形图像,需要对图像进行边缘填充,保留长边的长度,调整短边与长边一样,直接调用函数B = padarray(A,padsize,padval,direction)。其中A为输入图像,B为填充后的图像,padsize给出了给出了填充的行数和列数,通常用一个二维数组来表示。padval和direction分别表示填充方法和方向。在此次实验中采用img=padarray(image,A,post),在每一维的最后一个元素后进行零填充。填充效果如图12所示。/图12 填充图(3) 采用双三插值算法下采样到28*28。常见的插值算法有最临近插值算法、双线性内插值算法、双三次插值算法。其中最临近插值算法虽然速度快但会使缩小的图像严重失真,使放大的图像有严重的马赛克;双线性插值算法速度较快,但是对图像边缘处理的效果一般;双三次插值算法是一种相对于双线性插值来说更为复杂的插值方式,它可以得到更平滑的图像边缘,但是速度较慢。本系统采用图像处理效果最好的双三次插值算法将图像下采样到28*28大小。下采样具体实现过程如图13所示。/图13 下采样实现过程归一化效果如图14所示。/图14 归一化图5 神经网络5.1 神经网络简介神经细胞的结构是多个树突和一个长轴突[]。轴突和其他神经元的树突通过突触相连接,并传导神经脉冲。神经细胞结构如图15所示。/图15 神经细胞结构图人工神经元就是用一个数学模型简单模拟神经细胞[]。人工神经元模型如图16所示。/图16 神经元模型这是单个神经元的定义。神经网络就是把许多个这样的神经元相连接,形成一个网络当前神经元的输出作为下一层神经元的输入[]。神经网络可以有多种多样的拓扑结构。其中最简单的就是“多层全连接前向神经网络”。该网络第一层的神经元连接的输入是整个网络的输入,前一层的神经元的输出作为下一层神经元的输入。最后一层神经元的输出就是整个网络的输出。人工神经网络(Neural?Network,?NN)模型在四十年代被首次提出。在五、六十年代的时候,Rosenblatt[]建立了拥有输入层、输出层和一个隐藏层的单个神经网络,当时叫感知机。但是单个人工神经元无法解决计算异或的问题,于是产生了多个人工神经元网络[12]。但是对于这样的网络——多层感知机网络,当时的人们没有发现训练它的方法。直到?7、80?年代,人们发现了训练多层感知机网络的反向传播算法(BP)。神经网络的研究开始有了新的进展。5.2常见神经网络的分类5.2.1感知器神经网络最早出现的时候被称为感知器,分为单层感知器和多层感知器。单层感知器的结构非常简单,相当于用一个一元线性函数进行二分类。通过读取网络权值的训练,达到对一组输入矢量完成0或1的输出。多层感知器是在输入层和输出层中间加入隐层,解决了以前无法解决的异或问题,更多的层数也能让网络更能刻画现实情况,相当于用多个线性函数进行多分类。5.2.2 BP神经网络是一种按误差逆传播算法训练的多层前馈网络,有信息的正向传播和信息的的反向传播两个过程[]。RNN、DNN、CNN网络模型就是采用BP的变化形式。主要应用于函数逼近、模式识别、分类等方面。5.2.3 径向基神经网络RBF网络是一个包含输入、输出和一个隐层的3层网络。隐藏层的转换函数是局部响应的高斯函数,而其他前向网络的转换函数一般都是全局响应函数,因此RBF需要更多的神经元。主要应用于非线性函数回归、曲线拟合[]。6 CNN6.1 CNN的理论基础在数学模型中,卷积神经网络的结构与BP神经网络的结构一样,只是将权值换成了卷积滤波器。卷积滤波器相的作用就是利用这套权值从输入图像中提取特征。卷积神经网络是用一个小方阵的来获取图像的特征,方阵获取完整张图像的特征时就生成了一张特征图。当计算机看到一张图像(输入一张图像)时,它看的是一大堆像素值[15]。根据图像的分辨率和尺寸,它将看到一个?n*n*r?的数组(r指代的是?RGB?值),即有?n*n*r?个元素,每个元素对应了一个[0,255]的整数值,其描述了对应那一点的像素灰度[]。当计算机得到这一数组后,神经网络模型将输出描述一系列分类的概率的数字(比如80%?是猫、15%?是狗、5%?是鸟)。 卷积神经网络与全神经网络的不同之处在于它不是全连接的,输出层的神经元并非连接上全部输入,即只连接了输入图像的一个局部区域,提取局部特征。这样就使得权值变少了,需要调整的参数也就变少了。6.2 CNN的结构6.2.1典型结构LeNet5Yann?LeCun的杰作LeNet5是最早用于深度学习领域的卷积神经网络之一。其模型结构如图17所示。/图17 LeNet5模型LeNet5模型简介第一层输入层。卷积神经网络在对LeNet5接受32*32的图像结构输入。CNN的对输入图像的处理要求较高。具体要求如下所示。①数据归一化这里指归一到1-255的灰度图;②数据去均值这里指去除样本中非零的均值,提高识别率。第二层卷积层C1。输入图像通过6个5*5大小的滤波器,得到6个输入图像的不同特征图。第三层池化层S2。卷积层后边都会接一个用来降维的pooling层,增加系统的鲁棒性。第四层卷积层C3。与C1类似,不过C1的滤波器是二维的,这里的滤波器是三维的。第五层池化层S4。与之前类似。第六层卷积层(全连接)。这里有120个卷积核,是全连接的。第七层全连接层。上一层输出的神经元连接下一层全部输入。第八层输出层。用一个分类器来对输出的所有类别进行分类,得到的数值越大,识别结果属于该类的概率越大。6.2.2系统CNN结构的构建本文采用类似LeNet5的形式构建模型。CNN模型结构如图18所示。/图18 CNN模型images:输入的图像是matlab格式化过的,归一化到0-255的范围内,用一个1*784的矩阵存储,所以首先要将图像reshape为28*28。BatchSize的大小设置的为150,所以CNN模型的输入是一个28*28*1*150的矩阵。Wc1,bc1第一层卷积的权重和偏置。一共10个filter,每个大小为5*5。activations1通过第一层卷积层的10个filter得到的10个特征图,即卷积层1的输出为(28-5+1)*(28-5+1)*10*150,其中150是Batchsize的大小。activationsPooled1将第一层卷积后的得到的特征图进行采样,得到池化降维的特征图,因此pooling1的输出为(24/2)*(24/2)*10*150。Wc2,bc2第二层卷积的权重和偏置。由于pooling1的输出为150个三维矩阵,所以第二层卷积层的滤波器也应该是三维的。一共设置了10个filter,每个大小为5*5*10。activations2通过第二层卷积层的10个filter得到10个特征图,即卷积层2的输出为(12-5+1)*(12-5+1)*10*150,其中150是Batchsize的大小。activationsPooled2同activationsPooled1。Flat_activationsPooled2第二层卷积结束之后,要把一张image对应的所有特征图reshape成一列,那么这一列的大小就是4*4*10=160,所以reshape后得到一个160*150的矩阵。Wd,bdsoftmax层的权重和偏置。probssoftmax层对输入图像进行分类预测,该层大小为26*150,每一列对应一张图像的所有特征,矩阵的26行表示26个类别,第i行代表该张图像属于第i类的概率,概率越大可能性越大。6.3 CNN的训练6.3.1样本收集系统初期采用chars74k数据集进行训练,26个字符,每个字符1016个印刷体样本、55个手写体样本,加上自己生成的图像,每个字符有2000个样本。将每张RGB图像都转换成28*28的图像格式,训练时全部加载然后调用。但由于样本量不足,训练所得准确率只能达到70%左右。2017年4月,Nist官方发布了Emnist数据集,该数据集源自Nist Special Database 19,其中包含了数字、大小写字母的手写体,与手写数字mnist数据集结构相似,全被转换成28*28矩阵的形式,以二进制的形式存储。其中26个手写字母一共有145600样本,训练集有124800样本,测试集20800个样本。部分数据集如图19所示。/图19 数据集6.3.2 激活函数激活函数的作用是用来加入非线性因素,解决线性模型所不能解决的问题,实现非线性分类。若不用激活函数,每一层的输出都是关于上一层输入的线性函数,容易验证,无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层的效果其实是相当的。然而在实际情况中,特别是多分类问题,通过模型得到的数据,常常是非线性的无规律样本点,然而要把这些样本点按类别区分开时,用线性分类器是无法实现的。常见的激活函数有传统Sigmoid系激活函数、近似生物神经激活函数等。(1) 传统Sigmoid系激活函数传统sigmoid系激活函数中最常用的两个激活函数就是Logistic-Sigmoid函数和Tanh-Sigmoid函数,这类函数在中央区表现很好,但由于两端平缓,导数趋于0,使得对两端区信号增益小,甚至造成梯度消失。①Logistic-Sigmoid函数公式 (公式6-1)②Tanh-Sigmoid函数公式  (公式6-2)其中 ,其导数形式为 (公式6-3)传统Sigmoid系激活函数的图像如图20所示。/图 20 传统sigmoid系激活函数图像(2) 近似生物神经激活函数此函数模型中两个常用函数为softmax函数和relu函数,相对于sigmoid系函数来说,有三点变化1)梯度不饱和。这使得在反向传播的过程中,不会出现梯度消失的问题,加快收敛速度。2)单侧抑制。拥有更宽广的兴奋区。3)稀疏激活性。①softmax函数公式 .其中(m个输入,n个输出) (公式6-4)其函数的导数形式 (公式6-5)②relu函数公式  (公式6-6)其函数的导数形式为 (公式6-7)使用ReLU得到的损失函数收敛速度会比sigmoid/tanh快很多。因此激活函数是线性激活函数,只需要一个阈值就可以得到激活值。但是该激活函数训练的时候十分脆弱,当一个非常大的梯度流过ReLU神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。近似生物神经激活函数的图像如图21所示。/图 21 近似生物神经激活函数图像激活函数的选择对神经网络的收敛快慢影响很大,本文以一次迭代为基准,针对三种激活函数的表现做了测试。具体结果如表1所示。表1 激活函数对比表激活函数准确率CNN运行时间cnnConvolve4D运行时间cnnPool运行时间Sigmoid0.8501442704.806 s1244.090 s119.806 sTanh0.6872602736.063 s1239.931 s121.265sRelu0.0523562814.624 s1268.276 s118.908 s由上表可以看出,ReLU激活函数比较脆弱,对梯度变化大小很敏感,不稳定。本文采用相对稳定且识别率较高的激活函数Sigmoid。6.3.3 损失函数机器学习的过程是,给出一定量的输入数据,算法通过对输入数据进行一系列特征提取,最终会形成一个对关于输入数据各部分特征的参数的估计函数。当新数据输入时,我们可以根据估计函数得到一个新估计结果。机器学习过程如图22所示。/图22 机器学习过程经训练得到的模型需要一个机制去评判模型的好坏,即我们需要判断估计函数是否合理。我们称评价估计函数好坏的函数为损失函数(Loss Function)或者代价函数(Cost Function)。均方误差(Mean Squared Error,MSE)与交叉熵误差(Cross Entropy Error,CEE)是两种常见的损失函数.使用MSE的典型代表是线性回归,使用CEE的代表是逻辑回归。一般来说,线性回归是真回归,使用的激活函数为identical;逻辑回归是分类器,使用的激活函数为sigmiod。(1) 均方误差MSE该误差函数的一般形式为  (公式6-8)其中a()表示实际输出的值,y表示我们期望得到的值。当实际值a与期望值y差距大的时候,代价就越大。该函数在梯度更新时公式为 (公式6-9)  (公式6-10) (2) 交叉熵误差CCE① Logistic-CCE该误差函数的一般形式为  (公式6-11)但是在实际情况下,我们是不知道y的分布的,只知道其估计值,即实际输出的值a。当有n个样本时,我们得到用a来表示y的平均交叉熵函数形式 (公式6-12)该函数在梯度更新时公式为  (公式6-13)由于sigmoid两段平缓的性质,其两侧的导数会逐渐趋于0,造成饱和现象。而均方误差函数MSE在梯度更新时有项,这使得Cost比较大时参数更新速度反而非常慢。但是CEE不会受到饱和性质的影响,当Cost越大,学习得越快,权值等参数更新越快。Sigmoid函数将输入映射为一个处于0到1(或者[-1,1])之间的小数,我们将这个小数解读为得到想要结果的概率。然后根据事先设定好的阈值进行分类,常常进行用来二分类。②Softmax-CCE此类交叉熵适用于多分类回归,有多少种类别就有多少个输出神经元。Softmax函数实质是 Logistic-Sigmoid函数的原型,此函数用于将m个输入(a1,a2,a3...)映射成n个输出(b1,b2,b3...),其中bi是一个0到1的常数,常常被理解为概率值,可以用bi的大小来决定多分类问题。其实二分类回归只是多分类的一种。经过以上分析,本系统采用多分类逻辑回归(Softmax-CCE),取权值最大的bi对应的类别作为预测值。6.3.4 梯度下降学习最优参数梯度下降法,是指利用损失函数和参数之间的负梯度关系不断迭代来找到新的下降方向,每次迭代能使待优化的目标函数逐步减小。梯度下降的简单形式。其中是学习速率,是的梯度。梯度下降具体流程①对参数w,b赋值,这个值是随机初始化的。②改变参数的值,使损失函数E(w)按照梯度下降的方向逐步减少。梯度下降不能保证到达全局最小点,不同的初始点会有不同的终点,图23、图24分别表示了全局最小和局部最小。/ /图23 全局最优点 图24 局部最优点“最优化”就是要找到使损失函数降到尽可能最小的参数值。由于损失函数的下降方向是未知的,如何找到最快的下降方向成为关键问题。实验中我利用对损失函数求导的方式来进行参数更新,即梯度下降法。常见的梯度法有BGD,SGD,MSGD等。(1) BGD即batch gradient descent.指在训练过程中,每次迭代都要调用训练集的所有内容。利用已经初始化的参数对训练集中的每一个数据输入都有一个估计值ai输出,然后估计值与真实输出的值yi进行比较计算出一个误差,最后将所有训练集的误差统计起来得到一个平均误差,作为更新参数梯度下降的依据。此方法的公式为  (公式6-14)此方法的优缺点优点由全数据集确定的方向更能代表总体样本,可以更准确得朝极值方向运动,在样本不多的情况下,这个方法可以较快收敛,而且不需要对学习速率进行更改。缺点当数据集量较大时,由于内存限制,一次性载入所有数据不太可行,运行速度会越来越慢。(2) SGD随机梯度下降(Stochastic Gradient Descent,SGD)是梯度下降的batch版本, 是指在训练过程中,采用随机抽取一定量样本进行迭代。即利用已经初始化的参数对训练集中的每一个batch的数据输入有一个估计值ai输出,然后估计值与实际输出的值yi进行比较计算出一个误差,以此作为更新参数梯度下降的依据。此方法的公式为 (公式6-15)其中为学习效率,为在t时刻的梯度,m为每次更新的数量。此方法的优缺点优点当有大批量数据进行训练的时候,用整个数据集更新耗时太长。利用batch可以以较快的速度收敛。缺点由于每次选择的batch是随机的,梯度受batch的影响比较大,相对于BGD来说会有比较大的误差,不能反映真实的梯度情况;学习速率需要逐渐减小,不然模型无法收敛。不同的BatchSize会影响神经网络的表现,本系统针对BatchSize的大小做了测试,具体结果如表2所示。表2 BatchSize大小对比表BatchSize准确率CNN运行时间cnnConvolve4D运行时间cnnPool运行时间500.8561062573.694 s 1174.072 s115.828 s1000.8466832756.649 s1259.610 s124.098 s1500.8501442704.806 s1244.090 s119.806 s2000.8469712742.568 s1246.393 s122.245 s通过以上表格得知,当BatchSize=150时,识别率最高,运行时间相对来说多一点,但是差别不大。本系统最终采用BatchSize=150作为实验参数。(3) MSGD前面介绍的SGD法中,因为更新方向依赖于每次的batch,所以梯度含有较大噪声,使更新很不稳定。Momentum的引入较好得缓解了这个问题。Momentum即动量(或称冲量),它模拟物体运动的惯性,即更新时在一定程度上保持之前的更新方向,可以使那些因学习率太大而来回摆动的参数,梯度前后抵消,从而阻止发散。与此同时利用batch找到梯度更新方向。两者结合起来,既增加了稳定性,又能使学习过程加快,还有一定的摆脱局部最优解的能力。此方法的公式为 (公式6-16)由于BGD不适合大数据训练,本系统针对SGD、MSGD和有学习率调整的MSGD做了测试,优化方法对比具体结果如表3所示。 表3 优化方法对比表优化方法准确率CNN运行时间cnnConvolve4D运行时间cnnPool运行时间SGD0.4808652731.937s1249.371s 122.074sMSGD0.8401443112.298 s1410.270 s137.674 sMSGD+学习率调整0.8514902704.806 s1244.090 s119.806 s通过以上表格得知,SGD法运行到后面损失函数摆动很大,得到的准确率也比较低。相对来书有有参数调整的MSGD优化法比没有参数调整的MSGD法更好,而且运行时间也更短。6.3.5 权值更新卷积神经的权值更新公式与人工神经网络类似,通过前向传播、计算误差、反向传播三个过程来更新权值。(1)前向传播对于卷积层输出的特征图为  (公式6-17)其中表示第 层第 个特征图的输出,表示第特征图的第层第i个特征图的输入,表示第层特征图的集合,表示第 层第 个偏置值(2)误差计算即利用损失函数求出初始误差,本系统采用前文提到的softmax交叉熵公式 (公式6-18)使用softmax分类器,此方法可以检验第一遍计算的loss是否正确。由于本文有26个类别,初始概率都是1/26,softmax损失为-log(类别个数),即ln(26)=3.25809.(2)反向传播利用梯度下降法来更新权值主要就是利用损失函数关于参数的梯度(即灵敏度),所以权值更新的目标就是计算每一层的梯度,然后进行权值更新。求出误差关于输出值的变化率,即灵敏度 (公式6-19)其中z是关于参数w,b的函数 (公式6-20)每一层的灵敏度是不一样的 (公式6-21)对于参数中的偏置值b,由于  (公式6-22)所以由链式法则得 (公式6-23)进一步求得损失函数关于权值w的导数  (公式6-24)进行权值更新 (公式6-25)6.3.6 正则化当网络模型过于复杂,网络会过分拟合数据噪声,最后表现为在训练集上的误差很小,在测试集上的误差反而很大。为了防止过拟合,在得到损失函数之后,需要进行正则化。正则化是指对网络模型的参数添加先验,使模型复杂度较小。本系统以L2正则来防止过拟合,具体公式如下 (公式6-26)其中,对于正则项求导本系统在以一次迭代为基准,测试了神经网络在有正则项和无正则项的情况下的表现,具体情况如表4所示。表4 正则项的有无对比表迭代次数准确率CNN运行时间cnnConvolve4D运行时间cnnPool运行时间有0.8501442704.806 s1244.090 s119.806 s无0.8452883002.136 s1352.865 s133.586 s通过以上表格得知,在其他条件都一样的情况下,有正则项比无正则项的正确率更低,而且此次检验以迭代一次为准,当迭代次数不断增加,过拟合造成的误差会更加明显,两者的差距会更大。所以本系统采用了正则项。6.4 CNN的实验结果分析在一定范围内,随着迭代次数的增加,卷积神经网络表现会更好。本系统在epoch=5,10,20的情况下对CNN进行分析,具体结果如表5所示。表5 迭代次数对比表迭代次数准确率CNN运行时间cnnConvolve4D运行时间cnnPool运行时间 50.88548113245.572s6045.871s672.072s100.89042327353.644s12475.538s1220.081s150.89674240232.544s18231.723s1892.081s200.90038553837.194 s24590.072 s2423.471 s其中损失函数下降情况如图25损失函数下降图1、图26损失函数下降图2、图27损失函数下降图3、图28损失函数下降图4所示。/ / 图25 损失函数下降图1 图26 损失函数下降图2/ / 图27 损失函数下降图3 图28 损失函数下降图4以上结果显示,当迭代次数为20的时候,神经网络效果较好,本系统最后采用epoch=20的神经网络进行识别。7 系统实现与结果分析7.1系统实现本系统结合了图像处理和神经网络的知识,以26个大写字母作为识别体,对采集的英文手写体文本图像进行识别。首先通过文本定位,字符分割、字符大小归一等操作,得到单张字符图像。然后在对CNN的理论基础进行研究的基础上,设计搭建并训练了一个具有两层卷积层、一个全连接层的卷积神经网络,神经网络在测试集上的识别率达到90.04%。最后利用训练好的CNN对单张字符图像进行识别完成了英文字符识别系统的设计与实现。本系统在处理器为1.80 GHz,内存4GB的64位windows操作系统中运行,神经网络的训练在一个4核16G的windows服务器。神经网络训练集有124800样本,测试集20800个样本。图像识别中选用手写字体、在线字体生成器生成的字体等图像进行识别。识别最终使用125张样本图像进行识别。部分样本如图29所示。/图29 样本图像本系统的实现主要包括以下几个内容对PDF图像的预处理,将图像灰度化;图像分割,包括文本定位和字符分割,用到了基于梯度的阈值分割算法和利用凹凸检测结合阈值判断的分割算法,字符分割之前对图像进行二值化;字符大小归一,包括边缘填充和双三插值算法;卷积神经网络的搭建与调参优化。系统先对测试图像进行预处理,测试样本原图像如图30所示。系统对样本图像进行灰度化,灰度化图像如图31所示。接着系统对灰度化图像进行文本定位,文本定位图像如图32所示。然后系统对已定位图像进行二值化,二值化图像如图33所示。接着系统对二值化图像进行字符分割,分割图像如图34所示。最后系统对分割图像进行大小归一,归一化图像如图35所示。系统对归一化图像进行识别,识别结果如图36所示。将识别结果保存到可编辑文本,文本图像如图37所示。/ /图30 原图像 图31 灰度化图像/ /图32 文本定位图像 图33 二值化图像/ / 图34 字符分割图像 图35归一化图像/ / 图36 识别结果图像 图37 可编辑文本图像7.2 结果分析卷积神经网络在20800的测试样本集上的识别率达到90.04%,系统对125个样本进行了测试,其中生成的手写图像样本的识别率达到87.65%,用画图软件写的图像样本识别率达到83.46%,用手机拍摄的手写图像样本识别率达到77.32%。8 总结与展望此次毕业设计独立完成了基于英文字母的OCR识别,使我对图像处理和神经网络的了解更加深入,扩展了自己的知识面,也锻炼了自己的思考与编程能力。由于时间和精力有限,加上图像识别对计算机硬件的要求比较大,此次实验还可以进行进一步完善,主要包括此次实验对图像的要求比较高,对于噪声多、光线不均匀的图像识别分割效果较差,在图像处理方面可以更加完善;此次实验仅针对英文字符,若设备允许,可以对数字和英文都进行识别;对优化算法还可以做进一步研究,识别率还有提高的空间。致谢参考文献
目录
摘要 1
关键字 1
Abstract 1
Keywords 1
1 绪论 1
1.1 研究背景及意义 1
1.2 国内外研究情况 2
1.2.1 国内研究状况 2
1.2.2 国外研究状况 2
2 开发工具与系统介绍 2
3 图像灰度化 3
4 图像分割 4
4.1 文本定位 4
4.2 图像二值化 5
4.2 字符分割方法 5
4.3 字符大小归一 5
4.3.1 滤波处理 6
4.3.2 字符大小归一 6
5 神经网络 7
5.1 神经网络简介 7
5.2 常见神经网络的分类 8
5.2.1 感知器 8
5.2.2 BP神经网络 9
5.2.3 径向基神经网络 9
6 CNN 9
6.1 CNN的理论基础 9
6.2 CNN的结构 9
6.2.1 典型结构LeNet5 9
6.2.2 系统CNN结构的构建 10
6.3 CNN的训练 11
6.3.1 样本收集 11
6.3.2 激活函数 11
6.3.3 损失函数 13
6.3.4 梯度下降学习最优参数 14
6.3.5 权值更新 17
6.4 CNN的实验结果分析 18
7 系统实现与结果分析 19
7.1 系统实现 19
7.2 结果分析 21
8 总结与展望 21
致谢 21
参考文献 21
基于CNN的英文字符识别系统的设计与实现
引言

版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/jsj/jsjkxyjs/1759.html

好棒文