杨叶梅,朱秀娥
(福建师范大学协和学院信息技术系,福建福州 350117)
越来越多的各类微型传感器被嵌入到便携式可穿戴的电子设备中,实现动作识别、身份验证、患者治疗等,成为当前最具有吸引力的研究课题之一[1].目前,各类动作的不同复杂性和周期性等决定所需传感器的位置、数量和识别的方法,存在对于相似动作识别精度不高的情况.近些年出现了许多的识别方法,Pu等[2]人提出了使用基于无线网络多普勒效应的动作应用系统实现智能家居.Wang 等[3]通过设计运动映射图将人体动作识别问题转换成图像分类问题.Schwarz等[4]采用MEMS惯性传感器对手部动作进行识别,用于医生与电脑的人机操作.手臂动作的识别可以用于手机解密、舞蹈动作识别、交通指挥等,需要在动作识别上考虑到识别的准确度和时间消耗.本系统采用AdaBoost算法[5]进行对动作的识别分类,该算法在解决实际问题时非常有效,成为研究的热点,也衍生出许多对算法的改进.一些是将该算法与其他算法结合以提升AdaBoost算法的识别精度[6],一些是在AdaBoost算法的训练过程提升算法的鲁棒性[7].本文针对现有的方法,选择在AdaBoost算法中对弱分类器的样本权值进行更新,加入动态权值以提高对整个训练集的分类能力.将原算法中弱分类器的权值系数和改进算法中计算的动态权值系数加以组合,形成一个强分类器,提高其在数据集上识别的准确性和适应性.
该动作识别系统采用的是一款适用于人体运动和移动物体测量的9轴(3轴加速度,3轴角速度,3轴地磁力)无线运动传感器IMUZ-Z2.本设计主要使用的数据是三轴加速度和三轴角速度.这款设备体积小、性能高,可以进行动态的高精度测量.该传感器的实物如图1所示.
图1 IMUZ传感器实物
实际应用时,传感器模块加载到可穿戴式的设备中,方便测试者佩戴.本文是设计一款便携式的运动手环,手臂动作按照特定的顺序模式,通过传感器IMUZ模块进行非均匀采样动作的6D数据信息.传感器数据按照“时间戳 加速度传感器X轴的值 加速度传感器Y轴的值 加速度传感器Z轴的值 陀螺仪传感器X轴的值 陀螺仪传感器Y轴的值 陀螺仪传感器Z轴的值”的格式进行传输.手臂动作识别部分分为数据预处理和手臂动作的分类识别,最后输出识别的结果.系统整体的设计框架结构如图2所示.
图2 手臂动作识别系统框架图
系统在具体运行时只需要传感器在检测数值发生变化时才返回采样数据,没有固定的采样间隔.如果直接采用均匀化采样方式,其采样的频率不易设置,太高会造成数据冗余,太低会造成数据不准确.实行非均匀化采样数据更能保证传感器数据的真实性和可靠性.但采用非均匀化采样的数据间隔不均匀,系统不能直接使用,需要将采集的数据转化为均匀采样的数据才可以进行识别.本设计对传感器每个轴上的数据都采用线性插值法,完成数据均匀化处理.
均匀化后的传感器数据会有干扰信号,本设计采用滑动窗口的滤波法进行平滑滤波,可以良好抑制干扰信号,使其更接近真实值.滑动窗口的宽度越宽则数据的完整性越低,但是滤波的效果越好;宽度越窄则滤波效果越差,但是数据的完整性越高.为了保证数据的完整性和滤波效果,可以调整滑动窗口到适合宽度再滤波.
预处理的最后一步是对传感器的数据进行分割,采用滑动窗口的分段方法得到若干段的手臂动作.常见的分段方式按照窗口长度分为固定长度、非固定长度和半固定长度.本文选择半固定的窗口长度,利用动态窗口进行手臂动作的分割.具体方法是先统计样本中所占比例最大的数据段长度,选择前面M个,分段时和这M个长度的数据段进行匹配,择优确定M值.样本值不同则M值也会变化,M越大分销效果越好,但耗时长,M越小耗时短但效果受影响.
数据做完预处理后,就可以开始进行手臂动作的识别.本文选择将AdaBoost算法中的弱分类器的权值系数进行动态调整,提高分类识别的准确性和适应性.
Adaboost是一种迭代的自适应增强算法,先用相等的权值系数初始化所有的训练数据.该算法会持续加入新的弱分类器直到达到预先设定的某个足够小的错误率.在每次加入新的分类器进行不断迭代的过程中,前一个弱分类器被错误分类的样本权值会增大,正确分类样本的权值会减小,最后会训练出一个由若干个弱分类器通过线性组合的强分类器.
具体的算法流程如下:
1)输入:训练数据集W={(x1,y1),(x2,y2),…,(xn,yn)},其中yn是属于正负样本,正样本取值y为1,负样本取值y为-1.
2)对样本W1=(w1,1,w1,2,…,w1,n)进行权重初始化,分布值 w1,i=(i=1,2,…,n).
3)For t=1,…,T
a) 针对具有权重分布的Wt训练集,选择具有最小错误率的作为该算法进行循环的弱分类器ht.
b) 计算ht在训练集上的加权错误率et∶
c) 计算弱分类器ht的加权系数at:
d) 重新更新训练数据集的权值分布,再进行下一轮的迭代.
改进的算法主要是将弱分类器的权值系数实现动态调整,获得训练样本W在经典AdaBoost算法中所有的弱分类器和对应的权值系数αt,然后计算各个弱分类器对待测样本周围多个训练样本的分类准确率βt,将每个弱分类器的权值系数改为αt×βt,其中t的值从1到T(T为分类器的个数).将改进了权值系数的新算法称为动态权值系数的AdaBoost(Dynamic Weights AdaBoost,以下简称DWAdaBoost)算法.
要计算改进算法中动态权值的βt,采用余弦度量相似性的局部敏感哈希(LSH)方式[8]去寻找待测样本的近邻点,耗时要比采用欧式距离短许多.高维相邻的数据经哈希映射到低维空间仍相邻的概率很高,将待测样本M利用LSH方式哈希到一个桶中,则该桶中的其他数据则是待测样本的近邻样本,这些数据构成新的测试集D.接着将每个弱分类器对D进行分类测试,以定量各个弱分类器与M的适应性,最后将其分类的准确率作为预测M的动态权值系数β:
计算动态权值系数β时,为兼顾DW-AdaBoost算法的分类精度和耗时,不需要精确查找最近邻,而是将哈希表尺寸设置为经验值:
DW- AdaBoost算法在经典的AdaBoost算法完成迭代计算的第3)步后,得到所有的T个弱分类器 H={h1,h2,…,hT};
动态系数的计算过程如下:
1) 利用LSH方式从训练集中去寻找与待测试的样本相似的多个样本组成新的测试集D.
2) For i=1,…,T
用弱分类器hi分别对新的测试集进行分类测试,利用式子(5)计算对应分类的动态权值系数β.
3) 加入动态权值系数β后,得到算法的最终分类器组合:
本次实验设定了两类的动作样本,分为简单手臂动作样本和复杂手臂动作样本.简单手臂动作(Simple Pose,简称SP)分别是向左挥、向右挥、向上挥、向下挥,复杂手臂动作(Complex Pose,简称CP)分别是切菜、拍篮球、拖地、翻书.将运动手环套在参与者的手臂上,一共收集了40名参与者的数据,每名参与者完成简单手臂动作和复杂手臂动作各20组,合计800个SP和CP样本.将SP样本随机分成600个训练样本和200个测试样本,CP样本做同样处理.
本文将提出的DW-AdaBoost算法与经典的AdaBoost算法和支持向量机SVM算法[9]进行比较.实验中对SP和CP进行识别,三种识别方法所对应的平均识别精度如图3所示.
图3 三种算法对CP和SP的识别精度统计对比图
从实验结果可以看出,对于简单的手臂动作,三种算法识别率都是比较高的,对于复杂的手臂动作,效果最好的是本文改进的算法.表1给出了DW-AdaBoost算法在复杂手臂动作识别时的平均混淆矩阵.从中可以看出,对翻书的动作识别率是很高的,切菜的动作与拍篮球的动作混淆率高.
本文对简单动作中的每个动作用上述三种不同的算法进行识别,手臂动作的识别结果都不错.同时还对复杂动作中的每个动作类进行不同算法测试,统计出平均识别精度,实验表明本文所提出的DW-AdaBoost算法都可以准确和稳定地识别.具体统计结果如图4所示.
表1 本文改进算法的平均混淆矩阵(%)
图4 复杂动作的4个动作类的平均识别精度图
从图4的平均识别精度可以看出,对翻书这个手臂动作的识别效果比较好.系统在进行动作数据采集时,翻书动作的数据集分布有更明显的局部特征,相似数据样本更多.一个分类器对与待测样本相似的数据有较好的分类能力,那么对待测数据同样有较高的分类准确性.对于四个复杂手臂动作的识别,效果最好且比较稳定的是本文的改进算法.
本文利用IMUZ传感器准确获取手臂动作数据,通过三个步骤:均匀化采样数据-滤波去噪-分割手臂动作完成对数据的预处理.然后,详细阐述AdaBoost算法,并在此基础上加入能度量待测样本与弱分类器适应性的动态权值系数,提出DW-AdaBoost算法的改进思路和步骤.经实验测试,DW-AdaBoost算法与SVM算法比较,在识别时间和准确率上均有优势,与经典AdaBoost算法比较,花费时间差不多,但识别精度还是有所提高.