motionAI:实时动作捕捉Xnect

Xsens动作捕捉 2022-10-07 27577

Xnect

自底向上的方法

核心的点:

1、输出的是joint angles,而不是joint positions;

2、分三步,第一步输出2D position 的置信map和3D pose连接的编码,第二步是2D position和3D pose连接编码输出3D joint position;第三步通过fitting网络输出3D joint angles

3、性能消耗卡在第一步,所以第一步进行了模型加速的处理,selecSLS Net

这个模型的核心是:对短距离和长距离连接-跳过连接的选择性;对每个目标不用分开的bouding box tracking;

4、第三步就是一个3D和2D的fit网络,来优化3D的angles预测

有一个细节:

In our case, though there are no 2D predictions for foot tip, the 3D pose encoding for ankle encodes information about the foot tip, which is used in Stage II to produce 3D predictions for foot tips.

2D关键点虽然没有脚尖,但是3D pose编码的时候脚踝的信息会有关于脚尖的信息,因此预测的时候会输出脚尖的预测信息;

这个细节很关键,这是只有真正深入做了实时动作迁移才能理解到的难点;文章的思路和大家常用的方法类似,但是他用一个小网络解决了,而不是通过增加2D关键点,是一个比较折中的方法;

5、如何做 id tracking 和re-id?用的非常传统的方法和部分规则比如姿态的相似性等;

6、Relative Bone Length and Absolute Height Calculation

Relative bone length between body parts is a scale-invariant property that is readily estimated by P 3D k in Stage II. To increase robustness, we take the normalized skeleton bone lengthsbk as the distance between linked joints in P 3D k averaged across the first 10 frames.

7、Kinematic Skeleton Fitting

motionAI:实时动作捕捉Xnect  第1张


Our pose formulation uses two deep neural network stages that perform local (per body joint) and global (all body joints) reasoning, respectively. Stage I is fully convolutional and jointly reasons about the 2D and 3D pose for all the subjects in the scene at once, which ensures that the computational cost does not increase with the number of individuals. Since Stage I handles the already complex task of parsing the image for body parts, as well as associating the body parts to identities, our key insight with regards to the pose formulation is to have Stage I only consider body joints for which direct image evidence is available, i.e., joints that are themselves visible or their kinematic parents are visible. This way Stage I does not have to spend representational capacity in hallucinating poses for joints that have no supporting image evidence. For each visible body joint, we predict the 2D part confidence maps, information for associating parts to an individual, and an intermediate 3D pose encoding for the bones that connect at the joint. Thus, the 3D pose encoding is only cognizant of the joint’s immediate neighbours (local) in the kinematic chain.



看到这里,其实需要补一补以前的一些知识:

人体骨架是以图形形式对一个人的方位所进行的描述。本质上,骨架是一组坐标点,可以连接起来以描述该人的位姿。骨架中的每一个坐标点称为一个“部分(part)”(或关节、关键点)。两个部分之间的有效连接称为一个“对(pair)“(或肢体)。注意,不是所有的部分之间的两两连接都能组成有效肢体。下图是一个典型的人体骨架举例。


motionAI:实时动作捕捉Xnect  第2张


人体姿态估计有多个应用场景,其中一些应用将在本博客的最后讨论。多年来,人们发展出了多种人体姿态估计算法。最早(也是最慢)的方法通常针对图像中仅有一个人的情景,只估计单个人的姿态。这些方法通常首先识别出各个部分,然后在它们之间形成连接以创建姿态。

自然,这种单人姿态估计不太适用于很多现实生活中的情形,因为在真实情况下往往图像中包含很多个人。

多人姿态估计

多人姿态估计比单人姿态估计要难一些,因为图像中的人数以及每个人的位置是未知的。一般来说,我们可以用以下两种方法之一来解决这些问题:

  • 比较简单的方法是先使用一个人体检测器,然后再估计检测器检出的每个人的关节,进而恢复每个人的姿态。这种方法被称为自顶向下的方法。
  • 另外一种方法是先检测出一幅图像中的所有关节(即每个人的关节),然后将检出的关节连接 / 分组,从而找出属于各个人的关节。这种方法叫做自底向上方法。


motionAI:实时动作捕捉Xnect  第3张


一般情况下,自顶向下的方法比自底向上的方法更容易实现,因为添加检测算法比增加连接 / 分组算法要简单得多。很难去评判这两种方法哪种的整体性能更好,因为这种性能比较的本质是在比较人体检测器和连接 / 分组算法哪个更好(实际上是没有可比性的)。

在本文中,我们主要介绍基于深度学习算法的多人人体姿态估计。在下一节中,我们将介绍一些当前比较流行的自顶向下和自底向上方法。

深度学习方法

1. OpenPose

OpenPose(https://arxiv.org/pdf/1812.08008.pdf)是当前最流行的几种多人人体姿态估计算法之一。OpenPose 大获成功的一部分原因是它在 GitHub 上开源了其实现代码(https://github.com/CMU-Perceptual-Computing-Lab/openpose),并配有详细的说明文档。

和很多自底向上的方法一样,OpenPose 首先检测出图像中所有人的关节(关键点),然后将检出的关键点分配给每个对应的人。下图展示了 OpenPose 模型的架构。


motionAI:实时动作捕捉Xnect  第4张


OpenPose 网络首先使用前面的几个网络层(在上面的流程图中使用的是 VGG-19),从图像中提取特征。接下来,这些特征被传给两个平行的卷积层分支。第一个分支用来预测 18 个置信图,每个图代表人体骨架中的一个关节。第二个分支预测一个集合,该集合中包含 38 个关节仿射场(Part Affinity Fields,PAFs),描述各关节之间的连接程度。


motionAI:实时动作捕捉Xnect  第5张


接着,OpenPose 用一连串的步骤来优化每个分支的预测值。使用关节置信图,可以在每个关节对之间形成二分图(如上图所示)。使用 PAF 值,二分图里较弱的连接被删除。通过上述步骤,可以检出图中所有人的人体姿态骨架,并将其分配给正确的人。针对该算法更详细的解释,请参考其论文:

https://arxiv.org/pdf/1812.08008.pdf

和这篇博客:

https://arvrjourney.com/human-pose-estimation-using-openpose-with-tensorflow-part-2-e78ab9104fc8。

2. DeepCut

DeepCut(https://arxiv.org/abs/1511.06645)是一个自底向上的多人人体姿态估计方法。针对人体姿态估计任务,作者定义了以下问题:

  1. 生成一个由 D 个关节候选项组成的候选集合。该集合代表了图像中所有人的所有关节的可能位置。在上述关节候选集中选取一个子集。
  2. 为每个被选取的人体关节添加一个标签。标签是 C 个关节类中的一个。每个关节类代表一种关节,如“胳膊”“腿”“躯干”等。
  3. 将被标记的关节划分给每个对应的人。


motionAI:实时动作捕捉Xnect  第6张


上述几个问题可以被建模为整数线性规划问题(ILP,链接:https://en.wikipedia.org/wiki/Integer_programming),从而被一起解决。考虑二值随机变量的三元组 (x,y,z),其中的二值变量的域如下图所示:


motionAI:实时动作捕捉Xnect  第7张


考虑候选集 D 中的两个候选关节 d 和 d’,以及类别集 C 中的两个类 c 和 c’。关节候选项是通过 Faster RCNN(https://arxiv.org/abs/1506.01497)或稠密 CNN 获得的。现在,我们有下述声明:

  • 如果 x(d,c) = 1,代表候选关节 d 属于类别 c。
  • 同样,x(d,d’) = 1 代表候选关节 d 和 d’属于同一人。
  • 作者还定义了 z(d,d’,c,c’) = x(d,c) * y(d,d’)。如果上式值为 1,则代表候选关节 d 属于类别 c,候选关节 d’属于类别 c’,且候选关节 d 和 d’属于同一人。

最后一个声明可以用于划分不同人的姿态。显然,上述声明可以表示成关于 (x,y,z) 的线性方程组。这样一来,整数线性规划(ILP)的模型就建立好了,多人姿态估计就可以化为解这组线性方程的问题。想要了解线性方程组的具体形式和更详细的分析,请参见原论文(链接:https://arxiv.org/pdf/1511.06645.pdf)。

3. RMPE(AlphaPose)

RMPE(https://arxiv.org/abs/1612.00137)是一个流行的自顶向下姿态估计算法。该论文的作者认为,自顶向下方法的性能通常依赖于人体检测器的精度,毕竟人体姿态估计是在检测器检出的框的区域内进行的。因此,错误的定位和重复的候选框会使姿态检测算法的性能降低。


motionAI:实时动作捕捉Xnect  第8张


为解决这一问题,作者提出了使用对称空间变换网络(Symmetric Spatial Transformer Network,SSTN)来从不准确的候选框中抽取高质量的单人区域。然后,作者使用了一个单人的姿态估计器(Single Person Pose Estimator,SPPE)来从抽取到的区域中估计此人的姿态骨架。接着,作者用一个空间逆变换网络(Spatial De-Transformer Network,SDTN),将估计出的姿态重新映射到图像坐标系下。最后,用一个参数化的姿态非极大抑制(Non-Maximum Suppression,NMS)方法来处理重复预测的问题。

另外,作者还引入了一种姿态候选生成器(Pose Guided Proposals Generator),来增广训练样本,以便更好地训练 SPPE 和 SSTN 网络。RMPE 的显著特征是,该方法可以推广到任意的人体检测算法和 SSPE 的组合。

4. Mask RCNN

Mask RCNN(https://arxiv.org/abs/1703.06870)是一个非常流行的语义和实例分割架构。该模型可以同时预测图像中多个物体的候选框位置及分割其语义信息的 mask。该模型的基础架构很容易被扩展到人体姿态估计上来。

motionAI:实时动作捕捉Xnect  第9张


其基本架构首先使用 CNN 从图像中提取特征图。这些特征接着被用于一个区域候选网络(Regin Proposal Network, RPN)来为各个对象生成候选框。候选框会从 CNN 提取出的特征图中选取一个区域。由于候选框可能会有多种尺寸,网络接下来会采用一个层,称为 RoIAlign,用来减小特征图的尺寸,使它们具有相同的尺寸。现在,抽取出的特征被传给平行的 CNN 分支,用来输出候选框和分割 mask 的最终预测。

我们现在主要关注一下分割的分支。假设我们图像中的对象可以属于 K 个类别中的一个。分割分支输出 K 个尺寸为 m*m 的二值 mask,每个二值 mask 代表只属于该类别的所有对象。我们可以将每种特征点建模为一个类别,然后将姿态估计任务看作一个分割任务,从而提取图像中每个人的特征点。

与此同时,可以训练一个对象检测算法来确定每个人的位置。通过组合每个人的位置信息和他们的特征点集合,我们可以得到图像中每个人的人体骨架。

该方法和自顶向下方法比较类似,但不同的是,其人体检测步骤和关键点检测步骤是同时进行的。换句话说,人体检测步骤和关键点检测步骤是相互独立的。

5. 其他方法

多人人体姿态估计是一个很大的问题,有许多其他方法。限于篇幅,我们只选择了其中的几种方法在本文中加以介绍。如需要获取更详尽的方法列表,请参见以下链接:

The End