TensorFlow平台上基于LSTM神经网络的人体动作分类

2017-11-08 21:47杨煜张炜
智能计算机与应用 2017年5期
关键词:时间序列

杨煜+张炜

摘要:随着人体运动数据采集技术的发展,基于数据的人体运动的研究越来越受到人们的关注。人体运动的研究在医疗康复、运动训练、虚拟现实、以及影视和游戏等领域有着很大的应用空间。人体动作分类就是基于大量已标注动作名称的人体动作,对未标注的人体动作进行分类标注。在本文中,研究提出了一种基于长短时记忆网络(LSTM)的人体动作分类模型。首先,将人体动作表示为时间序列的形式。然后,将人体动作序列逐帧输入到去掉输出层的正向和反向LSTM中,并将隐藏层输出依次送入Mean pooling层和逻辑回归层得到最终的分类结果。最后,研究利用目前流行的深度学习平台TensorFlow实现本次研发的分类模型并进行训练。基于此,又进一步利用人体动捕数据库HDM05的数据进行实验来验证提出的分类模型,经过训练,该模型在测试集上的分类准确率达到了94.84%。

关键词: 人体动作分类; 长短时记忆网络; 时间序列; TensorFlow; HDM05

中图分类号: TP183

文献标志码:A

文章编号:2095-2163(2017)05-0041-05

Abstract:With the development of human motion data acquisition technology, the research of human motion based on data has attracted more and more attentions. The research of human motion has great application space in medical rehabilitation, sports training, virtual reality, film and television, games and so on. Human action classification aims to classify unlabeled human actions based on a large number of labeled human actions. This paper proposes a human action classification model based on Long Short-Term Memory network (LSTM). Firstly, represent human actions as a form of time series; then, input one human action by frame order into two LSTMs without output layer, one is forward LSTM and the other is backward LSTM, and pass the hidden layer outputs of LSTMs into the Mean pooling layer and the logical regression layer to get the final classification results; finally, implement the classification model and train it with the popular deep learning platform of TensorFlow. The research uses the data of human motion capture database HDM05 to validate the proposed classification model, and the accuracy rate of the classification model reaches 94.84% on test set.

Keywords: classification of human actions; LSTM; time series; TensorFlow; HDM05

收稿日期: 2017-06-06

1概述

隨着人体运动数据采集技术的发展,基于数据的人体运动的研究越来越受到人们的关注。人体运动的研究在医疗康复、运动训练、虚拟现实、人机交互、以及影视和游戏等有着很大的应用空间。

人体运动可以表示为人体各部分在3D空间中的运动[1],而人体动作可以看作是人体运动过程中的一个完整独立的动作片段,例如可以把屈膝、跳起、落地的这一段人体运动看作一个“跳跃”动作。人体动作的表示通常是基于各关节点的位置的[2]或基于身体各部分的旋转姿态的[3-4]。在本文中,研究将利用人体各部分的旋转姿态来表示人体动作,人体动作可以看作以一个时间序列[3,5-6],序列中每一帧为身体各部分用四元数表示的旋转姿态。

人体动作分类问题是人体运动研究的重要问题之一。人体动作分类是基于大量已标注动作名称的人体动作,对未标注的人体动作进行分类标注。人们为解决人体动作分类问题应用了许多分类算法。随着神经网络的发展,许多研究者尝试用已经构建的神经网络模型进行人体动作的分类并取得了很好的效果。譬如Du等[2]利用分层级联的多个循环神经网络对人体动作进行分类。Cho和Chen[7]将人体动作序列的每一帧数据单独拿出来训练神经网络并进行分类,然后用投票法由各帧的分类结果得出序列分类的结果。Huang等[4]在将人体运动数据表示为李群的基础上,应用深度神经网络分类人体运动。

在本文中,研究构建了由双向LSTM神经网络和逻辑回归层组成的人体动作分类模型,并用TensorFlow平台实现模型的搭建和训练过程。TensorFlow是谷歌开源的数值计算平台,其中集成了大量神经网络模型的代码实现,使其成为了一个强大的深度学习平台。文献[8]中就是用TensorFlow实现的基于BP神经网络的手写字符识别方法。endprint

在接下来的部分,先介绍人体动作分类的神经网络模型,再探讨论述了其在TensorFlow平台下的实现和训练,最后研究利用人体动作捕获数据库HDM05[9]的数据进行实验以验证模型的分类效果。

2分类模型

2.1人体动作分类问题概述

本文中讨论的人体动作分类问题是基于分割好的人体动作进行的,每个人体动作有唯一准确的动作类别标签。如前所述,人体动作分类就是基于大量已标注类别的动作,對未标注的动作进行分类标注。人体动作分类模型的训练和

对于分类问题,一般来说需要关注2个问题,即每条实例的数据形式,以及分类所用的算法或模型。在这里,首先介绍人体动作的数据表示,在后面的章节中重点深度剖析本文提出的分类模型及其在TensorFlow平台下的实现。

人体的结构和形态十分复杂,不同人的体态差异也很大,因此则需要用人体骨骼模型来对人体进行抽象。人体骨骼模型由抽象的骨头和关节构成,人体动作可以看做是人体骨骼模型中所有骨头的旋转姿态构成的一个时间序列。图2所示的是一个简单的包含17块骨头的人体骨骼模型,使用人体骨骼模型表示人体动作使得对人体运动的研究可以方便地迁移到不同人或骨骼模型上去。

人体骨骼模型并不是人体分类问题研究的一个限制因素。对于具体的研究问题和人体动作数据集,可以使用不同的人体骨骼模型进行表示,比如有的数据采集包含了手指上的运动,就要使用细化到手指的人体骨骼模型来替代用一个骨头表示手部运动的模型。

可以看出这3个门的输入都是xt和ht-1,同时每个门中有自己的权重和偏斜。这些参数随着训练过程不断调优,在状态更新和隐藏层输出值的计算上发挥作用。

TensorFlow是谷歌推出的第二代人工智能学习系统,而且有着很多优秀的特点,对其阐释如下:

1)高度的灵活性。TensorFlow不仅能够用于搭建并训练各种神经网络模型,还可以完成很多其他计算任务,用户只需要将自己的计算模型设计成数据流图的形式就可以应用TensorFlow完成任务。

2)可移植性强。TensorFlow可以在CPU和GPU上运行,这即使其能够移植到台式机、服务器和手机等许多设备上。

3)提供了大量机器学习的模型,使得科研和开发人员可以省去重写底层实现的繁琐工作。

4)自动求微分。对于使用梯度下降法进行训练的机器学习模型,用户只需要定义损失函数以及模型中哪些参数是可训练的,TensorFlow就能够自动求微分导数并用梯度下降法训练模型参数。

5)性能优化。对于多CPU和GPU的工作平台,TensorFlow能够很好地支持多线程、队列、异步操作等。

在TensorFlow下,可以使用python或C++的代码来搭建数据流图进行计算。流图中的节点表示数学操作,线表示在节点间传递的数据张量即多维数据数组。

用TensorFlow实现模型一般分为构建数据流图、训练模型、使用模型这3个阶段。在TensorFlow中,可以用常量、变量、以及操作来构建数据流图。其中,变量包括输入变量、可训练的变量以及其他变量。在流图中加入输入变量需要用占位符placeholder占位,之后在训练和使用模型时用feed操作将数据从placeholder输入到模型中。可训练的变量用来表示模型中的权重和偏移等参数,在构建这些变量时需要设置trainable = True。在训练阶段,可以调用训练相关的操作使这些模型参数随着训练数据得到训练。

3.2构建TensorFlow流图实现人体动作分类模型

在TensorFlow中提供了LSTMCell操作来支持LSTM模型的搭建。LSTMCell相当于LSTM模型的隐藏层,在内部封装了LSTM隐藏层包含的遗忘门、输入门和输出门等结构,同时还可根据研究需要设置隐藏层结点个数。

在用TensorFlow搭建神经网络的过程中,不再以神经网络中的节点为单位进行布局,而是以层为基础来考虑。因为像LSTMCell这样的TensorFlow操作直接代表了网络中的一个隐藏层。因此包含多个节点的输入层和输出层也都用向量的形式来表示,向量长度即为该层节点的个数。

研究构建的TensorFlow流图如图6所示。图中胶囊形单元表示模型的输入和输出,矩形单元表示TensorFlow中的操作,圆形单元表示可训练的模型参数。在该数据流图中,InputData是一个人体动作实例,即一个多元时间序列。输入数据InputData经过dropout操作,dropout操作的目的是防止模型过于拟合。接下来,数据被传入2个MultiRNNCell中,MultiRNNCell是TensorFlow提供的RNN的主要操作,相当于RNN的整个隐藏层。图中的MultiRNNCell中的内容是其按时间展开图,隐藏层用LSTMCell实现,其中可以包含多个隐藏层。在图中省略了反向MultiRNNCell的详细内容,因为2个MultiRNNCell的结构相同,只是在输入序列数据时一个按照正常顺序输入,另一个按照相反的顺序进行输入。2个MultiRNNCell得到的输出序列分别经过ReduceMean操作得到与时间无关的平均向量h和hb,向量的长度即为隐藏层节点个数。最后,h和hb经过一个手动构建的逻辑回归层和softmax激活函数,并用交叉熵损失函数来计算模型输出与真实的类别标签的误差。

以上就是本次研究利用TensorFlow搭建的基于LSTM的人体动作分类模型。模型中的主要训练参数包括输入层到隐藏层的权重和偏斜、LSTMCell中3个门的权重和偏斜、以及逻辑回归层的权重和偏斜。给出损失函数Cost后,使用TensorFlow提供的训练操作可以自动求Cost关于每个参数的微分导数并用梯度下降法对模型进行训练。endprint

4实验

4.1实验数据

综上研究论述后,即将用HDM05动作捕获数据库[9]中的数据进行实验以检验分类模型的效果。HDM05中有2 337条切分好的人体动作数据,每个人体动作都标注了类别标签,共有130个类别。HDM05的人体动作数据采集了人体31个部分的运动数据,其网站上提供了将这些数据转换成旋转姿态四元数的代码。

经过观察,进一步发现HDM05数据库中有些骨头上的姿态四元数固定不變,比如左右肩的四元数,为此选择抛弃这些部分的数据不用,以免影响模型的效果。另外,由于这130个动作类别都和头颈的运动无关,因此头和脖子的数据也可以舍弃不用。最终,就实际确定了包括15个骨头的数据进行模型的训练和动作的分类,具体来说则分别是: 左大腿、左小腿、左脚、右大腿、右小腿、右脚、腰下部、腰上部、胸、左大臂、左小臂、左手、右大臂、右小臂、右手。

对于HDM05中的130个类别标签有很多类别应属于相同的动作,比如jogging starting from air和jogging starting from floor,jogging 2 steps和jogging 4 steps[2]。文献[7]中将这130个类别合并成65个类别,在此基础上文献[2]指出有些类别仍难以区分,比如deposit和grab,这2个类别需要细化到手指的动作才有可能区分,sitDownChair和sitDownTable在只有人体运动数据的情况下也难以识别桌子和椅子的不同。最终,本次研究就将文献[7]中给出的65个类别合并成了54个类别进行人体动作的分类实验,例如kickLFront和kickLSide合并,jogOnPlace和run合并,deposit和grab合并等。

由于每个人体动作的时间长度不一,最长的动作长度为901帧,还要将每个人体动作放缩到统一长度为256帧。对于不足256帧的人体动作,就需要在动作的末尾用全零的帧将其补齐到256帧;对于长度超过256帧的人体动作,将会在其中随机不重复地选取256帧,并使其按照原来的顺序构成缩短后的序列。

4.2参数设置

输入数据的每一帧包含15块骨头上的旋转四元数,因此模型的输入节点可设置为60个。输出层节点设置为54个,与所有54个动作类别相对应。序列长度设为256,与研究规定的人体动作统一长度一致。其他参数的设置将在表1中给出清晰呈现。

模型中的训练参数的初始化会对训练效果产生很大的影响,这里就选用TensorFlow提供的random_uniform_initializer对逻辑回归层的训练参数进行初始化,并用orthogonal_initializer方法对LSTMCell中的遗忘门、输入门和输出门的参数进行初始化。此外,实践证明在新建LSTMCell时将参数forget_bias从默认的0调整为1.0会使模型的训练效果产生有所提升。研究将使用批量随机梯度下降法进行训练,也就是每次将4条训练实例一同输入给模型对模型进行训练。

4.3实验结果

实验过程中,将HDM05中的2 337个人体动作按类别标签排序,然后在每相邻的15个动作中随机选取1个人体动作放入测试集,并将其他人体动作放入训练集。这样做保证了训练集和测试集的类别分布一致。而后,用训练集的全部动作迭代训练模型50次,每次迭代会将训练集数据随机重排列。为此,则记录了每次迭代后模型的损失函数值以及模型在训练集和测试集上的分类准确率,记录结果如图7和图8所示。从图中可以看出损失函数值随着迭代而下降,而分类的准确率随着迭代而上升,最终两者的变化都将趋于平稳,这也符合神经网络模型的一般训练过程。在50次迭代的过程中,模型在训练数据上的准确率最高达到98.44%,在测试数据上的准确率最高达到94.84%。

5结束语

在本文中,研究提出了一种基于LSTM神经网络的人体动作分类模型。通过将人体动作表示为时间序列的形式,序列上的每一帧由人体各部分的旋转姿态四元数构成。接着将人体动作序列逐帧输入到去掉输入层的正向和反向LSTM中,并将隐藏层输出送入Mean pooling层关于时间求平均,再将Mean pooling层的输出送入逻辑回归层得到最终的分类结果。

之后,又使用TensorFlow搭建了设计研发的分类模型,利用TensorFlow平台提供的LSTMCell等操作将模型构建成数据流图的形式,并用TensforFlow自动计算微分导数的功能选取梯度下降法训练模型。研究最后,则利用HDM05人体动作捕获数据库的数据进行实验验证了模型的分类效果,就是将HDM05的数据随机划分为训练集和测试集,用训练集训练模型后,该模型在测试集上的分类准确率达到了94.84%.

YE M, ZHANG Q, WANG L, et al. A survey on human motion analysis from depth data[M]// GRZEGORZEK M, THEOBALT C, KOCH R, et al. Timeofflight and depth imaging. sensors, algorithms and applications.Lecture Notes in Computer Science. Berlin: Springer ,2013:149-187.

[2] DU Yong, WANG Wei, WANG Liang. Hierarchical recurrent neural network for skeleton based action recognition[C]//2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Boston, MA, USA:IEEE,2015:1110-1118.endprint

[3] SEMPENA S, MAULIDEVI N U, ARYAN P R. Human action recognition using dynamic time warping[C]//International Conference on Electrical Engineering and Informatics, Iceei 2011. Bandung, Indonesia:IEEE, 2011:1-5.

[4] HUANG Zhiwu, WAN Chengde, PROBST T, et al. Deep learning on lie groups for skeleton-based action recognition[J]. arXiv preprint arXiv:1612.05877,2016.

[5] GONG Dian, MEDIONI G, ZHAO Xuemei. Structured time series analysis for human action segmentation and recognition[M]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2014,36(7):1414-1427.

[6] LI Kang, FU Yun. Prediction of human activity by discovering temporal sequence patterns[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2014, 36(8):1644-1657.

[7] CHO K, CHEN X. Classifying and visualizing motion capture sequences using deep neural networks[C]// International Conference on Computer Vision Theory and Applications. Lisbon, Portugal:IEEE, 2014:122-130.

[8] 張俊, 李鑫. TensorFlow平台下的手写字符识别[J]. 电脑知识与技术, 2016, 12(16):199-201.

[9] MLLER M, RDER T, CLAUSEN M, et al. Documentation mocap database HDM05[R]. Bonn:Universitt Bonn, 2007.

[10]GRAVES A. Supervised sequence labelling with recurrent neural networks[M]. Berlin: Springer, 2012.

[11]GRAVES A, MOHAMED A, HINTON G. Speech recognition with deep recurrent neural networks[C]//Acoustics, Speech and Signal Processing (ICASSP), 2013 IEEE International Conference on. Vancouver, BC, Canada:IEEE, 2013, 38(2003):6645-6649.endprint

猜你喜欢
时间序列
基于分布式架构的时间序列局部相似检测算法
基于嵌入式向量和循环神经网络的用户行为预测方法
医学时间序列中混沌现象的初步研究
基于时间序列分析南京市二手房的定价模型
基于Eviews上证综合指数预测
上证综指收益率的影响因素分析
基于指数平滑的电站设备故障时间序列预测研究
基于时间序列的我国人均GDP分析与预测
基于线性散列索引的时间序列查询方法研究
基于组合模型的能源需求预测