【论文阅读】RMPE:Regional Multi-Person Pose Estimation

上海交大的AlphaPose

0 Abstract

复杂环境中的多人姿态检测是非常具有挑战性的。现在最好的人体检测算法虽然已经得到了很好的效果,但是依然存在一些错误,这些错误会导致单人检测任务(SPPE)失败,尤其是那些十分依赖人体框检测结果的。这里应该是描述的自顶向下的检测技术,使用Faster-RCNN等算法进行目标检测(与之对应的有CPM等)。目前该算法得到了在MPII数据集上最高的mAP值。这个算法是由三部分组成的:
1. Symmetric Spatial Transformer Network – SSTN
2. Parametric Pose NonMaximum-Suppression – NMS
3. Pose-Guided Proposals Generator – PGPG

1 Introduction

在实践中,识别环境中的多人姿态要比识别图片中的单人姿态简单的多。为了解决这些问题,有两个主流的方案:Two-step framework & Part-based framework。第一种方案是检测环境中的每一个人体检测框,然后独立地去检测每一个人体区域的姿态(自顶向下的方法)。第二种方案是首先检测出环境中的所有肢体节点,然后进行拼接得到多人的骨架(自底向上的方法)。第一种方案,姿态检测准确度高度以来目标区域框检测的质量。第二种方案,如果两人离得十分近,容易出现模棱两可的情况,而且由于是依赖两个部件之间的关系,所以失去了对全局的信息获取。
我们的方法依然是自顶向下的方法。我们的目标是检测出正确的人体姿态即使在第一步中检测到的是不精准的区域框。为了说明之前的算法存在这些问题,我们使用Faster-RCNN和SPPE Stacked Hourglass进行实验,主要的问题是识别错误和识别冗余。事实上,SPPE对于区域框错误是非常脆弱的,而且冗余的区域框会产生冗余的姿态。即使是使用IoU>0.5的边界框认为是正确的,检测到的人体姿态依然可能是错误的。
因此,提出了RMPE(区域多人姿态检测)框架。在SPPE结构上添加SSTN,能够在不精准的区域框中提取到高质量的人体区域。一种新奇的SPPE分支(SSTN)来优化自身网络。使用parametric pose NMS来解决冗余检测问题,在该结构中,使用了一种新奇的姿态距离度量方案比较姿态之间的相似度。用数据驱动的方法优化姿态距离参数。最后我们使用PGPG来强化训练数据,通过学习输出结果中不同姿态的描述信息,来模仿人体区域框的生成过程,进一步产生一个更大的训练集。

2.1 Single Person Pose Estimation

略。

2.2 Multi Person Pose Estimation

略。

3 Regional Multi-person Pose Estimation

RMPE的处理过程如图:
RMPE
首先通过目标检测算法,得到人体的区域框。然后将该区域框输入到STN+SPPE模块中,自动检测人体姿态,再通过Parametrics Pose NMS进行refine。在训练过程中,使用Parallel SPPE来避免局部最优并进一步扩大SSTN的效果。设计PGPG结构来增强已有的训练集。

3.1 Symmetric STN and Parallel SPPE(对称STN结构和并行SPPE)

目标检测算法得到的人体区域框不是非常适合SPPE,因为SPPE算法是训练在单人图像上并且对于定位错误十分敏感。通过修剪的方法可以有效的提高SPPE的效果。SSTN+Parallel SPPE可以在不完美的人体区域检测结果下有效的增强SPPE的效果。
这里写图片描述
上图表示了SSTN+Parakllel SPPE模块的结构,SDTN结构接收一个由定位网络生成的参数 θ θ ,然后为反向转换计算参数 γ γ 。我们使用网格生成器和采样器去提取一个人的所在区域,在Parallel SPPE中,制定一个中心定位姿态标签。我们冻结Parallel SPPE的所有层的所有权重来增强STN去提取一个单人姿态区域。
STN and SDTN
空间变换网络在自动检测兴趣区域中表现出来了很好的效果。使用STN去提取一个高质量的人体区域框,数学形式如下:
这里写图片描述
其中 θ1 θ 1 θ2 θ 2 θ3 θ 3 都是二维空间的向量, { xsi,ysi} { x i s , y i s } { xti,yti} { x i t , y i t } 分别表示转换之前的坐标和转换之后的坐标。在SPPE结束的时候,姿态结果会被映射到原始的人体区域框中(就是把姿态线绘制到对应的人体区域框中)。因此,SDTN应该将估计的人体姿态反映射会原图坐标中(这样子的话人体姿态线就会存在于原图尺寸的图像中)。SDTN中需要为反向转换和生成网格计算一个 γ γ

这里写图片描述

因为SDTN是STN结构的反向结构,所以可以得到以下关系:

这里写图片描述

为了在SDTN中进行反向传播, J(W,b)θ ∂ J ( W , b ) ∂ θ 可以分解为:

这里写图片描述

这里写图片描述

(5)式表示 θ1 θ 1 θ2 θ 2 ,(6)式表示 θ3 θ 3
在得到高质量的人体检测框后,可以使用现成的SPPE算法来继续高精度的人体姿态检测,在训练过程中,SSTN和SPPE一起进行fine-tuned。

Parallel SPPE

为了进一步帮助STN去提取更好的人体区域位置,添加了一个Parallel SPPE分支进行训练。这个Paralell SPPE也是从STN中链接出来,然后和Parallel并行处理,但是SDTN被忽略掉。这个分支的人体姿态标签被指定为中心。更准确的说,SPPE网络的输出直接和人体姿态标签的真实值进行对比。我们会关闭Parallel的所有阶段在训练过程中。这个分支的权重是固定的,其目的是将姿态定位后产生的误差反向传播到STN模块。如果STN提取的姿态不是中心位置,那么Parallel SPPE会返回一个较大的误差。通过这种方式,我们可以帮助STN聚焦在正确的中心位置并提取出高质量的区域位置。在测试阶段,Parallel SPPE不会使用,因此只有在训练阶段Parallel SPPE才会产生作用。

Discussions

Parallel SPPE可以看作是训练阶段的正则化过程,有助于避免局部最优的情况(STN不能把姿态转换到提取到人体区域框的居中位置)。但是SDTN的反向修正可以减少网络的错误进而降低陷入局部最优的可能性。这些错误对于训练STN是很有影响的。通过Parallel SPPE,可以提高STN将人体姿态移动到检测框中间的能力。
感觉上似乎可以在SPPE的输出时添加一个中心定位点的回归损失来取代Parallel SPPE。然而,这种方法会降低我们整个系统的性能。尽管STN可以部分修改输入,但是不可能完美的将人定位在标签的位置。在坐标空间上的输入和SPPE标注的差异会很大程度的损害训练姿态估计的能力。这会导致我们主分支SPPE的性能下降。因此,为了确保STN和SPPE同时发挥自己的作用,一个固定权重的Parallel SPPE是不可缺少的。Parallel SPPE总是会产生较大的误差因为会将没有中心的姿态来推动STN产生一个有中心的姿态,但是不会影响到主分支SPPE的效果。

3.2 Parametric Pose NMS

人体定位不可避免的会产生冗余的检测框,同时也会产生冗余的姿态检测。一次你,姿态非极大值抑制是十分有必要消除冗余。以前的方法要么效率不高,要么精确度不高。在论文中,提出了一种parametric pose NMS(参数化姿态非极大值抑制)方法。对于一个人的姿态 Pi P i ,有 m m 个关节点记做 {(k1i,c1i),(k2i,c2i),...,(kmi,cmi)} { ( k i 1 , c i 1 ) , ( k i 2 , c i 2 ) , . . . , ( k i m , c i m ) } kji k i j cji c i j 分比表示第 j j 个部位的坐标位置和置信度分数。
NMS schema
回顾一下NMS:首先选取最大置信度的姿态作为参考,并且根据消除标准将靠近该参考的区域框进行消除。这个过程多次重复直到冗余的识别框被消除并且每一个识别框都是唯一的出现(没有超过阈值的重叠)。

Elimination Criterion
我们需要定义姿态相似度来消除那些离得较近且比较相似的姿态。我们定义了一种姿态距离度量 d(Pi,Pj|Λ) d ( P i , P j | Λ ) 来衡量姿态之间的相似度,定义 η η 作为消除标准的阈值,在这里的 Λ Λ 表示函数 d() d ( · ) 的一个参数集合。我们的消除标准可以定义为下面的形式:
这里写图片描述
如果 d() d ( · ) 小于阈值 η η ,那么 f() f ( · ) 的输出是1,表示姿态 Pi P i 应该被消除因为和参考的 Pj P j 是冗余的。
Pose Distance
我们定义距离函数 dposePi,Pj d p o s e ( P i , P j ) 。假设姿态 Pi P i 的区域框是 Bi B i 。然后我们定义一个软匹配函数:
【论文阅读】RMPE:Regional Multi-Person Pose Estimation_第1张图片
B(kni) B ( k i n ) 表示第 i i 的部位的区域位置,维度上大约是整体图像的1/10。Tanh可以滤掉低置信度的姿态,当两个姿态的置信度都比较高的时候,上述函数的输出接近1。这个距离表示了姿态之间不同部位的匹配数。空间距离可以定义为:
这里写图片描述
因此最终距离可以定义为:
这里写图片描述
其中 λ λ 是一个权重系数,来平衡这两种距离, Λ Λ 表示 { σ1,σ2,λ} { σ 1 , σ 2 , λ } ,参考之前的pose NMS进行参数设置。
Optimization
给定冗余的姿态识别,消除标准的这四个参数可以最优化验证集的mAP值。因为这种四维空间解得搜索过程难以优化,我们在迭代的过程中,固定两个参数变化另外两个参数进行搜索最优解。一旦收敛,这些参数将会在测试阶段固定。

3.3 Pose-guided Proposals Generator

Data Augmentation
对于双阶段姿态识别(首先定位区域,然后进行姿态点定位),适当的数据增强有助于让SSTN+SPPE适应不完美的人体区域定位结果。否则,模型在测试阶段运行时可能不是很适应奇怪的人体定位结果。一种直观的方法是在训练阶段使用检测出来的区域框。然而,目标检测对于一个人而言只会产生一个定位区域。通过使用生成的人体定位,可以产生一定得效果。因为我们已经有了每一个人的真实位置和检测出来的定位框,我们可以通过与人体检测结果一致的样本生成一个大样本的训练集。通过这种技术,我们可以进一步提高系统的性能。
Insight
我们寻找对于不同姿态之间真实值和实际预测值的相对偏移量的分布。为了进一步明确过程,这里定义 P(δB|P) P ( δ B | P ) δB δ B 表示检测到的人体位置的坐标和实际人体的标注坐标之间的偏移量, P P 是真实情况中一个人。我们可以根据目标检测得到的推荐位置生成一些训练集。
Implementation
直接学习 P(δB|P) P ( δ B | P ) 对于易变的人体姿态是比较困难的。因此我们实用 P(δB|atom(P)) P ( δ B | a t o m ( P ) ) atomP a t o m ( P ) 表示P的原子组成部分(P是一个姿态,包含多个关节点)。为了得到姿态的原子结构,我们首先排列好所有的具有相同长度肢体。然后实用K-means聚类得到的聚类中心做为姿态的原子姿态。
对于每一个共享原子姿态 a a 的实例,计算真实值和检测边界框的偏移量。然后使用该方向上的真实边框的边长进行归一化处理。处理后,偏移量会形成一个频率分布,并将我们的数据拟合成高斯混合分布。对于不同的原子姿态,我们会得到不同的高斯混合分布,如下图:
这里写图片描述
Proposals Generation
在训练阶段的SSTN+SPPE,对于每一个在训练集中标注的姿态,我们首先找到对应的原子姿态 a a 。然后通过密集采样计算 P(δB|a) P ( δ B | a ) 来得到增强的训练建议。

4 Experiments

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

你可能感兴趣的:(论文阅读)