BP神经网络字符识别系统Matlab建模及硬件实现*

2019-06-17 09:47王静霞温国忠
深圳职业技术学院学报 2019年3期
关键词:字符识别神经元神经网络

余 菲,赵 杰,王静霞,温国忠,宋 荣

(深圳职业技术学院 电子与通信工程学院,广东 深圳518055)

随着电子信息技术的发展,尤其是高性能处理器、互联网、云计算等技术的高速发展,基于神经网络的人工智能系统的应用价值越来越大[1-3].目前,人工智能的核心应用领域主要集中在图像识别、语音识别、汽车及其它设备的自主判断和自主控制等.其中,图像识别仍然是人工智能应用的最重要领域,而BP 神经网络也是对字符进行人工智能识别的最有效手段之一[3-6].基于BP 神经网络的字符人工智能识别和其他的人工智能应用一样,受制于处理器的运算速度.因此如何能够有效地提高BP 神经网络的运算速度就变成了非常有价值的研究领域.本文提出采用Matlab 进行系统建模仿真,并利用FPGA 技术实现BP 神经网络神经元的办法,通过硬件电路进行计算来有效提升系统的效率,让低电路代价的字符识在工程上变得可能.

1 字符识别系统的Matlab 建模

1.1 字符识别系统的设计方法

人工智能系统与传统的电子系统设计方法最大的不同是人工智能系统设计过程需要一个“学习”的过程,这种学习可以是“有导”式的,或者是自主的“无导”式[1].首先建立一个神经网络的结构,通常是BP 神经网络或者CNN(卷积神经网络)等,然后通过训练(学习),让神经网络逐步开始能够对学习过的样本具有判断和记忆,再对神经网络的判定效果进行评价,如果达不到设计要求则需要重新从建立神经网络结构开始重复,基本流程如图1所示.

图1 神经网络的设计流程

通常,图像识别的神经网络学习过程是“有导”式的.“有导”式的学习需要首先准备“金样本”数据集,所谓“金样本”就是经过人工标记的准确无误的系统输入输出案例.准备好了样本数据集后,将该数据集分为训练集和测试集2 类,通常分类的原则是随机选取.接下来利用Matlab 人工智能工具箱、Tensor Flow 等平台系统,对该人工智能的神经网络结构进行建模编程,利用训练集样本对神经网络进行训练,使得神经网络学习到模型参数,最后再通过测试样本的测试,达到精度要求后证明该神经网络的模型是有效的[3,5-6].目前很多研究仅仅停留在设计完成神经网络结构并完成网络参数的训练,但是训练好的神经网络还需要在硬件上实现,是否能够在工程允许的硬件代价下物理上实现该神经网络模型也是一个很实际的问题.

1.2 BP 神经网络的样本准备

首先收集用于识别的字符数据集,其中包含0~9 这10 个数字手写体的图片文件,此类数据集在网络上可以进行下载,也可以自己准备,然后对该图片进行标记,使之成为“金样本”.在本文中,每个数字准备了500 张不同的手写文件,总计5000 张图片作为数据集.接下来对图片进行归一化处理,统一归一化为28*28 的像素,样例如图2所示.

通过Matlab 读入全部图片的信息,使用Matlab 编程把所有图片的样本标记结果存储在一个数据矩阵内,部分矩阵内容如图3所示.

由于图片是灰度数据,与CNN 不同,需要转换为二进制矢量数据才能进行BP 神经网络的数据输入,本文按照如图4所示方法进行二进制矢量转换.

首先设定将得到的输入图像通过最大类间方差法得到一个合适的灰度阈值,通过此阈值将图片转换为70*50 的2 进制流图.特征提取规则为:取一个大小为10*10 像素的框,选取70*50的图像,总共可有7*5 种不同的排列组合,将选取的10*10 图像中的黑色像素所占百分比作为特征数,便可得一个7*5 的特征矩阵.

1.3 BP 神经网络的训练与测试

将上述特征提取后的数据分为2 部分,第一部分作为我们的输入数据,第二部分作为测试数据.用输入数据训练网络,网络训练完成后,用测试数据验证网络准确率.利用Matlab 的人工智能神经网络工具箱设置本文所述的字符识别系统,其BP 神经网络结构如图5所示.

图2 归一化的图片文件样例

图3 样本标记结果记录矩阵的部分内容

图4 二进制矢量转化方法示意图

图5 字符识别系统的BP 神经网络结构

第一层Hidden Layer 为此数字识别网络的隐含层,第二层Output Layer 为此数字识别网络的输出层,输出层神经元个数由输出目标数据所决定,此处为10.隐含层的神经元数目设置为25,当神经元数目设置过少时识别效果会很差,当神经元数目设置过多时又太过占用硬件资源,经测试本文设定为25 个比较合适,并且隐含层和输出层的传输函数都选择“tansig”.训练函数选择为“trainlm”(用于更新权值和偏置),适应性学习函数为“learngdm”(使得权值和偏置区有一定的动量),误差函数为“mse”.其他训练参数设定如图6所示.

图6 BP 神经网络训练参数设定

2 Matlab 建模效果评估

经过训练,本文所述的模型训练过程的Validation checks 最终是6,即训练结束就是因为连续6 次迭代都没能提高准确率.总共迭代次数为308,最终结束时以SSE(残差平方和)方式计算误差,其误差结果为718,迭代的表现如图7所示.

图7中分别展示了随迭代次数的平方误差的变化情况,其中横坐标为Epoch(时期),一个Epoch 表示所有训练样本的一个正向传递和一个反向传递的过程,纵坐标为SSE(残差平方和).虽然Train 曲线随着Epoch 下降,但Test 曲线在第16 个Epoch 时SSE 却开始上升.因此,最终神经网络的参数在16 个Epoch(在图7中已经用圆圈标记)得到最好的效果.

以Scaled Conjugate Gradient(量化共轭梯度法)为训练函数结束时的梯度值为161,然后用之前已准备好的测试集来对已训练好的神经网络进行仿真,其准确率如图8所示,图中横坐标为目标值,纵坐标为网络的输出,图8就是做了个回归,完美时四幅曲线都应该在对角线上,最终的综合精度为85.20%.

神经网络容易过拟合,即仅对参与训练的训练数据反应良好.为防止过拟合,除一开始就划分了训练集合测试集外,MATLAB 不会把给它的训练集数据都同时用于训练、验证、测试,会将其再次划分成3 个集,training(训练集),validation(验证集),test(测试集).训练时只有training(训练集)参加训练,validation(验证集),test(测试集)不参加训练,只用于最终检验.为了防止过拟合发生,需要设定适当的validation 值,当validation 的误差连续上升到设置的次数时就停止训练.

图7 方差随着迭代变化曲线

图8 测试集合的准确率曲线

3 基于FPGA 的神经元硬件实现

根据前文所述,Matlab 可以有效地完成神经网络的建模及训练与评测,但仍需要最终实现在硬件电路上.虽然,可以利用编写软件的方法在高性能DSP、GPU 或者TPU(由谷歌公司设计的专用人工智能处理器)上实现本文设计的神经网络,但是成本和硬件代价都过高,本文提出了有针对性的方案,可利用FPGA 实现神经网络的神经元[4,7],大幅降低了系统的硬件代价.

根据BP 神经网络的基本结构,需要用FPGA实现的神经元结构如图9所示.

从上面训练好的神经网络中抽取出神经网络相关参数后,可知数据为有符号浮点型数据,且有效位数到小数点后5 位.在FPGA 中需要合理地表示数据,由于FPGA 中默认情况下不支持对浮点数进行操作的,这里采用的解决办法是定标.也就是将要运算的浮点数扩大倍数,然后截取整数部分,用这个数代替原本的浮点数,完成运算后,得到的结果再缩小相应的倍数.

在这里我们就要用到定标的方法,由于系统的输入范围是0~1 的浮点数,例如0.34302,将小数转变为整数,并且事先进行约定统一将小数放大10000 倍,剩余小数部分四舍五入,也即将0.34302 用3430 表示.利用Modelsim-Altera 仿真平台上搭建系统,对输入输出及权值变换进行仿真验证,图10 为其中一次的仿真实例.

根据MATLAB 上训练出的神经网络知,FPGA 上实现的激励函数有2 个:

1)隐含层的激励函数为tansig 函数;

2)输出层的激励函数为pureline 函数.

图9 BP 神经网络神经元结构

图10 浮点数变换整数实例

其中隐含层为了实现功能选择了非线性的激励函数,输出层则选择了简单的线性激励函数作为输出.要在FPGA 上实现函数求解有多种方式可以进行选择,这里选择查表法.此方法最为简单,通用性强,但缺点是随着精度的增加对内存的消耗呈指数性增长.若要保证查表法的精确,计算就要用掉大部分的存储单元,显然不满足实际资源的需求,所以常常降低输入的精度,但随之带来的会是误差的增大,需要在资源的消耗和误差的大小间做出取舍.最终,本文利用Verilog 硬件描述语言实现了神经网络的神经元结构,并搭建了整个字符识别系统,仿真效果如图11 所示.由图11 可见,利用FPGA实现的硬件电路效果与Matlab 的仿真数据一致.本文为了验证电路的正确性,利用Altera 公司的FPGA芯片实际综合下载了神经元及相关系统,能够实现对字符图像文件数据的计算.

图11 数字“6”的图片识别效果仿真

4 结 论

本文利用Matlab 建立了一种可以用于图像数字图像识别的神经网络,并为1 到9 每个数字准备了500 张不同的手写文件,总计5000 张图片作为数据集,对图片进行归一化处理,统一归一化为28*28 的像素,并完成了神经网络的学习和训练.同时,利用本文提出的神将网络模型,利用FPGA 数字电路设计技术,从硬件上实现了该神经网络的神经元电路.经过Matlab 工具的仿真验证,本文提出的BP 神经网络结构和训练方法可以有效地实现字符图像文件的识别,有效率达到85.20%.通过FPGA 实现的该系统神经元硬件电路,通过Modelsim 仿真,结果与Matlab 一致.通过实际综合下载,电路运算功能正确.

猜你喜欢
字符识别神经元神经网络
神经网络抑制无线通信干扰探究
基于神经网络的中小学生情感分析
跃动的神经元——波兰Brain Embassy联合办公
融合字符及字符排列特征的铭牌识别方法
一种基于OpenCV的车牌识别方法
基于MATLAB的图片中字符的分割与识别
基于神经网络的拉矫机控制模型建立
ERK1/2介导姜黄素抑制STS诱导神经元毒性损伤的作用
毫米波导引头预定回路改进单神经元控制
侧脑室注射DIDS对缺血再灌注脑损伤大鼠神经元凋亡的拮抗作用