OpenPose - Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields 论文解读

paper title: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
paper link: https://arxiv.org/abs/1611.08050
oral or demo video:https://www.youtube.com/watch?v=OgQLDEAjAZ8
https://www.youtube.com/watch?v=vTC0QKR_uM0
slides:http://posefs1.perception.cs.cmu.edu/Users/ZheCao/Multi-person%20pose%20estimation-CMU.pdf
project:
github:https://github.com/CMU-Perceptual-Computing-Lab/openpose
conf & anthor: CVPR 17,Cao Zhe et al
arXiv submit v1: 2016.12 google citation:1176(2019.07.12)

姿态估计系列:

主要内容
文章提出了一种从单张RGB图像中进行多人2D人体关节点检测的方法。多人关节点检测主要需要解决两个问题,一是图像关节点位置的确定,二是各个关节点相互连接关系的确定。这篇文章继承CPM论文中的多级CNN人体检测框架,并使用两个分支分别进行关节点检测和关节点连接关系预测,分别输出confidence map和part affinity fields(PAFs)。文章的主要创新点是PAFs和关节点连接方案,另一特色是极高的运行效率。

(1)关于confidence map
confidence map比较好理解,就是网络的最后输出的各个位置上的存在关节点的概率图。groundtruth confidence map的生成方式如下,对于图片中第k个人的第j个关节点(可见关节点),根据实际的关节点位置,使用一个高斯分布对其进行表示:
S j , k ∗ ( P ) = e x p ( − ∣ ∣ P − X j , k ∣ ∣ 2 2 σ 2 ) S_{j,k}^*(P)=exp(-\frac{||P-X_{j,k}||_2^2}{\sigma^2}) Sj,k(P)=exp(σ2PXj,k22)
其中:

  • X j , k X_{j,k} Xj,k表示第k个人的第j个关节点在图像中的真实位置;
  • σ \sigma σ决定了高斯分布的形状;

图像中多个人的同一个关节点的位置表示高斯分布可能会出现重叠,可以去平均或最大值。论文中是取最大值,以保证较近的两个点的两个尖峰不会因为平均而成为一个尖峰。
S j ∗ ( P ) = M A X k ( S j , k ∗ ( P ) ) S_{j}^*(P)=MAX_k(S_{j,k}^*(P)) Sj(P)=MAXk(Sj,k(P))
在预测的时候,会使用NMS得到候选关节点。

(2)关于PAFs
confidence map可以表示关节点的位置,但是却无法表示关节点之间的关系;特别图像中的人数很多时候,各个关节点之间的关系是一个重要的信息。文章提出PAFs对关节点之间的关系进行建模,PAFs实际上就是一个2维的向量场,同时包含了位置和反向的信息,用来表示关节点之间的关系。如下图:
limb image

第k个人的手臂关节点肘部 X j 1 k X_{j_1}^k Xj1k和手腕 X j 2 k X_{j_2}^k Xj2k,点P为手臂上的一点,点P处的PAF的值为:
P A F c , k ∗ ( P ) = { V P i f   P   i n   l i m b   c 0 o t h e r w i s e PAF_{c,k}^*(P)=\left\{ \begin{aligned} V_P & & if\ P\ in\ limb\ c \\ 0 & & otherwise \\ \end{aligned} \right. PAFc,k(P)={VP0if P in limb cotherwise
其中 c c c表示关节 j 1 j_1 j1 j 2 j_2 j2之间的肢干,在上面的图中是前臂部分; V P V_P VP是P点处的PAF的值,是一个与 j 1 j_1 j1关节点指向 j 2 j_2 j2关节点方向一致的单位向量:
V P = ( X j 2 k − X j 1 k ) ∣ ∣ X j 2 k − X j 1 k ∣ ∣ 2 V_P=\frac{(X_{j_2}^k-X_{j_1}^k)}{||X_{j_2}^k-X_{j_1}^k||_2} VP=Xj2kXj1k2(Xj2kXj1k)
"P in limb c"定义为P在图中蓝色框内,蓝色框的具体范围为:
0 < u P ⋅ u h < ∣ ∣ X j 2 k − X j 1 k ∣ ∣ 2 ∣ u P ⋅ u h ∣ < σ l 0<u_P·u_h<||X_{j_2}^k-X_{j_1}^k||_2 \\ |u_P·u_h|<\sigma_l 0<uPuh<Xj2kXj1k2uPuh<σl
其中:

  • u P u_P uP表示由点 X j 1 , k X_{j_1,k} Xj1,k连接点 P P P的向量;
  • u h u_h uh u v u_v uv分别表示 u P u_P uP的两个相互垂直的分量;
  • l c , k = ∣ ∣ X j 2 k − X j 1 k ∣ ∣ 2 l_{c,k}=||X_{j_2}^k-X_{j_1}^k||_2 lc,k=Xj2kXj1k2, σ l \sigma_l σl是关于 l l l的函数;

在包含多个人的图像中,PAF的ground truth是图像中所有人各自的PAF的平均值,即:
P A F c ∗ ( P ) = 1 N c ( P ) P A F c , k ∗ ( P ) PAF_{c}^*(P)=\frac{1}{N_c(P)}PAF_{c,k}^*(P) PAFc(P)=Nc(P)1PAFc,k(P)
其中 N c ( P ) N_c(P) Nc(P)表示所有人的肢干 c c c的非零PAF向量的平均值。在测试阶段,通过计算预测的两个关节点连线上的PAF值的积分来衡量这两个关节点之间的连接关系。实际计算的时候,是从两个关节点的连线上以均等距离采样若干个点累加计算PAF向量值。

(3)使用PAFs描述关节点之间的连接关系
得到关节点的位置之后,需要进行关节点的连接。对于两类关节点(如手肘和手腕),由于图像中存在多个人或者误检的情况,可能会检测到多个候选的关节点,所以需要对这些关节点进行一个合适的匹配,如下图所示。这个问题可以看做是一个最大权重二分图匹配问题,边的权重就是关节点之间的PAFs值,可以通过Hungarian算法求解。
graph matching
上面说的是两个关节的情况,对于多个人的全身关节连接问题,就称为K维的匹配问题。文中对这个问题做了两个简化,(1)使用最少的关节来获得人体骨骼的生成树,也就是对实际中没有连接关节,直接认为无连接关系,如上图c;(2)将人体关节点连接问题转化为多个二分匹配问题,也就是对于各个肢干上的两个关节分别进行匹配,如上图d。


网络结构
网络的主要结构可以描述为两条分支,多个stage连接而成。输入的图片首先经过一段卷积网络(VGG-19前10层)处理后,得到的feature map送入两个分支网络,分别预测confidence map和part affinity fields。网络由多个stage级联而成,每个stage结束后会将两个分支的数据合并到一起,送入下一个stage;每个stage都会输出一个中间监督的结果,计算损失(stage级联、中间监督都和CPM一致)。具体如下图:
network architecture

损失函数
损失函数由t个stage的所有损失相加得到。在每一个stage中,损失函数包括两部分,confidence map损失和PAF损失,分别如下:
L S t = ∑ j = 1 J ∑ P ∣ ∣ S ( P ) j t − S ( P ) j ∗ ∣ ∣ 2 2 L P A F s t = ∑ c = 1 C ∑ P ∣ ∣ P A F ( P ) c t − P A F ( P ) c ∗ ∣ ∣ 2 2 L_S^t=\sum_{j=1}^J\sum_{P}||S(P)_j^t-S(P)_j^*||_2^2 \\ L_{PAFs}^t=\sum_{c=1}^C\sum_{P}||PAF(P)_c^t-PAF(P)_c^*||_2^2 LSt=j=1JPS(P)jtS(P)j22LPAFst=c=1CPPAF(P)ctPAF(P)c22
其中:

  • P P P表示预测的confidence maps或PAFs上的某一位置;
  • j j j表示第 j j j个关节点;
  • t t t网络的第 t t t个stage;
  • c c c表示第c个肢干(有两个关节点连接的一段);
  • S ( P ) j t S(P)_j^t S(P)jt表示预测的confidence map中P处的值, S ( P ) j ∗ S(P)_j^* S(P)j表示对应的ground truth值;
  • P A F ( P ) c t PAF(P)_c^t PAF(P)ct表示预测的PAFs中P处的值, P A F ( P ) c ∗ PAF(P)_c^* PAF(P)c表示对应的ground truth值;

综上损失函数为:
L = ∑ t = 1 T ( L S t + L P A F s t ) L = \sum_{t=1}^T(L_S^t+L_{PAFs}^t) L=t=1T(LSt+LPAFst)

论文结果
(1) MPII full testing set 上mAP为76.5;
(2) COCO Test-chanllege 上AP为60.5;
(3) 运行效率:

  • GTX 1080, 9个人:parsing 0.58ms + CNN reference 99.6ms
  • GTX 1080,16个人 视频:8.8fps
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值