介绍

近日,上海交通大学电子信息与电气工程学院卢策吾团队(MVIG组)的论文《CrowdPose: Efficient Crowded Scenes Pose Estimation and A New Benchmark》被CVPR2019(计算机视觉领域顶级会议)接收。该论文主要是针对此前AlphaPose系统的优化,构建了CrowdPose数据集,用来衡量算法在拥挤场景中的性能,并提出了一个高效的算法来解决拥挤人群中的姿态估计问题,实验结果比起当前最好的算法有较大提高。

paper:CrowdPose: Efficient Crowded Scenes Pose Estimation and A new Benchmark

code:CrowdPose

该文并没有着重于设计新的网络结构,而转向于设计新的label和loss计算方式,从而提高原有的网络pose检测能力.

论文

Introduction

为了衡量人体姿态估计算法的性能,学术界与工业界建立了越来越多的公开数据集,如MPII、MSCOCO、AI Challenger。然而,这些数据集的图片通常采集于日常生活场景,缺乏拥挤人群场景的数据。对于由数据驱动的深度学习方法来说,数据集的分布不均衡,意味着算法性能的不均衡。同时,随着学术界对人体姿态研究的深入,算法追求像素级的精度,简单场景下的性能已经逐步逼近人类的精度,但在拥挤场景中往往会失效。

针对以上的情况,上海交大MVIG组的研究者开源了CrowdPose数据集。CrowdPose数据集中的图片,有着均匀分布的拥挤程度。既可以评估算法在日常非拥挤情况下的表现,也可以评估其在极度拥挤时的性能。目前,数据集开源了2万张图片,评估工具也已经上线。在未来的几个月时间內,研究者将会不断扩大数据的规模,开源一个更大的数据集。文章根据这个现状,提出了一个新的dataset(CrowdPose dataset)以及一个新的loss计算方法.

CrowdPose Dataset

首先文章提出了一个’crowd index’用来表示图片’crowd’的程度,计算方式如下:
n表示图片上总共有多少个人, 分母表示第i ii个人总共标注了多少个关键点,分子表示在这个人的bbox bboxbbox里面,有多少个关键点不属于这个人但却出现在这个人的bbox bboxbbox内(所以才叫’crowd’). 显而易见,这个值越大,说明人’crowd’的程度越严重.

文章收集了一系列的图片,全部使用14joints表示,一开始粗略使用了30000张图片,然后从这里面挑选出20000张质量好的图片,作为crowd dataset.下图文章使用的crowd dataset和其它开源的数据集在 crowd index上的一个对比:

就算法而言,在拥挤人群的场景下,由于人群过于密集,重合程度太高,每个人的位置难以用人体检测框表示,传统的二步法模型往往会失效。因此,研究者们提出了一个全局竞争匹配算法,减少了姿态估计模型对于人体框的依赖,同时提高了模型对于复杂人体场景的鲁棒性,在拥挤场景中的表现超越了现有的方法。

人体检测框难以表达人的位置

Loss Design

以往的多人pose模型loss,都是简单的把不属于当前这个人的joint当做背景直接抑制掉.文章认为直接抑制掉这些joint不利于最后的推理.因为虽然这些关节点不属于这个人,但它确实另外一个人的正确的关节点.文章把在一个人的region内的属于它的关节点叫做target joints, 在其内的不属于这个人的关节点叫做interference joints. 在计算loss的时候,会根据joint的类别给个权重计算loss,这样可以即抑制了interference joints又保留了只不过其所占比重略低. 我可能说的不大清楚,还是直接看原文吧:

研究者们设计了一个关节点候选损失函数,通过控制模型输出响应程度不同的多峰值热度图,在人体框不准确的情况下,模型尽可能地输出候选关节点可能的位置。在得到每个人体框的候选关节点后,通过聚类与链接,消除冗余结果的同时,构建出一个人体实例-候选关节的图模型,以此来表征了人体实例与每个关节点之间的连接关系与概率。

Person-Joint Graph

除了改变loss的计算方式,文章还提出了另外一个改进的地方,就是不使用传统的NMS去提取关节点而是构建一个Person-Joint Graph来整理最后得到的关节点. 首先,由于是crowd scene, 那么两个不同的人提取出的框就有很大一部分重叠,这就造成同一个人的同一个关节处会多次重复提取得到不同位置的点.如果直接根据每个关节点的响应值来构建最后的pose, 那么crowd严重的两个人有可能连到同一个点上去.因此,在构图之前,先把有歧义的点想除掉,具体方法就是判断两个点的欧氏距离,如果小于设定的阈值,就认为是同一个人的同一个点.还是看原文吧:

构建Person-Joint Graph

以human instance和joint node为图的节点, 将 joint node和human instance分别相连, 注意此时有可能连错, 因为一个人可能连到了其他人的关节点.这样,每个点都和一个人或者多个人连接起来,这就是一条边,边的权重就是该点的响应值. 我们前面提到过,一个human instance里提取出的关键点可能有两类,一类是target joints,这个是正确的属于当前人的关节点, 一类是interference joints, 这个是不正确的点. 而在loss计算的时候,我们会抑制interference joints,即最终我们得到的结果, interference joints的响应值应该比target joints响应值更低,即对应的边的权重更低.下一步就是在这个person-joint graph里找到有最大权值的子图. 方法如下:
        

借助人体实例-候选关节的图模型,人体姿态估计问题可转化成图模型中的最佳匹配问题,因为人体姿态问题具有很强的特殊性,而该图模型具有很强的稀疏性。并且经过研究者们的分析,优化匹配问题的时间复杂度与传统的NMS算法相当。

本质理解

总得来说,该方法由于建立了一个全局的图模型,在匹配过程中考虑到了整体的连接方式,因此能很好地改善了二步法中缺乏全局视野的不足。

此外,在实验中,研究者们还对比了该算法与其他开源系统与算法之间的性能。在CrowdPose数据集中,比当前最好的算法提升了5.2mAP;在极度拥挤的子集中,提升了6.2mAP。相较于OpenPose和Detectron(Mask R-CNN)等姿态估计开源系统,不仅性能得以提升,而且运行速度也快了2至3倍。

我觉得文章最主要的地方在于提出target joints和interference joints这个概念,因为以往从来没想过, 都是直接保留target joints, 非target joints就直接抑制掉了.文章保留了这两类点,并且打上不同比重的label, 从而让网络有意的去学习这两类点,最后再通过构建图的方法来求得最优解。

在CrowdPose数据集上的定量对比实验

三个场景子集中的性能评估与运行速度对比(简单、一般、拥挤)

未来,研究者们将针对这种新的竞争匹配模型进行优化,对其他形式的拥挤检测问题(如拥挤实例分割)开展进一步研究。

参考文献:

1.https://news.sjtu.edu.cn/jdzh/20190308/96899.html

2.https://blog.csdn.net/Murdock_C/article/details/84886471

论文阅读之《CrowdPose: Efficient Crowded Scenes Pose Estimation and A new Benchmark》相关推荐

  1. 论文阅读之《DeepIlluminance: Contextual IlluminanceEstimation via Deep Neural Networks》

    ArXiv2019 Jun Zhang合肥工业大学 Tong Zheng合肥工业大学 Shengping Zhang哈尔滨工业大学(威海) Meng Wang合肥工业大学 Introduction 回 ...

  2. 论文阅读 (69):Collaborative Learning for Deep Neural Networks

    文章目录 1 引入 1.1 题目 1.2 摘要 1.3 Bib 2 协作学习 2.1 训练图的生成 2.2 学习目标 2.3 一组分类器头的优化 2.3.1 同步SGD 2.3.2 反向传播重缩放 2 ...

  3. 论文阅读:Aggregated Residual Transformations for Deep Neural Networks

    本萌新记录一下看过的论文,如果理解有误大佬们体谅下QAQ. 摘要: 作者提出一个用于图像分类的.简单.高度模块化的网络结构.该网络是通过重复一个构建块(building block)来构建的,该构建块 ...

  4. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](7)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](7) Into the Weeds Other types of grap ...

  5. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](5)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](5) Graph Neural Networks 图神经网络 Now th ...

  6. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](4)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](4) The challenges of using graphs in ...

  7. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](3)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](3) What types of problems have graph ...

  8. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](2)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](2) Graphs and where to find them 图以及在 ...

  9. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](1)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](1) 最近读了一篇Distill网站上的一篇文章,讲的是图神经网络的入门, ...

  10. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](6)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](6) GNN playground Some empirical GNN ...

最新文章

  1. 使用 ale.js 制作一个小而美的表格编辑器(3)
  2. OpenUPF 的设备形态与架构设计
  3. 从一道面试题,到“我可能看了假源码[2]
  4. Flex学习的利器《Hello Flex4》
  5. vs编译应用程序不依赖运行vs环境
  6. mysql 从物理文件恢复_从物理文件恢复MySQL数据库
  7. [ NOIP提高组 2016]愤怒的小鸟(暴搜 + 状压DP)// [SNOI2017]一个简单的询问(莫队)
  8. 用赫夫曼树进行文件的压缩
  9. linux分区始柱号,找到了linux分区顺序错乱修复方法
  10. Matlab解析LQR与MPC的关系
  11. $(document).ready(function(){}),$().ready(function(){})和$(function(){})三个有区别么
  12. 黑客帝国,社会化网络
  13. Discarding previously cached master state
  14. 针对linux系统中/usr/src/kernels中找不到内核源码的问题
  15. 小程序高级电商前端第1周走进Web全栈工程师<二>
  16. maple java,讲解:MACM 401、Maple worksheet、Java,Python、Java,c++SQL|
  17. NDCG评价指标讲解
  18. 【MySQL】MySQL用 limit 为什么会影响性能?
  19. i3-10110U和i5 10210u 哪个好
  20. 处理得怎么样填空词语_咋办得什么填词语

热门文章

  1. 5.3.2 jmeter组件-线程组:setUp线程组和tearDown线程组
  2. 大数据基础(三):​​​​​​​​​​​​​​​​​​​​​大数据应用场景
  3. 用Python获取照片GPS信息
  4. KDD 2017 参会报告
  5. [附源码]JAVA+ssm计算机毕业设计房屋租赁管理系统设计(程序+Lw)
  6. 太原理工大学系统分析与设计实验报告实验室设备_“艺术之光”绽放太原理工大学首届本科生专业节...
  7. 狂神学习系列04:MySQL+JDBC
  8. windows免安装版mysql
  9. python实现指数增长
  10. 主分区与逻辑分区的区别