郑 毅,李 凤,张 丽,刘守印
(华中师范大学物理科学与技术学院,武汉430079)
(* 通信作者电子邮箱 syliu@mail.ccnu.edu.cn)
根据国家统计局2016年的统计数据可知,在中国,60周岁及以上人口23086万人,占总人口的16.7%;65周岁及以上人口15003万人,占总人口的10.8%[1]。根据联合国对“老龄化社会”的定义:区域中65岁以上的人口比率超过总人口的7%,中国已经属于老龄化严重的国家之一。而老年人随着年龄的增长,身体机能逐年下降,而随着生活节奏的加快,子女由于自己的事业往往不能在其身边陪伴;当突发事件(例如跌倒)发生时,老人无法第一时间得到帮助;对于一些患有轻微老年痴呆症的老年人,更需要耗费人力物力监测其日常行为。人体姿态检测技术有助于子女对其生活状态与日常行为的掌握,也有助于医疗机构对老年人的身体机能与健康程度的判断。因此,尤其是对于老龄化严重的中国来说,老年人姿态的检测算法研究具有重要的意义。
人体姿态检测按照检测内容可以分为两大类:突发性动作姿态检测与持续性动作姿态检测。突发性动作姿态检测是指仅检测出特定的、作用时间短的人体姿态。在对于老年人的这类研究中,由于跌倒对于老年人心理与生理上的危害特别大,所以跌倒检测系统的设计显得尤为重要。另一方面,持续性动作姿态检测则是检测出被测者保持在何种运动状态,这对于老年人的日常行为起到记录的作用。本文所用算法将跌倒作为一种特殊的运动状态,同时检测老年人的持续性与突发性动作姿态。
人体姿态检测按照数据获取来源可以分为基于图片的姿态检测与基于传感器序列的姿态检测。张承玺[2]使用摄像头获得的RGB图像作为数据源,通过计算前景图像的几何特征结合支持向量机(Support Vector Machine,SVM)分类器完成固定场景下的人体姿态识别;李靖意[3]使用微软开发的Kinect传感器采集人体深度图像,通过结合人体动作描述符与SVM分类器相结合,设计了人体动作识别算法;Bourke等[4]通过垂直速度阈值法(Vertical Velocity Threshold method,VVT)设计了一套光学运动捕捉系统并将其嵌入至可穿戴设备中。基于可穿戴设备或者摄像头的数据采集设计一方面增加了设备硬件成本,另一方面,必须强制穿戴数据采集设备或在家中安装摄像头也会使老年人心理上产生一种被监视的感觉,不利于老年人的身心健康。而现如今,针对老年人设计的智能手机越来越多,老年人使用智能手机是必然的趋势。而智能手机本身所包含的传感器越来越多,使用其作为数据采集器可以很好地避免以上的不利因素,所以本文采取智能手机采集数据。
现在人工智能时代正在到来,机器学习算法已经应用到了各行各业中。依靠传统算法手工提取特征值会遇到特征值提取不充分和无法区分相似度较高的动作。人工智能技术高速发展的今天,使用机器学习技术对老年人姿态进行检测可以通过算法自动提取不同动作的特征,得到更准确的分类结果,从而为老年人提供更全面的照顾与保护。在国际上,通过智能手机采集数据后,Anguita等[5]通过SVM算法与固定点连续(Fixed-Point Continuation,FPC)算法相结合,对六种日常动作分类并获得了89.3%的实验结果;Tong等[6]则使用了隐马尔可夫(Hidden Markov Model,HMM)算法,对于智能手机采集的加速度时间序列数据分为跌倒与正常两种状态,在训练集上达到100%的正确率。国内这一领域的研究有吴科艳等[7]提出使用领域一致性指标与离散二进制粒子群算法相结合对老年人跌倒行为进行检测,其输出层使用K最近邻(K-Nearest Neighbor,KNN)分类器得到98.77%的训练集正确率;张舒雅等[8]使用SVM与KNN结合算法判断跌倒动作,测试集正确率达到97.35%。然而,如何在老年人实际活动中的检测达到实验训练集中的高正确率,仍然是尚未解决的难题。
根据上文所提到的相关工作可以总结出目前人体姿态检测算法所遇到的难题仍有如下4点:
1)如何更准确、更高效地从传感器数据中提取特征值。
2)如何提高检测算法的泛化能力,即将实验训练集上高正确率在实际测试中复现出来。
3)人体的姿态不单单是静态的姿态,如站立、平躺等,更多时候处于运动的状态,如走路、爬楼梯等,如何使用一种算法模型同时检测静态与动态的多种人体姿态。
4)动作的持续时间有长有短,无记忆模型需要通过滑窗算法获取一段时间的动作信息,无法实时处理不同持续时间的动作,并将其分至正确的类别。
1990年,Lecun等[9]历史性地提出了神经网络的反向传播算法并提出了卷积神经网络(Convolutional Neural Network,CNN)的概念。2006年以来,随着 Hinton等[10]在 Science期刊上提出“多隐层神经网络具有更为优异的特征学习能力,并且其在训练上的复杂度可以通过逐层初始化来有效缓解”,深度学习开始飞速发展。CNN通过其特有的权值共享机制输入是空间上的变化,即以图像为典型例子的空域数据表现非常好[11]。但对于样本序列出现的时间顺序上的变化,即时域数据无法建模。
循环神经网络(Recurrent Neural Network,RNN)[12]正是针对时域序列数据提出的,其特殊的网络结构使神经元的输出可以在下一个时间点作为输入直接作用到自身,实现网络的输出为该时刻的输入与历史所有时刻共同作用的结果,达到对序列建模的目的。Lecun等[13]提出CNN并不完全适用于学习时间序列,如果使用CNN学习时间序列会需要补充辅助性处理,且效果也不一定好。面对对时间序列敏感的任务,RNN通常会比较合适。即RNN作为一种回归型网络,由于其具有一定的记忆效应更适用于序列数据,而CNN更侧重于空间映射,在图像数据处理方面更为贴合。
然而,Lecun等[11]进一步提出RNN网络虽然目的是学习时序数据的长期依赖性,但是理论和经验上的证据都表明RNN很难学习和保存长期的信息。其原因被认为是出现了时间轴上的梯度弥散(Gradient Vanishing)的现象,即当前时刻产生的梯度只能向历史时刻传播有限层,对于超过一定时间的历史时刻无法产生影响,这导致了RNN在长序列数据上效果并不好。为了解决这个问题,Hochreiter等[14]提出的长短时记忆(Long Short-Term Memory,LSTM)网络通过特有的门单元解决了这一问题。LSTM越来越多地被应用在时域序列数据的处理上,Sundermeyer等[15]将LSTM应用于自然语言模型上,比传统的语言处理方法取得了较好的实验结果。Graves等[16]在语音识别问题上使用了双向LSTM网络,使语音分类精度得到了提高。
LSTM应用于人体姿态检测算法中相比其他分类器更有效地利用了其3个优势:
1)相比手工设置阈值分类方法,LSTM可以准确、自动地从数据中提取特征。LSTM作为一种机器学习方法,可以从复杂的高维数据中自动地提取特征。对比传统的凭借经验提供先验知识手工设置阈值的分类方法,LSTM自动提取特征的过程更加高效,且机器学习的过程学习的是数据集的概率分布,其方法提取的特征比经验更加符合数据本身的概率分布。
2)相比浅层机器学习算法,属于深度学习方法的LSTM拥有较强的非线性能力,能从数据中提取出更加具体的特征,其模型具有更强的泛化能力。浅层机器学习算法,例如SVM、KNN等,在训练集样本空间能学习到分类效果较好的超平面将训练集数据正确分类。然而在实际应用中面对尚未进行学习的新数据——测试集数据的分类效果却不理想,其原因在于浅层机器学习算法非线性能力较弱,所提取到的特征较为抽象,模型泛化能力较差。而深度学习算法则通过多层连接、权值共享的网络结构,逐层提取出更具体的特征,增强模型的泛化能力。
3)相比同为深度学习模型中表现出色的前馈神经网络(feed-forward neural net),属于循环神经网络的LSTM模型具有记忆性,能对数据中时间上的先后顺序建模,对于时序数据有较好的拟合效果。在深度学习领域,传统的前馈神经网络在许多方面表现出色。卷积神经网络作为前馈神经网络的代表,在图像、视频等定长的空域数据分类问题上效果显著;然而,对于人体姿态检测数据所属的时序数据处理上,由于其自身网络结构的约束,效果并不太理想。LSTM则依靠独特的递归结构善于处理人体姿态检测任务这种具有复杂时间关联性的数据,并且模型可以接受任意长度的输入,更适合应用在持续时间不一的人体姿态行为分类任务上。
由于人体姿态检测数据集的时域变化特点,为了克服目前人体姿态检测算法所存在的难题,本文选取以LSTM为核心,在GPU上实现了人体姿态的算法模块。该算法使用深度学习的方法自动高效地从传感器数据中提取准确的特征,并利用LSTM的记忆特点仅需输入当前时刻传感器数据即可预测使用者当前行为,为上述难题提供了一种解决方案。
本文主要通过安卓手机内置的传感器作为人体姿态数据感知层,其具体数据主要来源于手机内置的加速度传感器、陀螺仪和气压计。
由于数据采集中包含跌倒这种对于老年人来说十分危险的突发性动作,所以人体姿态检测的数据采集是由20名年轻志愿者模仿老年人各种行为来代替;又因为智能手机在不使用时大多时候随身携带,所以智能手机作为数据采集装置采集数据时被放置在志愿者裤子口袋中。具体的姿态被分为突发性动作与持续性动作共9类,共采集3 336个数据,分为2755个数据的训练集与581个数据的测试集,如表1所示。
表1 人体姿态分类数据集Tab.1 Datasets of human posture classification
训练集单次数据是由志愿者单一完成某项动作时的传感器采样后标记构成,测试集为传感器采样包含各项动作的自然行为后截取标记而成。在后续模型训练中仅使用训练集,测试集则用于通过模拟老年人真实日常行为来评估模型泛化能力。
数据集格式为:
[data,label]
其中:data为一种姿态的传感器数据;label为人工标注的当前数据所属姿态类别。data的具体格式为:
data= [sample,axis*sensor]
其中:sample为一次姿势状态的采样点数,不同的姿态持续时间不同,所以sample维度不定;axis为传感器轴数;sensor为传感器个数。数据集由3个传感器共9维数据构成。
跌倒作为典型的突发性动作,训练集中采集到的跌倒数据可视化后如图1所示。跌倒时三轴加速度传感器(图1(a))与三轴陀螺仪(图1(c))波动非常剧烈,且持续时间非常短,经过短暂地剧烈波动之后所有数据都归于平静。从气压计(图1(b))中可以看出,气压略有升高,反映了跌倒动作发生时海拔高度略有降低。训练集中的持续性动作行走数据可视化后如图2所示,上楼梯时三轴加速度传感器(图2(a))与三轴陀螺仪(图2(c))数据呈现周期性波动,气压计(图2(b))数据基本保持不变。
图1 跌倒数据可视化示意图Fig.1 Schematic diagram of falling data visualization
测试集则从志愿者连续完成多种动作行为截取单一动作行为并进行标注。如图3所示,测试集加速度数据可视化后可以更直观地看出,跳跃、奔跑、行走、跌倒与平静的具有波形上的可分性。
从图3中可以发现,无论是突发性动作还是持续性动作,不同动作的波形具有可分性,可以通过寻找其波形特征的差异区分开不同动作的波形。使用人工神经网络可以自动地寻找这些差异性特征,具体的分类方法将在后文中介绍。
图2 行走数据可视化示意图Fig.2 Schematic diagram of walking data visualization
图3 测试集数据可视化示意图Fig.3 Schematic diagram of test set data visualization
本文所构建的姿态检测算法是为了解决在现实场景中,通过携带的智能手机传感器检测人体当前的姿势状态,算法的总流程如图4所示。
图4 人体姿态检测总流程Fig.4 General flowchart of human posture detection
由于人体姿态是一种动态的数据,且每一种姿态持续时间各不相同,所以本文将一条采样数据按时序分割。在第t时刻,模型获得传感器当前时刻采集的12维数据,经过数据归一化,使输入的12维数据映射到值域为[0,1]的区间中,转化为无量纲表达式,有利于消除各维度之间的量纲影响。然后将归一化的数据与t-1时刻LSTM网络单元的输出一起输入到LSTM网络单元,重复此操作直到此次长度为sample的数据被读取完毕,最后将sample次迭代的LSTM网络单元输出特征输入至输出层,最终得到分类结果。
人体姿态数据属于时间序列,过去时刻发生的状态信息对当前时刻有较强的影响。使用长短时记忆(LSTM)网络既可以有效地将过去的信息传递到当前的计算中,又能克服RNN结构中无法传递相隔较远信息的缺陷[17]。
人体姿态检测网络结构如图5所示,左边为网络整体示意。假设数据长度为n(即数据集中变长采样点数sample),输入x为归一化后维度为12的数据,经过隐藏层n次迭代后得到输出y。右边为时域展开后的网络结构,在第t时刻,隐藏层接收t时刻输入数据x(t)和上一时刻隐藏层输出c(t-1)后输出t时刻的隐藏层输出c(t)。隐藏层为LSTM网络单元,其具体结构[18]如图6所示。
图5 人体姿态检测网络示意图Fig.5 Schematic diagram of human posture detection network
图6 LSTM网络单元结构图Fig.6 Structure diagram of LSTM network unit
该网络结构在隐藏层中加入了先验知识——输入门、遗忘门和输出门,这些门将不同时刻的层间信息与某一时刻的输入信息处理得更加透明。根据LSTM网络单元结构图,可以得到输入门、输出门与遗忘门的函数表达式如下:
其中:Wx为输入权值矩阵;Wh为t-1时刻隐藏层状态权值矩阵;b为偏置项。t时刻线性自连接单元状态c(t)与隐藏层状态h(t)表达式为:
分析式(1)~(5)可以发现,通过调整各门的权值矩阵W,输入门i(t)可以控制流入自连接单元状态c(t)的信息量;遗忘门f(t)可以控制当前时刻的自连接单元状态c(t)所包含c(t-1)的信息量,即控制遗忘多少上一时刻的自连接单元状态;输出门o(t)控制可以流入到当前隐藏层状态h(t)的自连接单元状态c(t)信息。其中,线性自连接单元状态c(t)的作用是完成历史信息的积累,其积累方式为:
这里info为本次要积累的信息来源,将式(6)代入式(4)可得:
由式(7)可以得知,线性自连接单元状态c(t)在积累历史信息时,依靠遗忘门f(t)限制上一时刻c(t-1)传递的信息,同时依靠输入门i(t)来约束新输入的信息。根据式(5),当前隐藏层状态h(t)是由输出门约束的,由于是以线性方式更新,所以加入带有非线性功能的tanh函数。
整个LSTM网络单元的信息来源为当前的输入x(t)、上一时刻的隐藏层状态h(t-1)与上一时刻线性自连接单元状态c(t-1),由于其中c(t-1)是根据式(4)计算出来的,所以三个门单元的控制依据实际都来源于当前的输入x(t)与上一时刻的隐藏层状态h(t-1)。
如图5右上所示,在第n时刻时,即一组数据已经全部输入完毕后,将LSTM网络单元最终隐藏层状态h(n)作为输入传递进输出层。由于是分类标签大于2个为多分类问题,输出层函数为:
通过式(8)计算得出最终姿态预测分类结果的概率分布。
训练人体姿态检测网络是获得构建网络所以参数的过程,通过训练得到的参数是式(1)~(8)中的权值矩阵W与偏置项b。
在网络搭建完成后,第一步是将网络权值矩阵初始化。对于LSTM网络,由于正交初始化(Orthogonal Initialization)能减缓梯度弥散(Gradient Vanishing)与鞍点(Saddle Point)带来的问题[18],本文采取正交初始化来初始化网络权值。第二步,将一组数据输入完毕后经过权值矩阵计算得到网络输出y与本组数据标签y'(Label)计算交叉熵(Cross-entropy)作为误差,误差表达式如下:
第三步计算误差函数loss对权值矩阵W的梯度,将获得的梯度反向传播调整网络各部分权值矩阵,通过Adam下降方式(Adaptive Moment Estimation)反复迭代降低误差loss直到网络收敛至e。
为了方便重复实验与人体姿态检测的后续研究,表2列出了人体姿态检测神经网络中所设置的参数名称与对应的参数值供研究参考。其中:隐藏层数为模型中所含有的LSTM网络单元数目,隐藏层特征数为数据通过隐藏层后提取出的特征个数。
表2 人体姿态检测神经网络参数Tab.2 Parameters of human posture detection neural network
为了验证人体姿态检测网络的性能,本文使用独立于训练集分开采集的581条数据作为测试集验证人体姿态检测神经网络模型的效果,由于测试集数据为截取自然行为数据标注而成,其包含有部分非标准行为特征与不同行为切换时的数据,与通过志愿者做出单一动作时采集的标准训练集存在差异。本文利用训练集与测试集采集时的差异验证该模型从实验室采集数据对连续自然行为的泛化能力。
本文使用Top-1正确率与模型参数量作为评测指标:Top-1正确率为网络最终分类结果正确的次数占总次数的百分比,如图7所示,其值越高表明人体姿态网络的分类越准确;模型参数量是指训练模型所需的参数数量,其值越高说明模型越复杂,训练难度越大。拟合效果;测试集曲线则体现了网络对新输入的数据集的泛化能力。
图7 网络训练中Top-1正确率变化Fig.7 Correct rate change of Top-1 in network training
为了验证LSTM网络在处理人体姿态检测任务上的优势,本文使用经典的浅层学习方法支持向量机(SVM)、决策树方法与基于KD树的K近邻算法(KNN-kd)三种常用的机器学习算法与卷积神经网络(CNN)、全连接神经网络(Fully Connected neural network,FC)两种深度学习网络作为对照组与LSTM网络做对比实验。表3、4、5分别列出了SVM、决策树与KNN算法的参数。
表3 SVM对照组参数表Tab.3 Parameters of SVM control group
表4 决策树对照组参数Tab.4 Parameters of decision tree control group
表5 KNN对照组参数Tab.5 Parameters of KNN control group
深度学习对照组CNN与FC网络所使用参数如表6所示。
表6 深度学习对照组参数Tab.6 Parameters of deep learning control group
比较结果如表7所示,从表7中可以得知,本文方法(LSTM)在测试集上得到了最高的正确率98.02%,与次好的机器学习算法(KNN-kd)的93.53%相比提高了4.49个百分点,获得了更好的分类效果。进一步分析发现,SVM等浅层学习方法在训练集上可以得到较高的正确率,而在测试集上效果降低了很多。这说明这些方法对于数据的泛化能力不如本文所使用的方法,即受训练样本的约束过大,没有从有限的样本提取到最合适的特征。
由于人体姿态检测网络使用深度学习方法,本文设置了同为深度学习的全连接神经网络(FC)与卷积神经网络(CNN)作为对照实验。由于CNN网络需要输入为固定长度的数据,所以本文将数据处理为采样点数sample=128(约为3 s)的定长数据集。对比结果如表8所示,其中FC-1为隐藏层为1的全连接神经网络,FC-2为隐藏层为2的全连接神经网络,CNN-1为隐藏层为1的卷积神经网络,以此类推。
表7 不同方法的实验结果对比Tab.7 Comparison of experimental results of differents methods
表8 LSTM网络与深度学习对照组结果对比Tab.8 Comparison of LSTM network and control groups of deep learning
全连接神经网络(FC)由于其网络结构特点会对网络输入数据整体感知,其模型训练参数十分巨大,并会随输入数据长度即采样点数sample的增加而大幅度增加。卷积神经网络(CNN)通过局部感知参数共享的方式能大幅度降低网络训练参数,然而其本质是将时域输入数据转换至空域卷积计算,对128个采样点无关先后顺序赋以相同权重,128个采样点发生之前的数据对当前输出无任何影响,这对于持续时间较长的行为或较短时间内发生的突发行为来说,需要手动调节合适的采样点数才能获得较好的结果。
由表8可得,隐藏层为3的CNN网络能和本文使用的LSTM网络获得相近的正确率,但是进一步分析CNN网络后发现,由于CNN的输入需要为定长且包含至少一个完整姿态动作周期的数据,对照组的采样点数为sample=128,在采样频率为50 Hz的条件下,进行一次检测判断需要延迟约为3 s左右。这会导致将CNN网络应用在人体姿态检测中耗时过长,若采用滑窗采样的数据采集形式,又会带来重复的计算开销。本文使用的LSTM网络因为其具有对历史时刻的记忆性质,每次输入为当前采样时刻的数据,可以实时计算并避免额外的计算开销,更适合于人体姿态检测的应用。
本文提出了基于LSTM的人体姿态检测方法,利用循环神经网络对历史时刻数据的可记忆性,结合LSTM中特殊的门结构控制当前时刻与历史时刻的数据输入,提取了人体姿态时序数据中的特征并对其进行分类预测。通过对比经典的浅层学习方法得出,本文提出的方法能提取到准确且有效的特征值且具有较好的泛化能力,取得了较好的实验效果;通过对比CNN网络的分析研究得出,本文提出的方法能避免额外的计算开销,并可以实时检测老年人姿态状况。
由于数据集本身对于神经网络具有约束作用,数据集数目的增加对模型的特征提取与泛化能力都有帮助,所以下一步的工作主要是扩大数据集,并结合更复杂的神经网络在保证误差和正确率的情况下训练出更具备泛化能力的网络结构。