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

2023-10-17 01:30

本文主要是介绍# 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

在这里插入图片描述

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

在这里插入图片描述

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

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

2.1. Simultaneous Detection and Association

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

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

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

在这里插入图片描述

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

在这里插入图片描述

2.2. Confidence Maps for Part Detection

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

2.3. Part Affinity Fields for Part Association

在这里插入图片描述

图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连接其两个相关的身体部位。

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

在这里插入图片描述

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

在这里插入图片描述

v = ( x j 2 , k − x j 1 , k ) / ∥ x j 2 , k − x j 1 , 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 v=(xj2,kxj1,k)/xj2,kxj1,k 为该肢体方向上的单位向量。边缘上的点集定义为与线段距离阈值内的点,即。这些点p

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

其中, p ( u ) \mathbf p(u) p(u)interpolates两个身体部位 d j 1 d_{j_1} dj1 d j 2 d_{j_2} dj2的位置。

在这里插入图片描述

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

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

补充:

在这里插入图片描述

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

2.4. MultiPerson Parsing using PAFs

在这里插入图片描述

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

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

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

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

在这里插入图片描述

在这里插入图片描述

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

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

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

在这里插入图片描述

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

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

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

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

这篇关于# Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/222009

相关文章

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

Level3 — PART 3 — 自然语言处理与文本分析

目录 自然语言处理概要 分词与词性标注 N-Gram 分词 分词及词性标注的难点 法则式分词法 全切分 FMM和BMM Bi-direction MM 优缺点 统计式分词法 N-Gram概率模型 HMM概率模型 词性标注(Part-of-Speech Tagging) HMM 文本挖掘概要 信息检索(Information Retrieval) 全文扫描 关键词

MySQL record 02 part

查看已建数据库的基本信息: show CREATE DATABASE mydb; 注意,是DATABASE 不是 DATABASEs, 命令成功执行后,回显的信息有: CREATE DATABASE mydb /*!40100 DEFAULT CHARACTER SET utf8mb3 / /!80016 DEFAULT ENCRYPTION=‘N’ / CREATE DATABASE myd

Matter.js:Web开发者的2D物理引擎

Matter.js:Web开发者的2D物理引擎 前言 在现代网页开发中,交互性和动态效果是提升用户体验的关键因素。 Matter.js,一个专为网页设计的2D物理引擎,为开发者提供了一种简单而强大的方式,来实现复杂的物理交互效果。 无论是模拟重力、碰撞还是复杂的物体运动,Matter.js 都能轻松应对。 本文将带你深入了解 Matter.js ,并提供实际的代码示例,让你一窥其强大功能

Vue3图片上传报错:Required part ‘file‘ is not present.

错误 "Required part 'file' is not present" 通常表明服务器期望在接收到的 multipart/form-data 请求中找到一个名为 file 的部分(即文件字段),但实际上没有找到。这可能是因为以下几个原因: 请求体构建不正确:在发送请求时,可能没有正确地将文件添加到 FormData 对象中,或者使用了错误的字段名。 前端代码错误:在前端代码中,可能

Unity3D在2D游戏中获取触屏物体的方法

我们的需求是: 假如屏幕中一个棋盘,每个棋子是button构成的,我们希望手指或者鼠标在哪里,就显示那个位置的button信息。 网上有很多获取触屏物体信息的信息的方法如下面代码所示: Camera cam = Camera.main; // pre-defined...if (touch.phase == TouchPhase.Bagan)){ // 如果触控点状态为按下Ray

C++入门(part 2)

前言 在前文我们讲解了C++的诞生与历史,顺便讲解一些C++的小语法,本文会继续讲解C++的基础语法知识。 1. 缺省参数 1.1缺省参数的概念 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调⽤该函数时,如果没有指定实参则采⽤该形参的缺省值,否则使用指定的实参。(有些地⽅把缺省参数也叫默认参数) 1.2 缺省参数的分类 缺省参数分为全缺省和半缺省参数,全缺省就是全部形参给

MySQL record 01 part

更改密码: alter user 'root'@'localhost' identified with mysql_native_password by ‘123456’; 注意: 在命令行方式下,每条MySQL的命令都是以分号结尾的,如果不加分号,MySQL会继续等待用户输入命令,直到MySQL看到分号,才会去执行分号前的所有用户输入的语句。包括密码在内,用户名、主机名,都需要使用引