CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark 论文阅读

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_36923418/article/details/88219960

一、这是Alphapose的最新工作

       特点,针对的是 “ crowd”场景下的多人姿态估计。

       相对于以往的一些多人姿态估计工作而言,基本上都是不合适应用在“Crowd”场景之下的,比如Mask-RCNN训练的时候,会直接去除数据中的“Crowd”数据(MSCOCO)有这个标签,MPII没有这个标签。

                                                         

      这是目前几个主流的开源的姿态估计框架的,对于“crowd”场景的检测能力对比图,可以发现对着“crowd”的增加,这三个框架都下降的非常厉害,影响最大的是OpenPose最大下降了0.3左右。

二、提出了一个“Crowd”数据集

      数据集配套可视化工具:https://blog.csdn.net/github_36923418/article/details/88540865

       想做“CrowdPose”那必须要有,这样的数据集,光靠着之前的MPII、MSCOCO、AIChallenger2017的哪些数据集是远远达不到这个工作的标准的。对比下这些数据集,我们也就不难理解为什么要重新提出一个数据集了。

                                          

       这张图来自于论文中,对于这几个数据集的比较,可以发现,MPII、MSCOCO、AIChallenger这三个数据集基本上都是针对于“非crowd”场景的。

三、本文方法

       

      上图是这篇文章方法的阀体框架:

        1、进行human detection

        2、根据proposal box利用SPPE去计算 候选节点(Joint candidate),不过这一次所使用的Loss针对这次任务,和以前的AlphaPose中的“再SPPE”阶段所使用的Loss有所不同,之前的Loss方案没有办法应用于”Crowd“场景。这里作者归结原因“因为感受野受限于proposal”,因此之前的Loss也只能去计算这个框里面的(AlphaPose是人体检测器和SPPE分开的两个模型,单独训练的,SPPE虽然是联合训练的,但是是通过检测器的结果来训练的)而且以前的loss只计算这个框里“目标人物”的loss。

             因此这一部分需要一个具有“全局观念的”Loss,不能够局限于proposal的感受野限制。

     思考:一定会有人奇怪为什么不直接上手一个针对全图的全局关键点检测,然后再去进行“Global Association”,这样的话其实和AE那篇文章差别就不大了。但是作者这样设计有一定的好处,SPPE是非常依赖于human  detection的结果的,而且如果说“SPPE某一个region检测关键点的时候,右手没有检测出来,这种情况在以前的AlphaPose中是无法恢复的,但是在本文中是可以恢复的”,如果这个在region1中SPPE没有检测出来的手,在region2中出现了,那么只要region2的SPPE能检测出来,通过后续步骤我们依然可以得到完整的姿态但是“直接全图全局关键点检测,就像之前的region1发生漏检~~~无法恢复”,这个概念和Hadoop的分布式存储概念有点像,某个地方发生了丢失,可以通过别的地方进行回复。

      Loss Design

      对于每一个proposal出来的region,里面有两个类型的loss,分别针对“目标人物”与“region内的其他人的关节点”。从这里可以看出作者设计的是一个针对“region”的全局关键点检测器,不会针对某个target去回归!

   Heatmap Loss

                                                           

        这个Loss依然是经典的“2范数loss”-欧式距离loss。其中T这一类表示的是属于目标任务,C这一类属于其他人物的关键点。是属于0~1的一个系数,作者设定为0.5。P是预测出来的某关键点的heatmap。

       在拥挤的场景下,单个SPPE没有办法对某些关键点给出很高的响应图,但是如果某个部位能够出现在多个SPPE的region中的话(这种情况在“crowd”场景下很正常),那么本文的方法依然能够对这些关键点,产生比较可靠的响应图。

    3、Person-Joint Graph

                                          

       这张图片展示的是原本AlphaPose的一个错误,主要想要说明的就是,如果直接通过region中的heatmap取max得到位置,直接连起来,就会产生上图的错误!

     Joint Node Building

      比较高的overlap的proposal通常会产生相似的真实joint。根据下面的公式,会把两个挨的很近的joint先看成一个Node。u表示的是heatmap的响应size,另外一个是控制因子。

                      

     我们得到了这个集合,N是所有的Node节点集合,v代表了某个Node节点属于第K个关键点,那么joint nodes节点总数为

   Person Node Building

    这个依赖于human detectron,,M是proposal出来的human 总数。但是在“crowd”场景下,proposal出来的很多box是redundant proposals,需要在后面进行消除。

   Person-Joint Edge

    这个person-joint edge就是需要把person-node和joint node 连起来。如果某个包含了某个person-node的”候选关节“,那么通过把这两个Node连起来。的权重就是”候选关节“的响应记为。那么得到了

      最后的Person-Joint Graph就是

Globally Optimizing Association

                                 

                                

    上图所示的是目标函数,最大化每个人的edge之和。代表了某一条边是否存在于我们最终的graph中。从公式8到公式10,我们可以发现解决”Person-Joint Graph“的问题被分成了解决(Gk各自问题),然后利用”图论中的匈牙利算法“取更新优化每一个子图,这里主要涉及到2布图优化的知识,但是文章中没有细说,如何利用匈牙利算法优化。

    之前说到的”redundant proposals“也会因为没有合适的匹配,而被淘汰删除。

四、实验结果

                        

五、再续说下数据集CrowdDataset

1、对于crowd需要进行分级

                                      

    n代表了这张图中人的总数,Nb代表了某一个boundingbox中肺部表人物的关键点数量,Na代表了这个boundingbox中目标任务的关键点数量。

2、图像数据收集

对AI Challenger MSCOCO  MPII这三个数据集进行分析,收集其中的一些正常图像(作为遮挡不严重的例子),收集了大约3万张,从crowd index 以步长0.05 从0~1

3、采用14个关键点标注,类似于AIChallenger,对30000张图像进行重新标注(关键点+box);完成标注后重新分析crowd index,选取了20000张高质量标注图像。We further crop each person in the images, and then annotate the interference keypoints in each bounding box.这句话没看明白啥意思!!!;每张图像有两个标注人分别标,取均值,如果两个人标注结果差异很大,就会重新标注这张图象。

4、数据集中总共包含20000张图像,80000个人,训练集、验证集、测试集比例为5:1:4

5、数据集的boundingbox的mIoU为0.27,然而MSCOCO、MPII、AIChallenger分别为0.06、0.11、0.12

六、其他的一些细节请仔细阅读文章后,比如训练细节,模型对比等

https://arxiv.org/pdf/1812.00324.pdf

https://github.com/MVIG-SJTU/AlphaPose/blob/pytorch/doc/CrowdPose.md

猜你喜欢

转载自blog.csdn.net/github_36923418/article/details/88219960