上海交大的卢策吾老师来介绍人体姿态估计和MMPose算法库。
Class2: MMPose
人体姿态概述
什么是人体姿态估计
是从图像中识别人脸、手部、身体等关键点。其过程为输入图像
I
I
I,然后用
(
x
,
y
)
(x,y)
(x,y)来表示所有关键点的像素坐标,其总数为
J
J
J。通过这种方法,可以得到以下图像的关键点。
也可以把这个任务拓展到三维空间中,得到三维空间中人体的姿态。
更进一步的话可以在图像或者视频中恢复出运动的3D人体模型。
下游任务
基于姿态识别,可以完成诸多下游任务。
- 行为识别:PoseC3D,基于人体姿态来进行行为识别;
- CG、动画:根据捕捉姿态来实现动画的动作设计;
- 人机交互:例如通过识别手部姿态来实现不同动作;
- 动物行为分析
2D姿态估计
任务描述:2D人体姿态估计是在图像上定位人体关键点的坐标,这些关键点通常是人体主要关节。
输入图像
I
I
I通过人体姿态估计算法输出了预定义的关键点坐标,分别用
(
x
,
y
)
(x,y)
(x,y)坐标来表示。
基本思路1:基于回归。将关键点检测建模成一个回归问题。例如使用卷积网络,将图像作为输入,在最后一层通过线性回归预测关键点的坐标。
但是深度模型直接回归坐标是比较困难的,精度不是最优。
基本思路2:基于热力图。该方法并不直接回归关键点的坐标,而是预测关键点位于每个位置的概率,即
H
1...
f
=
f
θ
(
l
)
H_{1...f}=f_{\theta}(l)
H1...f=fθ(l)。
H
j
x
i
,
y
j
=
1
H_j{x_i,y_j}=1
Hjxi,yj=1表示关键点
j
j
j位于(x_j,y_j)的概率为1。
H为热力图,尺寸与原图l相同或按比例缩小。
热力图可以基于原始关键点坐标生成,作为训练网络的监督信息。网络预测得到的热力图也可以通过求极大值等方法得到关键点的坐标。
小结:模型预测热力图比直接回归坐标更容易,模型精度更高,但是计算消耗也更大。
使用热力图进行训练的算法流程:
多人姿态估计
多人姿态估计中常见的两种方法分别为自顶向下和自底向上。
自顶向下
其过程为现在图像中进行检测,然后在检测框中进行单肢体的姿态估计。但这中算法会受限于检测器的精度,而且速度和计算量会根据人数的增加而增加。
自底向上
自底向上的方法过程如下:
这种算法的优点在于推理速度和图像中的人数无关。
基于回归的自顶向下方法
在上文中提到DensePose是将分类网络进行修改,将最后一层修改为回归,一次性预测所有关键点的坐标,然后通过最小化平方误差训练网络。
然后通过级联来提升精度。
- 优点:
- 回归模型理论上可以达到无限精度,而热力图方法的精度会受限于特征图的空间分辨率
- 回归模型不需要维持高分辨率特征图,而热力图方法需要计算和存储高分辨率的热力图和特征图,计算成本更高
- 缺点:
- 图像到关键点的映射是非线性的,导致回归坐标比回归热力图更难,且精度也弱于热力图方法。
RLE
RLE 的目标是建模关键点位置的概率分布,即给定图像 I ,给出每个关键点 x 的位置分布 P Θ ( x ∣ I ) P_{\Theta}(x \mid I) PΘ(x∣I) 可以基于标准化流构建该分布,但 RLE 算法还引入了两个技巧以降低模型拟合真实分布的难度:1.重参数化;2.残差似然函数
基于热力图的自顶向下方法
Hourglass
Hourglass的设计思路是要结合不同尺度的信息。用局部信息来检测不同身体组件,用全局信息来得到组件之间的信息,在大尺度变形、遮挡的时候也能够判断出姿态。Hourglass通过级联形成了更强的模型。
后面有其他方法进行了反超。比如力求简单的ResNet就可以结合反卷积来构建一个编码器-解码器的结构。HRNet能够在下采样的时候通过宝库元分辨率分支来保持网络全过程特征图的高分辨率和空间位置信息,从而实现不同分辨率的多尺度特征融合。
单阶段方法
SPM首次提出了人体姿态估计的单阶段解决方案,在取得速度优势的同时,也取得了不逊色于二阶段方法的检测率,并且该方法可以直接从2D图像扩展到3D图像的人体姿态估计。
为了统一人体实例和身体关节的位置信息,为多人姿势估计提供单阶段解决方案,SPR引入了一个辅助关节。
基于Transformer的方法
人体姿态估计和物体检测有一定相似性,都涉及对图像内容的定位。在 DETR 中 query 通过注意力机制逐渐聚焦到特定物体上。PRTR两阶段算法,人体检测阶段:使用DETR检测出图中的不同的人;关键点检测阶段:同样适用DETR结构,用query去学习关键点信息,最终回归关键点位置。
评估指标
PCP以肢体的检出率作为评价指标
考虑每个人的左右大臂、小臂、大腿、小腿共计 4 × 2 = 8 4 \times 2=8 4×2=8 个肢体
如果两个预测关节位置和真实肢体关节位置之间的距离小于等于肢体长度的一半,则认为肢体已检测到且是正确的部分。
PDJ 以关节点的位置精度作为评价指标
通常考虑头、肩、时、腕、臀、膝、踝几个关键点,如果预测关节和真实关节之间的距离在躯干直径的某个比例范围内,则认为检测到检测到了关节。并且可以通过改变该比例,可以获得不同程度的定位精度的检测率。
PCK以关键点的检测精度作为评价指标
如果预测关节和真实关节之间的距离在某个阈值(可变)内,则认为检测到的关键点是正确的。在2D 与3D (PCK3D) 任务中均可使用。
PCK阈值通常是根据对象的比例设置的,对象的比例封闭在边界框内。例如,阈值可以是: PCKh@0.5阈值=头部骨骼链接的50%;PCK@0.2阈值=0.2*躯干直径;有时也以150m作为阈值