黄 耀 雷景生
1(上海电力大学计算机科学与技术学院 上海 200000) 2(浙江科技学院信息与电子工程学院 浙江 杭州 310023)
计算机视觉的应用日益多样化,人体动作识别已成为其最具吸引力的研究领域之一[1]。基于帧级骨架拓展类特征的人体动作识别是指利用图像处理、识别、分类技术来提取视频中人体的关节点位置,再从时序骨架信息中提取动作特征,从而完成人体动作识别的技术。由于视频动作识别面临照明变化、遮挡、阴影、比例变化等挑战[2],人们对动作行为识别的研究尚不成熟,且在保证准确率的情况下难以达到实时性,因而应用场景受限。
目前动作识别方法可分为三种主要模型:基于模板的方法、判别模型[3]和生成模型[4]。基于模板的方法即使在识别复杂动作的情况下也具有很强的鲁棒性,但计算复杂度非常高。生成模型方法在估计缺失的数据方面特别有效,然而单变量状态表示不足以对多个交互部分建模,因此有学者提出了判别模型[5]。判别模型给定一个观测序列X和一个特定的标签Y,判别分类器对后验概率P(Y|X)建模或学习,并将输入X链接到其对应类标签的映射。判别模型取得了与生成模型相当或更好的结果[6]。
人体动作能够被准确识别的前提是获取到有效的骨架信息,目前有多种主流方法可以快速准确地表示出骨架特征信息,文献[7]使用可佩戴式三轴加速度传感器在人体作业过程中提取手腕处的运动加速度数据,应用机器学习中的分类器进行实验并获取特征进行动作比对,识别精度较高。文献[8]提出结合离散余弦变换法,使用无载波超宽带雷达进行人体动作的识别,并利用改进的网格搜索算法优化支持向量机的参数并验证,识别准确率较高。但上述方法除了摄像机外还依赖其他特定设备,使用和维护成本较高,且使用场景单一。
随着机器学习和深度学习的快速发展,深度神经网络、卷积神经网络、递归神经网络等深度学习模型理论为动作特征的表示提供了新的解决思路[9-11]。文献[12]利用Kinect设备在大数据下获取人体关节点信息构建出3-D空间向量,通过计算空间向量的角度和比例来描述人类的行为,在多个数据集上证明了该方法的有效性。文献[13]提出了一种基于学习空间金字塔表示的人体动作识别算法,基于余弦测度和交叉视图二次判别分析来计算不同行为类别之间的相似度,在Hollywood2数据集上获得了92.2%的准确率。
对于动作检测,我们的目标是预测视频内包含的多种连续动作,我们把这个问题归结为帧级动作分类。在帧级动作预测之后,我们利用基于滑动窗口的方法来微调预测的帧级扩展类概率,并获得期望的输出。本文构造的基于帧级骨架拓展类特征的人体动作实时检测技术流程如图1所示,主要有三个部分,分别为骨骼提取模块、动作特征捕捉模块、动作判别模块。
骨骼提取模块首先使用骨骼提取器从视频帧中提取人体骨骼关节点,在实际操作中尺寸过小的骨骼和缺少主要躯干(如大腿和头部)的骨架会被视为噪声骨骼并被舍去;动作特征捕捉模块先将上一模块提取出的时序骨架信息进行归一化处理,从而实现尺度无关和视角无关,接着将骨骼导入特征提取器中,提取出三种特征:躯干角度特征、骨骼关节点位置特征、关节运动速度特征,并将三种特征融合成帧级骨架拓展类总特征F;动作判别模块将提取出的混合特征F导入随机森林分类器,再结合判别模型进行多种动作置信度比较,最后输出预测的动作标签。
OpenPose人体姿态估计算法是美国卡内基梅隆大学(CMU)基于卷积神经网络和监督学习并以caffe为框架开发的开源库,可以高效实现人体骨骼关节点位置的提取,此算法适用于单人和多人[14],具有极好的鲁棒性和实时性[15]。因此选择Openpose作为骨骼关节点提取器。图2是18个人体骨骼的关节点,在表1中分别用编号0-17来表示。
表1 骨骼关节点序号
在提取骨骼关节点位置的实验过程中,由于物体遮挡、室内外阴影、摄像机角度等原因,骨骼关节点提取器有时未能识别出所有的骨骼关节点。实验选取的视频尺寸为{(w,h),w=640,h=480},骨骼关节点坐标正常提取后应为:
{(X0,Y0), (X1,Y1),…,(X17,Y17)|Xn∈(0,640),Yn∈
(0,480),n∈(0,17)}
(1)
如果某个关节点(Xn,Yn)未被提取器成功识别,则该关节点坐标显示为(0,0),为了在接下来的特征分类过程中保持固定大小的特征向量,本文的解决方案是根据前一帧中的鼻部坐标进行自动填充。设上一帧中鼻部的坐标为(Xi,Yj),该帧中丢失的骨骼关节点在上一帧中的坐标为(Xw,Yh),则该帧中丢失的骨骼关节点坐标将被填充为:
(Xn,Yn)=(Xw+Xi,Yh+Yj)
(2)
由于视频尺寸不一,且由于人体走动,摄像机和人体的相对位置也会随之改变,导致直接提取出的骨骼关节点尺寸和角度难以统一化。为方便计算,本文将提取的骨骼关节点坐标进行归一化处理,结果如图3所示。
首先以脖子关节点所处的位置(X1,Y1)作为坐标原点,确保视角无关;再将骨骼关节点位置相对于图片尺寸进行归一化缩放,实现尺度无关。具体步骤如下:
(3)
W=max{X0,X1,…,X17}-min{X0,X1,…,X17}
(4)
H=max{Y0,Y1,…,Y17}-min{Y0,Y1,…,Y17}
(5)
基于判别模型的动作识别方法主要有两种,利用RGB图像进行动作识别可以获得较高的性能,然而由于该方法需要处理每幅图像中的几百个像素来提取特征,实时处理时需要高成本的计算资源,且该方法还受到来自不同照明条件和背景的噪声的影响。相比之下,用骨骼序列进行动作识别,将二维坐标序列表示为人体关节和轨迹,比用RGB图像进行动作识别所需的计算资源要低,因为该方法每个骨骼只处理几十个关节,此外,骨骼对上述噪声具有一定的鲁棒性[16]。
人体动作可以表示为由关节连接的线段组成的关节系统,人体运动可以被视为这些线段的空间结构的连续演变。在一个动作中,当身体躯干移动时,各骨骼关节点会发生不同方向程度的移动,这些骨骼关节点可以根据人体关节的物理结构进行连接。为避免单一特征导致动作分类的过拟合现象,本文在长度为S的连续帧内提取三种动作特征进行分类:躯干角度特征、骨骼关节点位置特征、关节点时序特征。
在获取各个骨骼关节点二维坐标后,躯干之间的角度信息完整且便于提取,人体的动作可以看作是各个躯干之间相互作用的结果,提取躯干之间的角度特征可以有效表示动作。本文计算八个躯干的角度特征,分别为左右肩膀、左右肘部、左右臀部、左右膝盖,如图4所示。
以左肩角度θ1为例,此关节角度关联三个关节点,分别为脖子P1(X1,Y1)、左肩P2(X2,Y2)、P3左肘(X3,Y3),可得夹角θ1:
(6)
(7)
在基于骨架拓展类特征的动作识别方法中,传统的深度学习方法使用RNNs[17]将骨骼序列作为向量序列馈送,或者使用CNNs[18]从表示骨骼序列的2D伪图像中提取特征。最近,一种基于图卷积网络(GCN)的方法被提出[19],并因其高性能而引起人们的关注。如图5所示,GCN将关节表示为顶点,将其在人体中的自然连接表示为边,然后基于边连接的顶点计算卷积。因此,GCN比序列向量和二维伪图像更自然地模拟人体。
对于一段动作的骨架序列,我们将S帧内的骨架关节点点相连接形成:
⋮
(8)
第n帧帧的动作骨架表示为:
(9)
(10)
第n帧标准化后的骨骼关节点位置表示为:
(11)
当关节序列快速移动,如人体在做奔跑、拳击、摔倒等动作时,由于前两个特征缺少整体信息,容易出现误识别的情况,比如把跑步识别成了站立,这是缺少整体特征的结果。为解决以上难点,本文提出关节速度特征V_b:
(12)
(13)
综上,本文在对骨骼关节点位置进行归一化处理后,提取了动作骨骼的三种特征,分别为躯干角度特征θ、骨骼关节点位置特征B、关节运动速度特征V_b。
表2 骨架多特征尺寸
将三种帧级骨架拓展类特征进行特征融合,使其成为帧级拓展类总特征F,公式如下:
(14)
随着机器学习的快速发展和广泛应用,包装法、卡方检验、互信息法等特征算法可以帮助我们计算出特征与标签的相关性;此外随机森林等分类算法在图像识别和语音识别等领域均取得了不错的成果[20]。实验结果表明,随机森林分类器在UTKinect Dataset数据集上取得了较好的动作识别效果。
在得到帧级骨架拓展类的三个特征后,为了验证上述特征是否可以对基于时序的人体骨架进行有效描述,我们希望对每个特征与标签的相关性进行量化处理。常用的特征相关性过滤法有卡方过滤、F检验、互信息法等。在面对冗余的特征时,卡方过滤可以根据选取的阈值和特征相关性大小筛选出期望数目的关联特征,但是当特征数较少且关联性较高时,特征的删减会降低模型的准确率;F检验又称方差齐性检验,F检验的本质是寻找两组数据之间的线性联系,当特征与标签具有线性联系时,它可以准确筛选出与标签关联性高于阈值的特征,但是在面对和标签不具有明显线性特征时,相关特征的缺失同样会导致模型表现的衰退;而互信息法不同于F检验法,互信息法通过计算每个特征与标签之间的任意关系,可以量化每个特征与目标之间互信息量的估计,从而可以判断各个特征与标签相关性的强弱。
互信息法计算公式如下:
I(Y;X)=
(15)
式中:X为某帧骨架拓展类的特征;Y为对应的标签;xi为该特征第i个数据的数值;yi表示该数值对应的标签。其中X=xi与Y=yi的联合概率表示为:
P(X=xi,Y=yi)
(16)
xi在整个数据集中出现的概率表示为:
P(X=xi)
(17)
yi在整个数据集中出现的概率表示为:
P(Y=yi)
(18)
传统的机器学习分类器有很多种,常见的有支持向量机算法(Support Vector Machine)、K近邻算法(k-NearestNeighbor)、朴素贝叶斯算法(Naive Bayesian Model)等。这些算法各有优劣,比如K近邻算法虽然精度较高且对异常值不敏感,但是计算和空间复杂度较高;支持向量机算法尽管计算代价不高但是容易欠拟合,分类精度较低,而集成了多个分类器的集成学习算法(Ensemble Learning)巧妙地解决上述问题。集成算法会考虑多个评估器的建模结果,汇总之后得到一个综合的结果,以此来获取比单个模型更好的回归或分类表现。
集成算法主要有两类:Bagging(并行)类算法和Boosting(串行)类算法,随机森林是非常具有代表性的Bagging类集成算法,如图6所示,它的所有基评估器都是决策树,而分类树组成的森林就叫做随机森林分类器,由于随机森林算法具有良好的性能表现,它被广泛应用到诸如语音识别、人体动作识别、度量学习等领域。
随机森林分类器的具体流程如下:若现有数据集P={Xi,Yi},其中:Xi为帧级骨架拓展类的混合特征;Yi为动作标签。随机森林在S个基分类器的基础上通过集成学习组成一个集成分类器。如图7所示,当有样本进入集成分类器后,根据各个分类器投票结果的多少,决定样本输出的分类结果。
基于第3节中所提出的特征评估与分类算法,本文选取UTKinect Dataset数据集,根据特征互信息量、准确率、精确率、召回率、F1-Score、每秒平均传输帧数等衡量指标对算法进行了性能评估。此外,还将本文方法与其他现有的先进算法进行了对比实验,实验设备部分信息如表3所示。
表3 实验设备信息
在随机森林分类器中,n_stimators表示弱分类器的个数,其数值过小容易导致过拟合,数目过大会影响算法运行速度,本文将数值设置为100;max_features表示决策树分枝时考虑的特征个数,我们选择auto,默认为总特征数的开平方取整;max_depth表示决策树最大深度,本文选择为40;其余值设置为默认。具体数值如表4所示。
表4 随机森林模型参数
本文使用UTKinect Dataset数据集进行测试,该数据集由得克萨斯州大学奥斯汀分校建立,由10种动作类型和10组动作序列组成,每个人执行指定动作两次,图像为三通道,分别为RGB图像、深度图、骨骼关节点位置,数据集示例如图8所示。
本文选取RGB图像进行算法评估,其中80%作为训练集,20%作为测试集。具体动作图像样本数量如表5所示。
表5 数据集样本分布
人体某个动作的识别结果可以分为正样本(Positive)和负样本(Negative),我们把TP(Ture Positive)定义为正样本的正确分类数,把TN(Ture Negative)定义为负样本的正确分类数,把FP(False Positive)定义为正样本的错误分类数,把FN(False Negative)定义为负样本的错误分类数;随后根据样本的分类情况引入几种常见的分类指标对算法的性能进行评估。
为了评估预测值和真实值之间的差距,我们引入准确率(Accruacy),公式如下:
(19)
为了评估正确分类为正的样本与被分类为正的样本的数量关系,我们引入精确率(Precision),公式如下:
(20)
为了评估正确识别出的正样本与正样本总量的关系,我们引入召回率(Recall),公式如下:
(21)
为综合评估算法的性能,我们引入F1-Score,公式如下:
(22)
为了更加清晰地衡量算法的性能,本文还给出识别结果的混淆矩阵,有助于找到各个动作之间的关系。
4.3.1特征实验
为了验证提取出的帧级骨架拓展类特征能否有效表示出时序动作,本节结合互信息量等相关指标进行了相关的实验。基于骨骼序列的动作识别是一个包含时间序列的分类问题,每个数据对应着三个特征和一个标签,由于帧级骨架拓展类的特征数值与拓展类大小有关,本文在实验过程中将拓展类个数S分别取值为10、15、20,并对得出的实验结果求均值,得到的互信息量结果如表6所示。为了探究不同帧级骨架拓展类特征组合对于动作识别性能的影响,本节还进行了特征的消融实验,实验结果如表7所示。
表6 特征互信息量
表7 不同特征组合的动作识别实验结果(%)
4.3.2帧级拓展类数量的影响
由于帧级骨架拓展类特征中包含骨架时序特征,帧级拓展类数量如果太少,混合特征中不会包含充分的有效骨架信息;相反,帧级拓展类数量如果过多,可能会增加参数数量并产生冗余数据从而降低识别准确率。为充分验证本文方法的有效性,我们采用随机森林分类器对数据集进行了测试实验,并选取了多组帧级拓展类数量对结果的准确率、精确率、召回率、F1-Score等参考指标进行了测试,算法识别结果如表8所示。
表8 算法识别结果(%)
4.3.3与现有方法的比较
为了充分验证本文方法的先进性,本节引入了其他现有的先进算法在UTKinect Dataset数据集上进行了对比实验,结果如表9所示。
表9 本文方法与现有方法的比较(%)
文献[21]把动作序列的时空表示非线性地投影到一个不可逆的特征表示介质中,并将序列的非线性、稀疏性和空间曲率特性集成到一个单目标函数中,得到了高度紧凑的判别属性表示。文献[22]与文献[21]不同,其使用传输平方根速度函数(TSRVF)来表示流形轨迹,并结合主成分分析法(mfPCA)进行特征低纬嵌入,在动作识别、聚类、多序列采样等应用中有效地建模了流形轨迹。文献[23]使用方法与本文相近,使用深度序列和相应的骨骼关节信息进行基于深度学习的动作识别,其将学习的特征与SVM分类器结合,从而进行动作识别。文献[24]提出了两个基于深度的特征,称为成对相对关节方向(PRJO)和深度贴片运动图(DPMM),分别代表每对关节之间的相对运动和人与物体的相互作用;对稀疏关节集,提出一种基于回归的学习方法来学习动作预测器。文献[25]提出了一种基于树形结构的遍历框架,为了处理骨架数据中的噪声,在LSTM模块中引入了一种新的门控机制,网络可以通过该机制了解网络的可靠性,此外还提出了一种基于LSTM单元的多模态特征融合策略,取得了较高的准确率。
在比对实验结果后可以发现,相比现有方法,本文方法在识别准确率上具有一定优势。在处理UTKinect Dataset数据集中的拿、扔、捡等动作时,由于遮挡和角度等原因,基于骨骼特征[21,23]和深度特征[24]的方法效果偏差,而ST-LSTM+TG[25]和本文方法的准确率均优于其他方法,这也证明在处理骨架特征时,时序特征是影响动作识别准确率的重要因素。
4.3.4算法运行速度实验
本文选取UTKinect Dataset数据集中的s06_e01片段进行实时性测试,以平均每秒运行速率(mFPS)作为参考指标,实验过程截图如图12所示,实验结果如表10所示,mFPS达到了21.9,这表明算法具备了实时运行的能力。
表10 算法运行速度实验结果
本文基于帧级骨骼拓展类特征构造了一个混合特征,并结合随机森林分类器实现了人体实时动作检测的功能。在根据各项指标进行实验评估后,验证了该识别方法的有效性,在UTKinect Dataset数据集上的识别准确率达到了97.43%,平均处理一帧画面的时间低于0.05 s,在保证识别准确率的基础上兼顾了实时性。该方法在监控、安防、视频交互等领域的应用前景巨大。此外,本文还对比了基于时序特征算法与常见算法的识别准确率,结果表明基于时序特征的方法在准确度上均优于其他方法,这为以后动作识别相关的研究提供了依据。