基于深度学习的手写数字识别的程序实现毕业论文
2020-04-10 16:07:12
摘 要
脱机手写数字串的识别一直都是深度学习和模式识别中的一个重要课题,但识别结果一直不大尽如人意,再加上输入设备的限制,使得联机数字串识别技术很难走入寻常百姓家。面对这些问题,本文提出了基于选择性搜索切分和深度识别的手写数字识别方式。
本文利用Tensorflow和Python3.5搭建环境平台,完成了手写数字串的识别程序的设计:通过BP和卷积两种神经网络分类器对MNIST数据集进行训练、测试实现。首先通过不同的激活函数对两种分类器进行收敛,由于样本数量是一定的,分类器训练过程中的过拟合使用动态学习率和Dropout两种优化方式有效避免,并通过训练、测试的准确率和Tensorboard的可视化功能对两种网络的训练效果进行直观比较。
针对手写数字串的切分问题,本文采用了基于选择性搜索的切分算法,先对目标图片进行初始特征区域的划分,再通过合并相似区域对数字串中的单个手写数字进行分类,最后过滤掉冗余窗口送入神经网络分类器中进行单个手写数字的识别。
本文提出的算法具有较好的效果,BP和卷积神经网络两种分类器对于不同数字串的识别率分别为82.44%和90.16%,分析所得结果,对于探讨更准确和更高效率的手写数字串识别算法具有积极的指导意义。
关键词:手写数字串;深度学习;Tensorflow;BP神经网络;卷积神经网络;选择性搜索
Abstract
The recognition of off-line handwritten digit strings has always been a topic of interest both in deep learning and pattern recognition. However, digital string recognition is also a difficult problem because the recognition results are still not satisfactory. With the limitations of input devices, online string recognition technology is difficult to enter the ordinary people’s life. Based on these problems, this paper proposes a hand-written digit recognizer method based on selective search segmentation and deep learning.
Based on the environment platform built by Tensorflow and Python3.5, this paper completes the design of handwritten digit string recognition program. Two neural network classifiers, BP and convolution, were designed to train and test the MNIST data set. The two kinds of neural networks classifiers are converged by different activation functions first. Learning rate dynamics and Dropout optimization methods are then used to avoid the over-fitting of neural networks under the condition of a certain number of samples. Through the training and testing accuracy as well as the visualization function of Tensorboard we can visually compare the effects of the two networks.
For the issue of segmentation of handwritten digit strings, this project uses a selective search algorithm to divide the initial feature region of the target image first, which classifies the single handwritten digits in the digit string by merging similar regions, and then filter out the redundant window. And the features we get are fed into the two neural network classifiers to identify individual handwritten digits.
The algorithm proposed in this paper has a good effect. The recognition rates of two different classifiers for BP and convolutional neural networks are 82.44% and 90.16%, respectively. The results analyzed to develop more accurate and more efficient handwritten digit strings recognizer has a positive guiding significance.
Key Words: Hand written digits; deep learning; Tensorflow; BP Networks; CNN; selective search
目 录
第1章 绪论 1
1.1 手写数字识别的意义 1
1.2 手写数字识别技术研究进展 1
1.3 研究内容 2
1.4 章节安排 3
第2章 手写数字串识别技术 4
2.1 数字图像的读取 4
2.2 手写数字串的识别难点 4
2.3 常见的数字串处理技术 5
2.4 本章小结 7
第3章 基于Tensorflow的单数字识别神经网络概述 8
3.1 神经网络训练集的选择 8
3.2 BP神经网络 9
3.2.1 神经元与激活函数的选择 9
3.2.2 BP神经网络的训练过程 11
3.2.3交叉熵函数与梯度下降法 11
3.2.4 BP神经网络分类器的缺点 12
3.3 卷积神经网络 14
3.4 神经网络的优化 20
3.4.1 学习率的优化 20
3.4.2 Dropout解决过拟合问题 21
3.5 MNIST数据集分类器设计结果 22
3.6 本章小结 26
第4章 基于选择性搜索的手写数字串切分 27
4.1 手写数字串图片预处理 27
4.1.1 图像平滑滤波 27
4.1.2 数字串图片的二值化 27
4.2 手写数字串切分流程 28
4.3 本章小结 30
第5章 数字串识别程序结果分析 33
5.1 各神经网络分类器识别结果分析 33
5.1.1 BP神经网络分类器 34
5.1.2 卷积神经网络分类器 34
5.2 基于采集于自写数字串样本的识别结果分析 32
第6章 总结与展望 36
6.1 课题工作总结 36
6.2 未来课题研究方向展望 36
参考文献 38
致谢 39
第1章 绪论
手写数字串的识别是图像识别研究的重要一环,其核心是利用计算机技术对包含手写数字串进行提取和识别[9]。
1.1 手写数字识别的意义
手写数字的识别是文件分析和识别领域中的一项重要任务,可以证明其在众多应用程序中的关键作用[8]。举些例子,试卷的批改,邮政地址解释,确定银行支票的价值,阅读税表和人口普查表格等。但在这些应用中,由于大量地依靠人力的搜集与分析,手写数字的规范不受限制,导致手写数字边缘间的频繁接触,因而对进一步的工作造成了很大的困难,从而造成错误的发生,尤其是会导致整个体系中非常危险且昂贵的后果,这是我们所要极力去避免的。而基于图像识别的手写数字串能够极大地避免因人工因素产生的问题,而随着科技发展,基于数字串识别自动处理系统也应运而生,大大提高了信息整理与处理的效率,并节约了人力资源,提高了容错率。但现在的技术还不足以模拟手写串的无穷变化,如果为了构建用于实际应用的强大系统,仍然需要更多的改进,加上人工智能的发展和谷歌决定将Tensorflow开源等因素,基于深度学习的手写数字串识别的研究具有深刻的应用和理论价值。
1.2 手写数字识别技术研究进展
经过多年的发展,手写数字的识别已趋于成熟并能取得比较好的效果,比如模式匹配法和逻辑分析法。
其中模式匹配法的算法思想主要是通过比较目标串与模式串中的特征点,如果不相同,则目标串移动至下一位特征点与模式串中的第一个特征点重新进行比较,直至目标串与模式串中的特征点序列完全匹配,从而实现对样本集的匹配识别[10];
图1.1 模式匹配法示意图
逻辑分析法则着重于提取分析手写数字的结构特征进行分类识别,通过提取手写数字的笔画,轮廓,位置等特征信息点,并以逻辑分析的方式对提取出来的结构特征点进行分类,区分并识别出出需要识别的手写数字[11],逻辑分析法相对于模式匹配法较符合人眼识别的过程,但算法非常繁琐,且结构特征提取难度较大,比如数字0和数字9,因人们书写习惯的不同容易导致特征提取的错误以致误识。
图1.2 手写数字0和9的结构特征极为相似
在过去的20年中,一些深度学习方法已经被开发并应用于图像的分类,如线性判别函数、二次判别函数、神经网络和支持向量机,都对手写数字的识别算法的改进产生了非常积极的影响。[4]其中,基于神经网络的模式识别技术已被广泛用于手写数字图像识别。图像识别的神经网络分类器的优点归因于:通过训练,从大量训练数据中获得强大的学习能力;神经网络能精确估计嵌套在训练集中嵌套的未知变量;他们的并行结构能在训练和图像识别过程中执行快速和高效的并行运算。
值得一提的是,用于手写数字识别的大多数神经模式分类器被设计为具有基于递归梯度的反向传播(BP)算法训练的多层神经网络或者卷积神经网络(CNN)用于手写数字的过滤,特征提取和模式识别。可以说,神经网络的功能十分强大,但耗费训练时间巨大,占用大量计算资源且收敛较慢的问题亟需解决。
1.3 研究内容
区别于传统的识别方法,尽可能针对其的复杂性和局限性,本文将基于Tensorflow平台的BP神经网络和卷积神经网络完成手写数字串识别的程序实现,具体研究内容如下所示:
1)要实现手写数字串的识别,对目标图像的读取和对已读取的包含目标数字串的图像进行预处理是十分重要的,预处理的质量直接影响后期手写数字串切分和手写数字识别的质量,具体步骤包含图像的平滑滤波,数字图像的二值化与归一化。
2)分析包含目标数字串的图像中数字串的位置,用于进行基于选择性搜索的特征提取算法用于数字串的切分。
3)分别引入一个BP神经网络和卷积神经网络作为识别字符的分类器,对BP神经网络引入交叉熵函数和学习率衰减,提高BP神经网络的训练准确率;对卷积神经网络采用Dropout解决其过拟合的问题。同时,利用Tensorflow的强大功能,对BP神经网络和卷积神经网络分别实现Tensorboard的可视化功能,在Tensorboard中我们可以观察到两种神经网络的网络流图,各种函数的变化情况以及神经网络的收敛情况,从而比较两种神经网络的优劣。[7]
1.4 章节安排
本文章节安排如下:
第一章:介绍本课题的研究背景及意义,并介绍了几种常用的手写数字识别方法,最后介绍本文的系统流程和行文结构。
第二章:着重介绍手写数字串的识别技术,阐述数字串识别的难点,并根据此介绍了几种常见的数字串处理技术,并分析这几种技术的优缺点。
第三章:详细阐述了本课题运用的用于手写数字识别的神经网络分类器,并介绍了所使用的MNIST的手写数字训练集,着重介绍了BP神经网络的训练过程以及采用的激活函数与收敛函数和卷积神经网络;阐述了两种神经网络的优劣与优化方法,并以此改善神经网络分类器的算法,最后展示了基于MNIST数据集的分类器设计的结果。
第四章:本章着重介绍了基于选择性搜索的手写数字串切分算法的实现,并阐述了包含目标数字图像的预处理过程,包括图像平滑滤波和数字图像的二值化,最后生成用于识别的二进制格式文件用于神经网络的识别,并对数字串图像处理的结果进行分析与评价。
第五章:通过实验的分析与比较,对BP神经网络和卷积神经网络的识别结果进行分析,比较两种神经网络在投入手写数字串识别实际应用中的效果优劣[12];最后,本文进一步展示了所用算法对采集于字写数字串的识别结果与识别效果,并对此进行进一步的探讨,分析算法中的缺陷与不足。
第六章:对本课题所述工作进行综述与总结,并对今后研究的发展方向与规划提出进一步的展望。
第2章 手写数字串识别技术
2.1 数字图像的读取
计算机的运行速度、内存空间的限制导致计算机的很多性能参数无法达到最理想的状态,故数字图像的数据在计算机中的存储状态主要依托于两种方式:位图存储模式(Bitmap,也称作位映射)以及矢量存储模式(Vector,也称作向量处理)[15];其中,位图存储模式是将目标图像中的像素点转换成对应的数据,并将其存放于以字节为单位的矩阵中,其优点是适合存储内容相对丰富且复杂的图像如彩色照片。但位图图像的缺点也同样相对明显,当图像分辨率以及像素的提高,BMP图像所占用的存储空间大小也会直线上升,同时,放大图像也会导致目标图像模糊失真,所以,在本课题中也会采用部分便携式网络图形(.png)的图像,因为png图像压缩比高,占用空间小并能有效保存图像的有效信息同时加快图像的读取速度。
而本课题所采用的数字图像的获取方式,正是以位图图像或者便携式网络图形的方式存储的,以为从外部获取的手写数字串图像都是由手机或是电脑自带画图工具输入的的,依靠OPENCV的函数进行预处理,采用的是8-bpp颜色深度的灰度图并切分为28x28像素的黑底白字图进行后续的识别。
2.2 手写数字串的识别难点
数字只有0到9这10种类别,笔画简单易懂,乍看起来手写数字串的识别问题是一个相对容易解决的分类问题。但随着多年的发展,各种新的手写数字串识别算法推陈出新,但其识别率和错误率和预期仍存在一些差距,手写数字的脱机识别的实际效果只略好于手写汉字的脱机识别,手写数字的联机识别虽效果不错,但联机识别要求使用者在指定的设备上进行书写,而在现实生活中,大多数人的书写环境是很难满足这个大前提的,比如人们填写表格,批改试卷等,可见手写数字串的识别技术的实现还是有着不小的难度的,其识别难点主要在于[13]:
1)从单个数字上来看,在计算机看来,0到9十个数字中一些数字符的结构特征比较相近,给在脱机识别时准确区分一些数字造成了不小的麻烦。同时,由于书写人之间的书写习惯不一,同一个数字,世界各地的人可能都有着不同的写法,相同的数字的写法可以说是千差万别,这对手写数字的识别算法提出了更高的要求。
2)对于数字串而言,个人书写习惯的随意性导致了数字串中的字符大小不一,或者整体字符倾斜,字符重叠粘连的情况发生[14],对此,满足各种书写习惯的数字串识别系统的设计变得十分困难,因此手写数字串识别本质上也是一个NP问题。
3)在数字串识别中,目标数字串的本质是蕴含所需信息的一串数字字符,数字串的长度是未知的也有可能使给定的,其识别任务都是返回与输入字符串中每个数字对应的子图像的值,并且只有将目标手写数字串中全部的数字字符识别正确才能满足需求,哪怕数字串中有一个数字字符出现识别错误,将会导致整段数字字符串的后续使用的错误,这是我们要极力去避免的。
4)在实际应用中,系统对数字的识别率要求极高。由于数字之间的自由排列组合,缺少明显的上下文关系,因此数字串中每个单字的正确提取与识别就显得格外重要,这对提高系统的识别率也造成了不小的困难。
5)手写体数字串的分段和识别的另一个重要挑战,则是当字符串很长时,要寻求最佳的分割和识别,在长数字串的分割过程中,会产生许多的冗余切割路径,因此需要在切割路径的所有可能组合中进行搜索以找到最佳组合。使用穷尽搜索找到最佳分割假设,由于切割路径的数量很大,这是不可行的。因此,我们的分割识别算法也必须加以改进,避免被假设中常见的异常值模式卡住。
2.3 常见的数字串处理技术
在现如今的研究中,单个字符的手写数字识别算法已趋于完善,具备相当高的准确率,主要的问题还是出在数字串的识别问题上。这个问题的主要挑战之一是识别和区分来自非数字模式的数字(异常值),异常值是在分割过程中产生的数字字符串图像过分切分或分割不足的结果。
由于手写数字串的分割产生的有效数字和异常值,因此许多研究人员利用分离数字分类器来区分它们。同样的,研究人员通过异常样本来训练不同的分离数字分类器(如线性判别函数(LDF),二次判别函数(QDF),神经网络(NN)和支持向量机(SVM)),以改善异常值带来的阻碍。这些研究表明,改善手写数字串识别系统中分类模块的异常值的阻碍能够提高系统的整体性能。[3]然而,使用分离数字分类器来评估所有异常值模式会带来非常高的计算成本。更重要的是,很多异常值模式的具体情况没有被研究人员正确评估。
图2.1 基于分离数字分类器的识别
图中显示的数字串可能会被误认为其他相似的数字串,例如,(a)中20将被误识为020;(b)60将被误认为100;(c)9将被误认为01,并且在(d)中6将被误识为10。不管这些分类器是否有被异常样本训练过,这些错误将会导致应用程序中非常严重的后果,例如银行支票处理。
为了找出手写数字串中的最佳分割假设,许多研究人员使用识别分数进行评估,并采用动态规划(DP)对最佳分割路径进行搜索。然而,北京邮电大学的刘刚教授等人发现,在评估识别分数的或目标函数(如非单调性)的某些约束下,DP搜索并不能保证能找到全局最优,并对DP算法进行了改进,随后LDP算法应运而生,降低了算法的复杂度。
以上是毕业论文大纲或资料介绍,该课题完整毕业论文、开题报告、任务书、程序设计、图纸设计等资料请添加微信获取,微信号:bysjorg。
相关图片展示: