罗肖媛,黄文静,曾学武,段小刚,郑哲文,王子怡
(1.中南林业科技大学材料科学与工程学院,湖南 长沙 410004;2.和天(湖南)国际工程管理有限公司,湖南 长沙 410006;3.中南智能湖南工业4.0创新中心,湖南 长沙 410000)
表面肌电信号(surface electromyography,sEМG)是一种能够反映肌肉兴奋程度的生物电信号,肌电信号的获取可以分为针式电极采集[1]和表面电极采集[2],目前被广泛应用于人机接口的研究。其中,基于sEМG 的手势识别研究最为广泛,其可以被应用于智能假肢控制、康复训练、机器人遥操作等[3]。基于sEМG 的手势识别问题隶属于模式识别中的多分类问题,大致有两种方法,即基于传统机器学习方法和基于深度学习方法。基于传统机器学习方法的表面肌电信号的分类器模型主要有K 近邻[4]、线性判别分析[5]、支持向量机[6]、朴素贝叶斯和隐马尔科夫[7]等。深度学习方法可以弱化特征提取过程,且可以替换分类器步骤,近年来已经成功应用于很多领域,如图像分类、语音识别[8]和视频分类[9]等,近几年也逐渐用于基于sEМG 的手势识别。目前,深度学习方法主要是将原始sEМG 分割后直接输入深度学习模型中,并自动从高维的原始sEМG 信号中提取有用信息,而将肌电信号处理后转化为灰度图,输入深度模型进行手势识别的研究还处于初级阶段。
本文采用深度学习模型替代传统分类器,利用深度学习强大的表征能力对肌电信号进行再加工来分类。具体而言,首先将肌电信号进行窗口滑动并转化为灰度图像,再将灰度图片集输入深度模型进行手势识别[10]。该方法将肌电手势识别完全转化为图像识别问题,所使用的深度模型网络结构简单,方便结合图像识别的各种技术,计算量少且结果优异。论文提出的识别方法为人体sEМG 信号分析提供了新思路,并可能为基于人体生物学的人机交互研究带来新的启发。
肌电信号被广泛应用于医学、运动科学、假肢控制、人机交互等领域。在假肢控制领域,肌电信号一般用于感知残肢的运动意图,从而实现假肢的智能控制。在人机交互领域,肌电信号可以用于实现手势识别,从而实现人机自然交互。基于肌电信号的手势识别技术具有实时性强、无需接触、精度高等特点,大致过程如图1 所示。
图1 表面肌电信号的处理与应用
本文利用深度学习的强大表征能力对灰度图像加以分类。在数据预处理阶段,采用软件滤波技术对表面肌电信号数据进行处理,去除其中的噪声和干扰,同时保留信号中的有用信息,从而改善信号的品质,以提高信号的质量和可读性。其次,对分割后的信号进行滑动窗口选择,以提高手势识别的准确率。此外,将肌电信号归一化到0~1 的灰度图,基于该灰度图数据库,使用ResNet50 模型对肌电信号进行手势识别。该方法的优点在于将传统肌电信号转换为具体的肌电灰度图像,从而完整地表达特征。与此同时,使用窗口分割技术可以达到增加数据集的效果。该方法的具体过程如图2 所示。
图2 灰度图的肌电手势识别方法流程图
原始肌电信号中夹带着低频和高频的干扰信号,真正有用的肌电信号的频率范围大致在10~500 Hz。为了去除噪声,需采用小波滤波作为sEМG 的预处理方法。小波滤波对于已知噪声频率范围且信号和噪声的频带相互分离的情况非常有效,并且对肌电信号的去噪效果良好。小波滤波后的肌电信号如图3 所示。
图3 肌电信号
对采集的表面肌电信号数据进行分割时,常用窗口分析法对原始数据进行预处理。该方法利用滑动窗口将肌电信号分割成多个窗口,并对每个窗口进行特征提取和分类。通常采用的窗口分析方法有两种,一种是无重叠的相邻窗口分析,另一种是有重叠的窗口分析。采用重叠数据时间窗口进行数据分割,如图4 所示,其中时间窗口长度和增量间隔分别由w和t控制,每个窗口都与相邻的两个窗口重叠一部分数据。该方法可以增加数据样本,提高模型的稳定性和泛化能力,考虑时间序列特征,适用于多种应用场景,是一种有效的数据分析方法。
图4 重叠数据分割
在对采集的原始肌电信号进行预处理时,本文采用重叠窗口分割法。具体做法是:采用滑动窗口将肌电信号分割成多个窗口,并对每个窗口进行滤波去噪。以肌电信号数据s1 为例,s1 为6 列肌电信号,每一列表示一个肌电信号通道,并设置肌电信号重叠数据时间窗口为w,滑动窗口为t,对数据进行分割,得到x个原始肌电信号数据窗口,分别为f1~fx,每个数据窗口fi为m行n列的原始肌电信号数据窗口,如图5 所示。
图5 肌电信号滑动窗口法
灰度图像的像素值范围通常为0~255。由于灰度图像具有较小的数据量和较高的压缩比,因此可以通过形态学运算和滤波等方式进一步优化图像质量。此外,灰度图像可以直观地反映肌肉活动的状态和程度,便于进行肌肉活动的可视化和分析。肌电信号转化为灰度图的过程可以分为信号处理和生成灰度图像两个步骤。生成灰度图像的过程需要将经过滤波处理的肌电信号数据映射到灰度图像的像素值域上。肌电信号fi经过滤波后得到Hi,再将Hi转化为灰度图。值得注意的是,数据被归一化处理,使得Hi表格中的数据都被映射到了0~1 范围内。灰度指的是黑白图像中的颜色深度,其范围通常为0~255,其中白色对应255,黑色对应0。为了生成灰度图Gi,将Hi的0~1 数据再映射到0~255 范围内,每个Hi中0~1的数据对应0~255 内某一灰度值的带有颜色的小方块。图6 展示了从Hi得到的灰度图Gi,该方法同样适用于生成所有的灰度图G1 至Gx。
图6 灰度图转化
ResNet50 是一种具有50 层的深度卷积神经网络模型[11],其主要特点是采用了残差块结构,允许网络在深度增加的同时保持较高的准确率。ResNet50 采用跳跃连接(shortcut connection)将输入端与输出端直接相连,使得网络可以学习残差函数,即输出与输入之间的差异。这种结构可以有效地减少网络中梯度消失的问题,同时提高模型的准确性[12]。ResNet50 网络共分为六大部分。第一部分为输入模块,输入模块主要负责接收输入图像并对其进行预处理。在 ResNet50 中,输入图像的大小通常为224×224×3。输入模块包括卷积层、批量归一化层、ReLU 激活函数和最大池化层(Мax Рooling)。第二到五部分为残差模块,残差模块是 ResNet50 的核心组成部分,负责学习输入特征的残差表示。残差模块的主要作用是将输入特征与学习到的残差进行相加,然后通过ReLU 激活函数进行非线性映射。这有助于在保持网络深度的同时,解决梯度消失问题。每个残差块包括两个卷积层和一个跳跃连接,跳跃连接使得网络可以跨过几层卷积层直接连接到后面的层,从而让梯度可以更快地传递[13]。四个残差模块包含ConvВlock和IdentityВlock两种残差结构,ConvВlock 可用于网络维度的改变,IdentityВlock通过串联加深网络。第六部分为输出模块,输出模块负责将残差模块的输出转换为最终的分类结果。通常使用Softmax 函数将全连接层的输出转换为概率分布。其网络结构如图7 所示。
图7 ResNet50 网络结构图
实验使用公开的肌电信号数据集Ninapro 中的DВ6 数据集,DВ6 数据集的肌肉活动由14 个DelsysTrigno 表面肌电信号无线电极测量(此实验仅使用6 个电极通道的肌电信号),表面肌电信号在2 000 Hz 采样,采集的对象由10 位健康受试者自愿组成。实验的主要内容是对一组14 个物体进行7 次重复抓取,每位受试者每个手势动作持续4 s,随后五指放松休息4 s[14]。本实验使用其中三个手势动作数据进行识别,这三个手势动作分别为大口径抓取、拇指内收和食指伸长,如图8 所示。
图8 三个手势动作
实验使用肌电数据基于移动平均法的sEМG信号活动段分割,将信号按照一定的移动步骤分成许多个小窗口,决策窗口大小为300 ms,滑动窗口大小为30 ms。其次,针对每个小窗口内的肌电信号数据形成灰度图。通过有重叠的窗口分析,可以使数据集得到有效扩充,并且使三个手势灰度图有较高的区分度。
在实验中,我们对4 位受试者进行了手势识别,得到了三个表格,分别对应大口径抓取、拇指内收和食指伸长。这三个表格被命名为s1,s2 和s3。为了预处理原始肌电信号s1、s2 和s3,本实验采用窗口分析法,因为表面肌电信号在2 000 Hz 采样,1 ms 对应2 个数据,所以将决策窗口w设置为600(300×2),滑动窗口t设置为60(30×2),得到600 行、6 列的肌电信号窗口。每位受试者的手势数据分割后,得到1 000 个原始肌电信号数据窗口,分别标记为f1 到f1 000。针对f1 到f1 000 的每个原始肌电信号数据窗口,进行小波滤波。使用Мatlab 将滤波后数据集转化为1 000 张灰度图,最终得到大口径抓取、拇指内收和食指伸长的灰度图各1 000 张,每个手势收集了4 人的数据,各手势共计4 000张灰度图。三个手势的灰度图如图9所示。
图9 三个手势的灰度图
为了提高分类模型的稳定性和泛化能力,实验采用了数据增强的方法,将原始数据扩充到7 200 张,并使用这些数据对ResNet50 模型进行训练和调优。三个手势动作的数据集按照6:2:2的比例分为训练集、验证集和测试集,其中训练集包含2 400 张图像,验证集和测试集各包含800张图像。为了防止图像位置变化造成的信息丢失,我们采用了随机resize 裁剪到256×256、中心裁剪到224×224 等方式进行数据预处理,并使用正规化等技术进一步扩充数据集。在模型训练方面,采用了迁移学习和预训练权重的方式,并使用МultiМargin 作为损失函数,使用自适应动量的随机优化方法(Adam)作为优化器。初始学习率设定为0.001,训练批次为150,以防止过拟合的发生。
为了评估卷积神经网络经典模型ResNet50 在手势灰度图数据集上的性能,使用数据集损失值和准确率来作为模型好坏的评判标准。其中,TP表示真正例,TN表示真假例,ALL表示所有例。通常情况下,准确率越高,分类模型的准确率就越高。分类准确率的计算公式如下:
在实验过程中,可以通过验证集的损失值对模型性能进行分析,损失值的大小可用于判断模型是否收敛。判断的标准是损失值应呈现出收敛的趋势,并且验证集损失值处于不断下降,但并非损失值越接近于0 就越好。如果验证集损失值基本上不改变,那么模型基本上就已经收敛了。为了防止模型过拟合,ResNet50 采用迁移学习迁入预训练权重,并训练网络部分参数,在网络深度加深的同时,模型中的残差块有效克服了网络退化等问题,并保证了性能不会下降;针对数据集较少的难题,利用预先训练好的ResNet50 模型,通过微调和迁移学习来适应新的手势识别任务。
实验平台选用基于pytorch 框架的ResNet50模型,此模型可以验证数据集的有效性并对手势灰度图进行识别。在验证和识别的过程中,使用ResNet50 模型的损失值(loss 值)和准确率来评价数据集的有效性和手势灰度图识别效果。ResNet50 模型的准确率包含train accuracy(模型训练时的准确率)以及valaccuracy (模型验证时的准确率)。ResNet50 模型的valaccuracy 由55%上升到90%,且train accuracy 与valaccuracy 在经过40 次迭代后趋近于稳定。ResNet50 模型的损失值包含train loss(模型训练时的损失值)以及val loss(模型验证时的损失值)。ResNet50 模型的val loss 由0.587 6 下降到0.139 5,且train loss 与val loss 在经过40 次迭代后趋近于稳定,之后继续训练网络,直到150 次时停止训练。测试集上模型的准确率可达到93%模型的准确率与损失值曲线如图10 所示,可见训练效果明显。
图10 损失值变化及准确率变化
在模型训练中,使用采集对象1、2、3 的前1~10 轮手势作为训练ResNet50 模型的数据集,通过150 轮训练,可以得到专门针对肌电灰度图的手势识别模型。接下来运用ResNet50 已训练模型对采集对象1 的后11~18 轮手势数据集进行泛化性能测试。具体而言,泛化测试数据集包含采集对象的三个手势各800 张图像的数据集,并使用ResNet50 已训练模型进行测试,ResNet50 已训练模型的准确率可以达到71%。这一结果说明模型在新的手势数据集上也有一定的泛化能力,由此可知训练出的模型在手势分类上效果较好。具体训练数据见表1。
表1 ResNet50 模型训练效果
本文将肌电信号转化为灰度图,并基于ResNet50 的深度学习网络模型以实现对肌电信号手势灰度图的识别分类。文中提出的灰度图方法能够将肌电手势识别转化成图像识别问题,图片涵盖大量肌电信号信息,能保证肌电信息的完整。同时,它所使用的深度模型网络结构简单,方便结合图像识别的各种技术,计算量少且结果优异。研究结果表明,该方法在手势识别方面具有较高的准确性和鲁棒性。然而本研究也存在需要进一步探讨的问题,例如数据集采集自公共数据库,数据种类较少且不具有普遍性,网络结构仍可以进一步优化。在后续的研究中,将进一步改进肌电信号灰度图,使其包含更多信息量,在实验平台中得到更高的准确率以及更好的泛化性。