王健
摘 要:本文设计了一种基于深度传感器的动作识别系统。该系统采用Kinect深度传感器对采集的人体动作视频进行特征提取,搭建了一个单层的BP神经网络进行训练和识别。实验表明,该系统在少样本训练的情况下,依然能够较准确地对站立、坐下、挥手与蹲下4个动作进行识别。该方法在数据维度上引入了第三维“深度信息”,所以在网络训练时的速度和识别的响应速度要优于常规方法,也为人体动作识别提供了一种思路。
关键词:深度传感器 BP 神经网络动作识别
中图分类号:TP391.9 文献标识码:A 文章编号:1674-098X(2019)09(a)-0115-03
人体动作识别在人机体感交互、医疗健康、增强现实、体育运动分析及机器人控制等诸多领域拥有广泛的应用前景。人体动作的识别最早始于20世纪90年代[1],相关的研究成果与论文增逐年递增趋势。
方法一般有两种:一种是通过可穿戴式传感器,其优点是准确性高、实时性高,缺点是要求用户必须佩戴传感器在身体的指定位置,这样会使用户舒适感降低[2],该方法在护理与康复训练等特殊领域还有一定的应用,部分学者在坚持着进行该方法的研究与改进[3];另一种是基于计算机视觉的非侵入式检测方法,通过计算机对图像传感器(彩色摄像机)采集的原始图像或图像序列数据进行处理和分析,学习并理解其中人的动作和行为[4]。目前的研究大多数主要是基于2D视觉的动作识别,而系统受到计算机图像处理能力的制约,特别是实时图像处理,会受到光照、遮蔽、阴影、背景等因素的制约,对最终的识别结果造成影响[5]。基于RGB彩色图像的行为识别方法的一个弊端就是把原本三维世界的立体信息转换成了平面上的二维图像,另一维度信息的丢失势必会造成后期人体动作识别率的下降。
1 实现思路
如图1所示,使用图像分割技术,将图像中的人体从背景环境中剥离;根据“骨骼跟踪”的人體关节点生成骨架系统,获取机器学习需要的特征信息。使用机器学习方法来构造分类器,并对分类器进行优化以提高准确率。
2 骨骼数据获取与处理
为降低特征数据维数和提高计算效率,相对于常用的距离特征提取[6],本文采用了一种基于骨骼向量的方向余弦的特征提取方法,具体思路如下:将人体20个关节点进行分层,如图2所示:第一层:身体躯干关节点。该层主要包括头、左右肩、脊椎等8个关节点(数字1)。第二层:四肢关节点。包括左右肘、腕,左右膝、踝8个关节点(数字2)。第三层:手与脚。剩余的左右手、脚这4个关节点,将其归为第三层(数字3)。手掌和脚在本文所研究的人体动作中所起的作用非常微小,因此只提取第一层和第二层这16个重要的关节点进行下一步工作。
将16个关节点中每两个关节点连接组成一段骨骼,定义为一个向量,第一层的8个向量标记为{a1,a2,…,a8};第二层8个标记为{a9,a10,…,a16}。定义的16个骨骼向量的方向余弦特征来表示某一类动作,现取出右手的肩关节到肘关节这个骨骼向量(即标号为a8的向量)进行详细算法分析:设获取肩关节的三维坐标为(x1,y1,z1),肘关节的三维坐标为(x2,y2,z2),如图3所示。设向量a8与坐标系的三个方向角分别为:α,β,γ。则该骨骼的特征向量可定义为cosα,cosβ,cosγ。公式如下:
(1)
通过上述算法,依次将已定义的16个骨骼向量的方向余弦值作为特征进行提取送入分类器进行训练。
3 基于BP神经网络的分类器
传统的模版匹配方法在识别的准确率上难有进展,其算法的设计有赖于专业背景知识的掌握程度,而将机器学习的方法引入到动作识别中还有很大的发展空间,常见的方法有支持向量机[7]、贝叶斯网络和神经网络,本文采用分类器为BP神经网络,进行分类器的训练过程介绍,动作识别使用的三层BP网络,如图4所示,它包括一个16个节点输入层、一个1024个节点的隐含层和一个4个节点的输出层,其中{x1,x2,x3……xn}为骨骼特征向量输入。
该神经元网络的隐层神经元的输出为:
(2)
输出层神经元的输出为:
(3)
其中,wij表示输入层第i个神经元与隐层第j个神经元之间的连接权;vjt表示隐层第j个神经元与输出层第t个神经元之间的连接权;θj、rt表示相应神经元的激活阈值;f(x)表示神经元的激活函数。该网络使用了Relu激活函数,损失函数定义如下:
(4)
yt表示第t个神经网络的期望输出值;ct表示第t个神经网络的实际输出值;当训练样本总数为K时,网络全局输出误差采用最小方差计算。这里的权值wij调整采用了梯度下降算法。
隐含层和输出层神经元之间的连接权v的梯度值d为:
(5)
用dkt、bj、vjt和rt计算出下一次隐含层和输出层之间的新的连接权和阈值为:
(6)
输入层到隐含层之间的连接权的修正量e为:
(7)
用ekj、αki、wij和θj计算出下一次输入层和中间层之间新的阈值和连接权为:
(8)
(9)
每个样本学习结束后,调整相应的连接权值,直到K个样本都学习结束,则判断全局输出误差函数是否达到设定的收敛限定值,直到误差函数达到限定值,网络训练结束;否则,如果在达到最大学习次数时误差仍然大于设定数值,训练也结束,则网络训练失败。
4 实验及总结
实验环节采用了微软公司的Kinect第二代传感器,软件运行环境为Windows10、VisualStudio2012、KinectSDK1.5,开发语言采用C#.Net,系统运行效果如图5所示。我们对站立、坐下、挥手、蹲下四个动作进行了数据采集和训练。然后进行了识别测试,四种动作的识别率均达到92%以上,识别率达到要求。
参考文献
[1] 徐光祐,曹媛媛.动作识别与行为理解综述[J].中国图象图形学报,2009,14(2):189-195.
[2] Maekawa,YutakaYanagisawa,YasueKishino,etal.Object-basedactivityrecognitionwithheterogeneoussensorsonwrist.TakuyaPervasiveComputing.2010.
[3] 王琳琳,夏侯士戟.HandGestureRecognitionbyAccelerometer-basedClusterDynamicTimeWarping[J].JournalofDonghuaUniversity(EnglishEdition),2017,34(4):551-555.
[4] Aggarwal,M.S.Ryoo.Humanactivityanalysis[J].J.K.ACMComputingSurveys(CSUR).2011(3).
[5] 吴晓雨,杨成,冯琦.基于Kinect的手势识别算法研究及应用[J].计算机应用与软件,2015,32(7):173-176,276.
[6] 辛义忠,邢志飞.基于Kinect的人体动作识别方法[J].计算机工程与设计,2016,37(4):1056-1061.
[7] 朱国刚,曹林.基于Kinect传感器骨骼信息的人体动作识别[J].计算机仿真,2014,31(12):329-333,345.



