人体骨骼关键点检测综述
SIGAI特邀作者东尼大佬
2018.6.5
原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不得转载,
不能用于商业目的。
导言
人体骨骼关键点对于描述人体姿态,预测人体行为至关重要。因此人体骨骼
关键点检测是诸多计算机视觉任务的基础,例如动作分类,异常行为检测,以及
自动驾驶等等。近年来,随着深度学习技术的发展,人体骨骼关键点检测效果不
断提升,已经开始广泛应用于计算机视觉的相关领域。本文主要介绍 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])。
自上而下的人体关键点检测算法
自上而下(Top-Down)的人体骨骼关键点检测算法主要包含两个部分,目
标检测和单人人体骨骼关键点检测,对于目标检测算法,这里不再进行描述,而
对于关键点检测算法,首先需要注意的是关键点局部信息的区分性很弱,即背景
中很容易会出现同样的局部区域造成混淆,所以需要考虑较大的感受野区域;其
次人体不同关键点的检测的难易程度是不一样的,对于腰部、腿部这类关键点的
检测要明显难于头部附近关键点的检测,所以不同的关键点可能需要区别对待;
最后自上而下的人体关键点定位依赖于检测算法的提出的 Proposals,会出现检
测不准和重复检测等现象,大部分相关论文都是基于这三个特征去进行相关改进,
接下来我将简要介绍其中几种经典的算法思路。
Convolutional Pose Machines:本论文将深度学习应用于人体姿态分析,同
时用卷积图层表达纹理信息和空间信息。主要网络结构分为多个 stage,其中第
一个 stage 会产生初步的关键点的检测效果,接下来的几个 stage 均以前一个
stage 的预测输出和从原图提取的特征作为输入,进一步提高关键点的检测效果。
具体的流程图如下图(摘自论文[12])所示。
用各部件响应图来表达各部件之间的空间约束,响应图和特征图一起作为数
据在网络中传递。人体关键点在空间上的先验分布会指导网络的学习,假如 stage
1 的预测结果中右肩关键点的预测结果是正确的,而右肘关键点的预测是错误的,
那么在接下来的 stage 中肩和肘在空间上的先验分布会指导网络的学习。如下图
(摘自论文[12])所示。
除此之外,使用多阶段监督,对于各个阶段的预测输出都有监督训练,避免
过深网络难以优化的问题,而且感受野随着 stage 的增多而逐渐增大,最后值得
一提的是第一阶段对原图提取特征的网络区别于 stage > 1 的特征提取网络,因
为第一个阶段网络的作用是预测初步的结果,而后几个阶段的作用是结合关键点
空间先验知识和对原图提取的特征对上一个 stage 预测的结果做进一步精化。
Cascaded Pyramid Network:本论文主要关注的是不同类别关键点的检测
难度是不一样的,整个结构的思路是先检测比较简单的关键点、然后检测较难的
关键点、最后检测更难的或不可见的关键点。具体 Pipeline 如下图(摘自论文[13]
对应 slides)所示。