一、研究背景及意义
数字识别已经应用到了生活中的点滴,如停车场停车按车牌号计费,交通电子眼抓拍违章,大规模数据统计,文件电子化存储等。
阿拉伯数字作为一种全球通用的符号,跨越了国家、文化以及民族的界限,在我们的身边应用非常广泛。数字的类别数目适当,仅有10类,方便对研究方法进行评估和测试。通过研究基于深度学习的手写数字识别方法有助于对深度学习的理解,具有很大的理论实践价值。手写数字识别的方法经验还可以推广应用到其它字符识别问题上,如英文字母的识别。
本文设计将训练好的BP神经网络模型与摄像头相结合,实现对摄像头画面中出现的数字实时识别。
二、数字识别研究现状
早期的研究人员在数字识别[1]这一方向已经取得了不错的成果,如使用K-邻近分类方法,SVM分类方法,Boosting分类方法等。但这些方法多少都会有不足之处,例如K-邻近方法在预测时需要将所有的训练数据集加载至内存,然后用待测数字图片与训练集作对应像素点差的和,最后得出的差值最小的则为预测结果。显然这样的方法在正常的图片准确度上并不可靠,对于待测手写数字的要求也很高。目前识别率最好的模型应该还属基于深度学习的CNN,最典型的例子LeNet-5,美国最早将其商用到识别银行支票上得手写数字[2]。可见基于深度学习的手写数字识别在准确率上是相当可靠。
三、研究内容
本文以学习基于深度学习的手写数字识别算法的过程为线索,由简入深,从最基础的感知器到BP神经网络,学习和理解深度学习的相关基本概念、模型建立以及训练过程。最后通过使用深度学习框架Keras以MNIST作为训练数据集训练出高识别率的模型并将其与OpenCV技术结合应用到摄像头上实现实时识别数字,使用合理的模型结构,在测试集上识别准确率达到99%以上,在与摄像头结合实际应用中的识别效果达到90%以上。
五、实验过程与结果
5.1获取MNIST数据
MNIST手写数据集的获取方式有很多种,主要可以从深度学习框架Pytorch或Tensorflow中下载,也可以通过手动下载的方式获取。通过学习框架下载的方式可以快速获得已经分好类别的训练集和测试集,训练数据和标签数据。
本文使用Pytorch深度学习框架进行数据的下载,具体的下载方式为:
图4-1 获取MNIST数据
5.2构建BP神经网络
BP神经网络指的是反向传播网络,即误差反向传播的多层前馈网络。因此在本实验中搭建了使用全连接层的BP神经网络和基于CNN的BP神经网络。其中使用全连接层的BP神经网络由输入层、隐藏层、和输出层构成。其中输入层的维度是,隐藏层由两层构成,他们的维度分别是和,输出层的维度是[]。输出层的10代表分类的个数,并且必须要满足大于等于标签中的分类个数,否则会报错。
图4-2 全连接层的BP神经网络
5.3训练构建的BP神经网络
对所构建的两种神经网络分别进行训练可以得到他们在训练集上损失函数和准确度随迭代次数的变化情况如下所示。
图4-4 全连接层BP网络训练集的损失函数和准确率变化图
图4-5 基于CNN的BP网络训练集损失函数和准确率变化图
其中,全连接层BP网络在经过25代训练之后的准确率可以达到97.86%,而基于CNN的网络在同样25代训练之后的准确率可以达到98.85%。
5.4测试BP网络
在模型训练的同时可以使用测试集进行测试来考察测试集准确度和损失的变化情况。也可以在保存模型之后再选择部分数据进行测试,考察准确度并进行可视化。
在使用两种模型结构进行训练和测试后可以得到如下的表格:
表1 BP网络的损失函数和准确率(训练25代)
|
Train Loss
|
Train Accuracy
|
Test Loss
|
Test Accuracy
|
全连接层BP
|
0.07437
|
97.86%
|
0.09634
|
97.12%
|
CNN_BP
|
0.03358
|
98.95%
|
0.03146
|
98.97%
|
测试集的损失函数和准确率变化情况如下图所示:
图4=6 全连接层BP网络测试集的损失函数和准确率变化图
图4-7 基于CNN的BP网络测试集损失函数和准确率变化图
因此可以得到网络准确率和损失函数总的变化图像为:
图4-8 神经网络损失函数和准确率随迭代次数变化图(左:全连接 右:CNN)
训练完毕后对测试集的结果进行测试可以得到:
图4-9 测试结果可视化
由测试结果可以发现,模型基本上可以准确识别大部分的手写数字,只有个别的数字由于特征不是非常明显甚至兼有其他数字的特征,因此被错误识别。总的来说,模型的训练效果还是不错的。
六、结果分析与实验结论
通过实验可以发现,使用BP网络进行训练识别手写数字在一开始基本是随机识别,但是在对整个数据集进行多次训练之后,在训练集和测试集上的准确率都能达到较高的水准并且可以看到,在前几次迭代训练的结果中,损失函数下降的非常快,准确率也快速上升。
此外,两种模型测试集上的损失函数总体上一直在下降,没有出现上升而准确率总体上一直在上升没有出现下降。因此模型并没有出现过拟合的现象,还可以继续迭代进行训练。
对比两种模型可以看到,基于CNN的BP网络的准确率均高于全连接层的BP神经网络,有较好的训练效果。但是CNN训练的时间相较于全连接层较长,在数据较多时可能略显吃力。
参考文献
[1] 陈浩翔.手写数字深度特征学习与识别.计算机技术与发展26.7(2016):19-23.
[2] 张晓.手写数字识别的前景与难点.数码世界1(2016):69-70.
[3] Andrew Ng.Machine Learning[OL].2016.3.https://www.coursera.org/learn/machine-learning/
[4] 尹宝才,王文通,王立春.深度学习研究综述[J].北京工业大学学报, 2015(1):48-59.
[5] 郭丽丽,丁世飞.深度学习研究进展[J]. 计算机科学, 2015,42(5):28-33.
[6] 吴岸城.神经网络与深度学习[M].北京:电子工业出版社,2016.6
[7] The MNIST Database of Handwritten Digits[DB].http://yann.lecun.com/exdb/MNIST/
[8] 赵永科.深度学习21天实战Caffe[M].北京:电子工业出版社,2016.7
[9] 李丹."基于LeNet-5的BP神经网络改进算法."计算机时代8(2016):4-6.
[10] Peter Harrington.Machine Learning in Action[M].Manning Publications,2012-4-19
[11] Andrew Ng,Jiquan Ngiam,Chuan Yu Foo,Yifan Mai,Caroline Suen.UFLDL教程[OL].2016.3.http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial
[12] Fei-Fei Li,Andrej Karpathy.CS231n Convolutional Neural Networks for Visual Recognition[OL].2016.1.http://cs231n.stanford.edu/
[13] 吴忠,朱国龙,黄葛峰,等.基于图像识别技术的手写数字识别方法[J]. 计算机技术与发展,2011,21(12):48-51.
[14] 余凯,贾磊,陈雨强,等.深度学习的昨天, 今天和明天[J]. 计算机研究与发展, 2013,50(9):1799-1804.
[15] 孙志军, 薛磊, 许阳明, 等. 深度学习研究综述[J]. 计算机应用研究, 2012, 29(8):2806-2810.
[16] LeCun Y, Bengio Y, Hinton G. Deep learning[J].Nature,2015,521(7553):436-444.
[17] Krizhevsky A,Sutskever I,Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems.2012:1097-1105.