这是上海交大的一篇文章,他们的项目主页在RMPE: Regional Multi-person Pose Estimation
这篇文章的主要目标是解决在野生图片下的多人姿态估计问题,因为人体的识别要忍受来自定位和识别的双重误差,这会导致很多基于CNN的识别算法无能为力。这篇文章使用了symmetric spatial transformer network (SSTN)、deep proposals generator (DPG) 、parametric pose nonmaximum suppression (NMS).三个技术来解决这一问题。
首先作者对现有的姿态估计的算法进行了评(吐)价(槽):单人姿态估计的方法不能用在多人上面,而多人姿态估计方法虽然效果不错,但是太慢了(485 seconds per image)。然后作者在下面提出了自己的模型。
整体模型
整体的模型如下图所示
这是一个类似于r-cnn的模型,整个过程分为了2步。
1、首先用一个human detector来提取建议框(human proposal),在这里作者选取了SSD(Single Shot MultiBox Detector. In ECCV, 2016)作为他们的human detector。
这里作者加了一句:今年来human detector虽然有很大的进步,但是得到的大部分人体建议框还是不能达到作为SPPE(single person pose estimation)输入的标准。所以需要SEEP有一定的鲁棒性来解决这一问题,后面会提到针对这一问题的解决方案。
2、将上一步提取到的人体建议框输入到一个”Symmetric STN + SPPE” 结构中去,来完成每个输入建议框的姿态估计。
详细介绍
”Symmetric STN + SPPE” 模型入下图
如图所示,整体的 ” Symmetric STN + SPPE” 是由一个 STN网络+一个SPPE网络+一个反向的STN网络 组成。
这个模型的识别过程主要如下(关于STN在前一篇的博客中讲到了,这里使用了一个反向的STN,推导过程原文中也已经给出,就不详细推导)
1、首先将上一步得出的human proposal在长宽方向上个延迟20%,以确保可以把人完整的框起来。而且经过验证,这样确实可以把大部分的人整个框起来。
2、然后经过一个STN网络将延伸过的图像进行仿射变换,可以生成一个比较精确的、适合作为SPPE输入
3、把SPPE的输出经过与前边相反的STN变换,将坐标变换回原来的坐标系,完成整个的识别过程。
Parallel SPPE
为了进一步加强STN提取单个的人物形象,作者提出了Parallel SPPE,其结构入下图
将之前的”Symmetric STN + SPPE” 结构做了修改,保持前边的STN不动,将后面的”SPPE+SDTN”分成了2条支路,上边的支路还是原来的”SPPE+SDTN”,下边的支路是一个单纯的SPPE,并且将他的label设置为single person pose。训练时使用2条支路输出的总误差来训练网络,在测试时将下面的 Parallel SPPE丢掉,只使用Symmetric STN进行前向传播。
Deep Proposals Generator
数据增强
symmetric STN + SPPE应该用human detector产生的人体建议框充分训练,不然测试时就不是很准确。然而通过human detector每张图片只能产生20~30张人体建议框,这是远远不够的。所以需要适当的数据增强。
这里训练了一个网络(如图),输入是一个建议框(框内是白色,框外是黑色)和一个标注的姿态的图片,输出是这个建议框的分数。之后随机生成大量的建议框,输入到该网络,然后选取高于阈值的分数的框作为下一阶段的输入。
Parametric Pose NMS
最后网络的输出的结果中,不可避免的会出现冗余,所以我们要通过非极大值抑制(NMS)来消除这些冗余。
我们假设
Pi
为网络输出的pose,它包含m个joints,分别为{
<k1i,c1i>,<k2i,c2i>...<kmi,cmi>
<script type="math/tex" id="MathJax-Element-3063">
,
...
</script>},其中
kji
为第j个joint的位置,
cji
第j个joint的得分。
这里定义了一个淘汰标准:
f(Pi,Pj|Λ,η)=d(Pi,Pj|Λ,λ)≤η
当
d(.)
小于阈值 η时,判定
Pi
相对于
Pj
应该被删除。
这里的判定标准定义为:
d(Pi,Pj|Λ)=Ksim(Pi,Pj|σ1)+λHsim(Pi,Pj|σ2)
其中的
Ksim
和
Hsim
分别如下。
上式中的
B(kni)
是指一个中心在
kni
的框,大小为0.1倍的整个人体的size。tanh 操作过滤掉了大部分低置信度的joint。如果2个joint的confidence都比较高,则输出接近于1。
这个就主要是2个joint之间的举例度量了,若离得比较近则输出较小,更容易判定为同一个pose。
上面式子中的 σ1、σ2、λ、η 全都是试出来的。