基于注意力机制的耐力训练动作识别方法*
2024-03-23田新壮孙少明王君洪
田新壮,孙少明,王君洪
(1.安徽大学物质科学与信息技术研究院,安徽 合肥 230601;2.中国科学院合肥物质科学研究院,安徽 合肥 230031;3.中科合肥技术创新工程院,安徽 合肥 230088)
0 引 言
传统耐力训练方法训练过程枯燥,同时对场地、天气和训练时间存在要求。目前市面上有一些诸如Keep 这类的健身软件,通过视频语音引导训练者完成训练动作,训练者仅需一部手机可于家中完成训练,不需要器械,具有训练时间碎片化的特点。但是需要训练者自觉完成训练,缺少监督性。
本文提出一种基于注意力(Attention)机制与门控循环单元(gated recurrent unit,GRU)的、面向耐力训练的Attention-GRU动作识别方法。在手机端上实现了对耐力训练动作的识别和监督。
1 相关研究
动作识别作为近年来的研究热点之一,目前关于动作识别的方法主要有两种,第一种是基于可穿戴设备或Kinect设备采集人体动作信息。例如曾亿山等人[1]基于六轴传感器实现对婴幼儿爬行动作的识别。杨文璐等人[2]利用Kinect实时采集下肢动作的骨骼点序列信息实现对康复动作的识别与引导。李浩等人[3]利用Kinect 提取手势深度信息,基于支持向量机(support vector machine,SVM)算法和动态时间规整(dynamic time warping,DTW)算法实现火车驾驶员手势识别。这种方法基于可穿戴设备或Kinect设备具有动作识别准确率高的优点,但是对设备存在要求。第二种是基于视频图像的人体动作识别方法。杨君等人[4]基于OpenPose提出一种图像动作识别指导系统,实现人体动作识别。王威等人[5]提出一种基于BlazePose[6]的动作识别算法,采用梯度提升决策树(gradient boosted decision tree,GBDT)算法实现对开合跳、双臂伸展、深蹲以及跳绳4个动作的识别,该方法基于手机端实现动作识别,具有实时性以及便携性,但存在算法总体识别准确率较低,动作识别种类较少的问题。
2 耐力训练动作识别方法
本文的耐力训练动作识别方法由输入层、算法层和输出层3个部分组成。其结构如图1所示。
图1 耐力训练动作识别方法结构
2.1 移动端数据采集App
本文通过自己开发的数据采集App 采集人体骨骼点信息,整体流程如图2 所示,首先将手机固定在手机支架上,距离测试者约1.8 m,保证摄像头可以拍摄测试者全身的视频信息,视频输入至BlazePose 网络模型中,模型输出每一帧视频图像的人体骨骼点数据,随后将数据存储至Excel表格中。
图2 数据采集流程
BlazePose[6]是一种可实时运行于手机端提取视频图像中的人体骨骼点二维坐标的轻量级卷积神经网络。如图3所示,左侧为该网络提取的33个骨骼点,其中有面部、手部和足部信息,这部分信息在本文动作识别时作用不大并且会增加计算量。因此选取做耐力训练时变化幅度较大的节点作为输出,图3右侧为本文选取的13个关键节点。
图3 BlazePose提取的人体骨骼点信息
2.2 数据预处理
在原始数据采集的过程中,存在镜头抖动、光线变化以及网络模型自身性能的干扰,会有噪声产生。本文使用滑动窗口均值滤波算法对骨骼点数据进行预处理,算法过程如下:如图4所示,滑动窗口S的大小为5,骨骼点数据序列长度为n,对于时间t这一时刻的数据在处理后为t-2 至t+2这一时间段共计5帧数据的均值。计算公式如下所示
图4 滑动窗口均值滤波算法
2.3 特征提取
人体动作识别是基于时间序列的分类问题[7],因此输入特征需要包含时间维度上的信息。本文采用滑动窗口来提取时间维度上的特征,实验的手机采样频率为(28 ±5)fps左右,因为帧率存在波动,将输出降采样至20 fps。对于本文耐力训练动作数据集来说,最佳窗口为40 帧,最佳步长为30。
因为滤波后13个关键节点的位置信息属于低阶特征,无法充分表达动作信息,所以本文基于图3中13个关键节点构建基于静态和动态特征的融合特征。
2.3.1 静态特征
静态特征包含12个距离特征与10个角度特征。其中12个距离特征如表1 所示,因为本文模型采集的数据为2维信息不包括深度信息,为了消除测试者离摄像头远近所带来位置的差异,在计算距离时需要除以x,y轴对应的基准值。以左右臀部x轴的相对距离为例,其计算公式如下
表1 静态特征
以左肩部与左肘部y轴的相对距离为例,其计算公式如下
其中,x轴方向的基准值为xbase,y轴方向的基准值为ybase。计算公式如下所示
本文选取的10个角度特征如表1 所示。其中,2 个骨骼点P1(x1,y1),P2(x2,y2)与原点构成的夹角θ的计算公式为
其中,由3个骨骼点P1(x1,y1),P2(x2,y2)和P3(x3,y3)构成的夹角θ的计算公式为
2.3.2 动态特征
静态特征包括了关节点的距离特征与角度特征,运动作为一个动态的过程,关节角速度信息对于动作识别也很重要。本文提取了10个动态特征,是上述提取的10 个角度对应的角速度特征。在计算角速度时,选取当前帧j与上一帧j-1 之间角度的差值作为当前帧的角速度。角速度ωi的计算公式为
2.3.3 融合特征
本文共选取了32个特征,分为12个距离特征和10 个角度特征以及10个角速度特征。距离特征组成的向量D为
角度特征组成的向量φ为
角速度特征组成的向量W为
提取的融合特征组成的向量T为
最终模型输入的每个窗口包含40帧数据,每帧数据包括32个特征。
2.4 动作识别算法
本文提取的融合特征是骨骼点运动的距离,角度以及角速度特征的集合。网络模型的输入为窗口大小为40 的一系列时间序列上的特征,这就要求动作识别模型能够处理时序信号。本文采用Attention-GRU 方法对骨骼点序列进行动作识别。
2.4.1 GRU层
循环神经网络(recurrent neural network,RNN)是一种处理时序信号常用的神经网络[8],RNN处理当前数据受到之前输入的数据的影响。但RNN无法处理长距离依赖,在长序列训练过程中性能不佳。LSTM[8]通过单元状态解决了RNN模型不能记忆长时间信息的缺点,在处理长序列具有更佳的性能。
本文采用GRU处理时序信息,GRU是LSTM的一种变体[9],其结构如图5 所示。相比起LSTM 具有3 个控制门单元,GRU 有2 个控制门单元,分别是重置门与更新门,GRU通过重置门与更新门控制单元状态,从而克服了RNN的缺点。与LSTM相比GRU 计算量更小,训练时间短,同时两种模型性能差异不大[10]。
图5 GRU结构
rt和zt分别为GRU的重置门和更新门,重置门用于控制t-1时刻状态信息需要遗忘多少,更新门则控制有多少t-1时刻的状态信息被传递至t时刻。Wz,Wr,Wh和Uz,Ur,Uh分别为神经元t时刻的输入权重矩阵和循环输入的权重矩阵,bz,br,bh为偏置向量。σ为激活函数Sigmoid,其输出值范围为(0,1),其公式为
上述公式中,⊗为矩阵的Hadamard积。tanh为双曲正切激活函数,其输出值范围为(-1,1),其公式为
首先,t时刻重置门和更新门的状态由t-1 时刻的隐含状态信息ht-1和t时刻的输入xt获取。然后对t时刻的隐含状态h′t进行计算,最后计算t时刻的隐含层输出ht。
2.4.2 Attention层与输出层
本文在动作识别模型中引入Attention 机制,通过Attention机制加强GRU网络模型某个时间节点与其他时间节点信息时间的关联性,解决GRU网络模型在处理长时间序列容易忽略重要时序信息的不足,使得模型更加关注时序输入中的重要信息。Attention机制模型结构如图6所示。
图6 Attention机制结构
其中,ht为GRU 网络输出的第t个特征向量,通过解码器得到权重系数st相乘累加求得最终的输出向量y。其中,解码器使用一层全连接网络,激活函数为SoftMax。⊗为矩阵的Hadamard积。计算过程如下
将Attention机制层的输出作为输出层的输入,使用一层全连接层进行分类,激活函数为SoftMax,得出最终的动作识别结果,计算公式如下
式中W为Attention 机制层输出至分类结果的训练权重系数矩阵,b为偏置,pres为动作识别结果向量。
3 实 验
本文构建了新的耐力训练动作数据集,对本文提出的Attention-GRU算法和传统机器学习算法LSTM、GRU 进行对比实验,并从准确率(accuracy,A)、精确率(precision,P)、召回率(recall,R)3个方面对实验结果进行评估。
3.1 数据集构建
本文基于耐力训练动作构建数据集。共选取测试人员20名,其中男性13名,女性7名。20位测试人员的基本信息如表2所示。
表2 实验测试人员基本信息
本文使用移动端设备采集数据,设备型号为小米10 智能手机,CPU为高通865,12 GB 运行内存。将设备使用手机支架固定,测试者站在手机的正前方,保证测试者全部身体都能被摄像头拍摄到。同时打开录屏功能,后续人工对数据集进行标注。
每一位测试者执行本文制定的8 种耐力训练动作,各执行1 min,完成一种动作后休息5 min,保证动作的标准。20位测试者完成测试后,每种动作共有20 min的骨骼点数据,这些数据构成本文的数据集。
3.2 评估标准
采用10折交叉验证法,将数据集划分为10 份不重合的子数据集,每次选取1份子数据集作为测试集,其余9 份为训练集,共进行10 次实验,取平均结果为最终的实验结果。
本文从A,P,R以及混淆矩阵对实验结果进行评估。其中,TP为真正例,TN为真反例,FP为假正例,FN为假反例。公式如下
式(25)中,0≤i,j≤7,n为人工标记为i动作,模型识别结果为j动作。
3.3 实验结果与分析
实验设备配置:Intel®i5-7400 处理器,8 G 内存,操作系统为Linux。编程语言:Python3.8。框架:TensorFlow2.4。
首先对该数据集下不同窗口长度和窗口步长下3种算法的识别情况进行实验,结果如表3,其中Attention-GRU表示本文的算法。这里使用A评估最优的窗口与步长,本文提出的算法在不同窗口长度和窗口步长下均比另外2种算法A高,同时3种算法在窗口大小为40,步长为30时A最高。
表3 窗口大小与步长实验结果
当窗口大小为40 帧时,A最高,因为本文提取的骨骼点信息经过降采样后为20 fps,40 帧为2 s的数据。本文数据集的动作执行时间都在2 s 以内,40 帧的窗口大小可以有效地包括整个动作特征。当步长为窗口大小的75%时相比其为窗口大小的50%时,能够更加有效地解决1 个窗口内包含2个动作信息的问题,减少包括2 个动作信息的窗口的数量,从而提高了A。
基于表3,本文选取40 帧的窗口大小和30 的步长对3种算法进行评估。识别结果如表4 所示,本文提出的方法在A,P,R上均比GRU和LSTM算法要高,这证明通过融合Attention机制能够更加有效地关注输入时重要的时序信息,从而提高动作识别性能。同时,因为GRU 具有易于训练的优点,在数据集较小的情况下,通常性能更优,因此基于本文构建的数据集的GRU比LSTM性能更好。
表4 3 种算法的识别结果%
为了更详细地分析8 种动作的识别结果,给出3 种算法的混淆矩阵。如图7 所示。在耐力训练动作数据集中,混效率最高的动作是平板支撑,这是因为该动作与靠墙俯卧撑的关节角度较为相似。同时开合跳、双臂伸展、仰卧起坐和坐位体前屈都取得了100%的识别率。本文方法在所有动作的识别率上都比GRU高,除了靠墙俯卧撑和平板支撑识别率比LSTM低外,其他动作识别率也都比LSTM高。
图7 3 种算法的混淆矩阵
4 结 论
本文方法利用手机摄像头提取人体骨骼点信息,经过特征提取生成融合特征后,通过Attention-GRU网络对骨骼点特征序列进行识别,输出动作识别结果。经实验,针对8种耐力训练动作的动作识别A为99.56%。
本文研究存在无法实时监测训练者动作是否标准,无法识别由多个简单动作组合而成的复杂动作,在以后的研究中需要对这些进行改进与提升从而更好地实现训练监督。