孙宇航,周建钦,张学锋
(安徽工业大学 计算机科学与技术学院,马鞍山 243002)
随着微型智能穿戴设备的普及与应用,以及智能设备内置处理器运算能力越来越强,人体运动识别成为了当代一个很有价值的研究.很多应用包括健康和健身监测[1,2]、运动记录等都是基于该研究.此外,通过佩戴智能手环及携带智能手机可以实现对用户进行不同运动模式的记录,这样可以帮助用户及时了解运动的情况,及时做出调节,使用户可以更加科学地安排各类运动的时间.运动手环上配备了越来越多的传感器,比如温度传感器、加速度传感器、压力传感器等,可以随时随地采集用户的运动信息,这为我们研究人体运动模式提供了硬件支持.同时,伴随着人工智能的发展,机器学习,数据挖掘算法为我们提供了算法支持.不过市面上的智能手环大多只局限于计步和脉搏测量等简单功能,现有的研究也大多只针对一些简单动作如走路,上楼、下楼、静止等,并没有对球类和划船等体育运动进行识别记录.
目前国内外学者已经展开对人体运动模式识别算法的研究,也取得了相应的成果.张旭[3]利用表面肌电(SEMG)传感器在相应肌群皮肤表面捕获的肌肉活动信息进行了手势命令的检测与识别.该方法只针对手势动作、颈部动作和腿部动作的识别进行了研究,在运动识别种类上有很大的局限性,无法对一些常见户外运动如球类运动、划船等进行识别.陈燕湄[4]利用计算机视觉相关算法,处理捕获摄像机拍摄的手势图像并对图像加以分析进行手势识别.此外,江超等[5]通过提取摄像头动态手势轨迹来识别动作,准确率达到了90%以上.这两种主要是基于图像和视频处理来设计运动识别算法,对拍摄图片和视频的背景要求比较苛刻,在复杂的环境中难以准确捕捉人体的运动动作,而且基于图像处理算法复杂度较高.张毅等[6]通过将加速度传感器和陀螺仪相结合,融合两个传感器的数据,再构建隐马尔科夫模型实现日常行为的识别.这种方法需要处理两种传感器的数据,大大增加了系统的开销,而且隐马尔科夫模型只依赖于每一个运动状态,而传感器输出的数据为长序列,此模型对于长期运动识别并不理想.
本文描述一种对走路、跑步、羽毛球正手挥拍、划船、打乒乓球5 种运动模式的识别方法.只需要佩戴单个智能手环即可实现,不需要依赖复杂的硬件设施,手环如图1所示.首先通过手环内嵌的MPU-9250获取5 种运动产生的加速度数据.其次经过低通滤波后对数据分段处理,确定每一个完整动作的开始位置和结束位置,再对每个动作进行特征提取.本实验分别在时域和频域上提取特征,归纳了不同运动的不同特性,然后通过计算信息增益的方法进行特征的规约,以去除非关键特征来提高整个系统的计算效率.最后选取支持向量机[7,8]、决策树[9]、随机森林算法分别对5 种模式分类,从中选取出最优的分类模型.整个过程分为5 个模块,各个模块之间的流程如图2所示.
图1 佩戴示意图
图2 流程图
MPU9250 芯片主要由三轴加速度传感器,三轴角速度传感器以及磁力计组成.3 个方向加速度单独测量,输出均为16 位的数字量.实验主要分析由芯片内的加速度传感器采集的数据.由于要识别的5 种运动相互之间有很大差异,所以需要频率足够高的传感器来收集数据.将内置MPU9250 传感器频率设置为200 Hz.这样的采集频率足够收集到5 种运动模式的细节,会给后续的识别算法带来更高的识别率[10].整个软件系统客户端使用MFC 框架完成,算法部分使用Python 语言编写.
本实验所有的数据先储存在手环内置的存储卡中,以文本格式保存,文本内的数据以向量集 <xi,yi,zi>,i=1,2,3,···的形式展现.实验过程中使用读卡器读取所有采集的数据.
因为不同性别和年龄的人运动有很大的差异性,所以本次实验的数据采集一共由实验室5 名男性和5 名女性完成,年龄分布在20~45 岁.采集数据前统一规定手环的佩戴方向和位置(如图1所示),用来消除不同穿戴方式对实验的干扰,这样采集的样本更具科学性.原始数据采集完成后进行手动标记[11],用数字1,2,3,4,5 分别标记走路、跑步、羽毛球正手挥拍、划船以及打乒乓球动作.
加速度信号在时域中以数据流的形式呈现,不能直接进行特征工程.常规的方法是设置滑动窗口进行处理,这种方法已经被广泛地应用于人体运动状态识别中.滑动窗口是一种简洁有效的数据分割方法,这种方法的核心是确定滑动窗口的大小.如果窗口设置太大,可能会造成运动识别延迟,还可能导致一个窗口包含不同类型动作,造成训练误差.如果窗口设置太小,会导致一个窗口中不能包含一个完整动作,导致运动信息的缺失,从而影响识别结果.文献[12]采用了200个采样点大小的窗口,并且相邻的窗口之间没有重叠;文献[13]则将采样窗口设置为128 个采样点,相邻窗口重叠50%.近年来许多学者经过多次实验研究,发现将滑动窗口重叠率设置为50%是一种比较有效的方法.
实验综合分析了5 种运动模式的特点并统计完成每种动作需要的时间,选用4 s 作为一段动作的默认时长,为一个滑动窗口,宽度为800 个采样点,每两个相邻窗口重叠50%.以走路X 方向加速度数据为例,选用4 s 作为窗口的宽度,如图3,这样规整了不同动作的加速度信号的长度,对接下来的特征提取和运动识别尤为重要.
相对于机器运动,人体运动较为缓慢,主要包含低频信号,在实际应用中,加速度信号不可避免地会受到硬件电路、传输噪声、扰动频率噪声和抖动的影响,输出的信号往往夹杂着很多无关信号.当加速度为零时,输出的结果不为零,而是一个非零向量的输出areal,即测量值ameasured如式(1)所示.
式中,areal为真实的加速度值,aerror为传感器的测量误差.为了使测量的加速度信号更接近真实值,实验采用了自适应的平滑滤波方法[14].
图3 信号加窗处理示意图
常见的平滑滤波方法有两种:滑动平均滤波方法以及一阶惯性低通滤波方法[15].滑动平均法虽然简单,但是实验证明实用性较差.在静态情况下,一阶惯性低通滤波效果明显,但是在运动状态,相位滞后,所以原始的方法不适合动态信号的处理,为了适应信号的实时性,采用增加阈值的方式去更新滤波参数.定义新的输出值为当前采样值和上一次输出值进行加权,得到本次输出值.具体算法如式(2)所示.
式中,Y(n)为当前滤波输出值;m为滤波系数(通常是一个大于0 小于1 的数),它对滤波的效果影响很大;X(n)为本次采样值;Y(n-1)为上次滤波输出值.可以看出,本次采样值对于本次输出值只占很小的比例,但能够起到一定的修正作用,这样做使加速度数据保持较大的惯性,模拟了低通滤波的功能.接下来引入判定运动状态的条件阈值 Δa,根据式(3)和式(4)进行修改滤波系数m,即:
式中,Δ为本次滤波输出值和上次滤波输出值的差;Δa为运动状态阈值;k0为默认参数.
选取走路模式X 方向某段8 s 原始数据为例,采用上述滤波算法进行滤波处理,滤波前后波形图如图4和图5所示.
图4 滤波前的加速度信号
图5 滤波后的加速度信号
对原始的加速度信号进行分割和平滑之后,接下来从时域和频域中提取相关的特征量[16].根据X,Y,Z 3 个方向上的加速度分别从时域和频域中提取了34 个特征量,包括3 个方向加速度的均值、合成加速度均值、3 个方向加速度方差、3 个方向加速度最大值、3 个方向加速度最小值、3 个方向加速度两两相关系数、3 个方向加速度峰谷值、合成加速度峰谷值、合成加速度方差、以及频域中通过小波变换得到的加速度信号的能量值.
式中,ax,k,ay,k,az,k为一个窗体中第k个采样点得到的X,Y,Z 三轴加速度信号;n为每个窗口采样点数.
合成加速度均值能够体现某一个运动模式的综合剧烈程度.计算公式如下:
式中,ak为窗口中第k个采样点三轴合加速度的模.将ak带入式(9)可得合成加速度均值a¯.
3个方向加速度标准差,以X 方向为例,加速度方差 σ2x计算公式如下:
同理可得σ2y,σ2z:
合成加速度方差σ2的算式为:
加速度峰谷值表示在一个窗口中,加速度的最大值和最小值的差值,用apv表示:
利用式(14)可以计算出合加速度的峰谷值以及3 个方向加速度峰谷值.
3个方向加速度两两相关系数分别为:
小波的组成成分是一组小波基函数,它可以在局部范围内对信号时间(空间)域和频率(尺度)域的特征进行描述,这也是小波变换相对于傅里叶变换的优势.在任意的时间域或空间域中,小波分析都能够很有效地对信号进行分析,自适应信号分析的要求,有利于聚焦信号的细节,而这些特性对信号分析是尤为重要的.常用的小波函数有Haar、Daubechies (dbN)小波等15 种.信号经过小波分析之后可得到在各个层级中的能量特征.信号f(t)的二进小波分解可表示为:
其中,A是近似信号,为低频部分;D是细节信号,为高频部分,此时信号的频带分布如图6所示.
图6 多尺度分解的信号频带分布
信号的总能量为:
选择第j层的近似信号和各层的细节信号的能量作为特征,构造特征向量[17]:
本次实验直接调用Python 中的PyWavelets 信号处理库,设置j为2,对加速度信号进行特征提取,输出特征向量:
特征选择是一个重要的“数据预处理”过程,能够去除与当前学习任务无关的特征,以减轻学习负担,降低学习难度.常用的特征选择算法可分为4 种:过滤式(filter)、包裹式(wrapper)、嵌入式(embedding)以及基于信息增益的方法.由于前三类算法比较复杂,不管是内存开销还是时间开销都很大,所以实验采用基于信息增益(Information Gain,IG)的特征选择算法[18],这也是一种常用且高效的特征选择算法.
计算信息增益首先定义信息熵(information entropy).信息熵是一般用作反映样本集合纯度的一种指标.假设pk(k=1,2,···,|y|)为当前样本集合D中第k类样本所占的比例,则D的信息熵定义为:
式中,|y|代表标签类别个数,信息熵Ent(D)值越小,则集合D的纯度越高.下面定义信息增益.
由于从信号中提取的特征均为连续值,连续值属性的可取值数目不是有限的,因此不能直接根据连续值来直接计算信息增益,实验采用连续值离散化技术.给定样本集D和连续属性v,假定v在D上出现了n个不同的取值{v1,v2,···,vn},基于划分点t可将D分为子集D-t和D+t.对相邻的属性取值vi和vi+1来说,t在区间[vi,vi+1)中取任意值所产生的划分结果相同.定义包含n-1 个元素的候选划分点集合.
把区间[vi,vi+1)的中位点作为候选划分点,选取最优的划分点进行样本集合的划分,即:
式中,Gain(D,v,t)是样本集D基于划分点t二分后的信息增益,这样我们将每个特征v带入,得到所有特征的信息增益值,从而计算出每个特征的重要性值.实验我们直接使用scikit-learn 中的feature_importance_库函数计算所有特征的重要性值,根据计算结果我们从中选择出了16 个特征,如表1所示.
由表1数据可得,Y 方向加速度标准差重要性值最大,体现了不同运动模式左右方向上的偏离程度.Z 方向加速度最大值能够很准确地区分竖直方向上加速度变化幅度较大或较小的运动.X 方向加速度最小值能够体现水平方向最小的运动力度.同样的,其它13 个特征都在不同的方面对运动数据的分类起着至关重要的作用.以上16 个特征的重要性值都是基于训练样本计算而来,而训练样本由不同年龄和不同性别的人产生的运动加速度数据整理而来,所以通过以上16 个特征来构建出的分类模型对于不同类型人的运动识别均有很强的泛化能力和较好的普适性.其次,本文的特征选择算法采用了特征子集搜索和评价机制相结合的方式得出特征的重要性值并筛选出最优特征子集,使训练出的分类模型拥有更高更稳定的识别准确率.
表1 特征重要性值
第3 节我们已经提取并计算出用于分类算法的特征,并计算出特征重要性值,选择出16 个比较重要的特征.利用被选取的特征值,制作训练样本集和测试样本集.实验中我们根据样本的数量和样本特征的特性,选取支持向量机、决策树、随机森林3 种分类模型进行了比较实验,分别调整模型参数使分类模型对于5 种运动模式的分类准确度达到最优.对每一个分类模型进行了性能的评估,并结合在测试样本集上的准确度来判别最优模型.
选用支持向量机进行分类是因为这个模型适用于样本量较小的数据集,而且运算速度快,运算复杂度低.决策树算法主要基于概率统计,不需要对数据进行归一化,直接使用原始的数据样本进行计算,避免了数据的失真,且鲁棒性很强.
随机森林是基于Bagging 的扩展变体,是一种可以同时兼顾分类和回归的机器学习算法.通过引入两次随机,使得该模型在训练样本较少时不容易陷入过拟合.这样即使在实验中无法保证能够整理出足够的运动数据集进行模型训练,也能确保最终的模型在测试数据识别上的表现比支持向量机和决策树更加稳定.其次,随机森林在训练过程中能够检测到特征之间的影响,所以给定运动数据集,该模型就能够判断某种运动各个特征之间的相互影响,更加准确地识别当前运动的类别.最后,相比较支持向量机和决策树,随机森林更适合解决样本不均衡问题.本文中5 种运动模式的样本数并不是均衡的,所以使用随机森林能够带来更好的效果.图7的柱状图表示3 种分类算法分别针对5 种运动模式进行分类的准确率以及对于5 种运动模式的统计比较.
图7 3 种分类模型的动作模式识别准确率
由图7可以得出结论.3 种分类模型对于划船动作的识别都为100%,支持向量机对于打羽毛球动作的识别准确率较高,效果好于另外两个模型,而决策树则是在乒乓球动作识别中表现最好.总体来说,随机森林算法对所有运动模式识别率都很高,且平均准确率最高,达到97.37%,所以系统最终采用随机森林作为分类模块.图8~图10分别为3 种分类算法的混淆矩阵.
从混淆矩阵中可以看出,走路和跑步可能被误识别为打羽毛球,少量打羽毛球数据被误分类为走路和跑步.个别打乒乓球动作被误分类为走路,总体上随机森林表现最佳.
图8 支持向量机算法产生的混淆矩阵
图9 决策树算法产生的混淆矩阵
图10 随机森林算法产生的混淆矩阵
本文我们是对走路、跑步、打羽毛球、打乒乓球、划船5 种运动模式识别的研究.首先参与采集数据的实验人员分别做5 种动作并记录数据,然后对数据进行预处理,根据运动模式的特点提取出对分类贡献比较大的特征,并通过特征选择选取最终贡献值较大的特征,之后使用分类算法进行运动模式的识别.从而实现对用户行为的记录和分析.
获取原始数据之后,首先对数据进行了预处理,包括滤波、数据加窗等预处理.特别在加窗处理中,我们采用相邻的两个窗口重叠50%,以保证样本的连续性.综合分析了信号在时域和频域的特征,选取了16 个最重要的特征,又保证了较高的识别率.我们将同样的测试数据分别输入到支持向量机、决策树、随机森林中,结果显示随机森林算法准确率最高.
本文研究的人体运动识别算法可直接应用于智能手环中,通过自动分析数据,识别并统计该用户一天内的各类运动,将信息反馈给用户,这种能识别多运动模式的手环比单一的计步手环提供更加丰富的运动信息.在接下的研究中来将继续优化算法,减小识别误差,同时识别更多的运动模式.