曹建荣,朱亚琴,张玉婷,吕俊杰,杨红娟
(1.山东建筑大学信息与电气工程学院,济南 250101;2.山东省智能建筑技术重点实验室(山东建筑大学),济南 250101)
跌倒是全球常见的公共卫生问题,有研究表明全球近一半的跌倒事件会导致就医、功能下降、社交或体育活动受损甚至死亡[1]。据国家卫生与健康委员会统计数据显示,跌倒是我国伤害性死亡的第二位原因,而在65 岁以上的老年人中则位居首位。如果老年人在跌倒后得到及时帮助,可以直接有效降低跌倒造成的死亡风险[2],因此跌倒检测对老年人身心健康是一项具有实际意义的事情。目前,国内外最常见的跌倒检测方法有三种类型,分别是基于环境式、基于穿戴式和基于计算机视觉。基于环境式的检测方法是把非视频类传感器铺设在人体活动的环境里[3-4],通过采集传感器信息变化来分辨出人体是否跌倒,但误报率较高且布置成本较大。基于穿戴式的检测方法利用加速度计和陀螺仪来进行跌倒检测[5-6],如Wang 等[7]采用陀螺仪、加速度计获取信号,通过支持向量机(Support Vector Machine,SVM)判断跌倒事件,获得了93%的准确率;但是长期佩戴一方面会影响人的舒适度,另一方面针对复杂活动误报率较高。基于计算机视觉的检测方法包括两类:一类是基于监控RGB 视频信息进行跌倒检测[8-10];另一类是基于深度相机获取关节点进行跌倒检测[11-12]。朱靖[13]利用摄像头捕捉视频,然后通过卷积神经网络识别去除视频背景信息后的老人异常行为,实现了96.15%的准确率,缺点是可能存在特征缺失难以区分类跌倒动作。李文阳[14]利用Kinectv2 获取骨骼点数据和彩色图像来判定人体摔倒,缺点是价格昂贵,不能适用于普通家庭场景以及批量使用于养老场所。Lin 等[15]采用时间序列递归神经网络学习人类关节点在连续时间内的变化,实现跌倒检测,但存在网络参数计算量大的问题。根据以上分析,为了使跌倒检测算法进一步提高检测速度和准确率,本文提出基于关节点特征的跌倒检测算法,根据人体结构先验知识提取可充分表征跌倒行为的人体关节点特征检测是否发生跌倒行为。
本文提出了基于关节点特征的跌倒检测算法,算法流程如图1 所示。首先在目前先进的CenterNet 算法基础上提出深度可分离卷积CenterNet(Depthwise Separable Convolution-CenterNet,DSC-CenterNet)人体关节点检测算法,采用该算法从原始视频图像中得到人体关节点坐标信息;然后利用关节点拟合人体,结合人体结构先验知识,提取可充分表征跌倒行为的人体关节点空间特征和时间特征,进一步地构建关节点特征向量,并对特征向量中的每一个元素归一化,以减少目标个体差异带来的影响;最后把关节点特征向量输入全连接层,并经Sigmoid 分类器输出跌倒或非跌倒两种类别。
图1 本文算法流程Fig.1 Flowchart of the proposed algorithm
在跌倒检测领域,常用的关节点检测算法有OpenPose[16]、2D 多人姿态估计算法[17]回归关节点坐标。但是单纯使用这些关节点检测算法存在无人区域也会识别出关节点的问题,如果先采用神经网络识别人体目标,再对目标人体进行姿态估计[18],则增加了计算量。
1.2.1 DSC-CenterNet的网络结构
针对以上问题,在CenterNet 算法的基础之上,本文提出了的DSC-CenterNet 关节点检测算法,在保持关节点检测精度平衡的情况下,减少骨干网络计算量,准确检测关节点并获取关节点坐标信息。
CenterNet 算法[19]是目前较为先进的基于中心点的检测算法,该算法将检测目标建模成一个单点,作为目标中心点,通过关键点热力图(Keypoint Heatmap)找到中心点,然后根据该中心点的图像特征回归得到目标尺寸和姿态信息。
深度可分离卷积(Depthwise Separable Convolution,DSC)将逐深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)相结合,用于提取目标图像特征。在网络提取图像属性较多的情况下,即所需卷积核较多时,深度可分离卷积可大幅减少网络中卷积计算量,从而进一步提高检测效率。
DSC-CenterNet 的网络结构如图2 所示,深度可分离卷积沙漏104(DSC-Hourglass-104)骨干网络由两个深度可分离卷积沙漏(DSC-Hourglass)网络级联而成,作为编码和解码结构,重复使用自底向上和自顶向下并联合中间结果的机制在人体关键点检测中取得较好的效果。而每一个DSCHourglass 沙漏网络的基本单元(basic unit)是深度可分离卷积残差模块(DSC-Residual Module),先进行3×3 空间关系映射的逐深度卷积,再进行通道关系映射的1×1 逐点卷积,以减少残差模块的卷积计算量,对于整个网络模型来说是减少DSC-Hourglass-104 骨干网络的计算量。
图2 DSC-CenterNet的网络结构Fig.2 Network structure of DSC-CenterNet
以下是对DSC-Hourglass-104 骨干网络深度可分离卷积残差模块计算量的具体描述。假设输入信息的大小为N×H×W×C,N为输入特征图的个数,H为特征图的高,W为特征图的宽,C为输入特征图的通道个数,卷积核个数为256,卷积核大小为3×3。深度卷积将输入信息分成C个通道,对每一个通道进行3×3 积计算,计算量为H×W×C×3×3。在深度卷积输出N×H×W×C之后,将获得的特征图通过256 个1×1 的卷积核扩展输出通道,收集每个点的特征计算,计算量为H×W×C×256。残差模块中深度可分离卷积的计算量为逐深度卷积与逐点卷积的加权值,即H×W×C×265,相较于普通卷积参数计算量(H×W×C×230 4)减少了88%。由此可以看出,基于深度可分离卷积残差模块的DSC-Hourglass-104 骨干网络计算参数也可大幅减少从而提高关节点检测速率。
1.2.2 DSC-CenterNet关节点检测
DSC-CenterNet 关节点检测算法首先预测目标人体关键点热力图,然后回归Bbox 目标框大小,在此基础之上检测人体关节点,回归每个关节点的坐标。具体算法如下:
1)关键点预测。
令I∈RW×H×3为输入图像,通过DSC-Hourglass-104 检测网络来预测关键点热力图:
其中:R=4 是输出步长。C是类别数,C=17 表示人体关节点类别数,生成的热力图为17 个人体关节点热力图,用于关节点检测;C=80 表示目标类别,生成的热力图为目标关键点热力图,用于人体目标检测。W、H分别为图像的宽和高。=1 表示坐标(x,y)处检测到类别为C的关键点;=0表示坐标(x,y)处背景。
在网络训练过程中,设训练样本的真实关键点为p,下采样之后对应的中心点为,且。将真实关键点通过Gaussian 核函数映射到真实关键点热力图,Gaussian 核函数的表示形式如式(2)所示:
其中:σp是一个与目标大小相关的标准差。
采用focal loss 函数作为训练目标损失函数,具体表示如式(3)所示:
其中:α=2,β=4,均为超参数;N为输入图像I中的关键点个数;Yxyc为真实关键点(x,y)热力图值;为预测的关键点热力图值。
由于图像下采样时,真实的中心点会产生离散偏差,因此对每个中心点附加局部偏移预测,即,并且所有关键点类别C共享偏移预测。中心点偏移预测的训练损失函数具体表示如式(4)所示:
2)人体Bbox 检测。
在图像进行关键点预测后,对每个目标做回归处理,假定类别为C的目标k,其Bbox 位置坐标为,目标中心点位置为,回归目标大小为sk:
3)人体关节点检测。
然后通过focal loss 函数训练估计C=17 个关节点热力图,获得热力图中关节点坐标。对于类型为j的关节点舍去热力图上置信度小于0.1 的关节点位置,热力图上关节点坐标可表示为:
最后将通过中心点偏移方法获得的关节点位置lj与通过热力图检测到的关节点Lj进行匹配进一步确定关节点的位置,具体计算如式(9):
当关节点位置属于Bbox 范围内时确定该关节点为有效关节点,采用树结构的方式对关节点进行关联,构建人体骨架图,包含17 个人体关节点,每个关节点信息内容为(xi,yi),其中:x和y分别表示关节点X轴和Y轴坐标;下标i代表第i个关节点。
针对人体跌倒前行走、站立、坐着等动作影响跌倒检测的准确性以及下蹲、弯腰、躺下等类跌倒动作与跌倒动作难以区分的问题,通过对人体不同姿态下的关节点位置进行分析,并结合人体结构先验知识提取可充分表达跌倒行为的人体关节点空间特征和时间特征,实现不同跌倒状态下的跌倒检测以及跌倒与类跌倒动作的区分。
基于关节点位置的空间特征包括人体宽高比例、头部距离地面的高度、人体倾斜角度、躯干横向变化以及下肢高度,以下具体介绍每一个特征:
1)人体宽高比例。
当视频中人体处于行走、坐下、站立状态时,人体宽度小于人体高度;当人体处于跌倒状态时,人体宽度大于人体高度。本文用人体17 个关节点中的最大横坐标与最小横坐标之间的距离dx、最大纵坐标与最小纵坐标之间的距离dy分别来表示人体宽度与高度,利用欧氏距离公式可以计算出人体宽度dx和人体高度dy:
其中:x和y分别表示关节点X轴和Y轴坐标;下标i和j代表第i和j个关节点。为了更好地描述在跌倒过程中人体宽度与高度的变化情况,将人体宽度dx和人体高度dy的比值ratio作为人体跌倒判断的一个特征:
从跌倒检测公开数据集UR Fall Detection 数据集中分别提取从行走到跌倒、坐着到跌倒和站立到跌倒三种不同跌倒状态的视频进行分析。如图3 所示,从特征曲线可以看出在人体逐渐摔倒的过程中,ratio值会逐渐增大且发生跌倒时ratio值平均大于1.20,与行走、站立等动作有明显的区分度,因此,基于关节点位置的人体宽高比可作为跌倒特征。
图3 不同跌倒状态的人体宽高比例变化Fig.3 Changes of width to height ratio of human body in different fall states
2)头部距离地面的高度。
当人体处于行走或站立动作时,头部距离地面的高度值约等于人体高度,但是当人体处于跌倒动作时,头部接近地面,其距离地面的高度值最小,即头部距离地面的高度变化可作为跌倒特征。首先定义过人体矩形框两点的水平线为地面参考线,记为L,可表示为:
其次,为了保证检测的稳定性,同时取0-鼻子,1-左耳,2-左眼,3-右眼,4-右耳这5 个关节点的坐标,计算其坐标的平均值作为头部中心点的坐标值,具体计算如下:
最后,头部距离地面的高度h1定义如式(16)所示:
为了更清晰地表示在不同的跌倒状态下,头部距离地面高度值的变化情况,选择三种不同跌倒状态的视频进行分析,如图4 所示,从变化曲线中可以看出不管哪种跌倒状态,人体在跌倒的过程中,人体头部距离地面的高度值h1逐渐减小直至跌倒后趋于一个稳定值,且跌倒后的h1均小于60 pixel,明显不同于行走、坐着等动作。因此,基于关节点位置的头部距离地面的高度值可用于跌倒判断。
图4 不同跌倒状态的头部距离地面高度变化Fig.4 Changes of head to ground height in different fall states
3)人体倾斜角度。
根据人体结构先验知识,当人体处于不同的动作状态时,人体躯干中心线总会与人体中心垂直基准线存在一定的夹角,该夹角可称为人体倾斜角θ。如图5 所示,本文算法中定义过11-左腰、12-右腰两个关节点的中心点P的垂线为人体中心基准线,记为M;定义5-左肩、6-右肩两个关节点的中心点为Q,过PQ两点的线段为人体躯干中心线N。由几何关系可以确定人体倾斜角θ:
图5 人体倾斜角度变化Fig.5 Changes of tilt angle of human body
其中:(xP,yP)为点P坐标;(xQ,yQ)为点Q的坐标。
为了更好地说明人体倾斜角度特征的变化情况,选择三种不同跌倒状态的视频进行分析,如图6 所示,从特征变化曲线可以看出跌倒时的人体倾斜角度大概在60°以上,跌倒与非跌倒的人体倾斜角度有明显的差别,因此基于关节点位置的人体倾斜角度可用于跌倒判断。
图6 不同跌倒状态的人体倾斜角度变化Fig.6 Changes of human body tilt angle in different fall states
4)躯干横向变化。
人体在跌倒的过程中,人体躯干段肩部关节点和腰部关节点的横坐标的差值逐渐增加,即人体躯干横向变化可作为跌倒特征。以图5 中P点和Q点之间的横坐标的差值Δx代表人体躯干段横向变化情况,Δx的具体计算如式(18)所示:
为了更直观地了解人体躯干段横坐标的差值Δx变化趋势,对三种不同跌倒状态视频进行分析,如图7 所示,从Δx值变化曲线来看,人体处于非跌倒状态时,Δx值在20 pixel以下;在人体跌倒过程中Δx急剧增加;直到人体跌倒后Δx达到30 pixel 以上稳定变化,跌倒与非跌倒状态的Δx值有明显区别,所以基于关节点位置的人体躯干横向变化可用于跌倒判断。
图7 不同跌倒状态的躯干横向变化Fig.7 Horizontal changes of trunk in different fall states
5)下肢高度。
从关节点的连接关系来说,任意相邻的两个关节点由一个长度不变的刚体骨骼连接。但是在人体从站立到跌倒的过程中,人体下肢高度会发生变化。为了避免跌倒下肢关节点特征与下蹲、坐着等状态的下肢关节点特征的相似性,本文算法选择13、14-膝盖关节点到15、16-脚踝关节点之间的高度特征作为下肢高度特征,记为h2。在人体跌倒过程中,下肢高度h2逐渐减小,即下肢高度h2可作为跌倒特征。具体计算如式(19):
为了更好地说明人体下肢高度的变化情况,选择三种不同跌倒状态的视频进行分析,如图8 所示,从特征变化曲线可以看出跌倒时的下肢高度大概在15 pixel 以下,跌倒与非跌倒时的人体下肢高度有一定的区别,那么基于关节点位置的人体下肢高度可用于跌倒判断。
图8 不同跌倒状态的下肢高度变化Fig.8 Changes of lower limb height in different fall states
空间特征仅能表达当前帧的关节点特征信息,无法描述连续一段时间内关节点特征的变化情况。根据视频具有时间连续性的特点,本文定义第k帧图像中人体质心到地面的距离和第k+5 帧图像中人体质心到地面的距离的差值Δd来表达时间特征,计算如式(20)所示:
其中:dk为第k帧图像中人体质心到地面的距离。具体计算如式(21)所示:
(xkc,ykc)为第k帧图像中人体质心坐标,具体表示为:
其中:xki、yki分别为第k帧图像中关节点5-左肩、6-右肩、11-左腰、12-右腰的横纵坐标。同样,dk+5的计算原理如式(21)所示。
将人体宽高比例ratio、头部距离地面的高度h1、人体倾斜角度θ、躯干横向变化Δx、下肢高度h2、质心变化Δd融合成关节点特征向量M作为分类器的输入,如式(23)所示:
为了避免特征融合后参数过拟合以及目标个体的差异,利用式(24)将特征向量内的每一个元素变为0~1 内的数值即归一化处理。
将归一化后的6 维关节点特征向量M*输入全连接层,采用交叉熵损失函数训练,使用Sigmoid 激活函数对特征向量进行二分类,输出层可设一个节点,计算简单,其输出值记为x,则最后输出预测跌倒或非跌倒的概率,具体计算如下:
在跌倒或非跌倒的分类中仅采用了一层全连接层和Sigmoid 激活函数,相较于SVM 分类器、卷积神经网络(Convolutional Neural Network,CNN)来说,这种分类方法网络结构简单,训练耗时减少,Sigmoid 激活函数计算复杂度低,而且保证了跌倒检测的准确度。
本文实验环境操作系统为Ubuntu16.04,硬件平台为GTX1080TI(11 GB×2)两个显卡、128 GB 内存,软件平台为Python3.6.9、Pycharm,Tensorflow1.13.1 深度学习框架。
本文算法测试使用公开的UR Fall Detection 数据集、,该数据集是不同视角的室内摄像机拍摄的单人活动序列集合,采用两个不同方位(平视、俯视)的相机拍摄,包括30 个跌倒视频序列和40 个日常生活视频序列。在跌倒视频序列中主要包括行走—跌倒、坐着—跌倒、站立—跌倒共三种动作状态变化类型,在日常生活视频序列中包括坐下、蹲下、躺下、弯腰日常动作。本实验中选择平行于地板的相机拍摄的视频作为测试数据集。图9 展示了部分关节点检测后的UR Fall Detection 数据集跌倒视频序列帧,包括人体从行走到跌倒、坐着到跌倒和站立到跌倒三种不同的动作状态变化情况。
图9 DSC-CenterNet算法检测关节点后的跌倒视频序列Fig.9 Fall video sequences after joint point detection by DSC-CenterNet algorithm
1)评判标准。
在跌倒检测领域内应用比较广泛的评判标准主要有三个指标,分别是精确率(Precision)、召回率(Recall)和准确率(Accuracy),具体计算公式如下:
其中:TP(True Positive)为视频帧中跌倒类别检测为跌倒类别的帧数;FP(False Positive)为视频帧中非跌倒类别检测为跌倒类别的帧数;FN(False Negative)为视频帧中跌倒类别检测为非跌倒类别的帧数;TN(True Negative)为视频帧中非跌倒类别检测为非跌倒类别的帧数。
2)跌倒检测结果分析。
在实际监控中不仅仅只有跌倒这一类状态,往往伴随着其他动作状态。因此,本实验选择UR Fall Detection 数据集内30 个跌倒视频序列中行走到跌倒、坐着到跌倒、站立到跌倒共三种不同状态变化类型验证本文跌倒检测算法的有效性。
跌倒检测结果如表1 所示,从实验结果可以看出,不同状态变化下跌倒检测算法的平均准确率达到98.00%,说明本文通过检测人体关节点,进一步地提取关节点特征作为跌倒特征并对其进行分类的跌倒检测算法能够满足行人跌倒检测的需要。尤其在前两种状态变化实验中,精确率、召回率和准确率都较高,说明行走和坐着这些干扰动作对后面发生的跌倒动作的检测准确率影响非常小。在站立到跌倒的状态变化实验中,07 号视频序列由于对正处于跌倒过程的人体关节点检测不准确,导致非跌倒类别误判为跌倒类别,精确率偏低,相较于行走到跌倒、坐着到跌倒状态变化的检测准确率有所下降,但仍然在95%以上,可基本满足行人跌倒检测的需求。
表1 不同状态变化下跌倒检测算法的实验结果Tab.1 Experimental results of fall detection algorithm under different state changes
在实际生活中,下蹲、弯腰、坐下、躺下等类跌倒行为经常发生,设置类跌倒行为的对比实验。实验数据选择UR Fall Detection 数据集内40 个日常生活视频序列中四种日常动作(下蹲、弯腰、坐下、躺下),实验结果如表2 所示,从实验结果可知,本文跌倒检测算法把类跌倒行为判断为非跌倒行为类别的平均准确率达到98.22%,区分类跌倒行为不会产生太大的误差,说明本文跌倒检测算法对类跌倒行为的影响具有较高的鲁棒性。
表2 跌倒检测算法对类跌倒行为进行判断的实验结果Tab.2 Experimental results of fall detection algorithm judging falling-like behaviors
为了验证本文在CenterNet 算法基础上提出的基于DSCCenterNet 关节点检测算法在减少骨干网络计算量的情况下,关节点检测速度是否有所提高,跌倒检测的实时性是否有所提升,对CenterNet 改进前后的关节点检测、跌倒检测速度进行对比实验,对比结果如表3 所示。从表3 可以看出,DSC-CenterNet 关节点检测速度能达到19.1 frame/s,相比CenterNet 检测关节点,平均检测速度提高了21.66%;DSC-CenterNet 结合关节点特征跌倒检测速度能达到18.6 frame/s,相较于原CenterNet 结合跌倒检测速度提升了22.37%,说明通过减少网络计算量可以提高关节点检测速度,进一步地提高跌倒检测速度。
表3 CenterNet改进前后的关节点检测、跌倒检测速度对比 单位:frame/sTab.3 Comparison of joint point detection and fall detection speeds before and after CenterNet improvement unit:frame/s
最后,为了验证本文算法在UR Fall Detection 数据集上的准确性,本文选择与近年来文献[16]、文献[20]、文献[21]、文献[22]中所提出的跌倒检测算法进行比较,另外,这些跌倒检测算法与本文算法采用的是同一测试数据集(即UR Fall Detection)和评判标准。从表4 所示的实验结果可以看出:在相同数据集上本文的跌倒检测算法的准确率高于其他四种算法,有更好的检测准确性,主要由于本文跌倒检测算法中的深度学习网络模型可准确检测人体关节点,从而保证跌倒检测的准确率,另外基于关节点位置提取跌倒特征可以解决由类跌倒动作引起的跌倒检测不准确的问题,使得整体的实验效果较为理想。
表4 UR Fall Detection数据集上不同算法的跌倒检测准确率对比 单位:%Tab.4 Comparison of fall detection accuracy of different algorithms on UR Fall Detection dataset unit:%
本文提出了一种基于关节点特征的跌倒检测算法,首先利用在目前先进的CenterNet 算法基础上提出DSC-CenterNet人体关节点检测算法,有效解决深度学习网络模型中计算量大的问题,通过减少网络计算量进一步地提升网络检测速度;根据不同状态下人体结构先验知识提取充分表征跌倒行为的关节点特征,有效解决跌倒与类跌倒行为难以区分的问题,从而提高检测准确率。为了验证本文算法的有效性,在同一数据集上与不同的跌倒检测方案进行了对比实验,在人体不同状态动作变化下进行了跌倒检测和区分类跌倒行为的实验。实验结果表明,本文提出的基于关节点特征的跌倒检测算法对人体跌倒行为的判断有较高的准确率,可准确区分类跌倒行为。目前,本实验只是针对录制好的公用视频集进行跌倒和非跌倒两种类别检测,而且检测环境简单、噪声干扰小,但在实际检测中人体运动状态以及生活环境更加复杂,下一步的工作对人体动作进行多种姿态的详细划分,比如可分为上下楼、弯腰、跌倒等姿态类别,分析基于关节点特征的多姿态检测。