【极简笔记】Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
论文地址:https://arxiv.org/abs/1611.08050
文章的核心是提出一种利用Part Affinity Fields(PAFs)的自下而上的人体姿态估计算法。研究自下而上算法(得到关键点位置再获得骨架)而不是自上而下算法(先检测人,再回归关键点),是因为后者运算时间会随着图像中人的个数而显著增加,而自下而上所需计算时间基本不变。
PAFs是用来描述像素点在骨架中的走向,用L(p)表示;关键点的响应用S(p)表示。先看主体网络结构,网络采用VGG pre-train network作为骨架,有两个分支分别回归L(p)和S(p)。每一个stage算一次loss,之后把L和S以及原始输入concatenate,继续下一个stage的训练。随着迭代次数的增加,S能够一定程度上区分结构的左右。loss用的
L2
L
2
范数,S和L的ground-truth需要从标注的关键点生成,如果某个关键点在标注中有缺失则不计算该点。
对于S,每一类关键点有一个channel,生成ground-truth的时候是按照多个高斯分布取max的方法来保留各个点的响应峰值。对于L 则复杂一点,先看准确定义,对于第k个person的第c个肢干上的PAFs:
L∗c,k(p)={v0if p on limb c,kotherwise
L
c
,
k
∗
(
p
)
=
{
v
if p on limb c,k
0
otherwise
v=(xj2,k−xj1,k)/||xj2,k−xj1,k||2
v
=
(
x
j
2
,
k
−
x
j
1
,
k
)
/
|
|
x
j
2
,
k
−
x
j
1
,
k
|
|
2
xj,k
x
j
,
k
表示第k个person第j 个关键点的位置。而像素点p是否落在limb(肢干)则设了一个阈值范围
0≤v⋅(p−xj1,k)≤lc,kand|v⊥⋅(p−xj1,k)|≤σl
0
≤
v
⋅
(
p
−
x
j
1
,
k
)
≤
l
c
,
k
and
|
v
⊥
⋅
(
p
−
x
j
1
,
k
)
|
≤
σ
l
其中
lc,k
l
c
,
k
和
σl
σ
l
分别表示limb长度和宽度。最后也会对所有person相同类别肢干进行平均,使得L的输出的channel与肢干种数相等:
L∗c(p)=1nc(p)∑kL∗c,k(p)
L
c
∗
(
p
)
=
1
n
c
(
p
)
∑
k
L
c
,
k
∗
(
p
)
知道PAFs和关键点位置
dj
d
j
之后,需要评估这俩关键点的相关性。文章中就是算了一下这两个关键点连线上各像素点PAF向量与连线向量的点积的积分:
E=∫u=1u=0Lc(p(u))⋅dj2−dj1||dj2−dj1||2du
E
=
∫
u
=
0
u
=
1
L
c
(
p
(
u
)
)
⋅
d
j
2
−
d
j
1
|
|
d
j
2
−
d
j
1
|
|
2
d
u
p(u)=(1−u)dj1+udj2
p
(
u
)
=
(
1
−
u
)
d
j
1
+
u
d
j
2
在得到关键节点以及边权之后,计算姿态骨架已经完全转化成了一个图问题。文中没有采用全局优化的方法,而是利用匈牙利算法对相邻节点进行了最优匹配(比如一堆左手腕节点和一堆左手肘节点,利用小臂的PAF计算边权,再进行最优匹配),最后获得整个的人形姿态骨架。
实验效果也非常好,主要是速度快。附带代码地址https://github.com/CMU-Perceptual-Computing-Lab/openpose
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)