Benchmarking and Error Diagnosis in Multi-Instance Pose Estimation

这篇文章不是介绍怎么设计网络去提高多人姿态检测在数据集上的mAP值,而是去找出姿态估计算法为啥得分这么低的原因,更直白的讲就是,这个模型效果不好,这个效果不好具体是哪些地方效果不好,文章探究的是这个更底层的原因,而不是简单粗暴的堆trick提高mAP。文章是2017年发表的,当时比较出名的两个多人人体姿态估计网络是Google的GRMI和CMU的OpenPose,文章就是根据这两个模型来查找原因。

首先先介绍下当前计算人体关键点mAP值的方法:OKS,具体信息可以参考这个链接。对于person p p p上的两个点的oks值在[0~1]之间,记作 k s ( θ ^ i ( p ) , θ j p ) ks(\hat{\theta}^{(p)}_{i}, \theta^{p}_{j}) ks(θ^i(p),θjp)。文章提出了三个会造成误差的原因:Localization, scoring, background

Localization
分成4类,如图所示:

  • Jitter, 0.5 < = k s ( θ ^ i ( p ) , θ i p ) < = 0.85 0.5<=ks(\hat{\theta}^{(p)}_{i}, \theta^{p}_{i})<=0.85 0.5<=ks(θ^i(p),θip)<=0.85,这个公式表明该点被正确的预测出来,但离真值还有一些距离
  • Miss,对于任意的点 j j j, k s ( θ ^ i ( p ) , θ j p ) < 0.5 ks(\hat{\theta}^{(p)}_{i}, \theta^{p}_{j})<0.5 ks(θ^i(p),θjp)<0.5,说明该点没有被预测出来
  • Inversion,存在点 j j j, k s ( θ ^ i ( p ) , θ j p ) > = 0.5 ks(\hat{\theta}^{(p)}_{i}, \theta^{p}_{j}) >=0.5 ks(θ^i(p),θjp)>=0.5,但 j ! = i j!=i j!=i,也就是说匹配错误,例如一个人的左腕点被预测到了右腕处
  • Swap,存在点 j j j和人 q q q,满足 k s ( θ ^ i ( p ) , θ j q ) > = 0.5 ks(\hat{\theta}^{(p)}_{i}, \theta^{q}_{j})>=0.5 ks(θ^i(p),θjq)>=0.5,但 j ! = i , p ! = q j!=i, p!=q j!=i,p!=q,通俗来说就是一个人的点匹配到了另外一个人身上

文章总结了GRMI和OpenPose两种方法在这四种错误上的分布:Benchmarking and Error Diagnosis in Multi-Instance Pose Estimation_第1张图片
首先可以明确的一点是,四种类型的误差在这两个不同的算法上分布基本一致,也就是说这个问题是这种算法的通病,和模型结构没有关系。其次,Jitter误差占的比重最大,Miss次之,Inversion紧随其后,而Swap却是最小的。从图中我们可以分析出,无论是top-down的GRMI,还是bottom-up的OpenPose,face部分是最容易预测出来的,误差比重最大的Jitter中,躯干部分最严重,尤其是hip。不仅是在Jitter中,Miss Swap Inversion中,都是躯干部分所占比重最大。特别需要强调的是在Inversion中,因为在实际工程项目中,top-down的模式中的单人pose也好,bottom-up中的多人pose也好,都经常出现同一个人的左右脚不分现象。从上图Inversion我们也能看出,下躯干最容易发生左右不分现象(因为实在没有特别明显的特征区分),而上躯干部分比较容易出现Swap现象,有可能是因为多人场景下,多人上半身重叠现象比较常见。

Scoring
这个简略说下,主要是指top-down方式的多人pose算法。top-dwon方式是先由一个检测器检测出来所有的human boxes,然后在这些boxes中对每一个box执行单人pose算法。那么这就引发了一个问题,我们送入单人pose算法的box是不是最优的box?形象化如下图所示,左图是具有high confidence的box,在传统的NMS算法中,我们会保留左图的框而抑制右图的框,然而实际测试中,左图的box得到的oks值反而比右图box得到的oks值要小,这就产生了high score with low oks or vice versa。文章给出的一个解决方法是使用Soft-NMS代替NMS来降低这种情况的发生。Benchmarking and Error Diagnosis in Multi-Instance Pose Estimation_第2张图片
Background
这个主要是由于BG造成的FP和FN。文章分析了如果去除算法产生的FN和FP会对mAP造成的影响,如下图:Benchmarking and Error Diagnosis in Multi-Instance Pose Estimation_第3张图片
比较有意思的是,GRMI产生的FN位于图像中央,而OpenPose产生的FN位于图像边缘,而且可能由于是前面人体检测器的影响,GRMI对于small size的FP数量最多,可能是前面的人体检测器产生了更多的小的human box传进去了下一级的姿态估计算法中。

文章最后还对图像中的遮挡、密集及人体size大小对算法的影响做了一次探讨。印象比较深刻的就是MSCOCO中crowd占的比例太少,这个也是后来CrowdPose数据集的出现的原因。

总结一下,这篇文章对于搞清楚我们的人体姿态算法为什么不好非常有帮助,它从根本上向我们展示了当前人体姿态算法具体的错误处,首先就是Jitter,因为算法预测出来的点没有离真值特别特别近,这就造成了Jitter误差的出现,并且占的比重特别大。如果可以设计出一个算法或者decode方法,能够让预测出来的点尽可能接近真值,那么算法的mAP值将会提高很多,这也是之后的工作中,类似PifPaf所作的工作。其次是Miss,说明算法的解析力还不足够,还需要更先进的模型来去学习。最后一张图结束,来整体看看这三种主要误差对模型的影响,如果解决了对应的AP值能够提高到多少。Benchmarking and Error Diagnosis in Multi-Instance Pose Estimation_第4张图片

你可能感兴趣的:(Benchmarking and Error Diagnosis in Multi-Instance Pose Estimation)