穴位的位置是否找准会直接影响治疗效果,因此设计了一种基于粒子群算法优化神经网络(PSO-BP)的穴位相对坐标预测模型,然后与ARM结合构成一个可以用于人体穴位定位的系统。首先采用PC进行MATLAB仿真训练学习,然后将最优权值及阈值保存下来并简化算法嵌入ARM内,将在线预测转变为离线过程。实验结果表明:经粒子群优化过的BP神经网络有效地改善了局部极值缺陷,可应用于定位端预测穴位的位置,并在LCD中显示穴位相关信息,控制端收到位置数据后可执行电机上的运动操作。
0 引言
人体穴位分布容易受到人体尺寸和比例的影响,所以具有以下两个特性:非线性、模糊不确定性。人体穴位分布的解决方法主要有3种:视觉技术、光学定位法和专家系统法。但是这些方法存在着一些不足:视觉技术采用的是二维视觉测量结合图像处理进行人工标志穴位定位,庞大的分析系统降低了定位的实时性,并且应用场合有局限[1];光学定位法可模拟人眼得出物体的三维坐标达到定位目的,但是定位标靶和周围环境背景都会给定位造成极大的干扰,降低定位精度[2];专家系统法是整合专家经验知识,在实际应用中很难将这些经验转化成一系列规则。
人工智能和仿生技术的发展,出现了很多基于人工智能的预测方法。为了提高中医按摩机器人穴位寻找行为规划的精度,山东建筑大学提出了一种基于遗传算法优化BP神经网络的中医按摩机器人穴位坐标预测方法。结果表明,该方法对中医按摩机器人寻找患者穴位坐标具有较好的精度和预测准确性[3]。由于遗传算法的交叉变异部分会使整个收敛过程变慢,在实际应用中,稳定性可能会比较低。而粒子群算法过程比较简单,所以采用粒子群算法优化BP神经网络算法建立稳定准确的穴位坐标预测模型[4],简化学习过程后将过程移植进ARM[5-6]。最后测试表明:优化后的BP神经网络具有更快的收敛性和适应性,还有比较高的预测精度和稳定性。
本文提出的整体系统设计方案是基于ARM和PSO-BP的人体穴位定位,该系统还具备穴位坐标实时显示及穴位信息播报的功能。由于整个算法的学习过程比较复杂,循环次数非常多,会拖慢整个系统的运行速度,因此在PC上完成整个动态学习过程然后将最优权值及阈值保存输出,并将简化后的算法嵌入ARM内,实际使用时直接根据提示输入信息后即可达到穴位定位的目的。
1 PSO-BP神经网络
1.1 算法模型设计
BP神经网络是目前应用最为广泛和成功的神经网络之一,该网络的特点是信号前向传递,误差反向传播调整网络的权值和阈值。BP神经网络的拓扑结构包括输入层(input)、隐含层(hide layer)和输出层(output layer),如图1所示,最终系统想要达到的效果是输入已知的某穴位坐标值(X坐标,Y坐标),然后预测出其他3个穴位的坐标值。
系统设计的BP神经网络结构采用可以预测几乎所有的非线性函数的三层拓扑结构,输入层神经元为2,输出层神经元为6。对于隐含层(中间层)的神经元数目的选取采用式(1)来确定[7]:
其中,MidNum为隐层节点数,InNum、OutNum分别是输入和输出节点数,a是1~10之间的常数。
最后BP神经网络的拓扑结构为2 —8—6;训练函数采用“taingdx”;隐含层和输出层选取的传递函数均为“tansig”;选择的训练次数为3 000;训练目标误差为0.000 1。
粒子群(PSO)算法用于网络训练可以对权值和阈值的选取进行优化,而不是盲目地给定初值,而且优化过的神经网络会防止神经网络陷入局部最优并提高精度。因此PSO优化BP神经网络的核心是:BP网络中的权值和阈值的集合是群体中的每个粒子的位置集合,其个数是粒子的维度。然后对神经网络进行迭代优化训练,网络的输出误差作为算法的适应度函数即式(2)。
式中,S是学习训练样本,Tk是期望输出,Yk是实际输出。整个算法流程如图2所示。
1.2 MATLAB仿真
以人体的背部为例,穴位是有规律分布的,所以将大椎穴作为坐标原点(0,0)建立坐标系,然后选取大柕穴的相对坐标作为输入,目标输出为脾俞、膈关和命门的相对坐标。仿真训练测量了70组不同测试者的穴位相对坐标,随机选取其中的60组作为学习样本,剩下的10组作为测试样本训练神经网络。
在MATLAB中进行编程,粒子群算法反复迭代200次后将粒子编码转换成BP神经网络的初始的阈值和权值再继续网络的学习过程。仿真结果如图3所示,可发现均方误差随着训练的次数增加在逐渐变小,直到训练1 015次时可达到要求的误差值。
为了方便清晰观察,以第一组预测数据为例通过MATLAB输出预测曲线图,如图4所示,可以看出预测值非常接近实际值,初步证明预测模型的建立是正确的。
最后计算PSO-BP算法数据的预测值和实际值的绝对误差,输入一组大柕穴的坐标(X轴:24 mm,Y轴:24 mm),如表1所示,绝对误差没有超过10 mm,可以看出神经网络对穴位位置的预测精度可以保证在10 mm以内,满足定位要求。
2 系统硬件设计
系统采用双机通信和独立电源的方式来工作,主要分为两部分:主机是穴位定位系统实现穴位预测功能,从机为位置控制系统实现穴位实现功能。系统的整体硬件结构如图5所示。
2.1 穴位定位系统
这部分主要以可视听为目的,按键采用的是4×4行列式的排列,包括0~9数字键和确认取消键。使用3.2寸TFT LCD液晶屏进行参数输入和预测结果的显示。按键输入所需穴位坐标值,此时在LCD可监视输入是否正确,按下确认键后便可执行编写好的预测程序,并在液晶屏上显示输出的穴位坐标值同时通过WiFi向位置控制系统发送坐标值。
2.2 位置控制系统
这部分是控制操作为主,当WiFi连接成功后会有语音提示然后启动电机,电机控制模块有4个直线步进电机,其中分别对应了背部3条主要经络督脉和两条足太阳膀胱经。穴位定位系统发出相应的穴位位置后,电机带动装置移动到对应位置,移动结束LED指示灯亮起提醒使用者操作已完成,如果控制系统接收到的位置信息有误,蜂鸣器会发出三声声警报。最后操作无误语音会播报相应的穴位相关信息,便于使用者了解穴位的相关知识和治疗功效。
3 PSO-BP算法简化软件设计
整个算法体系非常庞大,而且数据的处理形式都是以浮点数进行的,单片机的计算能力有限,所以考虑将算法简化后移植进穴位定位系统的主芯片中。思路是首先利用MATLAB训练出神经网络的最佳权值和阈值矩阵,然后将神经网络导出移植到ARM中。对于定点CPU来说必须要按照IEEE-754标准算法来完成运算,会耗费大量的时间。系统使用的定位芯片STM32F407I属于Cortex-M4F架构,带有32位单精度硬件FPU,支持浮点指令集,相对于Cortex-M0和Cortex-M3等,高出数十倍甚至上百倍的运算性能。
神经网络算法主要分为两个阶段:第一为学习阶段,这个阶段的任务就是通过反向误差传播调节最适权值和阈值,PSO算法主要就是优化这个过程,寻找到最优的初始权值及阈值给网络;第二为应用阶段,这一阶段就是使用达到要求的权值及阈值来解决实际的问题。第一阶段需要做大量的循环并且PSO算法的加入使这一过程的计算量更大,所以采取将第二阶段用C语言输出融合进ARM芯片中的方案。
利用MATLAB搭建神经网络学习框架对这一过程进行在线训练,提取出输入层及隐含层的权值及阈值,将这些训练好的参数以浮点数数组的形式存入ARM中。接下来就是在ARM中应用神经网络算法对人体穴位位置进行预测,这一部分是将数据输入给一个已知结构的神经网络,然后对网络的前向过程进行求解。
简化后过程包含归一化处理、神经元乘加运算和传递函数计算。归一化处理是将输入数据的值限制在[0,1]之间,这样统一标准会提高数据的精确性。系统采用的方法是离差标准化,对原始数据进行线性变换,转换函数为:
其中Xmax为样本数据的最大值,Xmin为样本数据的最小值。接下来神经元的加乘过程如图6所示。
所以加乘运算的公式为:
这个公式涉及的两个关键参数权值Wkn和偏置bk,在ARM中转换成float可以精确到小数点后7位。
传递函数的选择是非线性双曲正切S型函数tanh,在STM32F4的函数库内没有这个双曲正切函数,所以要采用泰勒展开的形式化简。tanh的公式为:
将e2x展开结果带入式(6)中,精度可达到小数点后4位。
STM32F4采用硬件开启FPU的方式,首先将协处理器控制寄存器(CPACR)的第20~23设为1,然后在编译器Code Generation中设置Use FPU开启FPU的硬件使能。将上述3个部分转换成3个C语言程序子程序,然后在主程序中依次调用即可达到实时输出预测结果的目的。整个系统的软件设计如图7所示。
4 硬件测试与结果分析
将算法简化程序写进STM32F4中,向定位系统输入一组大柕穴的坐标(X轴:24 mm,Y轴:24 mm)然后在LCD液晶屏上记录下预测结果,同样采用相对误差作为衡量指标,如表2所示。
从表2中可以看出预测的绝对误差没有超过15 mm,但是相对于MATLAB给出的预测结果(表1)准确性下降了。原因是从MATLAB中导出参数以浮点数形式存入ARM时会影响精度,而且对于传递函数的泰勒展开时也会牺牲掉一些精度,这些损失叠加后会对最后位置输出的准确性造成影响。
5 结束语
本文设计了基于ARM和PSO-BP的人体穴位定位系统,该系统可以根据输入大柕穴的位置后预测出命门、脾俞、膈关的穴位坐标。因为BP神经网络容易陷入局部最优,所以加入了PSO算法对其进行优化处理,然后在STM32F407I中嵌入PSO-BP简化算法软件,可以进行实时穴位坐标预测。实验表明该系统可以比较好地预测出穴位位置,然后控制电机移动到相应位置,再进行微调,完成对穴位定位。