应用于禽蛋壳体裂纹声检测的嵌入式神经网络方法
2020-03-08邱志敏魏云龙林钰森
邱志敏,魏云龙,林钰森
(1.福州大学物理与信息工程学院,福州350100;2.华南理工大学电子与信息学院,广州510640)
针对禽蛋裂纹检测系统复杂识别算法受时间和空间的约束很难在嵌入式平台上实现的缺陷,提出一种基于ARM处理器(STM32F407)的禽蛋裂纹检测系统的研究方法。该方法的主要思想为在嵌入式平台ARM处理器的基础上运用BP神经网络结构实现禽蛋裂纹检测,并对原有算法进行优化,其中嵌入式神经网络结构和优化算法具有减少硬件资源占用和降低实施复杂程度的优点。实验结果表明,基于ARM平台的BP神经网络的方法测试完好蛋和裂纹蛋的准确率较原有PC端上的测试准确率一致,但该方法可以更好地适应工业化要求。
嵌入式系统;禽蛋裂纹检测;BP神经网络;ARM处理器
0 引言
禽蛋含有丰富的蛋白,在人们日常食品中占用举足轻重的地位。蛋壳一旦发生破损,产生裂纹,容易使细菌等微生物通过裂纹侵入到禽蛋内部,使得整个禽蛋受到感染,从而严重危害食用者的健康。因此,裂纹蛋检测在自动化禽蛋分级生产流水线中是极为重要的一环。在国内的大部分蛋品加工企业,裂纹蛋检测是通过人工实现,人工检测速度慢,工作量大,成本高,在高速多通道的禽蛋分级生产线上,显然人工检查已经满足不了需求,禽蛋裂纹检测已经成为了制约整条生产线速度的一个瓶颈,急需自动化的装备来解决问题。针对上述的问题,熊利荣[1]提出了一种基于声学特征和支持向量的识别实验装置运行在计算机端,禽蛋总体识别准确率达到97.37%以上,运行时间为0.3s/枚。王海军[2]提出了一种基于电磁激励的伸缩式激励机构将声音传感器布置在内部排除了大部分的环境噪声,并且提出了优化特征参数的方法,利用F比率用于评估每个特征对声音和破裂鸡蛋的区分的影响。建立了神经网络训练模型,搭建在线检测系统,满足最快5个/秒的检测速度。郭小军[3]提出一种基于声学特性和LabVIEW的鸡蛋裂纹检测研究,创建了一个直观可视化的鸡蛋裂纹检测模型,其实际检测准确率达到96%。但是他们的方法大多局限于PC端的理论研究,实用性不强且面向工业生产对象少。而工业生产设备上裂纹检测系统却要求使用嵌入式芯片作为主要的处理器,其中ARM处理器因其具有低成本、结构灵活等优点成为最常用的嵌入式处理器之一,但神经网络在嵌入式上的实现不能得到很好的泛化且存在拟合精度低,收敛速度慢,训练时间长等诸多问题,所以优化神经网络结构是当前一个亟待解决的问题。
针对以上的不足,本文提出面向ARM处理器的BP神经网络结构设计的方法,该方法的具体思想为:采用动态链表的思想设计BP神经网络数据使该结构更好地在ARM平台运行,使该结构满足在嵌入式平台上的检测要求。
1 相关工作
BP神经网络因为具有可以对任何复杂模式进行分类的能力和对多维函数良好映射的能力,逐渐成为广泛使用的算法模型之一。该算法模型也可称为梯度下降法,基本思想为:通过反向传播输出对应的误差,其中权值和阈值的不断更新可以使神经网络的实际输出值和期望输出值的均方差值达到最小,最后只要输出满足网络性能要求的最小误差值即可。BP网络的结构如图1所示:主要由输入层、输出层和至少一层隐藏层组成而其中学习过程可分为正向传播学习和反向传播学习两个阶段。
图1 BP神经网络结构
如图1所示BP神经网络的基本工作原理为:信息从输入层输入并经由隐藏层传送至输出层,输出层会根据阈值函数输出对应的信息。若处于正向传播的阶段则每一层神经元状态仅与上一层神经元状态紧密相关。反之输出层输出的信息与网络性能要求不符,则需要计算出实际输出值与期望值的差值,所获得的差值需要反馈到输入层。与此同时系统需要根据求取的差值适当的调整各神经元之间连接的权重,直到迭代计算出满足系统性能要求的参数才停止上述过程[4]。
基于以上对BP神经网络原理的分析,本研究将在此基础上提出了一个可将BP神经网络的训练和应用进行分离的方法。该方法的主要思想为在PC端完成BP神经网络复杂的训练过程,而应用过程则在ARM平台上实现。其中PC端完成训练并得到对应的权重和偏置,最后获得的数据需导入到ARM平台应用实现对应的功能。
2 神经网络模型的嵌入式实现
2.1 BP神经网络嵌入式实现原理
为了让BP神经网络在ARM平台上的运行得以实现,本设计从BP神经网络的原理出发对BP神经网络的嵌入式实现进行研究。BP神经网络一经训练,完成后的权重参数在应用途中将只需前向传播而不再需要进行反向传播。因此,BP神经网络的训练和应用是可分离的。根据上述思路,可将运算量大的训练过程放到处理能力强的PC端进行,训练结束后需要将权重和偏置保存到文件中,最后在ARM处理器建立神经网络时也需将训练结束所获得的数值再次导入。其中前向传播的主要计算如公式(1)所示:可以分成三步即矩阵乘、加法和激活函数运算。
其中:A为经过激活函数后的输出,k为神经网络的层数,g为激活函数,W为权重,b为偏置。
2.2 BP神经网络数据结构设计
在2.1小节BP神经网络嵌入式实现原理的基础上,本系统提出了一种基于ARM平台的BP神经网络结构,完成了BP神经网络在ARM上的便利使用。BP神经网络模型中根据实际应用而改变的有神经元数、隐藏层数和隐藏层激活函数等参数,若上述过程有误那么BP神经网络在ARM平台上的实现以及程序的封装设计将出现问题。为了解决上述问题,提高程序在ARM平台上的通用性,这里提出了一种BP神经网络的结构,如图2所示。
图2 神经网络数据结构
其中pnext:链表指针区,pdata:链表数据区,X:输入矩阵,W:权重,b:偏置,A:输出矩阵,row:矩阵行,col:矩阵列,data:矩阵数据
由于BP神经网络的隐藏层数需要根据实际情况而定,因此BP神经网络的建立是一种动态建立的过程。而其中链表则是一种动态建立的数据结构,链表数据的大小和预设内存空间无需预先获知,只需保证有数据可随意地插入链表中,这样就可以充分利用计算机的内存空间也可以很好地保持BP神经网络的动态性。因此,在神经网络结构的设计上应选用链表[5]。本文选用得是带有头结点的链表即用头指针分配头结点,这样就可以让链表的程序简化、操作逻辑更加直观清晰、代码可读性也更好[6]。
BP神经网络在ARM平台上的实现分为两步:建立神经网络和运行神经网络。建立神经网络过程需先判断是否正在创建输入层,若是则先创建一条新的链表,否则表示链表已经存在无需重复创建。之后再对新创建结点中神经网络层帧的各模块数据进行初始化,最后将结点添加进链表。然后再创建下一层神经网络,直至最后一层。运行神经网络的过程即是对链表进行遍历的过程,链表的遍历从头结点开始。遍历过程中需要进行公式(1)的计算,计算的结果即为输出矩阵的数据,然后将本层输出矩阵的数据传入下一层输入矩阵中,直至链表遍历结束,神经网络运行的结果存放在最后一层的输出接口中,然后仅需对最后一层的输出接口的数据根据实际应用进行解析即可。ARM平台上建立和运行神经网络的过程如图3所示。
图3 ARM平台上神经网络建立与运行流程图
3 实验结果与分析
3.1 实验材料
采用市场选购新鲜的完好鸡蛋和裂纹鸡蛋各250枚,其中裂纹蛋的裂纹为人为地随机制造。为了保证实验模型的识别和预测能力,本实验将500枚鸡蛋样本分为两组,其中400枚作为训练集,通过10倍交叉验证法验证模型性能。另外100枚作为预测集,用来检测模型的预测能力。禽蛋声音信号的敲击设备采用电磁驱动的伸缩式敲击设备,参照发明专利一种禽蛋裂纹敲击声音采集装置[7](专利号201320573927.5)。禽蛋特征提取来自前人在基于声学的禽蛋裂纹领域的研究[8]选取5个特征变量均能反映完好和裂纹鸡蛋的差异主要特征有:尾部动态变化、总能量、x向频谱重心、y向频谱重心、中低频能量。
3.2 实验结果与分析
为了验证在PC训练好的权重和偏置导入到ARM平台不会影响网络模型的预判结果。首先,在计算机端利用TensorFlow框架进行BP神经网络模型训练,输入的鸡蛋裂纹特征参数有:尾部动态变化、总能量、x向频谱重心、y向频谱重心、中低频能量。训练结束后将得到权重和偏置导入到ARM平台。在ARM平台上建立与计算机端一致的BP神经网络,然后传入预测集数据运行神经网络进行测试并对ARM实验系统和PC实验系统神经网络的测试准确率进行比较结果如表1所示。
表1 BP神经网络准确率比较
根据实验结果,PC端神经网络判别准确率与ARM平台上的准确率一致,说明通过PC训练得到的权重和偏置导入到ARM端不会造成神经网络判别准确率的下降。
4 结语
针对原有的禽蛋裂纹检测技术不能满足工业生产要求的缺陷,本文提出一种面向ARM处理器的BP神经网络的优化方法。该方法的主要思想为通过禽蛋数据采集及处理,提取禽蛋的5个特征参数,在PC端完成BP神经网络模型的训练得到的权重和参数导入到ARM平台,为了BP神经网络更好地在ARM平台上运行设计链表结构的方法使得BP神经网络有更好的动态性。该算法结构可以实现禽蛋裂纹快速检测,判别准确率达到90%以上,可以达到工业化技术要求。