paper title: RMPE: Regional Multi-person Pose Estimation
paper link: https://arxiv.org/pdf/1612.00137.pdf
project: https://www.mvig.org/research/alphapose.html
oral or demo video:https://www.youtube.com/watch?v=RHNdbEY5xn4
github: https://github.com/MVIG-SJTU/AlphaPose
conf & anthor: ICCV 17, Hao-Shu Fang et al.(SJTU)
arXiv submit v1: 2016.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
主要内容:
这篇文章主要介绍了一种two-stage的多人人体姿态估计方法。与通常的two-stage方法一致,第一阶段使用人体检测器检测出图像中的人,第二阶段使用单个人人体姿态估计(SPPE)模型进行人体关键点检测。
文章在two-stage的算法流程基础上,有三点主要变化:
(1) 在SPPE网络之间增加了一个Spatial Transformer Network(STN,关于STN可参考 Spatial Transformer Network)
对检测出的人体的区域做一个空间变换,并在SPPE之后进行一个反变换;设置了两个SPPE网络分支,一个是(1)中所述,另外一个主要用来对网络进行正则;
(2) 提出了一种参数化的Pose NMS方法去除冗余;
(3) 使用了一种Pose Guided Porposal Generate(PGPG)方法进行训练集扩增。
网络结构:
RMPE的网络结构如下图所示:
首先是一个人体检测网络产生人体proposal;然后是两个单人人体姿态估计网络分支,暂称之为主SPPE和辅SPPE,辅SPPE只在训练的时候用到,训练的时候使用PGPG产生proposal;之后是Pose NMS处理模块,最后得到姿态估计结果。下面就这几个部分作更详细一些的说明。
(1)SPPE
主SPPE是一个单人人体姿态估计网络,可以是Hourglass Network等网络。这里的特殊之处是在网络之前和之后分别添加了了一个STN)和SDTN,STN会对输入的图像进行一个空间变换(如仿射变换),然后经过SPPE进行人体关键点检测,检测完后再通过SDTN变换回原来的空间状态。STN中的localization network在训练的时候是有参数参与训练的,训练得到变换参数
θ
\theta
θ,而SDTN中则直接使用STN中的
θ
\theta
θ的反向变换即可。
(2)Parallel SPPE
parallel SPPE的模型结构与主SPPE一致,但是在训练过程中,模型中的参数都是冻结的,并不参与训练,推理的时候是不需要该分支的。另外这条分支使用的label是center-located,目的是让STN变换后的pose是处在图像中心的,以降低关键点检测的难度并提高准确性。这条分支对STN起到一个正则化的作用。
既然parallel SPPE的目的是反向传播center-located的误差,那么是不是可以直接在主SPPE的SDTN模块之前加一个center-located的回归损失?文章对这个问题作出了解释,如果在主SPPE分支上直接加一个损失,输入的坐标空间可label的坐标空间表示的不同,会降低原本的SPPE的姿态估计效果。
(3)PGPG(Pose Guided Proposal Generator)
在得到人体检测的bounding box之后,可以通过对bounding box平移缩放等操作扩增数据集,提高模型的性能。文章提出的PGPG是基于已知的pose label 和检测的bounding box,通过发现不同pose的bounding box和label box之间的一些位置关系的统计情况,为不同的pose设置“pose-guided”的不同的数据增强方式。
具体来说,不同的pose
P
P
P的lable和检测的bbox的偏移
δ
B
\delta B
δB的分布情况是不同的,如下图,可以找到这个分布
P
(
δ
B
∣
P
)
P(\delta B|P)
P(δB∣P)。
但是直接求分布
P
(
δ
B
∣
P
)
P(\delta B|P)
P(δB∣P)是比较困难的,文章中首先都所有ground truth pose进行归一化并使用k-means进行聚类,聚类中心使用atom pose。最后将atom pose的偏移
δ
B
\delta B
δB建模成混合高斯分布。
(4)Parametric Pose NMS
人体检测会出现冗余的bbox,导致估计的人体姿态也有冗余,需要使用NMS消除冗余,文章提出了一种参数化的Pose NMS方法,通过检测的关键点的置信度和距离来衡量不同pose之间的距离,依此进行冗余消除,方法中使用的参数都是从数据中学习到的。
具体来说,对于第i和Pose
P
i
P_i
Pi,
k
i
j
k_i^j
kij和
c
i
j
c_i^j
cij分别表示第j个关键点的位置和置信度。对于
P
i
P_i
Pi和
P
j
P_j
Pj分别计算它们之间两个距离:
(1)一定空间范围内的对应关键点的置信度距离:
D
c
(
P
i
,
P
j
∣
σ
1
)
=
∑
n
t
a
n
h
(
c
i
n
/
σ
1
)
∗
t
a
n
h
(
c
j
n
/
σ
1
)
D_c(P_i,P_j|\sigma_1) = \sum_ntanh(c_i^n/\sigma_1)*tanh(c_j^n/\sigma_1)
Dc(Pi,Pj∣σ1)=n∑tanh(cin/σ1)∗tanh(cjn/σ1)
当
P
j
P_j
Pj位于以
P
i
P_i
Pi为中心的矩形框内的时候按照上式计算置信度距离,否则直接为0;j矩形框的大小设置为
P
i
P_i
Pi的bbox长宽各自的十分之一;tanh(·)是对置信度做一个非线性变换;
(2)对应关键点的位置距离:
D
k
(
P
i
,
P
j
∣
σ
2
)
=
∑
n
e
x
p
(
(
k
i
n
−
k
j
n
)
2
/
σ
2
)
D_k(P_i,P_j|\sigma_2) = \sum_nexp((k_i^n-k_j^n)^2/\sigma_2)
Dk(Pi,Pj∣σ2)=n∑exp((kin−kjn)2/σ2)
最后,
P
i
P_i
Pi和
P
j
P_j
Pj的距离为:
D
(
P
i
,
P
j
∣
λ
)
=
D
c
(
P
i
,
P
j
∣
σ
1
)
+
λ
D
k
(
P
i
,
P
j
∣
σ
2
)
D(P_i,P_j|\lambda) = D_c(P_i,P_j|\sigma_1) + \lambda D_k(P_i,P_j|\sigma_2)
D(Pi,Pj∣λ)=Dc(Pi,Pj∣σ1)+λDk(Pi,Pj∣σ2)
λ
\lambda
λ调节置信度距离和位置距离的权重。最后设置一个阈值参数
η
\eta
η,如果
D
(
P
i
,
P
j
∣
λ
)
D(P_i,P_j|\lambda)
D(Pi,Pj∣λ)大于
η
\eta
η,则保留,否则去掉该pose。
上面说的NMS中的四个参数
σ
1
,
σ
2
,
λ
,
η
\sigma_1,\sigma_2,\lambda,\eta
σ1,σ2,λ,η都是在验证集上最大化mAP优化得到的。
论文实验和结果:
(1)论文实验
实验中使用VGG-based SSD-512作为人体检测器,stacked hourglass network作为主SPPE, 4-stacked hourglass network作为parallel SPPE, ResNet-18作为STN中的localization network。
实验测试了文章中主要的几个模块对结果的影响,具体如下:
(2)数据集上结果
MPII:
COCO:
(文本图片均来自原论文)