【OpenMMLab】人体姿态估计、关键点检测与MMPose

系列文章目录

第一课:【OpenMMLab】OpenMMLab概述



前言

【OpenMMLab】OpenMMLab概述 为大家介绍了通用视觉框架 OpenMMLab 中具有代表性的算法库,如MMPretrain、MMDetecton、MMDetection3D、MMRotate、MMSegmentation、MMPose、MMAction2、MMOCR、MMagic、MMYOLO等。
本篇博客将深入了解人体姿态估计(或关键点检测)算法,以及OpenMMLab 开源的用于关键点检测的算法库 MMPose 。

一、人体姿态估计或关键点检测任务

任务介绍

给定一张图片,任务要求检测图像中人脸、手部、身体等部位的关键点。
输入: 图像 I
输出:所有关键点的像素坐标 ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x J , y J ) (x_1, y_1), (x_2, y_2)\dots(x_J, y_J) (x1,y1),(x2,y2)(xJ,yJ),这里的J为关键点的总数,取决于具体的关键点检测任务和模型。
常见的关键点
关键点检测可以预测人体关键点在三维空间中的坐标 ( x , y , z ) (x, y, z) (x,y,z),进而在三维空间中还原人的姿态。
三维人体关键点

下游任务

PoseC3D: 基于人体关键点识别行为动作。这项工作已被开源在 MMAction2 中。
在这里插入图片描述
CG、动画: 基于3D人体关键点检测,根据人体姿态,表情姿态的关键点的变化驱动动画人物的动作

除此之外,还有很多有趣的应用:

  1. 人机交互:通过识别人手部的动作和姿态去控制其他物体;
  2. 动物行为分析:检测动物关键点,分析动物的行为

二、2D 姿态估计

在图像中定位人体关键点(通常为人体主要关节)的坐标,如臀部、颈部和左右手坐标等。
在这里插入图片描述

基本思路1:基于回归 (Regression Based)

关键点检测问题可以认为是一个回归问题,输入一张图片,让模型回归关键点的坐标,即 ( x 1 , y 1 , x 2 , … , x J , y J ) = f Θ ( I ) (x_1, y_1, x_2, \dots, x_J, y_J)=f_{\Theta}(I) (x1,y1,x2,,xJ,yJ)=fΘ(I)通常深度学习模型直接回归坐标有些困难,精度不是最优
2D人体姿态估计

基本思路2:基于热力图 (Heatmap Based)

基于热力图的方法,并不是直接的回归关键点的坐标,而是预测关键点位于每个位置的概率,即
H 1 … J = f Θ ( I ) H_{1\dots J}=f_{\Theta}(I) H1J=fΘ(I)
其中, H j ( x j , y j ) = 1 H_j(x_j, y_j)=1 Hj(xj,yj)=1 表示关键点 j j j 位于 ( x j , y j ) (x_j, y_j) (xj,yj)的概率为1, H H H被称为热力图,尺寸与原图 I I I相同或等比例缩小。
模型预测热力图比直接回归坐标相对容易(更加符合神经网络的结构),模型精度相对更高,因此主流的算法更多的是基于热力图。但是预测热力图的计算消耗大于直接回归。

热力图可以基于原始关键点坐标生成,作为训练网络的监督信息;
网络预测的热力图,可以通过求极大值等方法,找到预测的关键点坐标;

在这里插入图片描述

从数据标注到热力图

**问题1:**如何根据关键点的坐标生成对应2D热力图呢?
真值中,每个关键点对应一个2D热力图 H j ∈ R H × W H_j \in \mathbb R^{H \times W} HjRH×W,第 j j j个关键点 ( x j , y j ) (x_j, y_j) (xj,yj)对应的热力图为: H j ( x , y ) = e x p ( − ( x − x j ) 2 + y − y j 2 σ 2 ) H_j(x, y)=exp(-\frac{(x-x_j)^2+{y-y_j}^2}{\sigma^2}) Hj(x,y)=exp(σ2(xxj)2+yyj2)
σ \sigma σ 是可以调节的参数。
使用热力图训练模型就是根据关键点标注,按照上述流程生成热力图,进而在对模型进行监督训练。
问题2:如何从第 j j j个关键点生成的热力图 H j ( x , y ) H_j(x, y) Hj(x,y)或模型预测的热力图 H ^ j ( x , y ) \hat H_j(x, y) H^j(x,y)中找到关键点 ( x j , y J ) (x_j, y_J) (xj,yJ)的位置?

  • 朴素方法:求热力图最大值的位置 ( x j , y j ) = a r g m a x x , y H j ( x , y ) (x_j, y_j) = {argmax}_{x, y}H_j(x, y) (xj,yj)=argmaxx,yHj(x,y)

朴素方法存在几个问题:1. 可能有多个最大值的点;2. 可能存在噪声点; 使得朴素方法的鲁棒性较差

  • Integral Human Pose Regression
    归一化热力图形成点位于不同位置的概率图,在计算位置期望:
    x j = ∑ x , y x P j ( x , y ) , y j = ∑ x , y y P j ( x , y ) x_j=\sum_{x, y}xP_j(x, y), y_j=\sum_{x,y}yP_j(x, y) xj=x,yxPj(x,y),yj=x,yyPj(x,y)
    其中 P j P_j Pj H j H_j Hj生成的概率图:
    P j ( x i , y i ) ) = e H j ( x i , y i ) ∑ x , y e H j ( x , y ) P_j(x_i, y_i)) = \frac{e^{H_j(x_i, y_i)}}{\sum_{x, y}e^{H_j(x, y)}} Pj(xi,yi))=x,yeHj(x,y)eHj(xi,yi)

优点:1. 可微分; 2. 连续,没有量化误差 鲁棒性更好

在这里插入图片描述

多人姿态估计

自顶向下

自顶向下的方法包括基于回归和基于热力图的方法,方法包括两个步骤:
Step 1. 使用目标检测算法检测每个人体的区域;
Step 2. 基于单人图像估计单人姿态;

  1. 整体精度受限于目标检测的精度
  2. 复杂度会和图像中的人数成正比

在这里插入图片描述

自底向上方法

自底向上的方法包括两个步骤:
Step 1. 使用关键点检测模型检测输入图像中的所有关键点;
Step 2. 基于位置信息和其他辅助信息,将关键点组合成不同人的关键点;

优点:推理速度与人数无关

在这里插入图片描述

单阶段方法

在这里插入图片描述

三、3D 姿态估计

任务描述:给定一张图像,检测图像中所有人所有关键点的空间坐标 ( x , y , z ) (x, y, z) (x,y,z)

  • 直接基于2D图像回归3D坐标,但是2D图像不包含深度,这是一个病态问题
    实际上是隐式接住了语义特征或人体的刚性,实现了3D位姿的推理
  • 利用视频获取更多的帧间信息辅助推断
  • 直接运用同一对象的多视角拍摄图片预测和还原出3D信息
    在这里插入图片描述
    绝对坐标:各关节点在相机坐标系中的坐标;
    相对坐标:关键点相对于骨盆点的坐标
    在这里插入图片描述
    可以让模型预测3D的热力图
    对于每个关节点,预测目标为 H × W × d H \times W \times d H×W×d的3D热力图, d d d 表示深度方向的分辨率
    在这里插入图片描述
  • 直接用2D坐标预测3D坐标,就可以取得比较好的效果,不需要借助图像。
  1. 针对每个人,计算所有关键点相对于盆骨的相对坐标
  2. 计算所有人的、同一类关键点的均值方差
  3. 使用该均值方差对这一类的相对坐标进行归一化
  • 利用2D关键点结果预测3D关键点位置
  • 使用网络产生不同视角的特征图,根据相机参数,将特征整合到一个整体特征当中,在使用3D卷积神经网络预测每个人的位置
    在这里插入图片描述
    在这里插入图片描述

四、评估指标

Percentage of Correct Parts (PCP)

PCP以肢体的检出率作为评价指标
考虑每个人的左右大臂小臂大腿小腿,共计8个肢体
如果两个预测关节位置和真实肢体关节位置之间的距离小于等于肢体长度的一半,则认为肢体已检测到且是正确的部分
对于某个特定的部位,完整数据集上的指标为 P C P = 整个数据集中正确检出的此部位数 整个数据集中此部位综述 PCP=\frac{整个数据集中正确检出的此部位数}{整个数据集中此部位综述} PCP=整个数据集中此部位综述整个数据集中正确检出的此部位数
在这里插入图片描述

Percentage of Detected Joints (PDJ)

PDJ 以关键点的位置精度作为评价指标
通常考虑头、肩、肘、腕、臀、膝、踝几个关键点,如果预测关节和真实关节之间的距离在躯干直径的某个比例范围内,则认为检测到检测到了关节。并可以通过改变该比例,可以获得不同程度的定位精度的检测率。
例如: P D J @ 0.2 PDJ@0.2 PDJ@0.2=检测到的预测位置和真实位置间距<0.2*躯千直径)的关键点的比例

Percentage of Correct Key-points (PCK)

PCK以关键点的检测精度作为评价指标
如果预测关节和真实关节之间的距离在某个阈值(可变)内,则认为检测到的关键点是正确的。在2D与3D(PCK3D)任务中均可使用。
PCK阈值通常是根据对象的比例设置的,对象的比例封闭在边界框内。例如,闻值可以是: P C K h @ 0.5 PCK_h@0.5 PCKh@0.5阈值=头部骨骼链接的50%;PCK@0.2阈值=0.2*躯干直径,有时也以150 mm作为阈值

Object Keypoints Similarity (OKS) based mAP

OKS based mAP以关键点相似度(OKS)作为评价指标计算mAP,OKS是MS COCO竞赛指定的关键点评价指标,其定义为
∑ i e x p ( − d i 2 / 2 s 2 k i 2 ) δ ( v i > 0 ) ∑ i δ ( v i > 0 ) \frac{\sum_iexp(-d_i^2/2s^2k_i^2)\delta(v_i > 0)}{\sum_{i}\delta(v_i>0)} iδ(vi>0)iexp(di2/2s2ki2)δ(vi>0)
其中:

  • d i d_i di是gt和预测关键点之间的欧氏距离.
  • s s s是对象分割区域面积的平方根
  • k k k是控制衰减的关键点常量
  • v i v_i vi是一个可见性标志,可以是0、1或2,分别表示未标记、标记但不可见、可见并标记
  • 由于OKS可以用于计算距离 (0-1之间),所以它可以显示预测关键点与真实关键点之间的距离。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值