基于嵌入式系统的手写数字识别实验设计
2019-08-15刘科征曾德港重庆邮电大学
刘科征 曾德港 重庆邮电大学
近年来,随着人工智能,边缘计算的兴起,嵌入式系统的应用已经不仅仅局限在传统的工业控制、消费电子、家用电器等领域,而是转向计算机视觉等新兴应用。嵌入式系统的课程设计上应该与时俱进,新增与人工智能相融合的实验内容。本文总结了通信学院开设嵌入式课程的改革创新经验。学院在原有课程内容基础上,将人工智能,计算机视觉等新技术融入课程的实验教学中,增加了图像分割,卷积神经网络等新技术的运用,拓展了学生对新技术的理解,丰富了学生对跨专业应用的视野。为嵌入式系统课程建设提供了新的思路。
1 计算机视觉与卷积神经网络
在各种深度神经网络结构中,卷积神经网络是应用最为广泛的一种,它由LeCun 在1989 年提出最早被成功的应用在手写数字图像的识别上,卷积神经网络通过卷积和池化自动学习图像在各各层次上的特征,这符合我们理解图像的常识。人在认知图像时是分层抽象的,首先理解的是颜色和亮度,然后是边缘、角点、直线等局部细节特征,接下来是纹理、几何形状等更复杂的信息和结构,最后形成整个物体的概念。通常在计算机视觉课程的实验设计中,卷积神经网络是教学的重点内容。因此在嵌入式系统的实验拓展中,尝试将卷积神经网络的实验内容迁徙到嵌入式系统中完成。
2 实验设计与分析
在卷积神经网络的学习过程中,由于对训练集处理的运算压力较大。嵌入式系统的处理器运算能力不可能在短时间内完成模型的训练和验证。因此本实验的内容我们分成了两个部分来进行。第一阶段是在高性能计算机上设计神经网络的结构,训练并导出网络训练模型,在这个阶段主要应该考虑神经网络的模型选择,训练集测试集的选择。第二阶段是利用树莓派进行图像获取和图像处理,将第一阶段所得出的训练模型用于嵌入式系统并得出识别结果,该阶段主要考虑图像获取方式,图像处理步骤,图像如何格式等内容。
2.1 神经网络的模型选择
2.1.1 BP 神经网络
误差反向传播神经网络是一种多层的前馈神经网络,也是我们学习中最先接触到的神经网络结构,由输入层、隐含层、输出层组成,其主要的特点是信号前向传递,误差反向传播。根据预测的误差调整网络权值和阈值,使得预测输出不断逼近期望输出,使输出误差最小或者既定条件为止。
图2.1 全连接神经网络模型
2.1.2 LeNet-5 神经网络模型
LeNet-5 模型是Yann LeCun 教授在1998 年论文Gradient-Based Learning Applied to Document Recognition 中 提 出,是一种应用与手写体数字识别的高效卷积神经网络。标准的LeNet-5模型共有七层,其每一层依次按顺序为:卷积层、池化层、卷积层、池化层、全连接层、全连接层、全连接层(同时也为Output 层)。LeNet-5 模型结构图如图3.3 所示,其中第一个卷积层滤波器大小为5×5,深度为6;第二层池化层池化采样过滤器大小为2×2,步幅为2;第三层卷积层滤波器大小为5×5,深度为16;第四层池化采样过滤器大小为2×2,步幅为2。
图2.2 LeNet-5 模型结构图
当采用MNIST 数据集作为输入数据时作分析,对比可知LeNet-5 网络参数个数远小于BP 神经网络,结构更为合理,而通过之后的编程结果可以知道,BP 神经网络准确率约为98.4%,LeNet-5的准确率约为99.2%,优于BP 神经网络。因此从这两方面得出结论:选择LeNet-5 网络作为本实验设计的神经网络结构。
2.2 神经网络搭建与训练过程
利用Tensorflow 框架为LeNet-5 网络在训练完成后导出对应模型,在测试和识别时直接导入模型可以保证后者所用参数为前者训练后所产生的参数。流程如下图2.3:
图2.3 训练和验证流程图
图2.4 识别程序流程图
2.3 识别程序工作过程
此程序主要包括在树莓派上进行图像拍摄,图像处理,识别输出等功能,其中也包括在图2.3 中搭建的神经网络结构用于识别。是设计最终展示的程序,其流程图如图2.4 :
2.4 硬件平台选择
树莓派是一个基于定制化Linux 操作系统的微型电脑。树莓派体积小、携带方便、功能齐全。支持python 编程,本设计使用的树莓派版本为3 代B+,这个平台包括ARM 核心的64 位微处理器,运算频率1.2GHz,还有专用摄像头接口、多个USB 接口、一个hdmi接口、千兆以太网接口、1GB 内存等,能够很方便的实现我们的设计,是一个在嵌入式人工智能学习上非常理想的实验平台。如下图:
图2.5 树莓派实验板
2.5 软件开发流程
软件开发分为两个部分,首先需要对摄像头输入的图像进行处理,这里用到了Open CV 开源计算机视觉库,Open CV 主要由C 函数和C++类构成,同时也提供Python 的接口,Open CV 同时也支持树莓派,使用pip 组件在树莓派上能直接安装。
2.5.1 图像二值化
在调用Open CV 完成摄像头调用获取被拍摄的图片后,需要对图像进行二值化处理。图像经由灰度化以后进行二值化操作,图像灰度化处理在OPENCV 中使用cv.cvtColor(image, cv.COLOR_RGB2GRAY)函数直接操作,返回的便是灰度化以后的图像数据,然后使用平均阈值划分法求灰度平均值。
2.5.2 图像分割
图像的切割实际就是找到单个字符在图片中所在的像素区域,然后记录坐标以后进行分别储存。本部分程序主要实现的切割原理依次为:1.顶底部切割,去除顶底部白色部分,标记并记录对应行数。2.字符分割,分割相邻字符。图片切割过程如下图4 所示:
最后需要将切割以后的数字图片周围填充白色成为正方形,这样图像才不会变形,才不会影响识别结果。
图2.6 图像切割示意图
2.5.3 图像转换为MINST 格式
转换为MINST 格式应该经由以下步骤:1.图片大小调整2.灰度值翻转3.灰度值归一化4.按次序将多个数字录入到同一个数组中。这样就得到了可以送入神经网络模型中进行识别的图片。
2.5.4 神经网络搭建和训练
因为LeNet-5 网络在训练以及测试还有最终程序中都有用到,因此将其编写为一个单独的库函数在训练完成后导出对应模型,在测试和识别时直接导入模型可以保证后者所用参数使前者训练后所产生的参数。整个程序主要采用Tensorflow 框架中的tf.get_varible()函数创建变量用于存储权重以及偏置项,填充适当的随机数值然后训练。通过Tensorflow 框架依次完成卷积层、池化层和全连接层的创建。并使用滑动平均模型更新参数并使用交叉熵作为损失函数。最后通过验证程序完成准确率的计算。
3 实验测试
3.1 神经网络模型的测试
在神经网络训练进行时,每经过1000 次训练便会输出一次损失函数值,这个值越小越好,最后得出选择模型的判断的输入结果以及准确率,如下图所示,其中第一行为训练网络结果,第二行为依次判断是否准确结果,第三行为准确率,单位为%,由结果可见准确率为99.3%,符合设计要求。
图3.1 训练结果测试
3.2 识别结果测试
通过实际拍摄图像进行测试,经过二值化,图像分割,格式转换后得到的数字图片。最后将图片送入树莓派最后进行图像的识别,拍摄图片和最后的测试结果如图3.2 和3.3 所示。
图3.3 最后的识别结果
图3 .2 摄像头拍摄图片
4 总结
本文以嵌入式人工智能为出发点,设计了一个基于树莓派的手写数字识别实验。该实验综合了卷积神经网络的搭建与训练,结合了Open CV 的图像处理。内容涵盖了嵌入式系统设计、人工智能和数字图像处理等内容。该实验有助于通信学院的通信、电子和信息工程等相关专业学生深入了解人工智能,计算机视觉等关键技术,有助于提高学生跨学科专业的创新能力与工程实践能力,使非计算机专业的学生能在自己的专业领域更好的接触人工智能的相关应用。