手写数字识别-文成-2150230509_第1页
手写数字识别-文成-2150230509_第2页
手写数字识别-文成-2150230509_第3页
手写数字识别-文成-2150230509_第4页
手写数字识别-文成-2150230509_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于SVM的手写数字识别系统-软件工程-文成-2150230509深圳大学研究生课程论文题目 基于SVM的手写数字识别系统 成绩 专业 软件工程 课程名称、代码 神经网络与进化算法(162023050014) 年级 2015级 姓名 文 成 学 号 2150230509 时间 2016 年 6 月 任课教师 朱安民 基于SVM的手写数字识别系统目录摘要3一、简介31.引言32. 研究背景33. 研究的理论意义34. 手写数字识别技术展望4二、OPENCV+SVM简介41.支持向量机简介42.如何计算超平面53.SVM的特点64.SVM的缺点65.OPENCV6三、主要流程71.手写数字识别主要

2、流程72.训练样本72.训练样本图像预处理84.SVM训练95.测试样本图像预处理9四、手写数字识别系统的实现101.Windows下C+实现102.安卓应用实现11五、实验结果与分析11六、未来的工作12参考文献13 摘要手写数字识别是符号识别的一个分支,虽然只是识别简单的10个数字,但却有着非常大的实用价值。在我们的日常生活中,每天都要进行大量的文档处理工作,税单、银行支票、汇款单、信用卡账单的处理,以及邮局信函的分检等等,如何利用计算机字符识别和文档处理技术,使人们从这些繁重的手工劳动中解放出来已成为一个迫切需要解决的问题。另外随着平板电脑和触摸屏手机的普及,手写输入成为了很多人的主要输

3、入方式。手写数字虽然只有10个种类,但很多情况下对识别的精度要求非常高,而且每个人都有不同的字迹,要做到准确地识别还是有一定难度的。况且在实际应用中,手写数字识别的精确度要求要比汉字2严格的多,因为数字识别经常用在财务、金融等领域。本文使用支持向量机的方法实现了一个手写数字识别系统,采用MINST手写数字图片库作为训练集,最终结果的识别准确度非常高。一、简介1.引言手写数字识别1是“光学字符识别技术”(简称OCR)的一个分支,它研究的对象是:如何利用电子计算机自动辨认人手写在纸张上的阿拉伯数字。在整个OCR领域中,最为困难的就是脱机手写字符的识别。到目前为止,尽管人们在脱机手写英文、汉字识别的

4、研究中已取得很多可喜成就,但距实用还有一定距离。而在手写数字识别这个方向上,经过多年研究,研究工作者已经开始把它向各种实际应用推广,为手写数据的高速自动输入提供了一种解决方案。2. 研究背景字符识别处理4的信息可分为两大类:一类是文字信息,处理的主要是用各国家、各民族的文字(如:汉字、英文等)书写或印刷的文本信息,目前在印刷体和联机手写方面技术已趋向成熟,并推出了很多应用系统;另一类是数据信息,主要是由阿拉伯数字及少量特殊符号组成的各种编号和统计数据,如:邮政编码、统计报表、财务报表、银行票据等等,处理这类信息的核心技术是手写数字识别。这几年来我国开始大力推广的“三金”工程在很大程度上要依赖数

5、据信息的输入,如果能通过手写数字识别技术实现信息的自动录入,无疑会促进这一事业的进展。因此,手写数字的识别研究有着重大的现实意义,一旦研究成功并投入应用,将产生巨大的社会和经济效益。3. 研究的理论意义手写数字识别作为模式识别领域的一个重要问题,也有着重要的理论价值:1、阿拉伯数字是唯一的被世界各国通用的符号,对手写数字识别的研究基本上与文化背景无关,这样就为各国、各地区的研究工作者提供了一个施展才智的大舞台。在这一领域大家可以探讨,比较各种研究方法。2、由于数字识别的类别数较小,有助于做深入分析及验证一些新的理论。这方面最明显的例子就是人工神经网络,相当一部分的人工神经网络模型都以手写数字识

6、别作为具体的实验平台,验证理论的有效性,评价各种方法的优缺点。3、尽管人们对手写数字的识别已从事了很长时间的研究,并已取得了很多成果,但到目前为止机器的识别本领还无法与人的认知能力相比,这仍是一个有难度的开放问题。4、手写数字的识别方法很容易推广到其它一些相关问题,一个直接的应用是对英文这样的拼音文字的识别。事实上,很多学者就是把数字和英文字母的识别放在一块儿研究的。4. 手写数字识别技术展望随着国家信息化进程的加快,手写数字识别的应用需求将越来越广泛,因此应当加强这方面的研究工作。作者认为,应用系统的性能的关键与瓶颈仍然在于手写数字识别核心算法性能上,最终目标是研究零误识率和低拒识率的高速识

7、别算法。此外,尽早建立反映中国人书写习惯的、具有国家标准性质的手写数字样本库也是当务之急。二、OPENCV+SVM简介1.支持向量机简介支持向量机 (SVM) 是一个类分类器,正式的定义是一个能够将不同类样本在样本空间分隔的超平面。 换句话说,给定一些标记(label)好的训练样本 (监督式学习), SVM算法输出一个最优化的分隔超平面。如何来界定一个超平面是不是最优的呢? 考虑如下问题:假设给定一些分属于两类的2维点,这些点可以通过直线分割, 我们要找到一条最优的分割线。在上面的图中, 你可以直觉的观察到有多种可能的直线可以将样本分开。 那是不是某条直线比其他的更加合适呢? 我们可以凭直觉来

8、定义一条评价直线好坏的标准:距离样本太近的直线不是最优的,因为这样的直线对噪声敏感度高,泛化性较差。 因此我们的目标是找到一条直线,离所有点的距离最远。由此,SVM算法的实质是找出一个能够将某个值最大化的超平面,这个值就是超平面离所有训练样本的最小距离。这个最小距离用SVM术语来说叫做间隔(margin)。概括一下,最优分割超平面最大化训练数据的间隔。2.如何计算超平面下面的公式定义了超平面的表达式:叫做权重向量,叫做偏置(bias)。最优超平面可以有无数种表达方式,即通过任意的缩放和。 习惯上我们使用以下方式来表达最优超平面3式中表示离超平面最近的那些点。 这些点被称为支持向量。 该超平面也

9、称为 canonical 超平面.通过几何学的知识,我们知道点到超平面的距离为:特别的,对于 canonical 超平面, 表达式中的分子为1,因此支持向量到canonical 超平面的距离是刚才我们介绍了间隔(margin),这里表示为, 它的取值是最近距离的2倍:最后最大化转化为在附加限制条件下最小化函数。 限制条件隐含超平面将所有训练样本正确分类的条件,式中表示样本的类别标记。这是一个拉格朗日优化问题,可以通过拉格朗日乘数法得到最优超平面的权重向量和偏置。3.SVM的特点(1)非线性映射是SVM方法的理论基础,SVM利用内积核函数代替向高维空间的非线性映射;(2)对特征空间划分的最优超平

10、面是SVM的目标,最大化分类边际的思想是SVM方法的核心;(3)支持向量是SVM的训练结果,在SVM分类决策中起决定作用的是支持向量。(4)SVM 的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。(5)少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、“剔除”大量冗余样本,而且注定了该方法不但算法简单(6) SVM在小样本训练集上能够得到比其它算法好很多的结果。4.SVM的缺点(1) SVM算法对大规模训练样本难以实施(由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本

11、的个数),当m数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。)(2) 用SVM解决多分类问题存在困难(经典的支持向量机算法只给出了二类分类的算法,而在数据挖掘的实际应用中,一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。)5.OPENCVOpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效由一系列 C 函数和少量 C+ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C+语言编写,它的主要接口

12、也是C+语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。所有新的开发和算法都是用C+接口。一个使用CUDA的GPU接口也于2010年9月开始实现。OpenCV下SVM的使用也相当简单,开发者只需要阅读一下文档,了解一下参数的类型即可,一下就是Opencv下SVM的简单样例。/C+、opencv2.4 + SVM 实现/建立训练样本Mat trainingDataMat(x, x, CV_32FC1, trainingD

13、ata); Mat labelsMat (x, x, CV_32FC1, labels);/设置SVM参数CvSVMParams params; params.svm_type = CvSVM:C_SVC; params.kernel_type = CvSVM:LINEAR; params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);/训练支持向量机CvSVM SVM; SVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params);三、主要流程1.手写数字识别主要流程2

14、.训练样本训练样本来源于MNIST手写数字图片库,该图片库总共提供60000个训练样本,每个数字提供6000个训练样本,另外提供1000个测试样本。(例如:0的训练样本和1的训练样本(这里只展示少部分,实际上每个数字有6000个训练样本) 2.训练样本图像预处理本文是对已经扫描后的手写体数字图像进行识别,在识别前由于得到的图像和图像中数字的各种属性有很大差别,给识别增加了难度,因而对待识别图像要进行预处理5。对所给出的图像进行预处理使得方面后面的数字识别操作,包括图像的二值化和图像的压缩等。(1)归一化归一化处理包括两个部分:一是裁剪,裁剪出图像中只有文字信息的部分,作为该项研究处理的对象。二

15、是图像的缩放, 本文首先求得图像中的数字上 下 左 右四个边界点,剪裁掉图像四个方向的边界空白区域,并求出待识别数字的高度和宽度,然后按比例将图像统一缩放为10*10像素。(2)二值化由于手写体数字识别只需要处理图像中的字符信息,对颜色等信息不作处理!所以可对扫描得到的图像进行二值化处理, 本文直接利用opencv中的函数将待识别图像转化为二进制图像。(3)细化一个图像的骨架,是指图像中央的骨架部分。它是描述图像几何及拓扑性质的重要特征之一,求一个图像骨架的过程通常称为对图像的细化过程。本文直接利用opencv中的函数得到待识别数字的骨架。数字图像的二值化即使图像只有黑白两种颜色,同理测试样本

16、也需要进行图像的二值化。下面给出一个二值化的例子原图如下:二值化处理结果如下:除了图像的二值化,另一个工作就是图像的压缩。因为训练样本是28*28的,一共有6000个,不压缩的话训练时间太长了。4.SVM训练SVM最初设计出来是用于解决二分类问题的,多分类问题需将多个SVM的二分类器组合起来。例如0和1-9的二分类器,1和0/2/3/4/5/6/7/8/9的二分类器,然后将多个二分类器组合起来。核函数的选择:核函数是SVM的核心,不同的核函数可以构造不同的SVM分类器,比如线性核函数,二次核函数和多项式核函数,径向基核函数等等。本文选取的是径向基核函数。5.测试样本图像预处理第一步要做一个简单

17、的图像分割,例如下图的8,仅将含数字的图像分割出来。接下来与训练样本的大小需要统一,所以也需要压缩成10*10的图像。完成这一步之后就可以将测试样本交给识别器识别,得到识别结果四、手写数字识别系统的实现1.Windows下C+实现程序可见附件,下面展示一下运行结果。下图是测试图像。经过图像分割后。经过压缩后。识别器识别结果。2.安卓应用实现运行截图如下 五、实验结果与分析每个数字 100个训练样本,测试数据正确率80.21%(训练集太少)每个数字1000个训练样本,测试数据正确率95.45%(体现小样本高准确率的特性)每个数字6000个训练样本,测试数据正确率97.67% 当手写字体比较正式的情况下,其识别效果较好,但当手写字比较随意时,识别效果比较差。比如右图横着写的8和加了噪音的3。这存在多个方面因素,一方面是由于训练样本中不存在歪曲的样本,另一方面用SVM解决多分类问题存在困难。还有图像预处理时将原图像映射成10*10的,存在精度丢失。六、未来的工作本文已经实现了一个识别0-9这十个数字的系统,精度也比较高。但是其实精度还可以提高。前文提到,我在图像预处理时对训练样本进行了压缩,将28*28的图像压缩成10*10的,主要是出于训练效率考虑。如果直接使用28*28的图像进行训练,精度必然可以得到提高,但是训练结果也

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论