本发明涉及一种基于注意力机制的人体动作预测方法,属于人机交互与虚拟现实技术领域。
背景技术
人类具有预测的能力,能够以之前发生事件为前提对周围世界做出准确的短期预测。在虚拟现实领域,人机交互是一个重要的研究方向。如何让机器能够模仿人类这种能力对人体的动作做出相应的预测,是目前该领域的一个研究热点。
对于计算机而言,预测人体运动对于及时进行人机交互,障碍避免和人员跟踪非常重要。虽然简单的物理现象,比如无生命物体的运动,可以用已知的物理定律来预测,但没有一个简单的方程来控制一个人的有意识运动。许多日常问题,例如预测一个个体下一步会在物理环境中做出怎样的动作是具有挑战性的,因为人体各个部位的状态可以成许多可能的排列组合。但是,人们仍然可以通过将动作分解成不同的类别或者状态来预测下一步的动作,并推断它们的动态后果。
人体行为建模是一个经典的问题,通过获得一定的信息后对人体进行建模,从而达到人体行为预测的目的。这样的研究,是一个较为新型的研究点。如今,深度学习逐渐被应用到更加广泛的领域,机器对环境的理解可以通过各种方法更加的深入与纯熟。但是,在人体动作这样的领域,机器尚未能像人一样能够对人体动作进行很好的理解与预测。在这样的环境下,人体动作预测这一项研究有着很大的进展空间。
目前,已有研究利用循环神经网络(recurrentneuralnetworks,以下简称rnn)对动作序列进行分析,并生成后续的动作帧,如编码-循环神经网络-解码模型(encoder-rnn-decoder,以下简称erd)、结构化循环神经网络(structural-rnn)模型等。但这些研究中,对动作序列生成的长度对比不超过一秒,且部分动作相应动作误差较大,对于一些长时间的动作无法做出很好的预测。因此,设计一种更为符合人体运动学的神经网络模型,使其能够预测一套完整的动作,在人机交互、机器人编排、动作识别领域都有重要意义。
现有的对人体动作进行预测的方法,主要分为视频生成方式和人体骨骼运动数据方式。其中,视频生成方式主要是为了完成两个工作,第一个是视频预测,即模型需要从一系列观察帧中学习运动模式,并预测下一帧。这种方式通常基于rnn,虽然rnn具有良好的模拟连续数据的能力,但它们通常仅在短期预测中取得良好结果,且这些预测在思路简单且安静的情况下可预测,而长期预测结果通常遭受低图像质量,例如模糊和物体变形。第二个工作旨在直接生成基于单个输入的帧序列或仅仅场景类型。由于在测试阶段不再可以观察到运动模式,因此这项任务更具挑战性。这两种工作方式使用生成神经网络模型来生成时空图或者使用变分自动编码器来预测像素的密集轨迹。但如果生成的序列帧没有一定的几何约束,场景中的对象任意性很大,移动不规则,将导致生成的对象与原来需要的目标形成很大的差异。这两种方式的共同限制是前一部分的序列帧中的运动对象关节结构在生成模型中没有能够被很好地建模出来。由于以前的生成方法只是将整个外观作为输入,因此如果不进行监督,模型就很难了解关节之间的结构关系,从而导致运动过程中出现很大变形,生成的视频的质量远远不能令人满意。
而利用人体骨骼运动数据可以很好地将人体运动信息提取出来,通过直接学习骨骼的运动信息可以有效避免不必要的对于人体形态和视频背景的重建,可以有效的利用有限的信息,从而达到能够准确学习到人体动作的目的。这样的研究也适合用来辅助视频帧序列的生成。通过运动信息的辅助,加上生成神经网络的相应的生成效果,更有利于生成更加准确的视频帧序列。
深度学习在近年来被应用于许多领域。在传统的编程方法中,计算机通常接受人们的指令做出相应的动作,因此人们需要将一个较大的抽象的问题分解成计算机能够去执行的许多简单的指令来实现人们想要的结果,这是由于计算机的代码处理方式是由二进制的指令进行的。然而,在人造神经网络的应用中,计算机并不需要被告诉如何解决人们所提出的问题,因为它已经从大量的数据中学习到了相应的信息,从而根据学习到的经验来提出解决问题的方法,或者给出该问题的答案。计算机从这样大量的数据中学习的东西,就是所谓的神经网络权值,整个权值的共有名称叫做模型,模型便能够这样普遍地找出解决问题的办法。这些新的技术称为深度学习。深度学习自从刚被提出到现在,在各个领域都有长足发展,这其中离不开深度神经网络的设计和反向传播算法的不断改进。在这两种相辅相成的方法的不断更新之下,深度神经网络和深度学习在计算机视觉处理、计算机图形学、机器翻译、语言识别与生成和自然语言处理等许多重要问题上均取得了十分出色的表现。利用深度神经网络构建的各种模型正在被谷歌,微软和facebook等公司大规模部署。
最近两年,注意力模型(attentionmodel)被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入了解的核心技术之一。编码器-解码器结构在多个领域展现出先进水平,但这种结构会将输入序列编码为固定长度的内部表征。这限制了输入序列的长度,也导致模型对特别长的输入序列的性能变差。将注意力机制引入循环神经网络能够帮助解决这一局限性。注意力机制解决的根本问题是允许网络返回到输入序列,而不是把所有信息编码成固定长度的向量。
seq2seq模型是在2014年由googlebrain团队和yoshuabengio两个团队各自独立提出,主要关注机器翻译相关问题。seq2seq模型简单来说是一个翻译模型,把一个语言序列翻译成另一种语言序列。整个处理过程是通过使用深度神经网络(长短记忆网络lstm或者递归神经网络rnn)将一个序列作为输入影射为另外一个输出序列。主要先对一部分序列进行编码,编码后得到相应的隐藏层,之后再输入一个“开始”信号,使得模型开始解码。解码是循环进行的,每一次解码得到的输出都作为下一次解码的输入,这样循环要求的次数后得到全部的解码序列,即为需要的输出序列。
在利用seq2seq模型预测人体动作的时候,有研究人员使用残差结构对其进行预测,但在超过1000ms后的预测结果中显示,其无法保证一个正常的运动姿态。
技术实现要素:
本发明的目的是为了解决利用seq2seq模型进行动作预测时的稳定性与准确性问题,提出一种新的人体动作预测方法。本发明方法的创新性存在于,提出了两种注意力机制,即全局注意力机制和局部注意力机制,通过注意力机制,使seq2seq模型对上下文的信息利用更加全面。
本发明所采用的技术方案如下:
方式一、采用全局注意力机制进行人体动作预测,所述全局注意力模型如图1所示,包括以下步骤:
步骤1:从人体动作姿态数据集中读取全部的数据,并对数据进行标准化。
步骤2:从全部数据中提取编码输入数据,解码输入数据,和结果对比数据,并将这些数据分为批次放入注意力模型中进行训练。
步骤3:当编码器对数据进行编码后,提取隐藏层信息,由于它是一维数据,对其进行维度扩展,使其和编码器的输出进行串联。
步骤4:对串联后的数据按照序列的数量进行求和,因此被压缩成一维的数据,对信息进行整合处理。
步骤5:对进行处理后的数据进行复制,使其序列长度大小等于解码器的数据输入长度,之后与解码器数据进行串联,然后线性变换成为与解码器输入维度相同的矩阵。
步骤6:将步骤5输出矩阵向量按行求和,通过softmax处理,得到的值加上解码输入数据。
步骤7:将处理后的矩阵向量输入到解码器,得到输出结果,利用机器学习算法将输出结果与真实动作数据进行对比,求得误差并进行反向传播,训练模型。
步骤8:采用步骤1-7的方法,对训练好的模型利用随机生成数据进行预测,并对数据进行动作重建得到重建结果。
方式二、采用局部注意力机制进行人体动作预测。
由于全局注意力需要考虑到之前输入帧的所有信息,其计算量较大,而且也容易造成信息冗余,使得解码器无法正确地找到他所需要的注意点,也就造成了注意分散。因此本发明也尝试强制让它注意到原信息的一部分子信息。局部注意力的设计目的是希望解码器能够精确找到它所需要的上下文,但它一开始并不知道它所需要的上下文在哪里,因此首先设置一个可以滑动的上下文窗口,让它根据解码器当前输入序列的序列号向下滑动从编码器的输入提取到相对应的注意力信息,然后对注意力信息进行整合,在相应的解码器输入时与输入信息相加并解码,得到一定的预测结果。其中,由于编码和解码输入的帧数不一样,因此需要设定可以根据编码解码器输入序列的数量进行相应调整的窗口大小,即自适应窗口。由于自适应窗口是根据输入序列和被要求输出序列的大小进行一定的大小调整,可能会出现窗口大于要求生成序列长度的情况,或者窗口滑动时,出现超出序列长度的情况,针对这样的情况,滑动的次数根据输入序列与输出序列之比得到。其中具体流程如图2所示。
方式二包括以下步骤:
步骤1:从人体动作姿态数据集中读取全部的数据,并对数据进行标准化。
步骤2:从全部数据中提取编码输入数据,解码输入数据,和结果对比数据,并将这些数据分为批次放入注意力模型中进行训练。
步骤3:首先将动作数据依次输入到编码器进行编码,得到编码器输出,以及其隐藏层编码后的状态。
步骤4:将隐藏层信息进行复制与编码序列长度数量一致,并与其进行串联,然后通过线性变换得到大小与编码序列相同的矩阵attention。
步骤5:记解码序列长度为d1,编码序列长度为el,n=d1/e1,n将在第4步使用到。
步骤6:第i帧解码时,选择选择attention矩阵的第
步骤7:解码得到输出结果,并将结果置入下一步计算,直到达到要求的解码序列数量。
步骤8:将处理后的向量输入到解码器,得到输出结果,利用机器学习算法将输出结果与真实动作数据进行对比,求得误差并进行反向传播,训练模型。
步骤9:采用步骤1-7的方法,对训练好的模型利用随机生成数据进行预测,并对数据进行动作重建得到重建结果。
有益效果
本发明方法,对比现有技术,在一定的时间上能够避免信息冗余,同时在一定窗口下对注意力进行分配。
附图说明
图1为本发明提出的全局注意力机制;
图2为本发明提出的局部注意力机制;
图3为本发明训练和生成样本的各个程序部分示意图;
图4为本发明主要训练过程流程图;
图5为本发明的预测结果三维重建的主要过程图;
图6为本发明在“讨论”动作下的全局注意力模型的预测效果图;
图7为本发明在“讨论”动作下的局部注意力模型的预测效果图;
图8为在“讨论”动作下的seq2seq模型的预测效果图;
图9为在“讨论”动作下的原动作后续真实动作图;
图10为本发明的全局注意力模型与以前存在的三种方法在欧拉角误差上的对比图;
图11为本发明的局部注意力模型与以前存在的三种方法在欧拉角误差上的对比图。
具体实施方式
下面结合附图和实施例对本发明方法进行详细说明。
实施例
一种基于注意力机制的人体动作预测方法,选取tensorflow搭建用于动作预测的注意力模型,包括以下步骤:
步骤1:根据指令,从数据集中读取全部数据。比如“吃东西”,则遍历所有的文件夹,按照文件读取。本实施例中,使用数据集为human3.6m数据集,因此读取到的数据每一帧分为99个float型数值,分别为一个跟节点的位置信息数据(三维)和32个部位的指数映射旋转角。
步骤2:将数据进行标准化。首先,将得到的全部数据按照每一列求出标准差,将标准差为0的数据剔除,得到所有标准差不为0的列,将每一行的每一个值减去它所在列的均值,再除以此列的标准差得到标准化后的数据aij,其公式如下:
步骤3:根据指令中需要进行训练的帧的长度,按照生成的随机数进行训练数据批次的读取。每一个批次有8组训练数据,每一组训练数据按照需要输入和输出的动作帧数进行生成。生成方法是生成随机数,随机数小于总帧数n减去输入和输出的帧数之和m后得到的差值,根据随机数向后取得输入数据和输出参照数据。
步骤4:将步骤三获得到的数据按照批次输入到注意力模型中进行数据处理。处理方法包括两种:
第一种方式,采用全局注意力机制模型进行处理,方法如下:
首先,当编码器对人体动作数据进行编码后,提取隐藏层信息,由于它是一维数据,对其进行维度扩展,使其和编码器的输出进行串联。
然后,对串联后的数据按照序列的数量进行求和,由此被压缩成一维的数据,对信息进行整合处理。
之后,对整合处理后的数据进行复制,使其序列长度大小为解码器的数据输入长度,再与解码器数据进行串联,线性变换成为与解码器输入维度相同的矩阵。
然后,让解码器的输入加上线性变换后的矩阵向量按行求和,进行softmax处理,得到的值加上解码输入数据。
最后,将处理后的矩阵向量输入到解码器,得到输出结果。其中,全局注意力的信息整合和处理的整合方式公式如下:
uit=tanh(wwhit+bw)
si=∑taithit
其中,uit是从隐藏层中获取到的通过线性变换后的信息,ww表示线性变换的权重,hit表示隐藏层的矩阵信息,bw表示线性变换的偏置,i表示矩阵的第i行,t表示矩阵的第t列。通过对uit进行softmax处理后得到数值ait,再与隐藏层按列求和得到需要被输入的注意力信息si,最后将si和解码时得到的序列帧一同放入解码器进行下一帧的生成。
第二种方式,采用局部注意力机制模型进行处理,方法如下:
首先,将人体动作数据依次输入到编码器进行编码,得到编码器输出,以及其隐藏层编码后的状态。
然后,将隐藏层信息进行复制与编码序列长度数量一致,并与其进行串联,通过线性变换得到大小与编码序列相同的矩阵attention。
记解码序列长度为d1,编码序列长度为el,n=d1/e1,。当第i帧解码时,选择attention矩阵的第
最后,解码得到输出结果,并将结果置入下一步计算,直到达到要求的解码序列数量。
步骤5、如果需要进行训练,则将步骤四输出的数据与输入的后续数据求得均方差,再加和作为损失值进行反向传播,反向传播通过随机梯度下降的方法进行。如果不需要进行训练,则生成样本,同样将得到的批次数据输入到注意力模型中,得到输出结果,将输出的数据进行去标准化处理,即通过步骤二得到的标准化后的标准差和均值以及进行相应的去标准化计算,最后得到相应的输出结果,即一定帧数的动作数据。
图3是训练的各个部分组成示意图。整个实验通过python和tensorflow实现,实验代码主要分为三个部分,分别为主训练模块,注意力模型模块,以及效果可视化模块。其中,主要训练模块包括了训练过程和生成样本过程,注意力模型模块主要包含了注意力模型类,通过实例化这样的类,可以得到被训练的参数,以及通过此对象可以调用的函数,其中可以调用的函数包括了获取训练批次函数、以及单步训练函数,由于训练的模型即本发明提出的注意力机制。可视化模块包含了读取训练参数,生成样本数据的对比图,以及对生成的数据进行三维重建可视化等三个功能,这一部分模块的主要构架如图所示。
步骤6:将得到的动作数据写入到文件中,通过动作重建模块将数据进行动作重建。动作重建的流程如图5所示。
图5描述的是利用python进行三维重建的主要过程,主要是通过调用该模块实现实验结果的三维展示。其中,获取骨骼之间的关联信息是得到数据集提供的骨骼父子关系,基于这样的骨骼之间的关系,才能够通过骨骼的旋转角度来计算骨骼关节点的坐标信息,其中计算骨骼关节点之间的坐标需要用到相应的指数映射到旋转矩阵的函数。进行三维绘制具体是通过python的matplotlib库逐帧进行图像的现实实现的。
至此,就完成了基于注意力机制的动作预测的整个过程。图6-图9所示为“讨论”动作下的三种模型的预测效果对比,分别全局注意力机制模型和局部注意力机制模型、不带注意力机制的seq2seq模型和原本动作。从“讨论”动作这一动作幅度比较大的动作中可以看到,在开始预测之后的动作中,注意力模型预测到的动作更加接近与原动作。
图10、图11展示了两种注意力分别的与以前存在的三种方法在欧拉角误差上的对比,图10为全局注意力模型和其他方法的欧拉角误差比较,图11为局部注意力模型和其他方法的欧拉角误差比较,可以看到局部注意力能够改善全局注意力信息冗余的情况,其中欧拉角误差的计算方式是通过如下公式进行:
其中,realyz为真实数据第y帧的第z列的值,predictyz为预测数据第y帧第z列的值,errory即第y帧的损失值。