本文主要介绍2D人体姿态估计的基本概念和相关算法,其中算法部分着重介绍基于深度学习的人体姿态估计算法的两个方向,即自上而下(Top-Down)的检测方法和自下而上(Bottom-Up)的检测方法。

前言:人体骨骼关键点对于描述人体姿态,预测人体行为至关重要。因此人体姿态估计是诸多计算机视觉任务的基础,例如动作分类,异常行为检测,以及自动驾驶等等。近年来,随着深度学习技术的发展,人体骨骼关键点检测效果不断提升,已经开始广泛应用于计算机视觉的相关领域。本文主要介绍2D人体姿态估计的基本概念和相关算法,其中算法部分着重介绍基于深度学习的人体姿态估计算法的两个方向,即自上而下(Top-Down)的检测方法和自下而上(Bottom-Up)的检测方法。

相关介绍

什么是人体姿态估计

人体姿态估计,即Pose Estimation,主要检测人体的一些关键点,如关节,五官等,通过关键点描述人体骨骼信息;

应用与挑战

人体姿态估计是计算机视觉的基础性算法之一,在计算机视觉的其他相关领域的研究中都起到了基础性的作用,如行为识别、人物跟踪、步态识别等相关领域。具体应用主要集中在智能视频监控,病人监护系统,人机交互,虚拟现实,人体动画,智能家居,智能安防,运动员辅助训练等等。

由于人体具有相当的柔性,会出现各种姿态和形状,人体任何一个部位的微小变化都会产生一种新的姿态,同时其关键点的可见性受穿着、姿态、视角等影响非常大,而且还面临着遮挡、光照、雾等环境的影响,除此之外,2D人体关键点和3D人体关键点在视觉上会有明显的差异,身体不同部位都会有视觉上缩短的效果(foreshortening),使得人体骨骼关键点检测成为计算机视觉领域中一个极具挑战性的课题。

相关数据集

LSP(Leeds Sports Pose Dataset):单人人体关键点检测数据集,关键点个数为14,样本数2K,在目前的研究中基本上被弃用;

FLIC(Frames Labeled In Cinema):单人人体关键点检测数据集,关键点个数为9,样本数2W,在目前的研究中基本上被弃用;

MPII(MPII Human Pose Dataset):单人/多人人体关键点检测数据集,关键点个数为16,样本数25K;

MSCOCO:多人人体关键点检测数据集,关键点个数为17,样本数多于30W,目前的相关研究基本上还需要在该数据集上进行验证;

AI Challenger:多人人体关键点检测数据集,关键点个数为14,样本数约38W,竞赛数据集;

PoseTrack:

最新的关于人体骨骼关键点的数据集,多人人体关键点跟踪数据集,包含单帧关键点检测、多帧关键点检测、多人关键点跟踪三个人物,多于500个视频序列,帧数超过20K,关键点个数为15。

传统算法概述

传统的人体骨骼关键点检测算法基本上都是在几何先验的基础上基于模版匹配的思路来进行,那么核心就在于如何去用模版表示整个人体结构,包括关键点的表示,肢体结构的表示以及不同肢体结构之间的关系的表示。一个好的模版匹配的思路,可以模拟更多的姿态范围,以至于能够更好的匹配并检测出对应的人体姿态。

Pictorial Structure是其中一个较为经典的算法思路,主要包含两个部分,其一是单元模版(Unary Templates),其二是模版关系(Pairwise Springs),对于模版关系,提出了著名的弹簧形变模型,弹簧形变模型,即对部件模型与整体模型的相对空间位置关系进行建模,利用了物体的一些空间先验知识,既合理约束了整体模型和部件模型的空间相对位置,又保持了一定的灵活性。

在接下来的研究中,为了匹配更大的姿态范围,Yang & Ramanan提出了“mini parts”的概念,即将每个肢体结构(part)切分成更小的parts以能够模拟更多的姿态变化,从而提高模版匹配的效果,具体示意图如下图(摘自论文[7]对应slides)所示。

人体姿态估计

算法概述

多人人体骨骼关键点检测主要有两个方向,一种是自上而下,一种是自下而上,其中自上而上的人体骨骼关键点定位算法主要包含两个部分,人体检测和单人人体关键点检测,即首先通过目标检测算法将每一个人检测出来,然后在检测框的基础上针对单个人做人体骨骼关键点检测,其中代表性算法有G-RMI, CFN, RMPE, Mask R-CNN, and CPN,目前在MSCOCO数据集上最好的效果是72.6%;自下而上的方法也包含两个部分,关键点检测和关键点聚类,即首先需要将图片中所有的关键点都检测出来,然后通过相关策略将所有的关键点聚类成不同的个体,其中对关键点之间关系进行建模的代表性算法有PAF, Associative Embedding, Part Segmentation, Mid-Range offsets,目前在MSCOCO数据集上最好的效果是68.7%。

Coordinate、Heatmap和Heatmap + Offsets

在介绍多人人体骨骼关键点检测算法之间,首先介绍一下关键点回归的Ground Truth的构建问题,主要有两种思路,Coordinate和Heatmap,Coordinate即直接将关键点坐标作为最后网络需要回归的目标,这种情况下可以直接得到每个坐标点的直接位置信息;Heatmap即将每一类坐标用一个概率图来表示,对图片中的每个像素位置都给一个概率,表示该点属于对应类别关键点的概率,比较自然的是,距离关键点位置越近的像素点的概率越接近1,距离关键点越远的像素点的概率越接近0,具体可以通过相应函数进行模拟,如Gaussian等,如果同一个像素位置距离不同关键点的距离大小不同,即相对于不同关键点该位置的概率不一样,这时可以取Max或Average,如下图(摘自论文[16])所示。

对于两种Ground Truth的差别,Coordinate网络在本质上来说,需要回归的是每个关键点的一个相对于图片的offset,而长距离offset在实际学习过程中是很难回归的,误差较大,同时在训练中的过程,提供的监督信息较少,整个网络的收敛速度较慢;Heatmap网络直接回归出每一类关键点的概率,在一定程度上每一个点都提供了监督信息,网络能够较快的收敛,同时对每一个像素位置进行预测能够提高关键点的定位精度,在可视化方面,Heatmap也要优于Coordinate,除此之外,实践证明,Heatmap确实要远优于Coordinate,具体结构如下图所示。

最后,对于Heatmap + Offsets的Ground Truth构建思路主要是Google在CVPR 2017上提出的,与单纯的Heatmap不同的是,Google的Heatmap指的是在距离目标关键点一定范围内的所有点的概率值都为1,在Heatmap之外,使用Offsets,即偏移量来表示距离目标关键点一定范围内的像素位置与目标关键点之间的关系。目前还没有在公开的论文看到有人比较过这两种Ground Truth构建思路的效果差异,但是个人认为Heatmap + Offsets不仅构建了与目标关键点之间的位置关系,同时Offsets也表示了对应像素位置与目标关键点之间的方向信息,应该要优于单纯的Heatmap构建思路。如下图所示(摘自论文[9]。

单人姿态估计

1. Convolutional Pose Machines:本论文将深度学习应用于人体姿态分析,同时用卷积图层表达纹理信息和空间信息。主要网络结构分为多个stage,其中第一个stage会产生初步的关键点的检测效果,接下来的几个stage均以前一个stage的预测输出和从原图提取的特征作为输入,进一步提高关键点的检测效果。具体的流程图如下图(摘自论文[12])所示。

用各部件响应图来表达各部件之间的空间约束,响应图和特征图一起作为数据在网络中传递。人体关键点在空间上的先验分布会指导网络的学习,假如stage 1的预测结果中右肩关键点的预测结果是正确的,而右肘关键点的预测是错误的,那么在接下来的stage中肩和肘在空间上的先验分布会指导网络的学习。如下图(摘自论文[12])所示。

除此之外,使用多阶段监督,对于各个阶段的预测输出都有监督训练,避免过深网络难以优化的问题,而且感受野随着stage的增多而逐渐增大,最后值得一提的是第一阶段对原图提取特征的网络区别于stage > 1的特征提取网络,因为第一个阶段网络的作用是预测初步的结果,而后几个阶段的作用是结合关键点空间先验知识和对原图提取的特征对上一个stage预测的结果做进一步精化。

2.Stacked Hourglass Networks for Human Pose Estimation:对给定的单张 RGB 图像,输出人体关键点的精确像素位置,使用多尺度特征,捕捉人体各关节点的空间位置信息。网络结构形似沙漏状,重复使用 top-down 到 bottom-up 来推断人体的关节点位置。每一个 top-down到 bottom-up 的结构都是一个 hourglass 模块。

多人姿态估计

自上而下的人体姿态估计算法

自上而下(Top-Down)的人体骨骼关键点检测算法主要包含两个部分,目标检测和单人人体骨骼关键点检测,对于目标检测算法,这里不再进行描述,而对于关键点检测算法,首先需要注意的是关键点局部信息的区分性很弱,即背景中很容易会出现同样的局部区域造成混淆,所以需要考虑较大的感受野区域;其次人体不同关键点的检测的难易程度是不一样的,对于腰部、腿部这类关键点的检测要明显难于头部附近关键点的检测,所以不同的关键点可能需要区别对待;最后自上而下的人体关键点定位依赖于检测算法的提出的Proposals,会出现检测不准和重复检测等现象,大部分相关论文都是基于这三个特征去进行相关改进,接下来我将简要介绍其中几种经典的算法思路。

1.Cascaded Pyramid Network:本论文主要关注的是不同类别关键点的检测难度是不一样的,整个结构的思路是先检测比较简单的关键点、然后检测较难的关键点、最后检测更难的或不可见的关键点。具体Pipeline如下图(摘自论文[13]对应slides)所示。

具体实现时,分为两个stage,GlobalNet和RefineNet。其中GlobalNet主要负责检测容易检测和较难检测的关键点,对于较难关键点的检测,主要体现在网络的较深层,通过进一步更高层的语义信息来解决较难检测的关键点问题;RefineNet主要解决更难或者不可见关键点的检测,这里对关键点进行难易程度进行界定主要体现在关键点的训练损失上,使用了常见的Hard Negative Mining策略,在训练时取损失较大的top-K个关键点计算损失,然后进行梯度更新,不考虑损失较小的关键点。网络结果如下图(摘自论文[13]对应slides)所示。

2.RMPE:本论文主要考虑的是自上而下的关键点检测算法在目标检测产生Proposals的过程中,可能会出现检测框定位误差、对同一个物体重复检测等问题。检测框定位误差,会出现裁剪出来的区域没有包含整个人活着目标人体在框内的比例较小,造成接下来的单人人体骨骼关键点检测错误;对同一个物体重复检测,虽然目标人体是一样的,但是由于裁剪区域的差异可能会造成对同一个人会生成不同的关键点定位结果。本文提出了一种方法来解决目标检测产生的Proposals所存在的问题,即通过空间变换网络将同一个人体的产生的不同裁剪区域(Proposals)都变换到一个较好的结果,如人体在裁剪区域的正中央,这样就不会产生对于一个人体的产生的不同Proposals有不同关键点检测效果。具体Pipeline如下图(摘自论文[14])所示。

自下而上的人体姿态估计算法

自下而上(Bottom-Up)的人体骨骼关键点检测算法主要包含两个部分,关键点检测和关键点聚类,其中关键点检测和单人的关键点检测方法上是差不多的,区别在于这里的关键点检测需要将图片中所有类别的所有关键点全部检测出来,然后对这些关键点进行聚类处理,将不同人的不同关键点连接在一块,从而聚类产生不同的个体。而这方面的论文主要侧重于对关键点聚类方法的探索,即如何去构建不同关键点之间的关系,接下来我将介绍几种经典的方法。

1.Part Segmentation:即对人体进行不同部位分割,而关键点都落在分割区域的特定位置,通过部位分割对关键点之间的关系进行建模,既可以显式的提供人体关键点的空间先验知识,指导网络的学习,同时在最后对不同人体关键点进行聚类时也能起到相应的连接关键点的作用。如下图(摘自论文[15])所示。

2.Part Affinity Fields:该方法通过对人体的不同肢体结构进行建模,使用向量场来模拟不同肢体结构,解决了单纯使用中间点是否在肢干上造成的错连问题。

如上图(b)(摘自论文[16]对应slides)所示,如果只使用中间点对肢干进行建模,如果中间点都在对应的肢干上,则判断两个关键点处在该肢干的两端,这样就会出现如上图所示的错连情况。而PAFs则不仅使用中间点来建模肢干,而且在中间的位置之外还给每个中间点加上了方向的信息,这样就能解决出现的错连问题。具体如下图(摘自论文[16]对应slides)所示。

3.Personlab:该方法通过直接回归一个关键点到另一个关键点之间的offset来建模两个关键点之间的关系,这种较长距离的offsets是较难学习的,在回归具体数值时会有较大误差,这里可以用关键点周围的Short-Range Offsets去进一步Refine对应的offsets。具体如下图(摘自论文[18])所示。

4.Pose Proposal Networks: 将图片分割为较小的网格,使用较小的网络对每一幅网格图片进行单次物体检测范例,通过区域提议(region proposal)框架将姿态检测重定义为目标检测问题。粗略地提取网格方式的对象置信度图,之后,使用单次CNN直接检测肢体,通过新颖的概率贪婪解析步骤,生成姿势提议。

5.MultiPoseNet: Fast Multi-Person Pose Estimation using Pose Residual Network Pose Residual Network (PRN)姿态残差网络示意图,PRN网络用来分配每个关键点属于哪个人体,

特征提取用的骨干网络(Backbone)使用了带有两个Feature Pyramid Networks (FPN)的ResNet,一个输出到keypoint Estimation subnet,另一个输出到Person Detection Subnet。keypoint Estimation subnet示意图,它将层叠的CNN特征作为输入,然后输出关键点和语义分割热图(keypoint and segmentation heatmaps)Person Detection Subnet人体检测子网络直接使用了修改的RetinaNet,即仅让网络检测人体。

Pose Residual Network (PRN)姿态残差网络是对每一个检测到的人体区域的关键点集合,学习从关键点集合到正常分布的关键点的映射。作者称这一步叫做残差校正(residual correction),文中使用残差多层感知机(residual multilayer perceptron)来实现。PRN采用感兴趣区域(RoI)合并的关键点检测,然后将它们馈送到残余多层感知机(MLP)中。 PRN同时考虑所有关节并学习关节的配置。我们通过绘制一组学习配置样本来说明PRN的这种能力(图右)。

小结

人体骨骼关键点定位至今仍然是计算机视觉领域较为活跃的一个研究方向,人体骨骼关键点检测算法还没有达到比较完美的效果,在较为复杂的场景下仍然会出现很多错误的检测结果。自上而下的关键点检测算法在效果上要明显好于自下而上的关键点检测算法,因为自上而下的检测方法加入了整个人体的一个空间先验。个人认为,自下而上的关键点定位算法没有显示的去建模整个人体的空间关系,而只是建模了局部的空间关系,以至于在效果上目前还远低于自上而上的关键点检测方法。

注:本文仅做2018年10月之前的综述,

大部分转载自  来源:SigAI 作者:东尼大佬 http://www.cvmart.net/community/article/detail/279 稍加补充。

2D人体姿态估计综述相关推荐

  1. 3D人体姿态估计综述 - 《3D Human pose estimation: A review of the literature and analysis of covariates》

    <3D Human pose estimation: A review of the literature and analysis of covariates> CVIU 2016 论文 ...

  2. 【人体姿态估计综述(2D、3D)】

    人体姿态估计综述(2D.3D) 一.任务描述 二.2D人体姿态估计 2.1 2D单人姿态估计 2.1.1 回归方法 2.1.2 heatmap方法 2.2 2D多人姿态估计 2.2.1 自顶向下 2. ...

  3. 论文阅读笔记--Monocular Human Pose Estimation: A Survey of Deep Learning-based Methods 人体姿态估计综述

    趁着寒假有时间,把之前的论文补完,另外做了一点点笔记,也算是对论文的翻译,尝试探索一条适合自己的论文阅读方法. 这篇笔记基本按照原文的格式来,但是有些地方翻译成中文读起来不太顺,因此添加了一些自己的理 ...

  4. 姿态估计之2D人体姿态估计(1)(仅供个人参考)

    参考 自顶向下的 2D 人体姿态估计 - 知乎 人体姿态估计(Human Pose Estimation)经典方法整理 - 知乎 2D人体姿态估计浅析 - 知乎 人体姿态估计中回归出了heatmap如 ...

  5. 一文概览2D人体姿态估计

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来自 | 知乎    作者 | 谢一宾 链接 | https:// ...

  6. 姿态估计之2D人体姿态估计 - PifPaf:Composite Fields for Human Pose Estimation

    参考: PifPaf: Composite Fields for Human Pose Estimation_MatthewHsw的博客-CSDN博客 OpenPifPaf: encoder过程_Ma ...

  7. Human Pose Estimation人体姿态估计综述调研

    给定一幅图像或一段视频,人体姿态估计就是去恢复其中人体关节点位置的过程. 数据集 LSP 地址:http://sam.johnson.io/research/lsp.htm 样本数:2K 关节点个数: ...

  8. 单人人体姿态估计综述(转发)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Anymake_ren/article/details/81978260 </div>&l ...

  9. 2020人体姿态估计综述(Part4:3D Human Pose Estimation from Image)

    承接之前的博文: A 2020 Human Pose Estimation Review (Part1:2D Single Person) A 2020 Human Pose Estimation R ...

最新文章

  1. 有符号整型的数据范围为什么负数比正数多一个?
  2. 计算机视觉编程——图像到图像的映射
  3. 【Jmeter自学】badboy使用(三)
  4. 浅析网页meta标签中X-UA-Compatible属性的使用
  5. webpack常用配置
  6. LeetCode MySQL 512. 游戏玩法分析 II
  7. Gartner的预言:通向混合IT之旅
  8. JavaSE----常用类(String、StringBuilder、StringBuffer)
  9. 揭秘 IPython 的 5 种最佳调试方法
  10. 2018星际AI大赛冠军诞生!一个个机器学习算法,都输给不会学习的韩国bot
  11. windows 使用 tricks
  12. 何冲(为奥运冠军名字作诗)
  13. nanopi制作个人服务器,NanoPi K2 服务器系统镜像
  14. MybatisPlus代码生成器的使用
  15. SpringBoot配置redis
  16. Ubuntu: 使用U盘拷贝文件
  17. SpringCloud OpenFeign调用第三方服务
  18. 【贵州i茅台周年答题--答案】
  19. Go | 一分钟掌握Go | 9 - 通道
  20. word文档转pdf并在任意浏览器预览打印一体化方案

热门文章

  1. NTP时钟服务器配置
  2. 无字母数字webshell总结
  3. 羽毛球拍选购常见问题解疑
  4. 手把手教你微信彻底删除聊天记录的方法,将你的“小秘密”封锁起来!
  5. Python同时录制屏幕、摄像头、声音合成视频把人像放在最终视频右下角
  6. 开启Hyper-v,使用蓝叠模拟器进行抓包的曲折经历
  7. U盘安装Windows 10 系统教程
  8. 对android手机已删除文件的恢复
  9. 3G手机视频对讲开发包
  10. Linux实现彻底清理空文件夹的方法详解