基于递归神经网络的跌倒检测系统
2018-07-20牛德姣刘亚文蔡涛彭长生詹永照梁军
牛德姣,刘亚文,蔡涛,彭长生,詹永照,梁军
(江苏大学 计算机科学与通信工程学院, 江苏 镇江 212013)
跌倒行为会对人体造成伤害,特别是对老人、小孩和病人等群体造成的伤害尤其严重。如何对可能出现的跌倒行为进行及时的预警,从而减少和避免其带来的伤害就显得非常重要。当前国内外相关的研究主要包括用户自主启动型报警设备[1]、基于视觉的跌倒检测系统[2]和基于可穿戴设备的跌倒检测系统[3]等类型。用户自主启动型报警设备对使用者和使用条件有很多限制,基于视觉的跌倒检测则涉及用户隐私等问题,而基于可穿戴设备的跌倒检测系统具有使用方便、个人隐私性好等优势,成为当前跌倒检测研究和开发中的热点。
阈值法[4]是最常用的跌倒检测算法,设定一个或多个阈值,通过可穿戴设备传感器获取加速度和角速度等信息进行分类;较低的时间与空间复杂度是其最重要的优点,但如何确定阈值非常困难,同时在应用于差异较大的不同个体时存在准确度差等问题。近年来研究者开始将隐马尔可夫链[5-6]、动态朴素贝叶斯网络[7]、支持向量机[8]、随机森林[9]和K最近邻[10]等方法应用到跌倒检测中,这些方法对传感器采集的数据进行抽象后建模用于跌倒行为的分类,具有较强的适应能力。但由于只是使用了传感器数据的某个或某些特性用于检测,仍存在检测精度不足等问题。此外,为了提高准确率,大部分跌倒检测系统只是简单地判断未跌倒和跌倒两种状态,未区分实用价值很高的接近跌倒状态[11]。
与传统建模或少量数据的训练不同,借助大数据技术,通过大量数据的训练,神经网络模型能挖掘和学习数据内部的复杂结构,从而极大提高分类系统的适应能力和精度,因此基于大数据的神经网络已迅速成为当前研究与开发的热点。与CNN通过滑动窗口保留部分历史输入不同,递归神经网络(RNN)能保留所有的历史输入,通过抽象历史输入之间的关联,具有很高的分类准确性,已被成功应用于自然语言处理领域中,取得了良好的效果。跌倒检测与自然语言处理具有很多相似之处,利用多个传感器的关联关系进行跌倒检测能有效提高检测的准确性,减少个体差异的影响;本文将RNN引入到跌倒检测系统中,主要完成以下几个方面的工作。
1) 根据RNN的特性,对可穿戴设备传感器获取的数据进行重组,转变为适合RNN的输入序列。
2) 借助RNN能够保存历史信息的特性,利用其发现和抽象序列内在关系的能力,充分发掘位置传感器数据之间的内在联系,设计了基于RNN的迭代算法,提高了跌倒检测的效果。
3) 在Spark平台上,利用基于RNN的迭代算法,实现了基于RNN的跌倒检测系统,除了与现有跌倒检测系统一样能区分正常和跌倒行为之外,还能准确识别出更具危险性的接近跌倒行为。
4)使用Fall_adl_data[12]作为测试数据集进行验证,相比在同一数据集上的其他算法[13-14],基于RNN的跌倒检测系统的F值分别提高了12%与8%,并能正确检测出接近跌倒行为,从而更好地提供预警信息。
1 相关工作
1.1 跌倒检测
Vaidehi等[15]提出了基于人体静态特征的视频检测方法,通过阈值法判断是否跌倒; Bosch等[16]通过广角摄像头进行跌倒检测,采集人体倾斜角度的变化速度等信息作为特征,通过支持向量机的方法进行跌倒判断,识别率达到97%;佟丽娜等[17]利用加速度信息作为时间序列,然后使用该时间序列作为训练样本训练隐马尔可夫模型,通过分析当前的输入序列与模型的匹配程度进行跌倒预测并取得良好的预测效果;R. M. Gibson等[18]比较了小波阈值下降强度检测法与PCA决策树两种不同的算法,得出PCA决策树算法具有更好的准确性和鲁棒性;L.Chen等[7]利用贝叶斯网络来实现人体姿态预测,通过姿态预测结合识别算法来提高预测时间,之后又通过支持向量机的方法进行摔倒识别,召回率与准确率分别达到96.2%与87.3%;D. Luo等[19]提出了基于随机森林的跌倒检测算法,最终获得95.2%的准确率、90.6%的敏感度和93.5%的特异性,并对比得出优于SVM和反向传播(BP)神经网络检测算法的结论;S. Z. Erdogan等[10]利用数据挖掘中的K近邻的方法进行跌倒检测,也取得了不错的识别效果。
1.2 递归神经网络的应用
递归神经网络是深度学习领域研究热点之一,近年来,它在语音识别、机器翻译、文本语言处理等领域表现出了巨大的成功[20-22]。它主要解决了如何处理时间序列上的变化的问题。递归神经网络的应用主要有3个方面:1)自然语言处理,包括语言模型[23]、机器翻译[24]、语音识别[25]、会话模型[26]等;2)计算机视觉方面,包括物体识别[27]、视频跟踪[28]、视频分析[29]等;3)自然语言处理与计算机视觉相结合,包括图片字幕[30]、视频字幕[31]、视觉问题回答[32]、机器人技术[33]等。
2 基于RNN的跌倒检测算法
与RNN使用效果较好的自然语言处理领域类似,个体的差异使得单个传感器数据对跌倒行为检测非常有限,甚至会产生负面影响;由多个传感器获取不同数据序列之间的关联性是检测跌倒行为的关键,本文引入RNN来学习和表示这类内在关联关系,设计新型的跌倒检测算法,主要包括传感器数据序列化、RNN跌倒检测训练算法等部分。
2.1 传感器数据的序列化
在设计RNN实现跌倒检测算法时,如何发挥RNN在处理序列信息方面的优势是一个关键问题。在跌倒检测中所使用的均是位置传感器,本文定义位置传感器数据序列SS,包含XS、YS和ZS 3个传感器值,其中XS表示该位置传感器在空间中X轴的坐标值,YS表示该位置传感器在空间中Y轴的坐标值,ZS表示该位置传感器在空间中Z轴的坐标值;由此将位置传感器所采集的空间位置信息转为了一个由3个坐标值构成的数据序列。
图1 位置传感器序列产生行为训练序列组AS示意图Fig. 1 AS schematic of the position sensor sequence generates the behavior training sequence group
再定义行为训练序列组 A S(SS1,···,SSn,action),其中 S S1,···,SSn是n个位置传感器数据序列组,每个SS包含3个传感器值;action表示当前行为的类型,0表示非跌倒,1表示跌倒,2表示接近跌倒。图1给出了个体包含两个位置传感器时,分别处于非跌倒和跌倒状态时所对应行为训练序列组的示意图,其中 A S1对 应非跌倒状态, A S2对应跌倒状态。
由此,由同一时刻的所有位置传感器所采集数据和当前的行为类型构建了行为训练序列组,作为RNN的输入,利用RNN能发现和抽象输入序列中各单元关联关系的优势,获取多个位置传感器之间关联关系的抽象,为提高跌倒检测的准确率和适应能力提供基础。
2.2 用于跌倒检测的RNN训练算法
本文以AS为单位,将AS包含的每个SS中的3个传感器数值以及action作为独立输入单元,然后将该独立输入单元作为输入层的输入用于跌倒检测的RNN的训练,输出层计算行为训练序列组当前的概率pt,并统计每个AS的总概率P作为训练和检测的依据。
用于跌倒检测的RNN如图2所示,其中xt表示所有行为训练序列组AS中第t个输入项,yt表示第t个输入所对应输出向量,U表示输入层与隐藏层之间的权值矩阵,V表示隐藏层与输出层之间的权值矩阵,W表示隐藏层与上一次隐藏层之间的权值矩阵,P表示AS所对应的概率[34]。
图2 用于跌倒检测的RNN示意图Fig. 2 RNN schematic for fall detection
训练用于跌倒检测RNN之前,将t的值初始化为0,然后将yt的值也初始化为0,同时随机初始化U、V和W。
对行为训练序列组AS中每个输入单元xt,使用式(1)更新隐藏层,其中f是sigmoid函数,计算方式如式(2);sigmoid函数的作用是引入随机性,同时将结果的值映射到(0, 1)。
然后使用式(3)更新输出层,其中g是softmax函数,计算方式如式(4);softmax函数能使输出值在(0,1),且所有输出值的和为1,同时使得输出值向1或0靠近,从而为分类提供方便。
用eo表示输出层的误差,对AS中的每个单元使用式(5)进行计算,其中dt是AS对应的目标输出向量,yt是当前用于跌倒检测RNN实际输出向量。
接着使用式(6)计算隐藏层的误差eh,其中dh使用式(7)进行计算。
在RNN的训练过程中,需要将隐藏层的误差进行递归传递。在每个AS训练结束后,使用式(8)递归反向传播误差,传播的长度与AS包含的单元个数相等。
此外,针对AS中的每个输入单元,使用式(9)更新隐藏层与输出层之间的权重矩阵,使用式(10)更新输入层与隐藏层之间的权重矩阵,使用式(11)更新上一次隐藏层与当前隐藏层之间的权重矩阵。
式中:β是正规化参数,α是学习率,T是反向传播的步数。当所有的AS组成的训练集被用于跌倒检测RNN训练后,调整学习率α,若当前训练误差小于给定阈值,则继续使用相同的α值进行训练;反之则减小α的值进行训练。困惑度(PPL)是用于衡量跌倒检测RNN有效性的重要指标,在每完成一次所有AS的训练后使用式(12)进行PPL的计算,PPL值越小,说明跌倒检测RNN的表现越好;当PPL值达到系统设置阈值时,结束跌倒检测RNN的训练。
在以上的训练算法中,所有的历史数据通过隐藏层都得到了保存,因此可以全面利用每一条数据信息,进而为充分发掘位置传感器数据之间的内在联系奠定了基础,从而在一定程度上提高了跌倒检测的效果。
2.3 基于RNN的跌倒检测算法
在使用用于跌倒检测RNN判断用户行为时,本文把跌倒检测转化为一个分类问题,通过比较用户行为为非跌倒、跌倒、接近跌倒这3种状态的概率,判断用户行为的类型。
定义行为判断序列组 D S(SS1,···,SSn,type),其中SS1,···,SSn是n个位置传感器数据序列组,每个SS包含3个传感器值;type表示预测行为的类型,0表示非跌倒,1表示跌倒,2表示接近跌倒。
在使用用于跌倒检测RNN进行检测之前,首先使用某一时刻的个体所有位置传感器数据序列组的数据,分别将type值设置为0、1和2,构建3个对应的行为判断序列组。图3给出了个体包含两个位置传感器时,从一组位置传感器数据序列 S S1和SS2所 产生的3个行为判断序列组D S1、 D S2和 D S3,其中 D S1对 应非跌倒状态, D S2对 应跌倒状态, D S3对应接近跌倒状态。由此构建了包含所有位置传感器所采集数据和预测行为类型的行为判断序列组,作为用于跌倒检测RNN判断行为类型的输入,利用RNN能抽象和保存序列中各输入单元之间的关联关系,通过判断多个位置传感器之间的关联关系,提高跌倒检测的准确率和适应能力。
图3 位置传感器序列产生行为检测序列组DS示意图Fig. 3 DS schematic of the position sensor sequence generates the behavior detection sequence group
接着将所产生的 D S1、 D S2和 D S3作为输入,送入用于跌倒检测RNN,分别计算 D S1、 D S2和 D S3所对应的概率值,并进行比较,选取概率值最大的一个DS,根据其中type的值判断该状态下用户行为的类型。本文在图4中以 D S2为例,给出使用跌倒检测RNN进行检测的示意,P7是 D S2整体的概率值。
图4 对行为训练序列组进行训练的示意图Fig. 4 Schematic diagram of a training sequence of behavior training sequences
行为训练序列组当前的概率P使用式(13)进行计算,其中m表示该行为训练序列组中的第m个单元,每个DS的训练相互独立,处理完DS中的type之后得到该DS整体概率。
3 基于RNN的跌倒检测系统
在基于RNN跌倒检测算法的基础上,本文实现了基于RNN的跌倒检测系统(RNNFD),并构建了测试平台,使用跌倒检测的标准数据集进行了测试,依据通用评价指标进行分析。
3.1 原型系统的实现
RNN的训练时间开销非常大,本文利用之前所实现的基于分布式神经元的大规模RNN系统[22],在Spark平台上实现基于RNN的跌倒检测系统(RNNFD),通过分布式内存计算平台减少RNNFD的训练时间开销。
RNNFD的隐藏层中神经元数量是决定跌倒检测准确率的关键因素,同样也是带来大量训练时间开销的重要因素,本文将神经元的数量设置为200,正规化参数β设置为10-6,学习率α的初始值设置为0.1。
RNNFD的示意图如图5所示。
图5 RNNFD的示意图Fig. 5 Schematic diagram of RNNFD
在训练时,RNNFD首先将训练集中的位置传感器数据转化为行为训练序列组,输入后进行训练;训练完全部行为训练序列组后,使用验证集中的数据进行验证,决定是否需要继续训练。
RNNFD训练完成后,可以使用测试集中的位置传感器,转换为行为测试序列组后,输入RNNFD后选择概率最高的行为测试序列组,根据其中的type值,获得判断的行为类型。
3.2 测试环境与评价指标
3.2.1 测试环境
本文使用3台服务器搭建了RNNFD的测试环境,服务器的配置如表1所示。
表1 RNNFD的测试环境配置Table 1 RNNFD test environment configuration
使用Fall_adl_data数据集进行测试与分析,该数据集采集了18~51岁6名女性与36名男性的42个样本,他们的年龄、身高及体重的均值与方差分别为 (24.1±5.7)岁,(172.2±6.7) cm 和 (69.7±13.1) kg,每个样本包含16万条位置传感器和状态数据,包括跌倒、接近跌倒、日常活动等状态,总计672万条数据,能满足RNNFD的训练与测试要求。
在构建训练集时,本文选取了3个男性的样本,具体信息如表2所示,体型特征包括正常、矮胖和高瘦3种类型,具有一定的代表性。RNNFD的训练集包括476 858条行为训练序列组,每条行为训练序列组包含4个传感器数据和1个状态信息共13个独立输入单元,整个训练集共计包含6 199 154个输入单元。同时,随机选取了训练集中的167 953条行为训练序列组构建验证集,用于调整学习率,共计2 183 389个输入单元。虽然仅选了3个男性样本构建训练集,但行为训练序列组的数量已经达到47万多条,能较好满足RNNFD的训练要求,避免样本个数较小带来的过拟合现象;而且,仅使用3个男性样本进行训练,RNNFD就能够发现行为训练数据的内在关联,并与现有算法比较在较大规模的测试集上的准确率。
表2 训练集的构建Table 2 Training set construction
此外,从余下的39个样本中随机抽取273条传感器数据构建了5个测试集用于测试,共计819条行为检测序列组,包含10 647个输入单元。
3.2.2 评价指标
使用以下几个量化指标评测基于RNN的跌倒检测系统。
TP:能够检测出的跌倒次数。
FP:误判为跌倒的次数。
TN:没有误判为跌倒的次数。
FN:没有判断出来的跌倒次数。
准确率:PP=TP/(TP+FP)
召回率:R=TP/(TP+FN)
准确率与召回率是用在信息检索、分类、识别等领域的基本指标,用来评价结果的质量;准确率用来衡量一个系统的查准率,召回率用来衡量一个系统的查全率。
式中:γ是参数,PP与R分别是准确率与召回率, 本文取 γ =1, 其值此时表示为 F =(2×PP×R)/(PP+R)。因此F值综合了准确率与召回率,是准确率与召回率的调和平均值,也是综合这二者指标的评估指标,用于综合反映整体的指标;F值越高说明跌倒检测方法越有效。
3.3 测试与分析
测试RNNFD检测跌倒行为的准确性并把结果与相关算法进行比较,同时测试RNNFD检测接近跌倒状态的结果。
3.3.1 检测跌倒行为的效果
使用5个测试集测试RNNFD识别跌倒行为的效果,结果如表3所示。
表3 RNNFD检测跌倒行为的测试结果Table 3 RNNFD test results for falls behavior
从实验结果可以发现,RNNFD能保持较高的准确率与F值,准确率的平均值在92%左右,F值的平均值在90%左右。同时,还可以通过增加隐藏层中神经元数量的方式,进一步提高识别跌倒行为的效果;此外,也可以通过增加训练样本的方式,提高RNNFD的检测效果。这表明,RNNFD能在仅使用少量个体样本数据进行训练时,就能在大其10倍的测试数据集上取得较高的准确性,验证了RNNFD具有很强的检测能力;同时在训练时仅使用了19~23岁的男性样本,但仍然能检验出测试集中的18~51岁的女性和男性行为,说明RNNFD能有效地发掘行为训练序列组中4个传感器数据和1个状态信息的内在关联,具有良好的适应能力。
3.3.2 与其他跌倒检测算法的比较
本文将RNNFD与文献[13-14]中的跌倒检测算法进行比较,相应的F值如表4所示。
表4 不同跌倒检测算法的比较Table 4 Comparison of different falling detection algorithms
从表4的结果可以发现,RNNFD相比文献[13]和[14]中的算法,能有效地提高F值,达到了90%,相对文献[14]的F值提高了12%,相对文献[13]的F值提高了7%。这说明,RNNFD相比现有的跌倒检测算法具有更高的查准率与查全率。同时也说明,相比于其他算法RNNFD能够更加有效地发现和抽象数据的内在关联,能更好地实现跌倒行为的检测。
3.3.3 检测接近跌倒的结果
再测试RNNFD识别接近跌倒行为检测序列组效果,同样也使用5个测试集,测试结果如表5所示。
表5 接近跌倒的检测情况Table 5 The detection of near falls
从表5的结果中可以发现,RNNFD能有效地识别出接近跌倒的行为检测序列组,平均准确率达到了87.3%,这表明RNNFD在进行接近跌倒的行为检测时,也表现出了很强的适应性,能够有效地利用检测的数据并且最大可能地发掘状态信息之间的内在关联性;同时也说明,RNNFD具有比其他跌倒检测系统更强的检测能力,能识别出具有很大危险性同时也是很难区分出的接近跌倒状态,为提前采取相应防护措施提供了基础,从而能有效减少跌倒带来的危害。
4 结束语
本文将RNN引入到跌倒检测的研究中,利用RNN能发现和抽象序列中内在关联关系的特性,通过发掘位置传感器数据之间内在关联关系,这些内在关联关系是难以用现有的方法准确表达出来的,通过以上方法提高跌倒检测的准确性。在分析跌倒检测要求的基础上,针对RNN的特点,设计了序列化的传感器数据、RNN训练与检测输入表示方法,给出了用于跌倒检测的RNN训练算法以及基于RNN的跌倒检测算法,将跌倒检测转换为输入序列的分类问题;并在本文前期所实现的基于分布式神经元大规模RNN系统的基础上,在Spark平台上实现了基于RNN的跌倒检测系统,使用Fall_adl_data数据集进行了检测效果和对接近跌倒数据检测能力的测试与分析,验证了RNNFD能有效提高跌倒检测的准确率,F值相比现有跌倒检测系统能提高12%和7%,并且能够检测出接近跌倒行为。
下一步将进一步优化用于跌倒检测RNN的训练方法,同时考虑使用LSTM减少时间开销,提高准确率。