闫 航 陈 刚 崔莉亚 张乐芸 胡北辰
1(郑州大学信息工程学院 河南 郑州 450001)2(郑州大学互联网医疗与健康服务协同创新中心 河南 郑州 450052)3(郑州大学护理与健康学院 河南 郑州 450001)
近年来基于视觉的人体动作识别的研究得到了广泛的关注,是计算机视觉中一个极具挑战性的课题,其涉及图像处理、模式识别、人工智能等多个学科,在智能监控、人机交互、康复运动等领域有着广泛的应用前景[1]。脑卒中是最常见的慢性病之一,具有高发病率、高致残率的特点,是老年人健康的重大威胁。而康复锻炼是恢复卒中患者日常生活能力的主要手段,也是广泛推荐的康复疗法[2]。当前在居家康复领域缺乏护理医师的现场指导,同时存在看护者缺乏耐心和信心、康复知识不足的问题,导致患者出院后在家中难以完成有针对性的康复目标,依从性较差[3]。因此建立一种居家康复场景下的在线动作识别模型,实现患者康复过程中动作的实时监督与指导,对患者中长期的康复水平有着重要的意义。
根据获取数据的方式,可以分为基于传感器和基于视觉的人体动作识别。基于传感器的动作识别方式起步较早,且在康复动作识别领域中也有较多的研究。Bisio等[4]采用三轴加速度计采集病人运动信息,通过SVM分类器对手臂伸展、肩关节屈伸等康复动作取得了良好的识别效果。马高远等[5]对采集的上肢肌电信号通过小波分解提取特征,在8种常用康复动作上取得了92.86%的识别率。复杂动作通常需要多个传感器协同工作才能达到较好的识别效果,然而该方式会给身体带来极大的不适。基于视觉的动作识别主要分为人工特征和深度学习特征两类。传统的采用人工特征的动作识别方法侧重于局部特征提取,Wang等[6]提出改进的稠密轨迹用于动作识别,提升了对复杂场景的鲁棒性。深度学习能自主提取具有强大表征能力的特征,逐渐获得了更多的关注。主流的深度学习模型有3D CNN[7]、Two-Stream CNN[8]、LRCN(Long-term Recurrent Convolutional Network)[9]、R-C3D(Region Convolutional 3D Network)[10]等。然而以上模型对整幅视频帧进行深层卷积操作,存在复杂度高、运算速度慢、训练困难等问题,制约了其在现实生活中的应用。基于视觉的康复动作识别研究工作较少且主要采用骨架特征。人体骨架特征包含的运动信息比较完整,对于肢体动作来说是一种良好的表征方式[11]。邵阳等[12]采用深度相机Kinect获取人体骨架信息,通过基于余弦的动态时间规整方法有效识别了6种上肢训练动作。唐心宇等[13]提出一种基于Kinect的三维人体姿态估计方法,并通过计算关节角度来评估指定的康复动作。文献[14]同样对Kinect获取的三维人体骨架关键点进行角度计算,与标准的动作规范进行比较来识别动作并指导康复训练。以上康复动作识别方法存在如下问题:每个动作需要人工建立复杂的对照模型,不易拓展且泛化能力较差,对人员位置、角度均有严格的要求;缺乏对多人场景的兼容问题,居家康复环境下易受干扰;相比于单目摄像头,深度相机Kinect较为昂贵、普及度不高且设备难以获取;多数算法仅能处理经过裁剪的视频段或识别过程需要繁琐的人工干预,难以实现在线、连续的动作识别。
在线动作识别更具挑战性:预定义的目标动作发生时间不确定;除了目标动作外还存在其他动作与状态;处理速度能够匹配上监控视频流。在线动作识别对于应用落地具有重要的现实意义,但是相关的研究工作却很少。Li等[15]基于Kinect获取3D骨架数据,提出了一种联合分类和回归的LSTM网络实现了单人场景下的在线动作识别,但其识别的是持续时间较短的日常活动。
当前大多数基于视觉的人体动作识别算法存在复杂度高、建模困难、无法处理在线视频、部署条件苛刻等问题,而基于传感器的动作识别会对人体造成极大的不适。为了更好地适用于居家场景下卒中患者的康复动作识别,本文设计并实现了一种基于单目视觉的在线动作识别算法。采用姿态估计算法OpenPose对单目摄像头获取的连续视频流进行骨架关键点提取并结合最近邻匹配生成目标动作序列,对人体多个关节的运动变化进行充分的表征,同时避免了其他图像区域带来的噪声干扰。通过实验选取合适的滑动窗口大小,在目标人体的动作序列上通过滑动窗口提取原始特征并进一步预处理为鲁棒性特征,输入到预训练的LSTM分类网络中进行康复动作识别。本文提出的方法在康复训练场景中能够有效进行在线动作识别,模型易于部署,一定程度上能够适应非理想、嘈杂的环境,对于脑卒中患者的康复具有重要的意义。
姿态估计OpenPose[16]是首个基于深度学习实现的实时多人姿态估计开源库,能够实时地对图片中每个人的姿态进行精准的估计,实现面部、躯干、四肢、手部骨骼点的提取。它兼顾了实时性与准确性,且具有较强的鲁棒性。
该方法的核心是一种利用Part Affinity Fields(PAFs)的自下而上的人体姿态估计算法,即先检测关键点再获得骨架,在多人的场景下避免了过多的运算时间。图1所示为OpenPose的多阶段预测网络结构,该框架以VGG-19网络模型为基础,将输入的图像转化为图像特征F,通过分阶段预测分别回归L(p)与S(p),其中:L(p)表示亲和度向量场PAFs,描述关键点在骨架中的走向;S(p)表示关键点的置信度。该结构将每一次预测分为6个阶段,通过前4个阶段预测亲和度向量场Lt,后2个阶段预测置信度St。在每个后续阶段,将前一阶段的预测结果与原始图像特征连接起来作为输入,用于生成更精细的预测。在得到关键点的置信度及亲和度之后,采用匈牙利算法对相邻关键点进行最优匹配,从而得到每一个人的骨架信息。OpenPose的实时性非常出色,采用单目摄像头即可获取可靠的关键点信息,无需专用的深度摄像头。
图1 多阶段预测网络架构
循环神经网络(Recurrent Neural Network,RNN)是一种利用上下文状态来挖掘数据中时序信息的深度神经网络。相比于卷积神经网络,RNN会对于每一个时刻的输入结合当前模型的状态计算输出。单纯的RNN存在长期依赖问题,可能会丧失学习远距离信息的能力。长短时记忆网络(LSTM)的出现成功解决了梯度消失问题,是当前最为流行的RNN网络,广泛应用于语音识别、自然语言处理、视频描述、动作识别等领域。
图2为LSTM的网络结构示意图,LSTM的输入包括当前时刻网络的输入xt、上一刻LSTM的输出ht-1、上一时刻的记忆单元ct-1,输出包括当前时刻的输出ht和当前时刻的记忆单元ct。
图2 LSTM网络结构示意图
LSTM通过输入门与遗忘门控制记忆单元并结合输出门从而更有效地刻画长距离依赖。输入门、遗忘门与输出门的计算如下:
it=σ(Wi·[ht-1,xt]+bi)
(1)
ft=σ(Wf·[ht-1,xt]+bf)
(2)
ot=σ(Wo·[ht-1,xt]+bo)
(3)
式中:Wi、Wf、Wo分别为输入门、遗忘门和输出门的权重矩阵;bi、bf、bo分别为输入门、遗忘门和输出门的偏置。LSTM的输出由记忆单元与输出门联合计算如下:
(4)
(5)
ht=ot×tanh(ct)
(6)
本文提出的在线动作识别算法主要由动作信息采集、特征提取和分类网络组成。算法的识别框架如图3所示,其输入为单目摄像头获取的实时监控视频流,首先采用姿态估计OpenPose提取图像帧中的多人骨架关键点,结合最近邻匹配算法在持续的监控流中生成目标人体动作序列,记录人体手部、手臂、腿部、颈部等多个关节的运动轨迹。动作序列为具备时序关系的连续2D骨架关键点,每帧提取的骨架信息作为一个时间步长。在动作序列上通过滑窗选取原始骨架关键点特征,经过坐标归一化、绝对坐标转相对坐标从而转化为鲁棒性特征并输入到构建的LSTM分类网络中,通过Softmax分类器判断三种康复动作并区分正常活动所表现的动作与状态。
图3 在线动作识别算法框架
滑窗大小的选择通过实验并结合平台处理速度与动作持续时间,LSTM分类网络则采用经过裁剪的康复动作数据集进行训练,将训练好的网络参数迁移到在线动作识别算法。该算法通过2D骨架关键点的时序信息进行动作识别,相比于双流、3D CNN等算法具有极强的速度优势。由于每一帧只对提取的18个人体骨架关键点进行处理,构建的LSTM网络相对于主流方法中的CNN网络而言其参数大大减少,模型易于优化从而避免了对海量数据集的依赖。
2.2.1动作信息采集
本文以1 920×1 080分辨率的单目摄像头获取实时监控视频流,用于在线动作识别。采用智能手机以及单目摄像头采集经过裁剪的康复动作数据,用于训练分类网络。为了提高识别算法的鲁棒性和给予被监护人员一定的自由度,数据集存在角度、远近、背景、分辨率的差异。
利用姿态估计方法OpenPose提取骨架关键点,通过VGG-19网络将输入的图像转化为图像特征F,然后通过多层CNN分别预测关键点置信度与亲和度向量,联合置信度与亲和度向量得出人体的骨架信息。训练过程中模型总损失为置信度网络与亲和度向量场网络两者的损失之和,通过不断迭代完成神经网络参数的更新。由于姿态估计模型需要大量标注人体关键点的数据集来训练,为了达到更准确的效果,采用在超大规模图像数据集COCO中预训练的参数来初始化网络。将图像的分辨率调整为432×368后输入到模型中,输出为人体的18个2D骨架关键点,包括左右耳、左右眼、鼻、脖、左右肩、左右肘、左右腕、左右胯、左右膝和左右脚踝。图4所示为视频流中人体18个骨架关键点的检测结果,展示了“慢走”动作发生过程中人体关键点的变化。
图4 视频流中的人体骨架关键点检测
裁剪的视频段为单人视频且只发生一种动作,根据时序关系以一定的间隔对整个视频采样图像并提取骨架关键点来训练分类网络。视频流中提取的骨架信息仍是单帧的图像中独立的检测结果,目标人体在多人场景下失去时序关系,对于监控视频流则结合最近邻匹配算法生成目标人体动作序列。所设计的方法步骤如下:
(7)
3) 生成动作序列。结合最近邻匹配结果将视频流中目标人体的18个骨架关键点按照时序关系加入到动作序列中,若连续10帧没有检测到目标人体,则删除目标动作序列,重新执行步骤1)以确认目标人体。
2.2.2特征提取
本文通过滑动窗口的方式从动作序列中提取原始特征,每帧的目标人体有18个2D骨架关键点,共36个特征。设置滑动窗口的大小为n,即连续n帧图像作为一组分段特征,滑窗间隔设置为k帧。为了合理利用资源,设计队列的方式进行滑窗处理,假设动作队列为T,滑窗提取分段特征的流程如下:
1) 目标人体的骨架关键点不断加入队列直到队列长度为n,即T=[T1,T2,…,Tn],提取该分段特征。
2) 从队头删除T1,T2,…,TK,队尾不断加入后续的k帧关键点即Tn+1,Tn+2,…,Tn+k,提取该分段特征。
3) 重复步骤2),直至该目标消失。
上述提取的分段特征仍是原始的骨架关键点,为进一步提升算法对拍摄角度、目标远近、录制过程抖动等因素的鲁棒性,分别将关键点坐标进行归一化、转化为相对坐标、标准化处理。关键点坐标的大小范围是相对于视频分辨率的,将坐标值(x,y)分别除以视频分辨率(vw,vh)归一化到(0,1)范围,减小了不同视频分辨率以及不同肢体关键点的数值差异。然后选取脖子部位的关键点(x0,y0)作为原点,对其他坐标进行变换:
(8)
(9)
(10)
(11)
2.2.3分类网络设计
动作的描述可以由具备时序关系的一系列人体关键点构成[17]。为了充分挖掘序列的关系,设计了双层叠加的长短时记忆网络。本文设计的动作分类网络如图5所示,输入为滑窗提取并经过预处理得到的长度为n、特征维度为36的骨架关键点序列。两个LSTM网络单元的神经元个数为32,时间步长等于滑动窗口的大小n,第一层隐藏层每个时间步的输出状态传递给第二层隐藏层,取最后一个时间步的输出向量传递给神经元个数为64的全连接层,最后通过Softmax分类器进行动作类型的识别。Softmax分类器通过Softmax激活函数将多个神经元的输出映射到(0,1)之间,即各个类别的数值转化为概率,概率最大的类别即判定为分类结果。此外人体的大部分时间为静止坐位、慢走、站立等正常活动,而将正常活动误识别为康复动作对于患者的康复过程是不可靠的。分类网络将多种正常活动视为一类动作类型,同时进行康复动作以及正常活动的识别,提升了对康复动作识别的稳定性。
图5 人体动作分类网络
网络参数的更新采用经过裁剪的康复动作视频段进行训练,即每个视频只包含特定的一个动作。由于视频时长不同而导致样本的时间步不同,通过0值填充转化为时间步一致的样本,训练时跳过特征值全为0的时间步。首先提取视频中人体的关键点序列,经过特征预处理转化为鲁棒性特征后输入到所设计的分类网络中,通过前向传播与反向传播完成参数的更新。结合L2正则化与Dropout来防止过拟合,训练完成后保存在测试集取得最优效果的参数。在线动作识别算法的分类网络加载训练好的参数,经过前向传播并通过Softmax分类器得出概率最大的动作类型,实时输出目标人体正在发生的动作类别与概率值。
本实验的硬件环境如下:CPU为酷睿i7-8750,2.20 GHz,8 GB内存;GPU为GTX 1060,6 GB显存;监控摄像头的分辨率为1 920×1 080。搭建的深度学习模型基于TensorFlow框架,采用GPU加速处理过程。
为了客观评价算法的准确性以及在康复场景的可用性,本文选取一个公开数据集KTH[18],并参考文献[19]规范的脑卒中患者康复动作采集了一组康复动作数据集,各数据集如图6所示。
图6 KTH与康复动作数据集样本示例
1) KTH是计算机视觉一个具有标志性的数据集,包含了4类场景下25个志愿者的6种行为:慢跑(Jogging)、步行(Walking)、跑步(Running)、拳击(Boxing)、挥手(Hand waving)和拍手(Hand clappong)。该数据集共有599个视频,每秒25帧,分辨率为160×120,具有人体尺度和光照的变化,背景较为简单。按照与文献[18]一致的划分方式采用18个志愿者的视频作为训练集,其他9个志愿者为测试集。
2) 康复动作数据集由5位实验人员在3种不同的环境下采集而成,包含4类行为共964个视频段,具有光照、人体尺度、背景、拍摄角度的变化。行为类型分为三种康复动作以及一类正常活动动作,其中康复动作为上下臂锻炼、左右臂锻炼和坐起锻炼,正常活动包括静止站立、静止坐位、慢走、伸展等,具体动作说明见表1。每个视频的分辨率为1 280×720或1 920×1 080,帧速率为15帧每秒,视频段持续时间为8~15 s之间。
表1 脑卒中康复动作描述
两个数据集都为经过裁剪的短视频,数据集的基本训练流程如下:
1) 视频段中每帧提取的36个骨架关键点特征作为一个时间步,小于选定步长的样本通过补0的方式进行填充。
2) 对每帧提取的36个关键点特征进行预处理,将原始特征转化为鲁棒性特征。
3) 通过正态分布的方式生成随机值来初始化分类网络的权重参数,预处理后的样本分批量(batch-size)输入到分类网络,进行前向传播得到损失值,采用Adam优化器来最小化损失函数,学习率设置为0.001。
KTH数据集的样本较少,采用数据增广的方法将训练集扩充一倍,对视频进行左右对称变换并将其比例转换为5∶4。将康复动作数据集按照7∶3的比例随机分为训练集与测试集,同时保证测试集中每种动作的样本比例均衡。另外,为了增大帧间动作差异同时提升运行效率,每间隔3个图像帧进行处理。训练时批量设置为32,一共分500个Epoch运行,模型在KTH数据集和康复动作数据集上分别训练迭代9 000、6 000次后逐渐收敛。
3.4.1不同模型设置对精度的影响
动作识别数据集的对比分析通常采用准确率作为评价标准,为分析不同的模型设置对识别精度的影响,实验分别从LSTM单元隐藏层节点个数、时间步长、特征预处理三个方面对KTH与康复动作数据集进行分析。实验分别将LSTM隐藏层节点个数设置为16、32、64、128,时间步长统一设置为50,实验结果如表2所示。当隐藏层节点个数依次增加时,KTH与康复动作数据集的识别准确率分别提高至94.9%、100%。依据实验结果选取最佳的隐藏层节点数量,在KTH数据集下的隐藏层节点个数设置为64,康复动作数据集中设置为32。
表2 隐藏层节点个数对精度的影响 %
选取合理的时间步长对于识别精度是至关重要的,过短的时间步不能够充分表达一个动作,而过长的时间步则导致运算速度慢,冗余的信息也会干扰识别过程。实验分别将时间步长设置为10、20、40、60、80,KTH数据集中隐藏层节点个数设置为64,康复动作数据集中隐藏层节点设置为32,实验结果如表3所示。通过识别精度在每个数据集选取合理的时间步长,时间步长在KTH与康复动作数据集中分别大于60、40后模型的精度不再提高,即两个数据集分别通过提取的前60和40帧就能够达到最好的识别效果。
表3 时间步长对精度的影响 %
本文将姿态估计算法获取的骨架关键点进行了预处理,将其转换为鲁棒性特征,在对比分析加上预处理后的识别效果。KTH数据集上时间步为60,隐藏层节点个数为64。康复动作数据集上时间步为40,隐藏层节点个数为32,对比分析结果如表4所示。相比于原始特征输入到分类模型,经过预处理后的鲁棒性特征在KTH与康复动作数据集的识别准确率分别提高了2.78和1.04个百分点。
表4 特征预处理对识别精度的影响 %
3.4.2不同算法的识别精度对比
为了客观展示算法的性能,表5展示了与其他文献中的算法在KTH数据集上的对比结果。文献[7]是在传统卷积神经网络的基础上增加了对时间维度的卷积,是动作识别领域的典型模型。文献[20]采用树状层次结构的深度网络提取视频的时空特征,结合KNN分类器进行动作识别。文献[21]提出融合兴趣点表现特征的增强单词包并通过SVM分类器实现动作识别。本文设计的动作识别算法均高于以上三种方法,识别准确率达95.37%。由于KTH数据集分辨率较低,提取的骨架关键点存在较多丢失,同时算法在保证一定准确率的基础上提升了处理速度,识别精度略低于文献[22]方法。文献[22]首先采用YOLO算法[23]检测目标框,通过CNN提取目标框的图像特征并由LSTM网络进行分类,相比于本文算法,该特征提取模型更加复杂,计算量也更大。
表5 KTH数据集方法对比
对于康复动作数据集,采用姿态估计算法提取骨架关键点并应用相同的特征预处理方式,分别与隐马尔可夫模型(HMM)、全连接循环神经网络(SimpleRNN)和门控循环单元(GRU)三种优秀的时序关系模型进行对比。对比分析结果如表6所示,相对于传统机器学习算法HMM,循环神经网络对时序关系的提取能力更强,本文算法也取得了最好的识别结果。
表6 康复动作数据集方法对比
3.4.3在线康复动作识别
相比离线的数据集,在线动作识别更具挑战性。为测试康复训练场景下动作识别的效果,通过分辨率为1 920×1 080的单目摄像头捕获连续的视频流,采用在康复动作数据集中训练好的参数初始化分类网络。考虑到康复活动发生过程较慢,间隔3帧采样图像,采用时间步长为80、隐藏层节点个数为32的分类网络参数。实时获取系统时间作为参考,在线动作识别效果如图7所示,图7(a)、图7(b)演示的动作分别为上下臂锻炼、左右臂锻炼;图7(c)、图7(d)演示的动作分别为正常活动、坐起锻炼,其中加入了无关人员的干扰,并且目标人体的位置产生了移动。算法处理能力达18 帧每秒,能够持续捕捉并判断监控流中目标人体的康复动作,实时输出目标位置、动作类型以及动作概率,对于活动位置、其他人员干扰具有较强的适应能力。
图7 在线动作识别结果
为了客观展示算法于在线动作识别方式下对康复动作的识别准确率,实验人员连续做左右臂锻炼、上下臂锻炼、坐起锻炼各50次,并以站立、慢走等正常活动作为间隔动作。实验结果如表7所示,算法平均识别率达93%,且不易将正常活动误识别为康复动作,在线场景下能够有效进行康复动作识别。然而相对于在康复动作数据集中的表现,在线场景下模型对三种康复动作的平均识别率仅90.66%,原因在于实时环境下不同目标的动作行为存在较大的不确定性,需要更加充分的数据集训练分类网络来进一步达到更好的识别效果。
表7 连续动作识别结果
本文提出了一种基于单目视觉的在线动作识别算法,结合姿态估计OpenPose与最近邻匹配算法对视频流中的目标人体生成动作序列,采用滑动窗口选取原始关键点特征并转换为鲁棒性特征后输入到双层LSTM网络进行动作分类。利用OpenPose获取骨架关键点的实时性对监控流中的目标人体进行快速检测,同时基于基准坐标结合最近邻匹配算法跟踪目标人体,避免了视频流中大量无关区域以及其他人体的噪声干扰。结合LSTM对长时间序列的处理能力,能够对视频流中目标人体的行为做出准确的识别。通过在公开数据集KTH和康复动作数据集中实验,KTH数据集的平均识别率达95.37%,康复动作数据集中的识别率达到了100%。在线动作识别下的康复动作识别率达90.66%,证明了该方法的有效性,探索了基于计算机视觉的动作识别方法在康复训练领域的应用。
由于康复动作数据集的样本规模较小,算法在连续视频流中进行在线动作识别下的识别率与其在数据集中的表现存在较大差距。未来研究将会采集更丰富的数据集,加入更多的康复动作类型,同时优化训练策略与分类网络,进一步提升对真实场景的适应能力,帮助患者在居家场景下更好地完成康复训练计划。