0. 摘要
人体活动识别在智能健康监护等诸多应用中都是关键技术。然而多数传统方法只能简单识别并分类人体行为,但是提取信息不全面、难以提取有效特征,识别精度低。为了解决传统方法识别人体活动行为的缺点,我们使用深度神经网络来完成人体行为识别任务。本文通过智能手表加速度传感器、重力传感器和磁力传感器,基于深度学习的方式,对智能手表传感器采集的数据进行标准化处理。分别运用CNN卷积神经网络和RNN循环神经网络根据深度特征学习方法实现不同活动的特征提取,最后进行活动的分类,实现活动识别。本文通过实验表明,改进的CNN和RNN可以较为全面的提取信息并提取有效特征,准确率高达97%。
关键词
人体活动识别;腕表;机器学习;CNN;Tensorflow
随着电子科学的不断发展,智能设备不断更新,越来越多的智能应用出现在各个领域并服务大众,比如网络摄像机、智能家具、3D识别等等,这些应用极大的方便了人们的生活,而这些应用的核心便是通过对捕捉数据的处理从而对人体运动进行有效识别。可靠的运动识别能够更智能的检测和提醒人们保持健康、便捷的生活方式。
目前,对人体活动识别的研究和技术大多基于可穿戴式的传感器设备,比如在身体固定位置安装传感器探头或是带有大量传感器的头盔,这些传感器虽然具有很高的运动识别度,但是由于携带不便或是价格昂贵而无法进行广泛的推广。不过,近几年传感器技术不断发展,几乎所有的电子腕表都配备了多种传感器,就比如小米手环2就配备了加速度传感器、心率传感器、陀螺仪、重力传感器等等,而且大部分的电子腕表价格低廉、功能丰富、能够被广大用户所接受。因此,电子腕表完全符合我们对研究可用的可穿戴式传感器设备的选择:收集的数据较为可靠、精确性良好、便于携带且不影响用户的正常活动、价格低廉、适用范围广。
通过传感器可以测量出一段随时间变化的加速度数据,而一个活动也可以看成一个由时间和空间结合而成的一个序列,因此通过对传感器数据的处理、判断、分类,我们就可以有效的对活动进行识别。
本文所提出的构建卷积神经网络(CNN),的方法,对传感器中获取的数据进行表征学习,并对数据进行处理、分类,最终实现人体活动的有效识别。实验表明,本文所构建的CNN方法,在识别人体活动时具有较高的准确率,准确率可达到97.05%,表明实验方法的实际可行性。
1. 相关工作
在物联网高速发展的时代,已有学者进行了若干针对人体行为识别的研究工作,人体行为识别也成了目前众多研究中必不可少的课题。人体行为识别有基于视觉的和基于传感器的两个方向[1]。本文研究的基于腕表传感器的人体行为识别方法属于后者,是人体行为识别研究中重要的一部分。相比较基于视觉的人体行为识别,基于传感器的行为识别方法具有人性化、获取数据自由等特点。
行为识别的描述方法有3种,分别是基于模板匹配、统计模式识别和基于语义描述。最早期的人体行为识别方法是基于模板匹配方法,该方法常用的动态时间规整算法(DTW)已经应用于步态识别。然而,统计模式识别方法与基于模版匹配方法相比,具有更高的识别精度,所以统计模式识别方法是基于加速度传感器的人体行为识别的常用识别方法。统计模式识别主要依赖于人体不同部位放置的多个传感器,常用的统计识别方法分别为:决策树、朴素贝叶斯和K近邻,其中传统的机器学习方法,如SVM、贝叶斯网络、时域频域分析等机器学习方法需要专业的人体动作领域知识来进行特征提取。文献基于多传感器的可穿戴活动感知平台来实现对各类日常人体活动的识别问题,引入Emerging Pattern(EP)这一模式匹配算法,实现不同活动识别问题的统一识别算法框架统计6种活动情况,人体活动类别的平均识别精度是86.2%。文献设计了一种分层的行为识别方法,该方法运用设备位置分类模型,以及针对不同设备位置的行为分类模型,并对这两种模型进行衔接,从而给出最终的识别结果,识别准确率达到93.3%。
由于传统的行为识别方法都包括两个重要步骤:特征提取和训练识别,并且完成特征提取后,在此基础上训练分类器,提取特征和训练分类器这两个步骤是完全分开的,传统方法下的人体运动行为识别的识别效果很大程度上依赖于所提取的有效特征的有效性。
卷积神经网络是一个自动学习特征的过程,而且特征提取和模式分类都是由同一个网络完成,能够获取更有利用价值的特征,提升网络模型的预测和分类的准确性。本文提出的构建卷积神经网络,通过深度学习的方法实现人体活动的识别,识别准确率,召回率,f1 score(F-measure)均为97.05%。
2. 方法设计
活动识别的总流程框架如图1所示。首先对从腕表采集到的数据进行预处理,通过数据标准化使得训练时能更快地收敛,并且不被异常值所影响;然后通过深度特征学习方法对人体典型活动进行学习,以实现不同活动的特征提取;最后进行活动的分类。
2.1. 深度学习
深度学习是机器学习中一种基于对数据进行表征学习的方法。它通过多层结构让机器自动在数据里找到特征或者规律,从而对数据进行预测和分类,减少了人为设计特征造成的不完备性。
2.1.1 神经网络
神经网络由大量的神经元相互连接而成。每个神经元接受线性组合的输入后,最开始只是简单的线性加权,后来给每个神经元加上了非线性的激活函数,从而进行非线性变换后输出。每两个神经元之间的连接代表加权值,称之为权重(weight)。不同的权重和激活函数,会导致神经网络不同的输出。
2.1.2 卷积神经网络(CNN)
卷积神经网络(Convolutional Neural Network, aka CNN): 卷积可以通过从输入的一小块数据中学到图像的特征,并可以保留像素间的空间关系。对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重:因为每个神经元的多个权重固定,所以又可以看做一个恒定的滤波器filter)做内积(逐个元素相乘再求和)的操作就是所谓的卷积操作,也是卷积神经网络的名字来源。
卷积层的作用是提取数据的各种特征。
池化层的作用是对原始特征信号进行抽象,从而大幅度减少训练参数,另外还可以减轻模型过拟合的程度。
2.1.3 激励层与池化层
ReLU可以通过简单的零阈值矩阵进行激活,并且不受饱和的影响,并且和sigmoid
、tanh
函数相比,ReLU
可以大大加快随机梯度下降算法的收敛 。
我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了,不再是输入的线性组合,而是可以逼近任意函数。
-
采用
sigmoid
时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用ReLU激活函数,整个过程的计算量节省很多。 -
对于深层网络,
sigmoid
函数反向传播时,很容易就会出现梯度消失的情况也就是在sigmoid
接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失,从而无法完成深层网络的训练。 -
ReLU
会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。
为了进一步降低网络训练参数及模型的过拟合程度,我们对卷积层进行池化/采样(Pooling)处理。池化/采样的方式通常有以下两种:
- Max-Pooling:选择Pooling窗口中的最大值作为采样值;
- Mean-Pooling:将Pooling窗口中的所有值相加取平均,以平均值作为采样值。
2.1.4 循环神经网络(RNN)
RNN(Recurrent Neuron Network)RNN隐藏层之间的节点不再是无连接而是有连接的,隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关。
2.1.5 LSTM
LSTMs只是使用了不同的函数去计算隐藏层的状态。在LSTMs中,可以把cells看作是黑盒用以保存当前输入之前的保存的状态,这些cells决定哪些cell抑制哪些cell兴奋。它们结合前面的状态、当前的记忆与当前的输入。已经证明,该网络结构在对长序列依赖问题中非常有效。
2.2 数据采集
用到参考文献公开的数据,人体活动识别的结果与数据集息息相关,在不同数据集上的实验方法没有可比性,目前我们收集了一些公开数据集,这些数据集包含人体日常的几个基本活动:下楼,上楼,站立,跑,走,坐。
Shoaib SA数据集在10位男性志愿者身上采集得到,数据包括加速度传感器、重力传感器和磁力传感器,传感器置于5个位置:左、右侧的裤袋,右臂,右腕,腰部。
2.3 数据预处理
为了得到更有利于特征提取的形式,在对运动加速度信号进行特征提取和识别之前,先要对原始数据进行预处理:本项目利用标准分数进行数据标准化,保证了这些特征都具有相近的尺度,帮助梯度下降算法更快地收敛。
其中:
std(x)
为x
的标准差,经过处理的数据符合正态分布,即均值为0,标准差为1。
2.4 活动识别
生活中的活动复杂多样,为了更好的、更精确的识别人体行为特征,我们可以对人体典型行为进行分类,如下图:
人体的典型行为包含慢跑、走、站立、坐、上楼、下楼。对这六种行为进行数据收集,之后对收集到的数据经过处理得到加速度折线图,通过方差比较,发现数据具有一定的区别,跑步的方差最大,说明运动幅度较大,坐着最小。监督学习方法可能可以较为准确的识别活动种类。
Ax | Ay | Az | Gx | Gy | Gz | Mx | My | Mz | |
---|---|---|---|---|---|---|---|---|---|
DownStairs | 0.246 | 0.835 | 0.470 | 0.314 | 1.806 | 0.297 | 0.464 | 0.063 | 0.119 |
Running | 5.365 | 4.976 | 2.537 | 2.378 | 7.855 | 7.329 | 0.192 | 0.318 | 0.088 |
Sitting | 0.001 | 5.438 | 0.000 | 0.000 | 0.001 | 2.046 | 0.001 | 0.000 | 0.000 |
Standing | 0.132 | 0.051 | 0.184 | 0.180 | 0.411 | 0.053 | 0.317 | 0.099 | 0.021 |
UpStairs | 0.530 | 0.563 | 0.340 | 0.735 | 1.266 | 0.578 | 0.199 | 0.379 | 0.383 |
Walking | 0.018 | 0.064 | 0.097 | 1.301 | 0.340 | 0.447 | 0.206 | 0.072 | 0.174 |
方差是各样本值与全体样本值的平均数之差的平方值的平均数,衡量随机变量或一组数据时离散程度的度量
然后对整段处理过的加速度数据按照一定大小(90条)形成帧片段。
2.5 深度特征学习
2.5.1 CNN方式
2.5.1.1 构建神经网络
对输入数据进行两次卷积操作,该卷积使用ReLU激活函数,并且在后面带有最大池化层。
输入尺寸 | 内核数 | 通道数 | 深度 | 步长 | 输出尺寸 |
---|---|---|---|---|---|
卷积1 | 1*90*9 | 60 | 9 | 120 | N/A |
池化1 | 1*31*1080 | 20 | N/A | N/A | 2 |
卷积2 | 1*6*1080 | 6 | 1080 | 12 | N/A |
池化2 | 1*1*12960 | 1 | N/A | N/A | 2 |
我们使用tf.reshape
函数对第二个卷积层的输出tensor进行变形,将其转成1D的向量,然后连接一个全连层,隐含节点为100,并使用tanh
激活函数。
为了减轻过拟合,我们预计使用一个Dropout
层,是通过placeholder
传入keep_prob
比率来控制的。在训时,我们随机丢弃一部分节点的数据来减轻过拟合,预测时则保留全部数据来追求最好的预测性能。但是际运行中,发现效果并没有明显提升,可以判断数据比较平滑,不会过拟合。
全连接层layer1层的输出连接一个Softmax
层,得到最后的概率输出。
输入尺寸 | 激活函数 | 输出尺寸 | |
---|---|---|---|
全连接层layer1 | 12960 | tanh | 100 |
全连接层layer2 | 100 | softmax | 6 |
2.5.1.2 开始训练
下面开始训练过程。首先依然是初始化所有参数。共进行100次训练迭代,参与训练的样本数量总共159992。其中每次训练都分批次处理,同时我们会对准确率进行一次评测,用以实时监测模型的性能。
2.6.2 RNN方式
定义RNN模型,训练方式同CNN,共进行150次训练迭代
种类 | 输入尺寸 | 方法 | 输出尺寸 |
---|---|---|---|
BasicLSTMCell | N/A | 190*400 | |
RNN | 9*90和190*400 | dynamic_rnn | 100 |
权值 | 100*6 | 截断正太分布 | 100*6 |
偏置 | 6 | 常量 | 6 |
softmax | 6、100*6和100 | softmax | 6 |
2.6 效果评估
一般来说,大多数人对于学习结果的准确定判定,都是基于个人经验的,没有数学来支持和计算准确度,绝大多数研究使用交叉验证和统计测试来比较分类器对特定数据集的性能。针对具有n个类别的分类问题,针对特定方法的分类结果可以被保存在混淆矩阵Mn×n中。混淆矩阵可以使得元素Mij是实际分类为类j的来自类别i的实例的数量。文献以下值可以从二元分类问题中的混淆矩阵中获得:
- True Positives(TP):正面实例的数量被分类为正面。
- True Negatives(TN):负面实例的数量被分类为负面。
- False Positives(FP):负面实例的数量被分类为正面。
- False Negatives(FN):正面实例的数量被分类为负面。
准确率(accuracy)是总结所有类别总体分类性能的最标准度量标准,其定义如下:
精确度(precision)是正确分类的正面实例与分类为正面的实例总数的比率:
召回率(recall)是正确分类的正面实例与正面实例总数的比率:
F-measure将精确度和召回率结合在一起:
3. 结论
可以看出,CNN与RNN均能使数据训练出精度达到95%以上的模型,但是RNN与CNN相比,RNN成功运行的速度比CNN成功运行的速度更快。RNN是一种适用于随着时间变化的数据的学习方式。
4. 结语
本文在用户佩戴腕表下针对6种日常行为的情况进行了行为加速度的信息采集,将采集到的数据按2种不同方法(CNN、RNN)进行识别分类。与传统的识别方法相比,卷积神经网络无需进行人为的特征优选过程且可有效识别相似动作,如走、上楼、下楼,明显提高人体行为的正确识别率,可在实际应用中实时使用,其准确率能够达到97%,是一种理想的分类模型。
5. 代码
- 你可以在https://github.com/HarborZeng/HumanActivityRecognition找到训练的代码
- 你可以在https://github.com/HarborZeng/ActivityRecognitionAp调用模型的app例子
参考文献
Z, Si T. Learning deep features from body and parts for person re-identification in camera networks[J]. Eurasip Journal on Wireless Communications & Networking, 2018, 2018(1):52. ↩︎