基于Openpose的三维人体姿态比对
2021-06-19苏志同张小桥
苏志同,张小桥
(北方工业大学 信息学院,北京 100144)
0 引言
随着计算机在我们生活中发挥着越来越重要的作用,单目图像估计三维人体姿态成为计算机视觉中的一个重要课题[1]。随着深度学习的发展,用深度神经网络解决三维人体姿态估计问题的技术也发展的越发成熟。
关于人体姿态的动作捕捉,存在很多种方法,第一种是带有传感器的关节、刚性连杆的及机械式运动捕捉;第二种是利用声波发生和接受器的声学式涌动捕捉;第三种是利用电磁发生和感应的电磁式运动捕捉;第四种是利用标记点和摄像机的光学是运动捕捉;第五种是基于视频的运动捕捉[2]。本文利用的是第五种中基于单目摄像头进行的动作捕捉,目前也有双目摄像头的研究[3],但有架设成本高、调试时间长的缺点。而单目摄像头获取容易,在笔记本电脑上的摄像头就能轻松实现。
伴随神经网络技术的逐步发展和完善,利用深度学习来获得人体骨骼姿态成为一种趋势。本文在通过 Openpose获得骨骼数据的基础上进行姿态对比,能够在为动作学习需求学员提供一定的动作方面的知道。在动作教学发展方面具有一定的意义。在二维数据对三维数据进行了转化,随后用卡尔曼滤波对数据进行降噪。通过预先输入教练动作的数据,以此骨骼数据为标准动作数据,然后再输入学员的动作数据,通过余弦相似度和欧式距离来判断和标准动作的差距,并给出每个骨骼数据的分数。
1 Openpose简介
近年来,通过深度卷积神经网络识别人体姿态的相关研究取得了较大的进展。在 2012年,AlexNet[4]的出现,使神经网络在识别图像上达到了较高的准确率。
图1 AlexNet的网络结构Fig.1 The network structure of alexnet
2015年,把人体姿态估计当做检测问题,输出热图,这样能进一步提高图像识别的准确率。2016年,CPM采用了级联网络,从而能进行像素级别的图像分割[5],这也是Openpose的前身。
Openpose是在CNN基础上进行改进的,在监督学习的对人体姿态进行检测,由图可见,输入一幅图像,经过VGG19[6]卷积网络提取特征,得到特征图F,之后分成两路,分别使用CNN网络提取Part Confidence Maps和 Part Affinity Fields,采用大卷积核来获得大的感受野,网络架构如图2。
图2 Ope npose的网络外部结构Fig.2 The external network structure of openpose
2 BVH 格式转化
比较常见的骨骼数据格式有 BVH、BVA、HTR、ASF/AMC等,本文采用BVH作为动捕的数据。
BVH(Biovision Hierarchy)是由 Biovision公司开发,用以描述动作捕获的数据文件格式[7]。这种文件是以文本形式存储的,可以存储骨骼的动作信息,便于开发。所以本文选择这类格式作为载体来传递骨骼的信息[8]。从openpose中获得的数据,获取到的的数据转化为BVH格式的文件[9]。
获得的骨骼数据分别为[hips, head, neck, chest,rightCollar, leftCollar, rightUpArm, leftUpArm,rightLowArm, leftLowArm, rightUpLeg, leftUpLeg,rightLowLeg, leftLowLeg, rightFoot, leftFoot]openpose里没有hips,取openpose数据里8和11两点连线的中点为 hips的坐标数据[10]。图3为BVH格式的示意图。
图3 BVH 骨骼示意图Fig.3 BVH skeleton diagram
表1 BVH 结构示意图Tab.1 BVH structure diagram
3 卡尔曼滤波算法进行数据预处理
卡尔曼滤波(Kalman filter)是一种高效率的递归滤波器,能在一系列的不完全及包含噪声的测量中,估计动态系统的状态[11]。卡尔曼滤波是有着广泛的应用,比如:自动驾驶仪,动态定位系统,经济学,惯性导航系统,雷达跟踪器,卫星导航系统。就连阿波罗飞船的导航电脑也是使用了这种滤波器。
卡尔曼滤波适合连续变化的系统,而且整个算法占用的系统内存较小,所以特别适用于实现现在的人体姿态识别。
卡尔曼滤波有两种方法,分别是直接法滤波和间接法滤波,两个各有优缺点。直接法的系统方程一般都是非线性方程,间接法的系统方程都是线性方程,可以采用基本滤波方程。人体的运动为非线性,这里采用直接法的非线性滤波法。下面是卡尔曼滤波公式。
后验估计Pos3D和先验估计Now3D的关系式如下:
Now3D-X为测量的残差,为预测值和真实值的差异。
K为增益或融合因子,是后验误差协方差的最小化结果,K值的大小决定着最终的估计值是倾向于测量值,还是倾向于预测值,下面为K值的求法。
R和Q的基本是固定的,这里本文定的是Q=0.001R=0.0015
式中:disti,j代表两个关键点在世界坐标系下的距离,xi、yi、zi分别表示教练动作的一个点的x轴、y轴、z轴坐标数据,xj、yj、zj分别表示学员动作的相对应点的x轴、y轴、z轴坐标数据。通过这两个点坐标距离的计算,可以得知学员的动作和教练的动作相差多少。
但这种欧式距离的方法有局限性。首先,需要对齐坐标系,但人体与世界坐标的相对位置和旋转角不同,需要进行对齐,移动学员的根骨骼使其三维坐标和教练的相同。人与人之间的骨骼有大小的差异,同时还需要先进行缩放,缩放的比例是根据 chest到hips的比值,缩放后使两个根节点的hips相互重合,然后再一次对比其他骨骼节点。
式中:cosSimilarityi,j代表两格向量的余弦值,其值范围是[–1,1],所以用式(4)使其取值在[0,1]之间。vi表示教练骨骼的向量,vj表示学员骨骼的向量。通过这两个点坐标距离的计算得出的结果,从得出的数值可以得知学员的动作和教练的动作相差多少。
式(7)是归一化处理:
式(8)中:H代表最终得分,disti,j代表两个关键点在世界坐标系下的距离,cosSimilarityi,j代表两格向量的余弦值,W1表示欧式距离分数的权重,W2表示余弦向量分数的权重。通过分数大小可以得知学员的动作和教练的动作相差多少。
4 实验结果分析
对实验可变数据进行变更,观察结果预期得出的结果和已有的数据相差多少准确率。
整体的实验结果流程图如表2所示。
表2 欧式距离与余弦向量方法不同权重下的准确率Tab.2 The accuracy of Euclidean distance and cosine vector method under different weights
从实验结果可知,过于依赖欧氏距离方法获得的分数,或者过于依赖余弦向量获得的分数,都会使得结果的准确率有所下降。可以通过分析欧式距离和余弦向量方法的优缺点来验证实验结果的正确性。
通过欧式距离获得的对比数据,是根据两组骨骼数据每个点的对比。欧式距离方式的优点,能够较为准确的对比出每个重要骨骼关节的位置,尤其的是末尾的关节点,当对比的关节点,说明学员的姿势肯定存在不正确的地方,这会在之后的得分中体现。当出现一种这种情况时,学员的肘关节在教练,学员的手臂和教练的手臂姿势呈X形状。这时候手腕和手肘关节离教练的距离都不远,但是动作却相差很大,说明欧式距离方法不能有效检测出特殊情况。
通过余弦向量分析的结果目的在于许愿,其优势是弥补欧氏距离在特殊情况下检测能力的不足。余弦向量能够有效的检测出,能够有效的弥补欧氏距离方法所带来的误差。但余弦向量的缺点也很明显,由于不能确定每个点,只能通过两组骨骼方向朝向夹角来判定,当遇到上两组骨骼所在的平面与下两组骨骼所形成的平面成垂直时,就可能会出现这样的情况,学员胳膊肘朝内,教练胳膊肘朝外,而余弦向量方法无法指出这样的错误。而且,由于蝴蝶效应,每组关节都偏移一定的角度,会导致学员和教练在末尾关节点的有很大的偏差,这就需要欧式距离方法作为弥补。
所以得出的结论是:两种方法忽悠优劣,互相弥补。从而得出较为准确的人体姿态对比。
图4 实验流程图Fig.4 Experiment flow chart
通过以上公式,导入输出的结果如图5所示。
图5 实验结果图Fig.5 Diagram of experimental results
图6输出的结果为
图6 学员与专业运动员姿势对比截图Fig.6 The students and professional athletes are just screenshots
5 结论
本文在已有openpose人体姿态识别网络的基础上,将获得的二维关节点的骨骼数据的三维姿态的重建,利用卡尔曼滤波进行降噪,并利用余弦向量和欧式距离,对学员的动作与标准动作进行对比,根据所得到的分数判断的该学员的准确率。现有的研究是通过视频中的单帧图像进行对比,后续可以通过硬件技术的发展,使此方法能在普通的设备下进行较为流畅的动作姿态比对。