Summary——RMPE: Regional Multi-Person Pose Estimation

Research question:

如果单人的人体检测框不够准确,会影响多人体态估计的结果,本文就是要降低这种负面影响。

Contributions:

建立了一个 RMPE (Regional Multi-Person Pose Estimation)框架。

  1. 设计SSTN(symmetric spatial transformer network,对称空间变换网络),用于提升基于SPPE的人体姿态估计算法。除此之外,一个平行的SPPE分支用于优化这个网络。
  2. 改进NMS(非最大抑制):用于解决检测冗余的问题,从前参数是人工定的,现在是学习出来的。
  3. 提出PGPG(pose-guided human proposal generator):加强训练样本。学习不同姿态的人体检测器的分布,可以仿真生成bounding box,从而生成一系列训练样例。

Empirics:

  1. MPII Multi-Person Dataset
  2. MSCOCO Keypoints Challenge

Methods:

多人体态估计主要有两个思路:

  1. 在图片里检测出所有的 bounding box,对它们分别估计体态。
  2. 分别检测出图片里的所有 body part,然后组装成不同的人。(主要难题是人挤人的时候有二义性)

而第一种思路主要有困难:检测框误差和检测框冗余。

如下图左图所示,红色框为真值,黄色框为检测框,黄框甚至没有完全包含目标人物,但是由于它和真值的交并比(IoU)大于百分之五十,所以被判定为正确的检测。

 

 

本文的想法主要是,当得到一个human proposal(检测器检测出的人体,也就是输入的bouding box),也就是下图的input。我们其实期望的是只包含下图中穿蓝衣服的女性的bounding box,但是这里还有别的人也在bbox里。所以设计了一个空间变换网络(STN,Spatial Transformer Network),把选定的bbox坐标做变换,得到下图虚线框中的bbox,很明显,这个bbox里的闲杂人等不再入镜,能改善上图中的人没有被完全框住,或者bbox太大的情况。

在虚线框中估计单人姿态,得到的是pose proposal(下图中蓝色的骨架)。这个经过处理的bbox包含的人更准确,就能够提升单人姿态估计(single-person pose estimator (SPPE))的准确性。

这个有了姿态估计的bbox,再做一个反向的空间变换(SDTN,Spatial De-Transformer Network),最后贴回到原始图片上。

那么这个STN该依据什么来变换bbox坐标。依据的是本文设计的平行SPPE结构。

Parallel SPPE是一个分支,和主干SPPE共用STN,但是省略了SDTN。这个分支的输出是在中心的,它的输出直接和在中心的groundtruth label比较。

因为它的目的就是回传STN模块的中心位置姿态误差,所以在训练的时候,这个分支的所有参数是固定的。如果STN提取的姿态不在中心,那么它就会出现很大的误差。

这个分支可以看做是STN的损失函数,因为它的目的和损失函数是一致的,都是为了帮助STN更好地集中在中心区域,得到高质量的,转换过后的human proposal。

这个SPPE作为平行分支,和主干SPPE接收的信息相同,都是STN输出的经过坐标变换的 human proposal,并且都对human proposal作了单人姿态估计(可以理解为在上面画上了骨架)。可以参考下图,我们将分支SPPE的骨架中心(因为论文里没有描述中心的位置,所以我随便点了个)和真值的骨架中心,将他们的差值作为损失,来调整STN的变换。

                                           

为什么要设计这个分支,主要是为了防止陷入局部最优,导致STN调整bbox效果不佳。这么说来,为什么不能直接在SPPE之后,SDTN之前,加入一个中心定位损失,然后删掉这个分支SPPE呢?作者认为输入和SPPE标签的坐标空间的不同,会极大地消耗对pose eatimation 的学习能力。

另外,文章对非最大抑制(NMS)方法做了一些改进。下图右图展示的是检测框冗余,同一目标人物上有多个检测框,会造成他的多个姿态估计。

                                      

而NMS是目标检测领域常用的方法,也是一个简单又有效的算法,可以消除多余的检测框。看下面的图,每个目标都有多个检测框,每个检测狂对应的目标有不同的置信度,比如rose脸上有三个,置信度分别为0.83,0.98,0.75。

非极大值抑制的过程是这样,对于一张图的所有bounding box的集合看作B,下图的B中应该有5个元素。我们对IoU(交并比)设定一个阈值,假设这里是0.5吧。我们把B中置信度最大的检测框移到集合M中,没错就是rose脸上那个置信度是0.95的检测框。B中少了一个元素,只剩下四个元素了。然后再搜索这4个检测框,其中两个和M中的框的IoU都大于0.5,我们把它们当作冗余删去。那还有jack脸上的两个检测框在B中,它们的IoU小于0.5,算不得冗余,没法被删除,再取其中置信度最大的bbox,移入M中,重复如上步骤,删除最后那个置信度为0.67的bbox得到最终结果。即,M中留下了两个人脸检测框。

                                

如果让我们来挑,肯定是挑置信度为0.98的检测框,因为置信度最大嘛,这算法的意义在哪里,最后留下的一定是置信度最大的bbox。但这样的话就不是非极大值抑制了,改叫非最大值抑制不就好了吗,那二者的区别在哪里呢?你看下面的图,不同目标的检测框可能会有交叉,但是交并比太大的基本都是同一个目标。这个算法的目的,就是找到图片中每个目标的对应的置信度最大的bbox,它针对的不是全局最优,而是局部最优。

                                

                               

关于NMS,如果我描述得不够清楚的话,你萌还可以看看下面链接的两篇文章。

https://blog.youkuaiyun.com/leviopku/article/details/80886386

https://www.cnblogs.com/makefile/p/nms.html

本文对利用NMS是为了消除检测框冗余,但也做了一些改进。从前的NMS都是手动设定姿态间的距离和阈值。而本文定义了pose之间的距离,距离公式中的参数是学习出来的,如果两个pose proposal之间的距离太小,就认为其中一个是冗余,留下另一个。

在训练过程中,本文还进行了数据增强,设计了一个PGPG(pose-guided human proposal generator),生成一些训练样本。它的设计思路是这样的:

将所有的bbox中的pose归一化,然后用k-means算法聚类,得到一些atom(P)(原子姿态)。对于每个共享同一个原子姿态的姿态,计算检测器检测出的bbox和真值bbox的差(offsets),这个差值根据真值bbox的边长做归一化。

这个意思就是,一个bbox的坐标,其实只要两个顶点就能控制,分别为 (x_{max},y_{max})(x_{min},y_{min})。这四个坐标分别和真值bbox的对应坐标做差,并归一化。这个差值的频率,构成一个分布,将其转化为高斯分布(这个操作我还不是很清楚),根据这个分布,在训练中,会根据输入图片中pose的原子姿态按这个高斯分布生成一些不准确的bbox。

                         

最后,再回顾一下整篇文章的思路:

训练阶段,拿到图片用现有的单人检测,检测human proposal作为输入,分支SPPE的误差反向传播,使得STN调整bbox,得到更准确的bbox,再通过SPPE做姿态检索,将得到的所有pose proposal做NMS,除去冗余pose,得到最终结果。整个RMPE框架如下图所示:

 

Constructive critiques:

(1)是不是可以认为本文的NMS比起使用原来的NMS耗时更长但是准确率却会有所提升?因为本文的NMS的每个bbox都要通过SPPE,再消除冗余。本文只有是否使用参数化NMS的对比实验,却没有使用过原始的NMS做过实验,也没有时间上的对比。只有和别的方法的时间对比。

(2)还是不能理解分支SPPE的意义,输入是一个human proposal的bbox,它的坐标空间一个平面吗?那label的坐标空间不也是一个平面吗?即使将分支SPPE改成在主干上的回归的区别在哪里?作者对未来工作的展望是将RMPE改写为端到端结构,那么直接上述想法,是不是也能算是端到端的学习呢?

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值