当前位置:首页 期刊杂志

基于三维骨骼节点的人体行为识别方法*

时间:2024-05-22

杨赛烽,高 彬,冯仕民*,丁恩杰,陈庆峰

(1.中国矿业大学物联网(感知矿山)研究中心,江苏 徐州 221116;2.中国矿业大学信息与控制工程学院,江苏 徐州 221116)

人体行为识别是目前计算机视觉与模式识别领域的一个热门研究方向,其广泛应用于智能视频监控、运动行为分析、人机智能交互、虚拟现实等领域[1-3]。利用传统的视频序列、二维图像信息进行人体行为识别容易受到光照、阴影的影响,识别准确率普遍较低的劣势越加明显。由微软推出的Kinect体感设备可以有效的避免受到光照、环境等因素的影响,其卓越的深度感知能力和人体三维关节点识别能力使得基于关节点信息的人体行为识别成为了热门研究方向[4]。同时传统的行为识别算法着重于行为模型的深度调优,但是在当前大数据及人工智能的背景下,随着数据的急速增长,目前来看存在数据存储空间不足、识别效率不高及扩展性不强等问题[5]。

Hadoop是由阿帕奇软件基金会开源的一个分布式系统基础架构,该架构中实现了一个分布式文件存储系统,又称HDFS。HDFS可以通过扩展节点的方式增加数据存储容量,不仅可以自动保存数据的多个副本,自动将失败的任务重新分配,还可以动态的在节点之间通过网络传输的方式确保不同节点间数据的动态平衡。

Spark是加州大学伯克利分校AMP实验室所开源的基于内存的并行计算框架,其基于内存的弹性分布式数据集模型大大提高了分布式计算的效率,对数据密集型的算法迭代计算具有非常大的优势。

因此本文在研究行为识别表示方法的基础上,出于对行为识别方法实用性及扩展性的考虑,将行为识别方法与Spark计算框架结合进行人体行为识别的探索。

1 实验系统框架

为了方便后续实验,本文实现了一个完整的人体行为识别实验平台。

图1 行为识别实验系统总体架构图

首先通过Kinect获取人体关节点数据,在PC端将采集的数据写入本地,并根据行为类别进行分类标注,处理完成之后将数据上传到HDFS文件系统中以备训练输入和识别输入。

HDFS作为识别系统的文件存储模块,存储着关节点数据、数据预处理的特征数据以及最终的行为分类结果,方便PC端调用的同时为上层Spark计算框架提供数据支撑。

Spark作为整个系统最上层部分,同时也是最重要的部分,主要包括了对数据预处理、特征转换与特征提取、行为分类模型训练和最终的结果预测。其中数据预处理会通过相似度判别过滤失真数据,接着根据行为表示的定义方法对关节点数据进行特征转换与特征提取并写入到RDD中。在以上基础上,利用行为分类器对数据进行训练。当需要对未知行为进行预测时,从HDFS中提取已有持久化的分类器模型完成行为数据的最终分类并将结果持久化到HDFS中。

2 特征提取及行为表示方法构建

2.1 基于关节点信息的特征提取

对Kinect采集到的20个三维关节点坐标进行行为特征提取时选择的特征量应满足平移不变性及缩放不变性,角度特征很好的满足了以上两个条件。为了方便计算角度将20个关节点分别用“A”-“O”进行标记,对应关系见图2,其中A(Head),T(HandLeft),P(HandRight),L(FootLeft),H(FootRight)5个关节点由于会发生抖动现象[6],所以并未使用。

图2 关节点标记图

从其他15个行为关联度较大的关节点中提取14个角度值,包括上肢角度特征和下肢角度特征,在此基础上增加了部分关节点向量与x,y轴所成的11个角度特征[6-7]。上肢角度主要表示手臂的行为,下肢角度特征主要表示腿部的行为。对于部分关节向量与x,y轴夹角表示人体在可视距离内与Kinect的偏离程度,比如左臀部与右臀部向量与y轴所成的夹角定义为αID_Y。本文一共提取了25个这样的角度特征,所有关节角度如表1所示。

表1 25个角度特征

2.2 行为表示方法的构建

2.2.1 关节点角度特征变化序列

一个完整的动作包含了若干个静态帧,一个运动序列的每一个静态帧角度特征变化容易表达出人体运动行为的变化趋势[8]。在跳跃过程中,可以将关节角度特征随时间的连续性而产生的变化转化为一个变化序列。比如定义一个跳跃序列中每一帧的左膝关节角度特征集合为:

S=(αJK_JI1,αJK_JI2,αJK_JI3,…,αJK_JI25)

(1)

则角度特征变化序列可以理解成集合中前后两帧角度特征的差值,如式(2)所示:

V=(αJK_JI2-αJK_JI1,αJK_JI3-αJK_JI2,…,αJK_JI25-αJK_JI24)

(2)

2.2.2 基于余弦相似度的关键帧提取方法

在连续时间内提取足够表示人体行为的关键静态帧序列用以构建动态行为是常用方法。韩旭[9]使用直方图相似度的方式遍历整段数据帧得到关键帧的集合,金泽豪[10]分析了人体运动过程中角度和距离变化的总差异提出基于结构相似度的关键帧搜索方法,减少了搜索时的计算量,提高了搜索效率。

本文在上述基础上提出了一种基于余弦相似度的关键帧提取方法。余弦相似度作为一种计算个体间相似度方法,对低维和高维数据都有很好的相似性度量效果,被广泛应用于机器学习,图像识别等领域[11]。使用余弦相似度差异作为关键帧搜索策略,将人体关键帧视为空间中的向量,通过计算向量间的余弦相似度,提取动态行为过程中的关键帧。计算过程如下:

对于空间中n维向量a,b,假设a(x1,x2,x3,…,xn),b(y1,y2,y3,…,yn),则多维向量a,b之间夹角的余弦如下:

(3)

本文以每一帧的25个角度特征作为空间中一组向量,计算了站立与坐、蹲、躺三者余弦相似度,结果如表2所示。对比实验结果表明,通过控制相似度阈值可以对动态行为关键序列进行有效的提取。

表2 4种行为帧余弦相似度对比表

2.2.3 基于余弦相似度的关键帧提取方法实现

首先将动态行为的首帧关节点数据作为第1个关键帧数据,提取的25个角度特征组成的多维向量即可当作第1个关键帧向量,此关键帧向量与后面的帧数据转成的角度特征向量进行对比,将相似度小于给定阈值大小的帧向量设置为新关键帧向量,继续作为样本与后面帧数据进行对比。具体步骤如下:

①设置相似度阈值T,记录关键帧的数组为keyFrame[n],其中n为动态行为关键帧数。初始化循环变量i=0,将起始帧作为关键帧保存到keyFrame[0],并将第2帧记为当前帧;

③如果两帧相似度S大于阈值T,移动到下一帧,标记为当前帧,判断是否到达帧尾,到达帧尾转向步骤④,未到达帧尾继续步骤②。

④结束流程,提取keyFrame[n]作为动态性关键帧序列。

方法流程图如图3所示。

图3 关键帧提取流程图

2.2.4 行为表示方法的构建

结合上述分析,本文使用基于余弦相似度提取的动态行为关键帧角度特征变化序列构建动态行为表示方法,定义如下:

若一组动态行为关键帧的角度特征为:

G=(M1,M2,Mi,Mi+1,…,Mn)T

(4)

式中:Mi=(αi1,αi2,αi3,…,αi25),Mi+1=(αi+11,αi+12,αi+13,…,αi+125)。

则对于动态行为的表示序列有:

笔者通过百度、搜狗、豆瓣网,在各大报刊上发布的《2011年网络十大流行语》以及《2011年十大网络新词》的基础上进行进一步的统计,发现2011年的网络流行语主要有以下词汇:

F=(P1,P2,Pi,Pi+1,…,Pn-1)

(5)

式中:Pi=(αi+11-αi1,αi+12-αi2,αi+13-αi3,…,αi+125-αi25)。

3 行为识别模型建立及实验结果分析

3.1 行为识别的随机森林模型建立及实验结果分析

3.1.1 自建人体关节点实验数据集

目前比较流行的MSR Daily 3D、MSR Action 3D和MSRC-12数据集运动帧数较少,不满足某些模型训练需要的数据多样性,数据集中行为帧的数量不等,不利于观察运动历史图像的动作变化细节[12]。所以本文花费了大量时间自建行为数据集,并用该数据集完成实验。

本论文采集了8个男生,7个女生共15人进行的10种人体常见行为关节点数据,如打电话、鼓掌、喝水、跨越障碍物、抛物、伸懒腰、原地跳跃、坐下、站起、坐下-站起。每人每种行为依次在实验环境下各采集5~10次,所有动作都是站立时完成,喝水、打电话、抛物等动作根据被测者习惯随机使用左手或者右手进行。

3.1.2 基于随机森林的人体行为识别建模与实验结果分析

本文用于行为识别的随机森林算法建立在基于Spark运行的分布式机器学习算法库MLlib上,所有的示例及算法程序均采用scala语言进行开发。进行人体行为识别建模时,首先要手动确定随机森林中几个重要参数:①numTrees:随机森林中决策树的个数,需要手动调试;②maxDepth:随机森林中决策树的深度,需要手动调试;③maxBins:可以将连续的特征离散化的最大分箱数,使用默认值32;④Impurity:节点分裂的方法,回归情况下使用方差,分类情况下使用信息熵或者基尼指数。

一般来说,随机森林在不考虑其他影响条件下树的数目越多,分类效果越好。我们首先在树的个数为200时计算行为分类准确率随树的深度变化。如图4所示。

通过实验发现,当随机森林中树的个数为200时,每棵树的深度在10之后分类准确率会趋于稳定,对于行为数据集分类准确率达到很好的效果。

确定好深度之后,我们需要再比较下随机森林中树的个数对行为模型精度的影响,图5为决策树深度为10时,树的数目对模型分类准确率的变化过程。由图可发现,随着随机森林中树的个数增加,分类准确率会逐渐平稳并在一定的误差范围内波动。分析波动原因是随机森林在进行建模时样本及特征随机选择造成了一定误差。

图4 动态行为分类准确率随深度变化值

图5 动态行为分类准确率随树的个数变化图

本文在相对稳定的区间进行参数选取,同时考虑到分类模型的复杂程度与运算时间,最终采用100棵决策树,最大深度为10进行建模。向集群提交程序并运行。动态行为识别结果百分比混淆矩阵如图6所示。

图6 随机森林对动态行为识别结果混淆矩阵

虽然平均识别准确率达到了91.8%,但是在相似动作上如喝水与打电话、坐下-站起与原地跳跃误判较多。提取误判最多的原地跳跃与坐下-站起动作的关键帧进行观察,发现两种动作关键帧的变化过程非常相似。说明本文中的关键帧提取方式在对相似度极高的两种行为进行关键帧提取时存在一定的局限性。

图7 坐下-站起关键帧建模图

3.2 多重随机森林加权大数投票算法

为了提升动态行为分类模型泛化能力,进一步提高行为识别的准确率,本文借鉴随机森林的集成学习思想,利用基于内存计算的Spark平台及该平台下算法并行且快速迭代的特点,提出了一种多重随机森林的加权大数投票算法用于人体行为识别。该算法核心思想是以多个优秀的随机森林模型为基分类器组合而成的多重随机森林来达到提升随机森林模型泛化能力的目的。

将根据不同优秀参数组合(本文中以树的个数和树的深度为参数组合)训练好的若干随机森林模型按照线性排列组成多重随机森林模型持久化到HDFS后,即可进行多重随机森林加权大数投票。

算法的具体步骤如下:

①从HDFS中读入已经训练好的多重随机森林模型,测试数据集D,并转换成RDD;

②获得多重随机森林中每一个子随机森林模型对测试数据集D的预测率,将所有预测结果放入以整型数为K值,以预测率为V的Map集合中,如下所示:

P_Map=[[x1,p1],[x1,p1],[x2,p2], [x3,p3],…,[xi,pi]]

(6)

式中:pi为第xi个随机森林对于测试数据集D的准确率,并作为权重值使用;

③将P_Map作为广播变量广播到各个计算节点;

④取出测试数据集D中的一个表示人体行为的特征向量M;

⑤创建一个所有数据均为0的数组,该数组长度由行为类别总数决定。假设分类数为n种,则创建一个长度为n,数据全为0的定长数组Array。将特征向量M通过第i个随机森林模型,判断模型对M的预测值。如果第i个随机森林模型预测特征M表征第n种人体行为,则对数组Array进行更新,将下标为n-1的数据值加上pi。依次将特征向量M通过每一个随机森林模型,进行判断所表示行为类别,并更新数组Array所在下标数据加上该随机森林预测权重值。具体过程如图9所示。

图8 原地跳跃关键帧建模图

图9 多重随机森林加权投票过程

⑥取出数组Array最大数所对应的下标值,即为特征向量M在多重随机森林加权大数投票算法中的最终分类标签;

⑦重复步骤④~步骤⑥,直至测试数据集D中所有特征向量识别完毕。

3.3 多重随机森林加权大数投票模型建立及实验分析

为了获取最佳的模型组合,通过设定随机森林中树的个数以及树的深度的双层循环来训练数据,根据总体准确率进行倒序排列选择优秀参数组合。循环参数范围选择规则如下:①对于树的深度我们选取结果比较稳定的(10,20)这个区间;②随机森林中树的个数太少,会使结果不具代表性,树的个数太大又会使模型太过逼近训练数据的分布,反而丧失了在预测时的准确率。文献[13]建议,随机森林分类性能最接近最优时树的数量为100左右,同时考虑模型的复杂程度与运算时间,我们将树的个数选择在了(80,120)之间。

确定好参数范围,对数据集的训练可以得出多个优秀的参数组合。本文根据准确率取最高的前30个优秀参数组合作为多重随机森林加权大数投票算法的基分类器进行观察。图10为随着基分类器个数的增加动态行为的识别准确率。

图10 基分类器个数的增加动态行为的识别准确率

图11 多重随机森林加权大数投票算法对行为 识别结果混淆矩阵

可以看到随着基分类器个数的增加,行为分类准确率显著增高,基分类器个数在5个以后识别准确率趋于稳定,行为识别准确率高达95%以上,但是依然存在微小波动,分析波动原因是对于某些难以辨别的行为进行识别时,引入的新基分类器对其识别权重较大,造成最终的行为识别准确率波动。

实验中采用前5个优秀参数组合训练出的模型作为基分类器,得到如图11混淆矩阵。

观察图12发现,多重随机森林加权大数投票模型对各个动态行为分类的判别方面优于单一随机森林模型。尤其是对误判较为严重的坐下-站起动作识别率远高于单一随机森林模型。同时发现投票模型在对原地跳跃动作识别率略低于单一随机森林模型。分析原因是引入某个新分类器时,该分类器对原地跳跃动作误判权重较大引起投票模型误判。

图12 两种算法对动态行为识别准确率对比图

总体来讲,多重随机森林加权大数投票对于动态行为分类效果较好,分析原因是使用多组最佳参数组合使波动误差缩小,同时加权投票机制使最终决策更加稳定。但是在实际的应用中,随着基分类器个数增多,模型训练及行为识别过程中时间消耗也会越多,应当根据实际场景去选择基分类器的个数。

4 基于公共数据集的实验结果分析

由于MSR Daily 3D数据集中运动帧数较少,不满足随机森林模型训练需要的数据多样性。因此将本文建立的数据集全部作为训练数据,选取了MSR Daily 3D数据集中与本文数据集中共有的站立时喝水、打电话、抛物、坐下、站起等行为使用本文行为表示方法,利用本文提出多重随机森林加权大数投票算法在5个基分类基础上进行加权投票识别。

最终的识别准确率如下表3所示,动态行为平均识别率达到了82%。对比同样在基于Kinect采集的MSR Daily 3D数据集上进行的相关研究,文献[14]采用K-均值聚类算法提取运动过程的关键帧,将关键帧关节点位置与人体刚体部分之间的骨架角度两种特征作为行为的表达,利用支持向量机进行分类识别,最终的平均识别率只有62%。文献[10]分析了人体运动过程中角度和距离变化的总差异提出基于结构相似度的关键帧搜索方法,采用并行化神经网络算法进行行为识别,动态行为平均识别率只有77.69%。

实验结果中打电话和抛物识别率较低,分别只有60%和70%。观察MSR Daily 3D数据集中打电话和抛物行为视频图像及行为关节点数据建模的运动轨迹发现,该数据集中部分行为随机性较大,且没有体现出行为运动历史图像的变化细节。例如部分被测对象进行打电话时伴随着转身和走动,且起始帧时手部已经贴在耳旁,导致行为表示阶段提取到的用于识别的关键帧与本文数据集用于训练的行为关键帧差别较大,造成了识别误差。而对于该数据集中体现了完整运动历史图像的行为如喝水、坐下、站起等具有较佳的识别能力。

为了进一步证明本文提出的行为识别方法的可行性,本文还在MSRC-12数据集上进行实验,动态行为最终平均识别准确率为78%。文献[15]采用随机森林算法进行动作分类,同样在MSRC-12数据集上进行测试,平均识别准确率为67.3%,对比可知本文方法识别准确率更高。

表3 MSR Daily 3D数据集行为识别准确率

5 总结

本论文对Kinect获取的空间关节点数据进行分析,构建了基于关节点信息的人体行为表示方法,结合SparkMLlib实现的随机森林进行了人体行为识别的研究。实验结果表明本文提出的关键帧提取方法与基于多重随机森林加权大数投票算法对人体行为识别具有较佳的效果。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!