基于骨架特征的人体跌倒检测*
2024-03-23汤发源赵永兴刘晓亮王京华
汤发源,赵永兴,刘晓亮,赵 欣,王京华
(1.长春理工大学机电工程学院,吉林 长春 130022;2.吉林大学第一医院血液科,吉林 长春 130021;3.吉林大学第一医院小儿呼吸科,吉林 长春 130021)
0 引 言
跌倒是日常生活中最常见的不良事件之一[1]。传统跌倒检测方法主要有基于穿戴设备[2,3]和基于环境传感器[4,5]对人体跌倒进行检测。然而,可穿戴设备需要实时佩戴,容易造成人体活动不方便,并且存在容易忘记佩戴的缺点,而基于环境设备的跌倒检测需要在特定的环境中安装传感器设备,成本较高,不方便移植。
基于视频监控采集的图片数据,Min W 等人[6,7]利用将人体目标边界框的纵横比变化作为人体跌倒特征,进行人体跌倒检测。Xu Q Z等人[8]基于OpenPose形成人体骨架图进行人体跌倒检测。Chen W等人[9]通过OpenPose提取人体关键点坐标信息,通过髋关节中心下降速度、人体中心线与地面的夹角、人体外接矩形纵横比3 个关键参数来识别跌倒事件。Wang B H 等人[10]在GTX 1080GPU 上基于OpenPose提取人体的质心速度、上肢速度和人体外椭圆联合检测人体跌倒。伏娜娜等人[11]基于NVIDIA Quadro M2200 GPU利用人体中心点的下降速度和人体宽高比判断人体是否发生跌倒。
根据上述分析,以往基于骨架特征的跌倒检测通常需要在GPU设备上运行。本文通过将标准化后的人体关键点坐标以及人体部分关键点边界框的纵横比作为人体姿态特征向量,最后利用多层感知机(multilayer perceptron,MLP)判断人体是否发生跌倒行为。基于轻量级OpenPose可以在CPU设备上运行并实现人体跌倒检测。
1 OpenPose人体关键点检测
OpenPose[12]主要思想是采用一种自下而上的关键点检测方法,最初使用VGG-19主干作为一个特征提取器,然后通过初始阶段和5个细化阶段对特征图进行优化。每个阶段由2 个平行的分支组成,一个用于关键点置信图(confidence maps,CMP)预测,另一个用于部分亲和场(part affinity fields,PAFs)预测,这2 个分支的设计方式相同。根据OpenPose 定义,如图1所示,利用18 个关键点的位置表示人体姿态。
图1 人体关键点
2 OpenPose网络结构
卷积神经网络结构设计的趋势是加深网络的层数以获得更好的人体关键点检测准确率,相对而言,深层网络需要性能更好的设备进行训练以及引用部署,很难在生活中得到广泛的应用。OSOKIN D[13]遵循OpenPose的自下而上的方法,设计了一种基于MobileNetV1[14]的轻量级的关键点检测网络。为了进一步提高人体关键点检测网络的准确率,对网络的特征细化阶段进行优化,并且可以在CPU 设备上运行。
2.1 轻量级卷积模块
如图2所示为标准卷积的计算过程,DF×DF×M特征图F作为输入,通过标准卷积计算,输出尺寸DG×DG×N的特征图G。其中,DF为输入特征图的空间宽度和高度,M为输入特征图的通道数,DG为经过标准卷积输出特征图的空间宽度和高度,N为输出特征图的通道数。标准卷积层由大小为DK×DK×M×N的卷积核K进行参数化,其中,DK为标准卷积核的空间高度和宽度,M为输入特征图通道数,N为参与计算的卷积核数量,并且N与输出特征图通道数相同。
图2 标准卷积
如图3所示,深度可分离卷积由深度卷积和逐点卷积组成,其中深度卷积为每个输入特征图通道应用一个卷积核,逐点卷积为一个简单的1 ×1 卷积,用来创建分层输出的线性组合。
图3 深度可分离卷积
标准卷积可表示为深度卷积和可分离卷积两步,若使用3 ×3的卷积核,则使用深度可分离卷积的参数量比标准卷积少8到9倍,精度的降低量却很小。最终得到了一个参数减少的计算,分子代表深度可分离卷积的参数量,分母表示标准卷积的参数量,计算公式如下
2.2 OpenPose细化网络
Cao Z等人[15]采用串联的细化网络结构,通过实验验证可得PAFs需要更多的阶段来收敛,相对于CMP 细化阶段,PAFs细化阶段更能增加关键点检测的准确率。当使用PAFs作为先验时,会提高CMP 精度,若使用CMP 作为先验时,将导致关键点检测精度下降,并指出采用3个阶段的PAFs细化阶段与一个CMP阶段进行细化在网络复杂度和准确率之间得到了最优平衡。本文以MobileNetV1 为特征提取网络,采用3 次的PAFs细化阶段和1 次的CMP 细化阶段。图4为PAFs细化阶段网络结构,细化阶段的每一个模块由残差连接构成,通过级联操作将每个阶段的输出预测与输入进行连接,并作为下一个阶段的输入。
图4 PAFs细化阶段
为了进一步降低网络的参数,并保持PAFs 和CMP 细化阶段的数量要求,在CMP和PAFs之间共享大部分的计算。为了进一步对特征图进行优化,使PAFs 和CMP 细化阶段共享参数,如图5所示。
图5 PAFs和CMP参数共享
图6 所示为轻量级OpenPose 人体关键点检测网络结构,其中采用2 个PAFs 细化阶段,以及1 个PAFs 和CMP参数共享阶段。并通过级联操作将特征图F,细化块(Refinement Block)产生的特征图以及PAFs特征图进行连接,作为下一个阶段的输入,以生成更精细的预测。
图6 OpenPose关键点检测网络
2.3 网络训练的损失函数
利用细化阶段的网络迭代地预测每一个阶段中表示人体关键点位置的CMP 和表示人体关键点连接的PAFs,在每个阶段的末尾都应用了CMP和PAFs损失函数作为中间监督。计算网络在每个阶段预测的CMP、PAFs与真实标签之间的均方误差损失。网络在训练过程中会对对未标注的人体关键点进行预测,在空间上对损失函数进行加权处理,避免惩罚真实的预测。具体来说,阶段PAFs 分支的损失函数和阶段CMP分支的损失函数为
式中fL为PAFs损失,fS为CMP损失;Lc为预测的关键点PAFs,Sj为预测的CMP;?为真实关键点PAFs,为真实CMP;J为预测的CMP 通道数,C为预测的PAFs 通道数。W为当像素p处缺少人体关键点注释时具有W(p)=0 的二进制掩码,该掩码用于在训练过程中避免对未标注的真实关键点的预测进行损失计算。
每个细化阶段利用中间监督计算损失函数,通过周期性地补充梯度来解决梯度消失问题。总体损失目标函数为
式中TP为PAFs细化阶段的次数,TC为CMP细化阶段的次数。
3 人体跌倒后特征
3.1 人体关键点
人体姿态估计,是通过将图片中已检测到的人体关键点正确的联系起来,从而估计人体姿态。人体关键点通常对应人体上有一定自由度的关节,对于描述人体姿态,预测人体行为动作至关重要。人体关键点是一种高水平的人体姿态表示,可以用一种非常精确的方式来描述人类活动。因此利用检测到的关键点表示人体姿态,并根据图片中人体关键点的坐标特征区分人体跌倒行为。图7 所示为基于人体关键点的骨架。其中,图7(a)为人体正常活动时的骨架图特征,图7(b)为人体跌倒后的骨架图特征。
图7 人体骨架
原始图片中相同的人体姿态在图片不同位置时,尽管人体姿态相同,但此时表现人体姿态的关键点坐标是不同值,需要对人体关键点坐标进行标准化处理。如图8 所示,相同的姿态位于图片中不同的位置,利用检测到的18 个人体关键点生成人体外接矩形,其中(xb1,yb2),(xb2,yb2)是人体外接矩形左上角的坐标。以人体外接矩形左上角为标准化后的坐标原点对人体关键点坐标进行标准化处理,消除了原始图片大小以及人体在图片中不同位置对姿态特征的影响。此时则可以通过标准化后的人体关键坐标更加准确的表达人体姿态特征。
图8 关键点标准化
人体关键点坐标标准化的定义如下
式中XN,YN分别为标准化后的关键点的横坐标和纵坐标;w,h分别为根据检测到的所有关键点生成的人体外接矩形宽和高。x,y为相对于输入图片的关键点坐标。经过标准化后的人体关键点坐标,消除了原始图片大小以及人体在图片中不同位置对姿态特征的影响。此时则可以通过标准化后的人体关键点坐标更加准确的表示人体姿态特征。
3.2 人体部分关键点边界框
人体边界框为一个矩形,矩形的高度除以矩形的宽度被定义为人体形状的纵横比,当人体跌倒后,边界框形状会发生变化,因此矩形的纵横比会有很大的变化,这与正常行走、蹲坐时纵横比的小范围变化有很大的不同。人体手腕、肘部是经常用到的关节部位,频繁活动会导致人体关键点边界框的形状发生剧烈变化。为了消除对手腕、肘部关键点对人体边界框的影响,本文通过OpenPose关键点检测网络得到人体的关键点,去除了手腕、肘部的关键点,利用余下的关键点(鼻子,眼睛,耳朵,脖子,肩膀,臀部,膝盖和脚踝)生成人体部分关键点最小外接矩形,并作为人体部分关键点边界框。非跌倒状态与跌倒后的人体部分关键点边界框的变化,如图9所示。
图9 部分关键点边界框的变化
3.3 跌倒检测分类算法
人工神经网络与生物神经网络相似,都是由大量神经元组成。M-P[16]神经元模型,依据生物神经元的结构和工作原理构造出来的一个抽象和简化的模型。M-P神经元的输出是输入向量x与权重向量w求得内积后,经激活函数f所得到的标量,计算过程为
式中xi为n维输入向量的各个分量,wi为各个输入分量连接到感知机的权重,θ为阈值,y为输出。
MLP的一个重要特点就是多层,将第一层称之为输入层,最后一层称之为输出层,中间的层称之为隐含层。如图10所示,最简单的MLP 只含1 个隐含层。MLP 并没有规定隐含层的数量,以及每层神经元的个数,因此在训练的过程中可以根据各自的需求选择合适的参数以获得更好的性能。由图10可知,通过OpenPose获得人体关键点坐标,将标准化后的关键点坐标和人体部分关键点边界框纵横比作为一个37列的姿态特征向量,对人体状态进行跌倒和非跌倒判断。此时MLP 的输入层有37 个神经元,输出层有1个输出神经元表示人体是否跌倒,即输出跌倒状态-1 或非跌倒状态1。
图10 MLP
4 实验分析
4.1 人体关键点检测网络训练
轻量级OpenPose 人体关键点网络训练环境为:Pytorch1.6,Cuda10.2,GTX1080ti。
在COCO数据集上对关键点网络进行训练,采用断点续训,网络训练Epoch =200。如图11 所示,关键点检测网络参数共享阶段CMP损失和PAFs损失,纵坐标表示网络的训练损失,横坐标表示网络Epoch。
图11 关键点检测网络训练损失
表1展示了采用不同网络结构进行训练时,相对应的网络每秒千兆浮点运算数(giga floating point operations per second,GFLOPS)和关键点检测准确率的平均精度(AP)。基于OpenVINO对网络的结构进行优化,优化后网络的关键点检测运算速度在CoreTMi5-9300H CPU可以达到20 fps。
表1 在COCO验证集上的OpenPose的准确性与复杂性
4.2 人体跌倒数据集
自定义人体跌倒数据集,基于UR Fall Detection Dataset以及Lei Fall Detection Dataset 数据集。首先,将数据集图片中的人体状态分为跌倒和非跌倒两种状态;然后,使用OpenPose检测人体关键点,将标准化后关键点坐标、人体部分关键点边界框纵横比作为人体日常活动状态的特征向量;最后,将每帧图片中的人体活动状态特征向量,保存在一个CSV格式文件中作为跌倒数据集。其中,人体的状态特征向量以37列矩阵表示,分别表示18 个骨骼关节点的坐标值以及人体部分关键点外接矩形的纵横比。并增加一列,表示人体状态的类别标签-1(跌倒)和1(非跌倒)。
4.3 跌倒检测模型评估及训练
对学习器进行训练时,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,对学习器的泛化性能进行评估。引入准确率Ac(accuracy)、召回率Re(recall)、查准率Pr(precision)和F1分数(F1-score)共同评价系统的性能。由真正例TP、假反例FN、假正例FP 和真反例TN4种分类情况可知4种性能指标的计算如下
进行学习器比较时,若一个学习器的“受试者工作特征曲线”(receiver operating characteristic curve,ROC)被另一个学习器的ROC 曲线完全包住,则可断言后者的性能优于前者,若两个学习器的ROC 曲线发生交叉,比较ROC 曲线下的面积(area under curve,AUC)判断两者孰优孰劣。
基于自定义跌倒数据集对MLP 进行训练时,对不同MLP的层数,以及每层神经元的个数进行训练,选择较优的隐含层层数以及每层神经元的个数。在训练的过程中隐含层每层神经元节点个数的取值范围为[10,200],训练步长为10。基于AUC选择较优的MLP 算法模型,分别计算单层,双层,三层,四层MLP 算法模型所能获得的最大AUC,并记录此时的隐含层中每层神经元的节点个数。如表2所示,当选择三层的MLP,每层神经元节点数量分别为[80,140,20],模型的AUC 最大。此时在隐含层神经元节点个数范围[10,200]的条件下,持续增加MLP 的层数,基本不会提高网络模型的性能,因此选择三层的MLP 比较合适。
表2 MLP结构对比
为了进一步展示模型的性能。由表2可确定不同层数以及每层神经元个数的MLP。由表3 可知采用3 层的MLP,在各个度量标准中实现了较优的检测性能。
表3 MLP训练结果%
基于不同设备的跌倒检测算法准确率结果及帧率对比如表4所示。本文方法可以得到良好的跌倒检测准确率以及在CPU上得到20 fps的检测速度。通过对性能指标、应用成本的比较,本文方法具有一定的优越性。
表4 MLP不同设备的跌倒检测算法结果对比
将已训练完成的OpenPose关键点检测网络与MLP跌倒分类算法进行连接,形成端到端的人体跌倒检测网络。如图12所示,端到端的人体跌倒检测网络可以识别人体跌倒事件的发生。
图12 人体跌倒检测
5 结束语
本文基于轻量级OpenPose关键点检测网络,通过优化网络的细化阶段,提高网络关键点检测准确率。标准化后的关键点坐标消除了图片中位置、人体大小对人体姿态的影响,并且利用人体部分关键点纵横比消除手腕、肘部关键点对边界框的影响。将标准化后关键点坐标及人体部分关键点边界框的纵横比作为判断人体跌倒的特征向量,最后利用三层MLP进行跌倒检测。以往基于人体关键点的跌倒检测通常需要在GPU上运行才能实现良好的检测速率。实验结果表明,本文提出的方法在CoreTMi5-9300H CPU上可以实现20 fps检测速度,并且实现了98.64%的跌倒检测准确率。