paper title:CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark
paper link:https://arxiv.org/pdf/1812.00324.pdf
project:https://www.mvig.org/research/alphapose.html
oral or demo video:https://www.youtube.com/watch?v=fNlMGWm7bbk&pbjreload=10 [37:16]
github:https://github.com/MVIG-SJTU/AlphaPose
conf & anthor:CVPR 19, Jiefeng Li et al.
arXiv submit v1: 2018.12
姿态估计系列:
- DeepPose - human pose estimation via deep nerual networks
- Efficient Object Localization Using Convolutional Networks
- Convolutional Pose Machines
- Human Pose Estimation with Iterative Error Feedback
- Hourglass Network - stacked hourglass network for human pose estimation
- OpenPose - Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
- RMPE: Regional Multi-person Pose Estimation
- Pose flow: Efficient Online Pose Tracking
- CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark
主要内容:
这篇文章是AlphaPose项目的文章之一,提出了一种密集场景下的人体姿态估计方法,并创建了一个密集场景下人体姿态估计的数据集CrowdPose。文章中主要是用过全局优化的方法来提高密集场景下人体姿态估计的准确性。
由于密集场景下的人靠的很近,很容易出现关节点的误识别(连接),SPPE可以看作是一个局部的优化,通过全局的优化能够减少误匹配的情况。比如在A人体的proposal中有A的所有人体关节点和B的leftKnee和leftFoot两个关节点,由于靠的很近,在SPPE的检测结果中,B的leftFoot的置信度可能比A的真实的leftFoot的置信度还高,那直接根据SPPE的结果就会选择实际上是B的leftFoot作为A的leftFoot的预测值。这篇文章在每个人体proposal进行SPPE之后,进行全局优化,因为B的letfFoot在其本身的proposal预测为B的letfFoot的置信度较高,那么在全局优化的步骤中,就有可能将A的leftFoot预测为其真实的leftFoot,尽管它的置信度是较小的,但是全局优化弥补了这一点。后面详细介绍全局优化的方法。
网络结构:
文章提出的方法的主要流程如下(图片来自原论文),主要包括two-stage的人体姿态估计和全局关节点连接优化。文中主要侧重全局关节点连接优化部分。
下面主要介绍human-joint图的建立和优化过程。如下图,一共检测到两个人的三个proposal,红色和黄色是同一个人的proposal,各色实现圆圈表示检测到的真实属于当前人的关节(这里只画了左手臂上的三个关节点),虚线圆圈表示检测到的非真实属于当前人的关节点,各色方块表示human节点。
1.Joint Candidate Single Person Pose Estimation(JC-SPPE)
在密集人群的场景中,某个人的boundingbox中常常会包含其他人的人体关节点,文中将当前检测的人的关节点称为目标关节点,其他包含在图像中但是不属于这个人的关节点称为干扰关节点。对于这两类关节点,不是直接抑制干扰关节点,而是对这两类关节点在结果中输出不同的强度,那些干扰关节点可以用于其他人的姿态估计,从而得到一个全局的优化。
一般的抑制干扰关节点的SPPE对干扰关节点的groundtruth全部设置为零,而在JC-SPPE中为了让干扰关节点也有一个较小强度的输出,将他们也算到损失函数中。在第i个人的boundingbox中有K个关节点,包括目标关节点和干扰关节点。第k个关节点的输出的heatmap表示为
P
i
k
P_i^k
Pik,groundtruth中目标关节点和干扰关节点分别表示为
T
i
k
T_i^k
Tik和
C
i
k
C_i^k
Cik,均为高斯分布。那么这第i个的boundingbox在JC-SPPE中的损失函数表示为:
L
o
s
s
i
=
1
K
∑
k
=
1
K
M
S
E
[
P
i
k
,
T
i
k
+
μ
C
i
k
]
Loss_i=\frac{1}{K}\sum_{k=1}^{K} MSE[P_i^k,T_i^k+\mu C_i^k]
Lossi=K1k=1∑KMSE[Pik,Tik+μCik]
其中
μ
\mu
μ通过交叉验证设置为0.5;
2.Person-Joint Graph
这一步主要是构建人-关节点构成的图。
(1)joint node build
一方面,密集场景下,A人的部分关节点会出现在B的proposal中并被检测出来,另一方面,A的关节点在自己的proposal中也会被检测出来,这样同一个groundtruth关节点会有两个检测结果(当SPPE的检测性能较好的时候,这两个检测的关节点的位置是很近的),对这些属于同一个关节点的根据距离进行合并;另一方面,一个人通常会有多个proposal,分别会有各自的关节点检测结果,也进行合并,如上图中的红色和黄色实线圆圈。
对于检测到人体的第k个关节点的两个预测输出的位置
p
1
(
k
)
p_1^{(k)}
p1(k)和
p
2
(
k
)
p_2^{(k)}
p2(k),合并的规则是:
∣
∣
p
1
(
k
)
−
p
2
(
k
)
∣
∣
2
<
m
i
n
{
u
1
(
k
)
,
u
2
(
k
)
}
δ
(
k
)
||p_1^{(k)}-p_2^{(k)}||_2<min\{u_1^{(k)},u_2^{(k)}\}\delta^{(k)}
∣∣p1(k)−p2(k)∣∣2<min{u1(k),u2(k)}δ(k)
其中:
- u 1 ( k ) , u 2 ( k ) u_1^{(k)},u_2^{(k)} u1(k),u2(k)分别表示heatmap上两个检测的关节点的高斯响应的尺寸,由方差控制;
- δ ( k ) \delta^{(k)} δ(k)是方差控制量,直接使用COCO数据集中的值,具体如下:
keyponits | hip | ankles | knees | shoulders | elbows | wrists | ears | nose | eyes |
---|---|---|---|---|---|---|---|---|---|
deviation | 0.107 | 0.089 | 0.087 | 0.079 | 0.072 | 0.062 | 0.035 | 0.026 | 0.025 |
合并后可以得到整张图像上的关节点的表示 v j k v_j^k vjk,表示检测结果中第k个(类)的关节点的第j个关节点(即第k类关节点一共有j个,如图像中leftFoot关节点一共有三个,并且这里的关节点是指合并后的关节点)。得到集合 J = v j k : f o r k ∈ { 1 , . . , K } , j ∈ { N 1 , . . . , N K } J={v_j^k: for \ k \in \{1,..,K\},j \in \{N_1,...,N_K\} } J=vjk:for k∈{1,..,K},j∈{N1,...,NK}
(2)human node build
每个human proposal对应一个human node,得到集合
H
=
h
i
,
i
∈
{
1
,
.
.
.
,
M
}
H={h_i, i \in \{1,...,M\}}
H=hi,i∈{1,...,M},M为图像中的human proposal的树木,
h
i
h_i
hi表示第i个human proposal的human node。
(3)graph construct
建立好joint node和human node之后就可以建立它们之间的连接,边表示为
e
i
,
j
(
k
)
e_{i,j}^{(k)}
ei,j(k),边的权重为
w
i
,
j
(
k
)
w_{i,j}^{(k)}
wi,j(k),值为检测的关节点的置信度,得到边得集合为
E
=
{
e
i
,
j
(
k
)
,
∀
i
,
j
,
k
}
E=\{e_{i,j}^{(k)}, \forall i,j,k\}
E={ei,j(k),∀i,j,k}建立图:
G
=
(
(
H
,
J
)
,
E
)
G=((H,J),E)
G=((H,J),E)
3.Global Optimizing Association
建立上述的图G之后,通过全局优化得到最优的human-joint连接结果,如上图中的连线。
优化过程最大化:
m
a
x
d
G
=
m
a
x
d
∑
w
i
,
j
(
k
)
∗
d
i
,
j
(
k
)
max_dG = max_d\sum{w_{i,j}^{(k)}*d_{i,j}^{(k)}}
maxdG=maxd∑wi,j(k)∗di,j(k)
其中
d
(
)
d()
d()表示连接关系,取值为
0
,
1
{0,1}
0,1;
优化中满足一下约束关系:
∑
j
d
i
,
j
(
k
)
≤
1
;
∀
i
∈
{
1
,
.
.
.
,
M
}
∀
k
∈
{
1
,
.
.
.
,
K
}
(
c
o
n
s
.
1
)
∑
i
d
i
,
j
(
k
)
≤
1
;
∀
j
∈
{
1
,
.
.
.
,
N
K
}
∀
k
∈
{
1
,
.
.
.
,
K
}
(
c
o
n
s
.
2
)
\sum_{j}d_{i,j}^{(k)} \le 1 ; \forall i\in\{1,...,M\} \forall k \in \{1,...,K\} \ (cons.1) \\ \sum_{i}d_{i,j}^{(k)} \le 1 ; \forall j\in\{1,...,N_K\} \forall k \in \{1,...,K\} \ (cons.2) \\
j∑di,j(k)≤1;∀i∈{1,...,M}∀k∈{1,...,K} (cons.1)i∑di,j(k)≤1;∀j∈{1,...,NK}∀k∈{1,...,K} (cons.2)
上面的约束cons.1表明第k类关节点的一个joint只能且只能最多与一个human连接;约束cons.2表明一个human能且只能最多与一个第k类关节点连接。由于约束cons.1,会使得同一个人的冗余的proposal的human node之间相互竞争,一些poor(比如只检测到人体的上半身)的人体proposal的candidate joint的置信度会较低,会在竞争中出于劣势,最后被无法完成人体关节点连接,被去掉,实现了NMS的功能。
上述优化可以拆分为每类关节点的子图分别进行优化。
论文实验和结果:
在人体姿态估计方面使用YOLOv3进行人体proposal提取,hourglass进行人体关键点检测。全局关节点连接如前所述,在crowdPose数据集上的结果如下(图片来自原论文):