# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

我们提出了一种高效检测图像中多人二维姿势的方法。该方法使用一种非参数表示法,我们称之为Part Affinity Fields(PAFs),来学习将身体部位与图像中的个人联系起来。该架构对全局上下文进行编码,允许一个贪婪的自下而上的解析步骤,以保持高精度,同时实现实时性能。无论图像中的人数有多少。该架构通过同一顺序预测过程的两个分支来联合学习局部位置及其关联。我们的方法在首届COCO 2016关键点挑战赛中名列第一,并且在MPII多人基准上的性能和效率都大大超过了之前的最先进结果。

1. Introduction

人体二维姿势估计主要任务是寻找个人的身体部位[8,4,3,21,33,13,25,31,6,24]。推断图像中多人的姿势。首先,每张图像可能包含未知数量的人,这些人可能在任何地方且具有任意规模。第二,由于接触、遮挡和肢体衔接,人与人之间的互动会引起复杂的空间干扰,使得部分人的关联变得困难。第三,运行时的复杂度往往随着图像中人的数量而增长,使得实时性能成为挑战。

一个常见的方法[23,9,27,12,19]是采用一个person检测器,并对每个检测进行单人姿势估计。这些自上而下的方法直接利用现有的单人姿势估计技术[17、31、18、28、29、7、30、5、6、20],但却受到早期技术的影响:如果person检测器发生故障(当人与人之间靠的很近时很容易发生这种情况),则无法进行姿态估计。此外,这些自上而下的方法的运行时间与人的数量成正比:对于每一次检测,都要运行一次单人姿势估计器,人越多,计算成本越大。相比之下,自下而上的方法很有吸引力,因为它们提供了鲁棒性,并且有可能将运行时的复杂性与图像中的人数脱钩。然而,自下而上的方法并不直接使用来自其他身体部位和其他人的全局上下文线索。实际上,之前的自下而上方法[22,11]并没有得到效率的提升,因为最终的关键点之间的匹配需要昂贵的全局推理。然而,在一个完全连接的图上求解整数线性编程问题是一个NP-hard问题,平均处理时间在数小时左右。Insafutdinov等人[11]在[22]的基础上,基于ResNet[10]和图像相关的pairwise scores,采用了更强的检测器,极大地提高了运行时间,但该方法每张图像仍需要数分钟的时间。

在本文中,我们提出了一种高效的多人姿势估计方法,在多个公共基准上具有最先进的准确性。我们提出了第一个通过Part Affinity Fields(PAFs)自下而上的关联得分表示,PAFs是一组二维向量场,在图像域上编码肢体的位置和方向。我们证明,同时推断这些自下而上的检测和关联的表示,可以很好地编码全局上下文,让使用贪婪算法的解析获得高质量的结果,而计算成本只是一小部分。我们已经公开发布了完全可复现的代码,提出了第一个用于多人2D姿势检测的实时系统。

2. Method

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

图1:多人姿势估计。顶部:多人姿势估计。属于同一个人的身体部位被连接起来。左下角。连接右肘和右腕的肢体对应的Part Affinity Fields(PAFs)。颜色编码了方向。右下角。预测PAFs的放大视图。在场中的每个像素,一个二维向量编码limbs的位置和方向。

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

图2. 整体pipeline。我们的方法将整个图像作为双分支CNN的输入,以共同预测用于身体部位检测的置信度图,如(b)所示,以及用于part affinity fields,如(c)所示。解析步骤执行一组双支(bipartite)匹配来关联身体部位候选人(d)。最后,我们将它们组合成图像中所有人物的全身姿势(e)。

图2说明了我们方法的整体pipeline。该系统将尺寸为wxh的彩色图像作为输入(图2a),并将图像中每个人的结构关键点的2D位置作为输出(图2e)。首先,网络同时预测一组身体部位位置的二维置信图S(图2b)和一组part affinity的二维向量场L,这些向量场编码了部位之间的关联度(图2c)。集后S=(S1,S2,...,SJ)S = (S_1,S_2,...,S_J)有J个置信度特征图,每个人体部位对应一张图,SjRw×h,j{1...J}S_j\in \mathbb R^{w\times h},j\in\{1...J\}。集后L=(L1,L2,...,LC)L=(L_1,L_2,...,L_C)有C个向量场,one per limb。(为了清楚起见,我们把part pairs称为肢体,尽管有些对不是人类的肢体(如面部))LcRw×h×2,c{1,...,C}\mathbf L_c \in \mathbb R^{w\times h\times2},c\in\{1,...,C\},Lc中的每个图像位置都会编码一个2D向量(如图1所示)。最后,通过贪婪推理(greedy inference)对置信度图和affinity fields进行解析(图2d),输出图像中所有人员的2D关键点。

2.1. Simultaneous Detection and Association

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

图3。两分支多级CNN的架构。每个阶段预的第一个分支中的测置信图StS^t,和每个阶段预的第二个分支中的测置信图PAFs LtL^t。在每一阶段之后,来自两个分支的预测,以及图像特征,将被连接到下一阶段。

我们的架构,如图3所示,同时预测检测置信度图和编码part-to-part association的affinity fields。该网络分为两个分支:米色显示的顶部分支预测置信图,蓝色显示的底部分支预测affinity fields。每个分支都是一个迭代预测的架构,遵循Wei等[31]的观点,在连续的阶段t{1,...,T}t\in\{1,...,T\}中完善预测,每个阶段都有中间监督。首先通过卷积网络(由VGG-19[26]的前10层初始化并进行微调)对图像进行分析,生成一组特征图F,输入到每个分支的第一阶段(first stage)。在第一阶段,网络生成一组检测置信度图S1=ρ1(F)S^1=\rho^1(F)和一组part affinity fields L1=ϕ1(F)\mathbf L^1=\phi^1(\mathbf F)ρ1\rho^1ϕ1\phi^1为第1阶段进行推理的卷积网络。在接下来的每一阶段中,前一阶段两个分支的预测,连同原始图像特征F,被连接起来,用于产生更加精细的预测,

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

ρt\rho^tϕt\phi^t为第t阶段进行推理的卷积网络。

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

图片4. 右手腕的置信度图(第一行)和右前臂的PAFs(第二行)。虽然在早期阶段会出现左右身体部位和肢体的混淆,但通过后期的全局推理,估算越来越精细,如高亮区域所示。

图4显示了各阶段置信度图和PAFs的完善情况。为了引导网络迭代预测第一分支中身体部位的置信度地图和第二分支中的PAF,我们在每个阶段结束时应用两个损失函数,分别在每个分支中应用一个。我们在估计的预测和groundtruth 图和场之间使用L2损失。

在这里,我们从空间上对损失函数进行加权,以解决一个实际问题,即一些数据集并不能完全标记所有的人。具体来说,在t阶段两个分支的损失函数为:

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

SjS^*_j是groundtruth part置信图,LcL^*_c是groundtruth part affinity vector field,W是二进制掩码,当图像位置p缺少标注时,W(p)=0W(p)=0。掩码用于避免在训练过程中对真正的正向预测进行惩罚。每个阶段的中间监督通过定期补充梯度来解决消失梯度问题[31]。总体目标是

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

2.2. Confidence Maps for Part Detection

为了在训练期间评估公式(5)中的fSf_S,我们从注释的2D关键点中生成groundtruth 置信度图SS^*。每个置信度图都是一个二维的表示,表示在每个像素的位置出现了一个特定的身体部位。理想情况下,如果图像中出现一个人,如果对应的部位是可见的,则每个置信图中应该存在一个单一的峰值;如果出现多人,则每个人的每个可见部位j对应的峰值应该存在。

我们首先生成每个人(假设为k)的个体置信度图Sj,kS^*_{j,k}。让xj,kR2\mathbf x_{j,k}\in R^2为图片中第k个人的第j个身体部位的groundtruth。Sj,kS^*_{j,k}中的位置pR2\mathbf p\in R^2定义为:

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

其中σ\sigma控制峰值的扩散范围。网络所要预测的groundtruth置信度图是通过max算子对各个置信度图进行汇总。

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

我们取置信度图的最大值而不是平均值,这样近似峰的精度就会保持不同,如下图所示。在测试时,我们预测置信度图(如图4第一行所示),并通过进行NMS来获得身体部位的候选者。

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

2.3. Part Affinity Fields for Part Association

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

图5.节点关联策略。(a)两种身体部位类型的身体部位检测候选者(红点和蓝点)和所有连接候选者(灰线)。(b)使用中点(黄点)表示的连接结果:正确的连接(黑线)和错误的连接(绿线)都满足incidence constraint。©使用PAFs(黄色箭头)的结果。通过在肢体的支撑上编码位置和方向,PAFs消除了错误关联。

给定一组检测到的身体部位(如图5a中的红点和蓝点所示),我们如何将它们组合成未知人数的全身姿势?我们需要一个对每一对身体关键点检测的关联的置信度,即它们是否属于同一个人。测量关联相似度的一种可能的方法是检测肢体上每一对关键点之间的额外中点,并检查其在候选关键点检测之间的incidence,如图5b所示。然而,当人们挤在一起时–这些中点很可能造成错误的关联(如图5b中的绿线所示)。这种错误匹配的产生是由于表征中的两个局限性。(1) 它只编码每个肢体的位置,而不是方向;(2) 它将the region of support of a limb缩小到一个点。

为了解决这些局限性,我们提出了一种新的特征表示,称为part affinity fields,它保留了整个肢体支撑区域(the region of support of the limb)的位置和方向信息(如图5c所示)。part affinity是每个肢体的二维向量场,也如图1d所示:对于属于特定肢体的区域中的每个像素,一个二维向量编码从肢体的一部分指向另一部分的方向。每种类型的肢体都有一个相应的 affinity fields连接其两个相关的身体部位。

考虑如下图所示的单个手臂。让xj1,k\mathbf x_{j_1,k}xj2,k\mathbf x_{j_2,k}为图像中第k人的肢体c的身体部位j1j_1j2j_2的真实位置。如果点p在手臂上,Lc,k(p)\mathbf L_{c,k}^*(\mathbf p)d 值是j1j_1指向j2j_2的单位向量。对于其他所有点,向量都是零值的。

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

为了在训练过程中评估公式5中的fLf_{\mathbf L},我们将图像点p处的groundtruthpart affinity vector field Lc,k\mathbf L^*_{c,k}定义为:

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

v=(xj2,kxj1,k)/xj2,kxj1,k\mathbf v=(\mathbf x_{j_2,k}-\mathbf x_{j_1,k})/\parallel \mathbf x_{j_2,k}-\mathbf x_{j_1,k}\parallel 为该肢体方向上的单位向量。边缘上的点集定义为与线段距离阈值内的点,即。这些点p

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

其中肢体宽度σl\sigma_l距离的单位是像素,肢体长度为lc,k=xj2,kxj1,kl_{c,k}=\parallel \mathbf x_{j_2,k}-\mathbf x_{j_1,k}\parallelv\mathbf v_{\bot}是垂直于v的向量。groundtruth part affinity field平均图像中所有人的affinity
fields,

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

nc(p)n_c(p)是所有k人在p点的非零向量数(即不同人肢体重叠的像素处的平均值)。在测试过程中,我们通过计算相应PAF上的线积分,沿着线段连接候选肢体位置,测量候选肢体检测之间的关联程度。换句话说,我们测量预测的PAF与候选肢体之间的对齐(通过连接检测到的身体部分而形成的候选肢体)。具体来说,对于两个候选位置(candidate part locations)dj1d_{j_1}dj2d_{j_2},我们沿着线段对预测的part affinity field Lc\mathbf L_c 进行采样,以衡量其关联的可信度。

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

其中,p(u)\mathbf p(u)interpolates两个身体部位dj1d_{j_1}dj2d_{j_2}的位置。

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

在实践中,我们通过对u的均匀间隔值进行采样和求和来近似积分。

##########################

补充:

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

###########################

2.4. MultiPerson Parsing using PAFs

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

图6。图形匹配。(a) 具有关键点检测的原始图像(b)K-关键点分图(c)树结构(d)一组二分图

我们对检测置信度图进行NMS,以获得一组离散的关键点候选位置。对于每个关键点,由于图像中的多人或假阳性,我们可能有几个候选位置(如图6b所示)。这些关键点候选者定义了一大组可能的肢体。我们使用对PAF的线积分计算对每个候选肢体进行评分,定义在公式10中。寻找最优解析的问题对应于一个K维的匹配问题,众所周知,这个问题是NP-Hard[32](如图6c所示)。在本文中,我们提出了一种greedy relaxation,可以持续产生高质量的匹配。我们推测原因是,由于PAF网络的large receptive field,配对的关联分数隐含了全局上下文的编码。

我们首先获得了一组针对多人的身体部位检测候选DJ\mathcal D_{\mathcal J}DJ={djm:forj{1...J},M{1...Nj}}\mathcal D_{\mathcal J}=\{\mathbf d^m_j:for\quad j\in\{1...\mathbf J\},M\in\{1...N_j\}\},其中NjN_j为身体部位候选关键点的数量,djmR2\mathbf d^m_j\in R^2为人体部位 j 的第m个候选检测点的位置。这些身体部位关键点检测候选者仍然需要与来自同一个人的其他身体部位相关联–换句话说,我们需要找到实际上是连接肢体的身体部位检测对。我们定义一个变量zj1j2mn{0,1}z^{mn}_{j_1j_2}\in\{0,1\}来表示两个检测候选位置dj1m\mathbf d^m_{j_1}dj2n\mathbf d^n_{j_2}是否被连接,我们的目标是找到所有可能连接集合的最优分配,Z={zj1j2mn:forj1,j2{1...J},m{1...Nj1},n{1...Nj2}}\mathcal Z=\{z^{mn}_{j_1j_2}:for\quad j_1,j_2\in\{1...J\},m\in\{1...N_{j_1}\},n\in\{1...N_{j_2}\}\}

如果我们考虑第c个肢体部位的一对关键点j1j_1j2j_2(例如,颈部和右臀),寻找最优关联可简化为一个最大权重的二元图匹配问题[32]。这种情况如图5b所示。在这个图匹配问题中,图的节点是身体部位检测候选者Dj1D_{j_1}Dj2D_{j_2},边是所有可能的检测候选者对之间的连接。此外,每条边都由式10-part affinity集合加权。二部图中的匹配是以不存在两条边共享一个节点的方式选择的边的子集。我们的目标是为选定的边找到一个具有最大权重的匹配项,

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

式中,EcE_c是肢体类型c匹配的总重量,Zc\mathcal Z_c是肢体类型c的Z\mathcal Z的子集,EmnE_{mn}是公式10中,两个关键点dj1m\mathbf d^m_{j_1}dj2n\mathbf d^n_{j_2}之间的part affinity。公式13和14强制要求没有两条边共用一个节点,即没有两个相同类型的肢体(如左前臂)共用一个部位。我们可以使用匈牙利算法[14]来获得最优匹配。

当涉及到寻找多人的全身姿势时,确定Z是一个K维的匹配问题。这个问题是NP Hard[32],存在许多relaxations。在这项工作中,我们在优化中增加了两个relaxations,专门针对我们的领域。首先,我们选择最小数量的边来获得人体姿势的生成树骨架,而不是使用完整的图,如图6c所示。其次,我们进一步将匹配问题分解为一组双元匹配子问题,并独立确定相邻树节点中的匹配,如图6d所示。我们在3.1节中展示了详细的对比结果,证明最小贪婪推理能以一小部分计算成本很好地逼近全局解。原因是相邻树节点之间的关系是由PAFs显式建模的,但在内部,非相邻树节点之间的关系是由CNN隐式建模的。这种特性的出现是因为CNN是在 large receptive field下进行训练的,来自非相邻树节点的PAFs也会影响预测的PAF。

有了这两种松弛,优化简单分解为:

# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

CNN隐式建模的。这种特性的出现是因为CNN是在 large receptive field下进行训练的,来自非相邻树节点的PAFs也会影响预测的PAF。

有了这两种松弛,优化简单分解为:

[外链图片转存中…(img-MQoNCpw9-1596683383302)]

因此,我们利用公式12-14独立地得到各肢体类型的肢体连接候选。12- 14. 有了所有的肢体连接候选者,我们可以将具有相同部位检测候选者的连接组装成多人的全身姿势。我们在树形结构上的优化方案比在全连接图上的优化快了几个数量级[22,11]。