论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

这篇论文是作者在 CVPR 2017发的论文 https://arxiv.org/abs/1611.08050的基础上进行了改进。
GitHub主页:https://github.com/CMU-Perceptual-Computing-Lab/openpose
Links to the papers : https://arxiv.org/abs/1812.08008
————————————————————————————————————————————————————————————

openpose

越来越多的计算机视觉和机器学习应用需要二维人体姿态估计作为系统输入。为了顺利开展这样的工作,作者发布了OpenPose,
这是第一个在单个图像上联合检测人体、脚、手和面部关键点(总共135个关键点)的实时多人系统。整个系统的示例如下图。
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
openpose由3个不同的块组成:
(a)body+foot detection(最核心的)
(b) hand detection
(c)face detection
—————————————————————————————————————————————————————————————

目标:
在这篇论文里,我们想要做的工作是从视频里或图像中得到人体的二维姿态估计。也可以说是 关键点或者体块的定位问题。

多人姿态估计的挑战:
1、每张图像中的人数未知,这些人可能以任何比例、在任何位置出现。
2、人与人之间的干扰,比如说遮挡什么的,都不利于分辨体块之间的关系。
3、随着人数的增加,运行时间复杂度随之增加。

方法:
做姿态估计一般有两种方法
1、top-down:(自上而下)
先检测人,再回归关键点。
2、down-top:(自底向上)
由关键点的位置得到骨架。
本文用的就是第二种自底向上的方法。

新的贡献:
1、与之前那篇文章相比,增加了网络的深度,对PAF和热图的估计是在两个阶段完成的,减少了计算量。
之前的网络:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
本文的网络:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
2、提供了一个带标签的足部的数据集。
3、我们的方法还可以用在别的地方,比如说车辆的关键点检测。
4、发布了openpose这个开源库。

—————————————————————————————————————————————————————————————

我们的方法:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
输入一张w*h的图像(a),经过两个分支,分别得到PAFs©和confidence maps(b)。然后就变成了解决图匹配的问题(d),最后得到人的姿势(e)。
—————————————————————————————————————————————————————————————
网络结构:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
上图是我们的网络结构,迭代预测了PAFs和confidence maps。
第一阶段预测的是PAFs,用Lt来表示;第二阶段预测的是confidence maps,用St来表示。
之前是7×7的卷积核,现在换成了3个连续的3×3的卷积核,并且将三个核的每个输出都连起来。

**第一阶段:**网络生成的是一组PAFs。
当t=1时,它的输入时特征F,其中φ1是stage1的CNN。
在后续阶段中,将前一阶段的预测和原始图像特征连接起来,作为新一阶段的输入。其中,φt是t阶段的CNN,Tp是总的PAF阶段数。
直观上说,从PAF的输出我们可以猜出身体部分的位置,但不知道这个是哪一个人的。
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
图中说明了各个阶段的PAFs,圈出来的是三个人的右侧小臂。随着迭代次数的增加,身体的左右和四肢显示的越来越清楚。

**第二阶段:**网络生成的是一组confidence maps。
在Tp次迭代后,以最新的PAF预测开始,对置信图检测重复迭代过程。
这一阶段的结果是在最新和最精确的PAF的基础上预测的,因此每个预测阶段的结果几乎没有明显的差异。

**损失函数:**为了指导网络迭代预测,我们在每个阶段的最后加了一个损失函数。使用L2损失。
1、PAF分支在ti阶段的损失,其中C表示一个肢体有C个向量场
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
2、confidence maps的损失,其中J表示的是一个身体部位有J个图
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
这里带*号的值都是真值,w是一个二进制掩码,当像素点 p缺少注释时,wp为0。mask是用来避免在训练中惩罚真的正确预测。

论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

—————————————————————————————————————————————————————————————
计算S*的方法:
从标注的二维关键点生成了groundtruth confidence maps。每个confidence map都是一个2D表示。理想情况下,当图像中只有一个人,一个关键点可见,那么对应的confidence map就有一个峰值;当有多个人时,对于每个人k的每一个可见关键点j在对应的confidence map中都会有一个峰值。
首先给出每一个人k的单个confidence maps:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
其中,x代表人k的关键点j对应的真值位置。
—————————————————————————————————————————————————————————————
PAFs:(Part Affinity Fields)人体关键点亲和场
给定一组关键点,将它们组装成未知数量人的全身的姿势。(a)
用一个置信方法来确定每对关键点之间的连接,即它们是属于同一个人的。
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
方法1:(b)
找到每对关键点的中间点,然后检查中间点是真正中间点的概率。但通过中间点可能得出错误的连接线。
原因有两个:只编码了位置信息,而没有方向;身体的支撑区域已缩小到了一个点。
方法2:©
解决了上面的问题。提出了PAFs的特征表示来保存身体支撑区域的位置信息和方向信息。
对于每个躯干来说,PAF是一个2D向量区域。在属于一个躯干上的每一个像素都对应一个2D向量,这个向量表示躯干上一个关键点到另一个关键点的方向。特别地,对两个候选部分位置,我们沿着线段对预测部分的亲和域进行采样,来测量它们联系的置信度。

考虑一个躯干(手臂):
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
其中j1和j2是关键点的符号,x是关键点对应的真实像素点。
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
如果一个像素点p在这个躯干上,值表示的是一个从关键点j1到j2的单位向量。对于不在躯干上的关键点,对应的是零向量。
属于此躯干的像素点满足条件:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
整张图像的PAF真值取图像中所有人对应的PAF的均值:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
其中,n为k个人在像素点p对应的非零向量的个数。
预测时,用候选关键点对之间的PAF衡量这个关键点对是否属于同一个人。
对于两个候选关键点j1和j2对应的像素点dj1和dj2,计算这个PAF:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
—————————————————————————————————————————————————————————————
利用PAFs解析多个人:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
我们对检测热图进行非极大抑制,获得一组离散的身体部位候选点。需要找到的是真正连接肢体的点对。
由于图中有多人,对于每种关键点,有若干候选边,因此有很多可能的肢体,就像第二幅图那样。
可以通过计算PAF上的线积分评估每一个候选肢体。找到最优肢体是一个NP问题,在本文中使用一个贪心松弛策略(匈牙利算法),使得每次都能产生高质量的匹配。
首先,得到一系列候选关键点(整张图有多个人),记为Dj。这些候选关键点需要跟同一个人的其他关键点进行关联,找到关键点的成对关系,即肢体。定义变量zmn={0或1}表示候选关键点和是否关联。算法目标:找到所有最佳关联,记为Z。

考虑一对关键点j1,j2(例如脖子,右臀)组成肢体c,找到最佳匹配,这是最大权重二分图匹配问题:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
其中节点Dj是候选集,边的权值由E计算,二分图匹配选择最大权重的边,下面的公式约束没有多边共享节点的情况。

两个松弛:
本文,我们加了两个松弛来进行优化:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
首先,选用最少的边来或得一个人的骨架,而不是使用完整的图。©
然后,将匹配问题分解成一组二部匹配的子问题,独立地确定点的匹配。(d)

有了这两个松弛,优化就可以简单地分解为:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
—————————————————————————————————————————————————————————————
足部关键点的检测:
现有的人体姿势数据集包含的身体部位类型是非常有限的。对于关键点的检测最多到脚踝的位置。
然而,在应用当中,重定位目标或三维人体形状重建都需要脚的关键点。如果没有脚的信息,这些方法会遇到一些问题。
我们考虑了脚关键点的三维坐标,而不是表面位置。
例如,对于准确的脚趾位置,我们标记了指甲和皮肤连接之间的区域,并通过标记脚趾的中心而不是表面来考虑深度。
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
足部关键点检测可以帮助网络更准确地预测一些身体关键点,特别是腿部关键点,如脚踝位置。
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
—————————————————————————————————————————————————————————————
结果:
Results on the MPII Multi-Person Dataset
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
不同骨架结构的比较结果:
论文学习笔记:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields