基于OpenPose的角色动作提取
2020-04-09张腾
张腾
摘 要:文章利用基于OpenPose的人体姿态识别算法,将动画或者视频中的人物动作进行处理,实现对角色运动数据的捕获;采用基于运动捕捉数据的关键帧提取算法来获取角色运动的关键帧。实验结果表明,该方法具较高的识别准确率,并且能够提取出对原动画或视频具有概括力的关键帧。
关键词:OpenPose;动作捕获;姿态识别;关键帧提取;机器学习
人工智能时代的浪潮席卷了人们的生活,各种机器学习算法逐渐融入各行各业当中,给各个领域注入新的活力。其中,随着人体姿态估计研究的发展,日益成熟的运动捕捉技术被广泛应用到了游戏开发、影视制作等多个领域。由于动作捕捉技术相较于传统的手动设置关键帧而带来的便利性以及动作捕捉数据更高的逼真性,引起了三维动画制作的巨大变革。但目前已有的动作捕捉技术对硬件设备、场地要求较高,依然存在一定的局限性,同时捕捉到的原始数据十分庞大而且缺乏结构化信息,使得编辑产生了较大的难度。与之相反,在传统的动画制作中,动画师手动设置关键帧,并通过在关键帧中插值,从而产生连续动画,但缺陷在于手动设置关键帧的效率低下,并且需要动画师具有一定的从业经验和技术水平,门槛较高。因此,将人体姿态估计技术与传统的关键帧提取相结合,或许能有更好的发展前景。为实现这个想法,本文采用国外卡内基梅隆大学开源项目OpenPose,对运动视频源进行分析处理,提取出角色动作中的关键帧[1]。
1 姿态估计
OpenPose是美国卡耐基梅隆大学感知计算实验室所研究开发的开源库,可以支持单人和多人情况下对人体、面部、手指等多个部位的姿态估计,获得了广泛的关注。在此之前,识别的思路基本是自上而下,即先判断出人体,再寻找属于该人体的部位,而OpenPose则采用了自底向上的方法,先将所有的关节点回归出来,再通过部分仿射场(Part Affine Field,PAF)划分给每个人。本文利用OpenPose能有效解决图像存在部分遮挡以及复杂背景的优良特性,提取出运动视频源中的角色动作动画,从而获得后续提取角色动作的素材[2]。
Openpose算法的整体流程:先通过10层VGG19网络提取出输入的图片的特征,并将所获得的特征图放入两个卷积神经网络中进行计算,分别预测每个关键点的置信度和亲和度向量,得到包含置信度的热图和包含亲和字段的热图,然后根据图论中的二分匹配实现关键点的聚类,由于PAF的矢量性保证了生成二分匹配的正确性,最终将同一个人的关节点拼合,合并成一个整体框架。
2 关键帧提取算法
由于本实验中Openpose的采样率较高,会产生大量数据,其中也包含不少无效数据,从而增加了对数据进行其他处理的复杂程度,因此有必要提取出具有概括性的关键帧来表示原始的角色运动行为,并且能够不失真,同时尽可能筛除原始数据中的冗余数据和无效数据。获取关键帧最简单的做法是等间隔提取,但该方法可能导致对高速运动的欠采样,即关键帧丢失和对低速运动的过采样,即关键帧冗余。因此,根据不同的理论方法和不同的运动特征,更复杂的算法便应运而生。本文将采用不同场景不同算法提取出的关键帧进行运动差值重建,并度量重建误差,通过比较重建误差得出最适合本方法的关键帧提取算法。目前提取关键帧的算法有以下几类[3]:
(1)帧消减方法需要设定一个阈值,根据阈值并且采用一定方法对非关键帧进行消减或者直接对关键帧进行提取。此类方法操作简单,并且由于其中使用了四元数插值重建对原始序列进行还原,从而符合人体关节旋转运动的特点,使得提取的关键帧比较准确。但因为阈值需要提前设定,因此很难确定。并且由于其未考虑到后续关键帧与消减帧之间的关联性,因此也比较容易导致运动边界帧的丢失。
(2)曲线简化方法把每一帧运动数据都当成高维曲线上的一个点,然后根据设定的阈值将曲线上的一些极值点筛选成为关键帧。此类方法将用来提取关键帧的运动特征设置为根关节和四肢骨骼的夹角,大大提高了所提取关键帧的运动概括能力。但因为忽略了速度变化的边界帧,所以使用这种方法可能导致无法还原运动的节奏,并且阈值的大小会严重影响算法的性能。
(3)聚类方法通过设定的阈值对帧间距进行加权,从而对各帧进行聚类,并选取各聚类的首帧为关键帧。此类方法聚类后选出的关键帧具有代表性,但聚类方法得计算复杂度往往较高,很难应用在大规模的数据处理上。
(4)普通最优化方法运用贪心算法,循环消减重建误差最小的帧,直到达指定数目帧为止。此类方法具有贪心算法的特性,因为一直可以求得当前最优解,因此所得关键帧都是根据重建误差曲线保留了具有最大重建误差的帧,因此较准确,但当前最优解并不是一定是全局最优解,在部分情况下最后结果的重建误差并不是最优。此外,相对于其他方法,此类方法不用设置阈值,并且能提取任意帧数的关键帧,但计算复杂度很高,不适合用于帧数多的场景。
(5)智能优化算法是通过种群内部的信息交互机制来改进问题的解。但比较依赖于算法的优劣,若智能算法比较成熟则可以取得不错的结果,但有的算法收敛速度慢或出现抖动现象,就会对结果的稳定性产生影响。
3 实验结果与分析
本文使用Python2.6开发了一个文件格式编辑程序,命名为Zten,其功能为将OpenPose运行时所保存的若干份JSON文件合并成一个BVH文件。实验中所用数据是3段分别包含行走、跳跃、出拳的MP4格式数据文件。实验在一台系統为Ubuntu16.04的PC机上进行。实验中对运动数据使用了多种关键帧提取方法并通过对比重建误差的方法进行比较。
首先使用OpenPose对3段数据文件进行姿态估计,并使用Zten对最终产生的JSON文件进行合并,得到3种运动的动画片段。其中,行走片段260帧,跳跃片段281帧,出拳浦安端324帧。结合实际情况,本研究选择了帧消减方法、曲线简化方法、普通最优化方法对以上3种运动提取了确定的最优关键帧数。所得结果及各关键帧序列的重建误差如表1所示。通过分析可以发现,OpenPose得到的角色动作数据较为冗余,在处理较长视频片段时会产生较多数据,不利于聚类方法和普通最优化方法。另外,通过比较,实验者也得知曲线简化方法在处理OpenPose所产生的数据时相比于使用帧消减方法所产生的数据误差更小。因此,实验者得出OpenPose和曲线简化方法的组合能得到最准确的结果。
4 结语
本文以提取角色动作为研究目标,采用了OpenPose捕捉角色动作,利用曲线简化方法提取关键帧的技术方案,实验结果验证了人体姿态估计与关键帧提取相结合的可行性。基于本文设计的角色动作提取系统能够不依赖于复杂的惯性动作捕捉设备,也能获得足以运用在游戏开发或者影视制作中的角色运动关键帧,从而实现简化了动画制作的制作流程,大量节约了动画制作成本的目的。但是在实际运算中,姿态估计仍对计算机硬件有较高要求,并且对于一次所能评估的人数也有一些制约,针对这一问题将继续对姿态估计的算法框架进行研究。
[参考文献]
[1]徐从洋.运动捕获数据关键帧提取与检索算法研究[D].郑州:郑州大学,2016.
[2]吴铃,侯进,徐芳.BVH文件驱动三维人体动画的实现[J].沈阳理工大学学报,2012(1):52-56.
[3]CAO Z,HIDALGO G,SIMON T, et al.OpenPose:realtime multi-person 2d pose estimation using part affinity fields[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2018(7):76-79.