OpenMMLab-AI实战营第二期——2.人体关键点检测与MMPose

文章目录

  • 1. 人体姿态估计的介绍和应用
  • 2-1. 2D姿态估计概述
    • 2.1 任务描述
    • 2.2 基于回归
    • 2.3 基于热力图
      • 2.3.1 从数据标注生成热力图(高斯函数)
      • 2.3.2 使用热力图训练模型
      • 2.3.3 从热力图还原关键点
    • 2.4 自顶向下
    • 2.5 自底向上
    • 2.6 单阶段方法
  • 2-2. 2D姿态估计详细说明
    • 2.1 基于回归的自顶向下方法
      • 2.1.1 经典方法
      • 2.1.2 基于最大似然估计的改进(RLE)
      • 2.1.2 背景知识-回归和最大似然估计的联系
      • 2.1.2 背景知识-标准化流Normalizing Flow
      • 2.1.2 RLE的整体设计
    • 2.2 基于热力图的自顶向下方法
      • 2.2.1 Hourglass论文地址(2016年)
      • 2.2.2 Hourglass模型
      • 2.2.3 Simple Baseline(2018年)
      • 2.2.4 HRNet(2019)
    • 2.3 基于热力图的自底向上的方法
      • 2.3.1 Part Affinity Fields & OpenPose(2016)
    • 2.4 单阶段方法
      • 2.4.1 SPM(2019)
    • 2.5 基于Transformer的方法
      • 2.5.1 PRTR(2021)-两阶段算法(基于回归的)
      • 2.5.2 TokenPose(2021)(基于热力图的)
    • 2.6 2D姿态估计小结
  • 3. 3D姿态估计
    • 3.1 任务描述
    • 3.2 方法介绍
      • 3.2.1 Coarse-to-Fine Volumetric Prediction 2017
      • 3.2.2 Simple Baseline 3D(2017)
      • 3.2.3 VideoPose3D
      • 3.2.4 VoxelPose(2020)
  • 4. 人体姿态估计的评估方法/指标
  • 5. DensePose(人体表面参数化)
  • 6. 人体参数化模型
    • 6.1 SMPL(人体参数化模型)-2015
    • 6.2 SMPLify
    • 6.3 HMR
  • 7. 课程总结

视频链接:B站-人体关键点检测与MMPose

1. 人体姿态估计的介绍和应用

在这里插入图片描述
关键点提取,属于模式识别

在这里插入图片描述
人体姿态估计的下游任务:行为识别(比如:拥抱。。)

在这里插入图片描述
下游任务:CG和动画,这个是最常见的应用

在这里插入图片描述
下游任务:人机交互(手势识别,依据收拾做出不同的响应,比如:HoloLens会对五指手势(3D)做出不同的反应)

2-1. 2D姿态估计概述

包括:

  1. 自顶向下方法
  2. 自底向上方法
  3. 单阶段方法
  4. 基于Transformer的方法

2.1 任务描述

在这里插入图片描述
2D人体姿态估计的任务:

  • 输入:一张包含人体的图像
  • 输出:人体关键点(主要关节)的坐标(2D的)

注意,这里的输出是固定对应(预定义的)18个关节的坐标,就是要找这18个位置的坐标

2.2 基于回归

在这里插入图片描述
使用深度学习的模型直接回归坐标有些困难,精度不是最优(效果不好

2.3 基于热力图

在这里插入图片描述
另一种思路是:不直接回归关键点的坐标,而是预测关键点位于每个位置的概率。

  • 比如肩的热力图(越靠近肩膀的预定义的关键点,概率越高,颜色逐渐从黄色变成红色)
  • 18个关键点,对应18个热力图

在这里插入图片描述
基于热力图天然符合神经网络的卷积算子(对每个像素都进行计算,得到每个像素的概率)

2.3.1 从数据标注生成热力图(高斯函数)

在这里插入图片描述
如果想要使用基于热力图的方式,那么首先要根据已有的标注数据生成热力图。

  • 预定义的关键点附近区域的概率其实符合这一事实:
    • 越靠近预定义的关键点,概率越高,如上图,颜色逐渐从黄色变成红色
    • 假设上面这个热力图区域是个圆形,那么任意一个直径作为 x x x轴(距离预定义关键点的距离作为自变量),是关键点的概率作为 y y y轴(因变量),则可以用高斯函数来描述 x x x y y y的关系
  • 所以这里是假设关键点区域的热力图符合高斯分布,来生成热力图(概率图),来进行训练。
  • 所以这里说热力图的尺寸,即作为控制高斯函数图像钟的宽度的 σ \sigma σ参数,也就是控制热力图区域大小

复习一下高斯函数(红色线代表标准正态分布):
在这里插入图片描述
在这里插入图片描述
上图是用期望值及方差作为参数表示的高斯曲线


高斯函数是正态分布的密度函数,下图的红色是标准正态分布
在这里插入图片描述
正态分布的数学期望值或期望值 μ μ μ等于位置参数,决定了分布的位置;其方差 σ 2 \sigma^2 σ2的开平方或标准差 σ \sigma σ 等于尺度参数,决定了分布的幅度。

可以直接看:

  • 中文wiki百科-高斯函数
  • 中文wiki百科-正态分布
  • 打不开上面这个看下面转载的这个,旧了点,但是意思差不多:高斯分布(Gaussian distribution)/正态分布(Normal distribution)

2.3.2 使用热力图训练模型

在这里插入图片描述
将通过关键点标注生成的真值热力图,作为True label,与预测模型预测出来的热力图Predict label逐点比对(就是关键点附近那一小片区域的热力图),计算损失

在这里插入图片描述
所以基于热力图的方法关键就是中心点位置 ( x j , y j ) (x_j,y_j) (xj,yj)(训练目标,优化的参数)和区域大小 α \alpha α(可以是超参,也可以基于图像缩放得到,缩放系数也是超参)

  • 这里其实是一个2D的高斯函数, ( x j , y j ) (x_j,y_j) (xj,yj)其实就对应上面高斯函数图像的最高点
  • 即,真值热力图的构建函数需要满足:距离关键点越近,概率越大,所以高斯函数天然满足这个性质
  • 除此之外,其实只要是类似钟形都可以,下面这个抛物线函数,还有我随便造的一个绝对值函数,其实都满足这个条件(但是概率取值范围[0,1]需要进一步处理一下才行)
    在这里插入图片描述

2.3.3 从热力图还原关键点

在这里插入图片描述

  • 最直接的办法就是求最大概率(热力图最大值)对应的位置的坐标,
    • 按照生成真值热力图的方式来倒推,是很合理的方式
    • 但这是基于:预测的热力图符合高斯函数,这一假设下的推论
    • 实际上,可能预测的热力图形状不会那么规整,可能会有多个最大值,所以直接求1个最大值这种方式不够鲁棒

在这里插入图片描述
另一种从热力图还原关键点的方式就是:

  • 先对热力图的概率进行归一化(对概率用softmax,输出的还是概率),用归一化后的概率计算位置的期望
  • 期望就是平均值,在1D的高斯函数图像中,高斯函数的最高点,对应的 x x x值,确实是 x x x取值范围的均值。
  • 可能不一定能取到最高点,但是能取到"重心",这样利用了整个热力图的概率,相对于上面只看热力图的最大概率,就会比较鲁棒,

这种计算方式还有很好的一个性质:

  • 可以进行端到端的训练,还原关键点的方式的公式,是可以求导的,所以能和整个训练过程串起来。
  • 比如,一开始训练的时候,网络初始化时,使用的是随机数作为关键点来生成初始预测热力图,第一轮训练完成后,得到生成的热力图,就可以得到一个矫正过的关键点,以此来作为第二轮使用的热力图的初始值,继续迭代。
  • ❓❓❓但是上面优化的时候只使用热力图的loss, 但是真实关键点和预测关键点也都可以拿到,关键点的loss其实也可以加上去。两种损失一起会更好吗??

2.4 自顶向下

在这里插入图片描述
上面讲的是单人的姿态估计,但是也会有多人姿态估计

最直观的一种方式(自顶向下):

  1. 先目标检测,得到每个人(检测器的精度需要保证)
  2. 再对每个人进行 单人姿态估计

模型串联的坏处,

  • 姿态估计结果会过分依赖人体目标检测的结果
  • 速度和计算量和画面中的人数成正比

2.5 自底向上

在这里插入图片描述
自底向上方法:先把关键点检测完,再去聚类其属于哪个人

优点:

  • 推理速度和画面中的人数无关
  • 关键点多,则检测速度肯定也会慢一些。但不会像自顶向下方法一样与人数成正比,人数越多的时候,自底向上比自顶向下方法快的越明显)
  • 聚类耗时肯定是和人数成正比的

2.6 单阶段方法

在这里插入图片描述

2-2. 2D姿态估计详细说明

2.1 基于回归的自顶向下方法

2.1.1 经典方法

在这里插入图片描述
以分类网络为基础,将最后一层分类改为回归,一次性预测所有J个关键点的坐标

  • 如果是人体姿态估计的话,就是18个关键点的坐标,在2D场景下,也就是要预测36个数字。。。(回归36个数字,可比分类36个类要难,目标检测里也有回归box四个坐标的方法)
  • 原始论文是用AlexNet主干+回归头做的,主干(backbone)也可以换成ResNet等结构

在这里插入图片描述
网络结构不变的情况下,使用级联模型的方式,来提高精度。

  • 第一级,输入:全身图像
  • 第二级,输入:第一步预测点为中心的裁剪后的局部区域

类似医疗影像分割里的级联:

  • 第一级,输入:医疗影像
  • 第二级,输入:医疗影像+第一级得到的概率图

在这里插入图片描述
优势:

  1. 回归模型理论上可以达到无限精度,热力图方法的精度受限于特征图的空间分辨率(也不一定,加个期望上去有时候也可以突破这个限制)
  2. 回归模型不需要维持高分辨率特征图,计算更高效。相比之下,热力图方法的特征图的size不能低于热力图的size,所以热力图方法确实要计算和存储高分辨率特征图,计算成本(硬件要求)更高

劣势:

  • 图像到关键点坐标的映射是高度非线性的,导致直接回归坐标,比通过热力图(概率)得到坐标更难,同时回归方法的精度也低于热力图,因此DeepPose提出之后很长一段时间,2D关键点预测算法主要都是基于热力图的。

2.1.2 基于最大似然估计的改进(RLE)

在这里插入图片描述
之前的基于回归方法的姿态估计,

  • 损失函数为:真实关键点位置 μ g \mu_g μg与模型预测关键点位置 μ ~ \tilde\mu μ~的误差作为损失
    • 这背后隐含了高斯分布的假设,即:预测点距离关键点越近,就越好,因此以关键点为圆心,相同半径圆周上的点作为预测点,其误差都是一样的。即:认为预测点分布在真实点形成的一个圆形里。
    • 但是实际上,人体的关节有不同的形状如下图:踝关节,红色是关键点,蓝色围成的区域就是分布,不是个圆形,不是只靠一个方向的距离就可以衡量误差的(每个方向距离引起的误差在损失函数中权重应该是不同的):
      在这里插入图片描述

另外,下面这篇文章创新点的部分,要先去看下面的背景知识,看完就基本就懂这个创新点了。
在这里插入图片描述

  • 模型给出基础分布的参数
  • RLE模块基于标准化流,给出位置的分布

论文就直接在MMPose里找了,这里Topdown Regression + Mobilenetv2 + Rle on Coco
在这里插入图片描述
论文arxiv链接:Human Pose Regression with Residual Log-likelihood Estimation


2.1.2 背景知识-回归和最大似然估计的联系

在这里插入图片描述

  • 关于二范数(L2-norm损失函数)这个名词,可以看看:区分混淆概念之L2范数,L2范数损失,L2损失,均方误差
  • 如上面的右图,使用二范数(最小二乘误差/最小平方误差)进行回归
    • 其实隐含了 关键点位置 符合 固定方差的各向同性的高斯分布 的假设,但是实际上,在真实的人体关节,关键点的位置并不一定符合高斯分布
  • 因此RLE的关键在于:
    • 将简单的高斯分布替换为一个可学习的、表达能力更强的分布(用在损失函数上),来更好指导模型学习真实的关键点位置分布。
    • 因为基于高斯分布假设的回归误差,和高斯似然下的最大似然估计是等价的
  • 注意,这里的二范数误差回归的各向同性高斯分布,是基于回归的方法用在损失函数上的;但是原理和基于热力图的方法里,使用标注关键点生成热力图的思想是类似的。

2.1.2 背景知识-标准化流Normalizing Flow

在这里插入图片描述
标准化流Normalizing Flow:

  • 一种生成建模方法,通过一系列可学习的可逆的映射( f f f是学习出来的,同时要满足是可逆的),将标准分布的随机变量映射成复杂分布的随机变量,可用于建模复杂的概率分布
  • p 0 p_0 p0是标准分布,解析式已知,可以计算其导数等性质
  • 后面所有对 z 0 z_0 z0进行的变换 f f f,都是由神经网络构建的(学习得到所有的映射 f f f

在这里插入图片描述
在学习确定所有 f f f的准确形式后,考虑根据 f f f反向推导出 p 0 ( z 0 ) p_0(z_0) p0(z0)(模型推理),在模型参数确定( f f f已知)后,计算给定数据点(例如: x x x)的概率密度( p K ( z K = x ) p_K(z_K=x) pK(zK=x)

  • 由于 f f f可逆,所以可以进行上述的推导(概率论知识)
  • det:是行列式(Determinant)的缩写,表示计算一个矩阵的行列式,不记得的可以看看:
    • CSDN博客:矩阵 行列式的计算
    • 百度百科-det
    • 知乎文章-矩阵求导(工具书)->4. 行列式的运算

在这里插入图片描述
在这里插入图片描述
模型学习(求解损失函数,对损失函数进行化简)上述公式,对 p k ( x ) p_k(x) pk(x)取对数,

  • 这样乘法 ∏ i = 1 k \prod^k_{i=1} i=1k就变成了加法 ∑ i = 1 k \sum^k_{i=1} i=1k(这个latex语法是’\prod’,product是乘积的意思),
  • 注意,后面的det外面还套了个-1,因此就变成 p 0 ( z 0 ) − ∑ i = 1 K l o g ∣ d e t ∂ f i ( z i − 1 ) ∂ ( z i − 1 ) ∣ p_0(z_0) - \sum^K_{i=1}log|det\frac{\partial f_i(z_{i-1})}{\partial (z_{i-1})}| p0(z0)i=1Klogdet(zi1)fi(zi1)
  • 全体参数 Φ \Phi Φ,latex-\Phi

概率分布 p K p_K pK受到构建该分布的神经网络 f 1 , . . . , f K f_1,...,f_K f1,...,fK的全体参数 Φ \Phi Φ控制

  • 可以通过梯度下降优化 Φ \Phi Φ,这里会涉及对Jacobian的行列式的梯度的计算,可以通过适当映射 f i f_i fi映射的函数形式,让这个计算变简单。
  • RLE论文使用的标准化流模型是RealNVP

2.1.2 RLE的整体设计

在这里插入图片描述
除了基于标准化流构建分布(RLE的主要目标,找出关键点的位置分布),RLE还使用了以下两个技巧来降低模型拟合真实分布的难度:

  1. 重(chong)参数化
  2. 残差似然函数

在这里插入图片描述
为降低建模分布的难度,假设所有关键点的分布属于同一个位置尺度族,即所有分布由某个零均值的基础分布通过平移缩放得来。(重参数化,重复一部分参数)

  • 例如:所有一元正态分布 N ( x ∣ μ , σ ) \mathscr{N}(x|\mu,\sigma) N(xμ,σ)构成位置尺度族,基础分布为标准正态分布。
    对标准正态分布进行平移缩放,就可以得到任意其他的一元正态分布。
  • 重参数化的思想,有点像,卷积层的参数共享(卷积核/模板参数共享),都是为了减少参数,所以公用了一部分参数

所以整体就是:

  • 标准化流拟合基础分布 x ˉ \bar x xˉ
  • 卷积网络预测平移缩放参数 μ ~ , σ ~ \tilde \mu,\tilde \sigma μ~,σ~
  • 即上图右下侧的示意图

❓❓❓
推理阶段,则只需要卷积网络预测的平移(❓为什么不考虑缩放)参数,❓不用推理标准化流


在这里插入图片描述
挺好理解的,看ppt就行
在这里插入图片描述
对标准化流模型得到的标准分布,进一步使用残差似然函数,就变成上图了

2.2 基于热力图的自顶向下方法

2.2.1 Hourglass论文地址(2016年)

MMPose中这个网络的位置:
在这里插入图片描述
论文:Stacked Hourglass Networks for Human Pose Estimation


2.2.2 Hourglass模型

在这里插入图片描述
Hourgalss网络,是姿态估计领域标志性的工作

  • 设计思路:准确的姿态估计需要结合不同尺度的信息
  • 局部信息→检测不同的身体组件(不同部位的关键点)
  • 全局信息→建模组件之间的关系,在大尺度变形、遮挡时也可以准确推断出姿态

上图的网络结构中,

  • 每个立方体都是一个残差模块,大小表示特征图的尺寸
  • 每个尺度,都有自己的残差

在这里插入图片描述
局部信息是有限的,单纯依赖这个尺度下的局部信息,无法做出有效判断
在这里插入图片描述
所以需要组合不同尺度的输入信息进行推断

  • 对于上图蓝色框的小尺度局部,其实只要给一个输入包含手臂的一个尺度的局部,其实就可以判断出来是什么,黄色框同理,
  • 不同尺度,看到的信息不一样,不同的尺度就可以得出不同的结论(甚至有些小尺度没有效的结论,或者某些特定尺度才能看到有效信息)

在这里插入图片描述
每级模块分支输出热力图,和GT热力图比较,计算损失。

  • 上图蓝色部分就是这个模块输出的热力图,蓝色右边的就是真值
  • 虚线的曲线括住的部分就是一层Hourglass模块,一般会有8层。。
    也就是:每一级模块都可以分别进行损失函数的优化。

在这里插入图片描述
这个实验就是不同的级联方式和监督方式的消融实验效果。
从上到下依次进行的实验是:

  1. HG堆叠,也就是这个论文主推的方法,8个Hourglass模块堆在一起,每个模块输出的热力图都和真值比较(短模块级联+每层模块都添加监督信号)
  2. HG堆叠,但是只对最后输出的热力图和真值比较
  3. 不进行级联,只有HG堆叠中一层Hourglass模块
  4. Hourglass特征提取部分变大了(long hourglass),这个要去论文里看具体的
  5. 类似4,在中间添加了监督

蓝色和绿色最好,说明在中间添加监督信号是更有效的,但是级联和long hourglass的效果最后看起来似乎没有差很多

在这里插入图片描述
在当时是SOTA的水平,持续了一段时间。

2.2.3 Simple Baseline(2018年)

MMPose中这个网络的位置

在这里插入图片描述
使用ResNet配合反卷积形成编码器-解码器结构

2.2.4 HRNet(2019)

位于MMPose的这里,链接
论文链接:Deep High-Resolution Representation Learning for Human Pose Estimation

可以看看这个讲解:陀飞轮-一文读懂HRNet
在这里插入图片描述
核心思路

  • 下采样时通过保留原分辨率分支,来保持网络全过程特征图的高分辨率与空间信息位置
  • 设计了独特的网络结构实现不同分辨率的多尺度特征融合

在这里插入图片描述

  • 对于右图,第二列最下面最小的橙红色分辨率特征图,其实是来自前一层三种不同尺度的分辨率(三个虚线箭头),同理,其实第二层的所有不同尺度的分辨率特征图,都是从前一层的三个尺度里得到的。
  • 橙红色就是上面说的跨层的额外融合输出,其余三个都是对应各自那个级别的分辨率
    在这里插入图片描述
    这个插图对应的还是上一页ppt,解释的是第一层的三种尺度的分辨率如何融合得到第二层的。(上图有一部分描述有问题)
  • 第一列分辨率(x) = 第二列分辨率( r) 的特征图,直接相等。 f x r ( R ) = R f_{xr}(R)=R fxr(R)=R
  • 第一列分辨率(x) > 第二列分辨率( r) 的特征图, f x r ( R ) f_{xr}(R) fxr(R)将输入的 R R R经过 ( r − x ) (r-x) (rx)次stride为2的 3 × 3 3\times 3 3×3卷积。
    • O u t S i z e f e a t u r e m a p = ( I n p u t S i z e f e a t u r e m a p − K e r n e l S i z e + 2 P a d d i n g ) / S t r i d e + 1 OutSize_{featuremap}=(InputSize_{featuremap}-KernelSize+2Padding)/Stride+1 OutSizefeaturemap=InputSizefeaturemapKernelSize+2Padding/Stride+1
    • r = ( x − 1 ) / 2 + 1 r =(x-1)/2+1 r=(x1)/2+1,stride为2,也就是每次卷积特征图size小1,经过r-x次,就刚好可以得到输出特征图为x的尺寸了
  • 第一列分辨率(x) < 第二列分辨率( r) 的特征图,使用双线性插值进行上采样,再用1X1卷积对齐通道数。

在这里插入图片描述
同时,除了进行人体姿态估计,配合不同的任务头,也可以用来做别的事情。
a. 只取第一层输出,用于人体姿态估计(HRNetV1的操作方式,只使用分辨率最高的feature map。)
b. HRNetV2的操作方式,将所有分辨率的feature map(小的特征图进行upsample)进行concate,主要用于语义分割和面部关键点检测。
c. HRNetV2p的操作方式,在HRNetV2的基础上,使用了一个特征金字塔,主要用于目标检测。

2.3 基于热力图的自底向上的方法

2.3.1 Part Affinity Fields & OpenPose(2016)

MMPose中这个网络的位置,没有找到这个文章
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
这个有很明显的缺陷啊。。。 σ \sigma σ以内距离,小孩和成年相同关节关键点的距离肯定有很大差距,这个 σ \sigma σ的距离设置,挺值得探讨的

在这里插入图片描述
另外,这里关于亲合度的定义,也有些问题:
这里的 L c L_c Lc就是一个单纯的单位向量,只给出一个方向,那么在握手等多人某段肢体相连的情况,同时方向还类似的时候,就会被判定属于一个人??
在这里插入图片描述

在这里插入图片描述
图论:

  • 关键点就是图里的顶点,关键点之间的亲和度就是顶点连线的权重,构建出了一个带权的图(特殊的图,是K部图)
  • 通过对图进行建模,就把关键点的聚类问题转换成K部图最优匹配的问题

2.4 单阶段方法

2.4.1 SPM(2019)

目前在MMPose中也没看到这个网络
在这里插入图片描述
SPM首次提出单阶段解决方案,在取得速度优势的同时,也保留了很高的检测率,同时该方法可以直接从2D扩展到3D(有些坎坷)。
SPM的思想和Yolo很像。

  • 目标检测是回归中心点和一个向量(主对角线)
  • 这里是回归关键点,以及多个方向向量

在这里插入图片描述
除了之前说的人体姿态估计固定的18个关键点,SPR引入了一个辅助关节(根关节点,Root Joints),来连接其他关键点,统一人体实例和身体关节的信息位置

  • SPR会学习根关节的位置,其他关键点相对于根关键点的方向( δ \delta δ
  • 这样的弊端就是:如果有较大的姿势变形,涉及身体关节和根关节之间的远距离位移,就会给从图像表示映射到矢量域的位移估计带来困难
  • (和上面的那个亲和度差不多),只要是单纯只使用方向向量的,都会产生这个问题

在这里插入图片描述
所以在SPR的基础上提出了Hierarchical SPR,其根据自由度和变形程度将根关节和身体关节划分为四个层次

  • 第一级:根关节(自由度最低,基本不会变形)
  • 第二级:颈、肩、臀(这些关节由于在人体的位置和构造,肩颈的活动范围有限。基本也不会有太大的位移)
  • 第三级:手、肘、膝(会有些大的位移和形变)
  • 第四级:手腕、脚踝(距离根关节最远,四肢还最灵活,形变程度和位移都最大)

在这里插入图片描述

  • 置信回归分支,回归关节的热力图
  • 额外延伸的一个位移回归分治,估计身体关节位移图(相对于根节点的其他18个关键点的位移)

在这里插入图片描述

  • 根节点以热力图形式,进行概率回归
  • 身体节点位移(方向向量)回归,通过对每个节点构建稠密的位移图,并规定位移量在一定的范围内(亲和度根据真值生成肢体方向的真值时,也是会规定关节之间的范围)后,对所有非零量取平均得到

在这里插入图片描述
同样,损失函数也是包含根关节和位移图的两部分loss,不难看出

  • L C L^C LC是根关节置信度的L1 loss, L D L^D LD是位移图的L2 loss
  • β = 0.01 \beta=0.01 β=0.01说明确定根关节的位置更重要。。。根关节确定后,位移图才有正确的可能
    • 这个值的取法是有技巧的,可以思考一下

2.5 基于Transformer的方法

2.5.1 PRTR(2021)-两阶段算法(基于回归的)

MMPose的网络里没有
在这里插入图片描述
人体姿态估计和物体检测都包含对图像内容的定位

  • DETR中query通过注意力机制逐渐聚焦到特定物体上
  • 类似的,姿态估计中也可以让query逐渐聚焦到特定人体关键点上

在这里插入图片描述

  1. DETR先检测出人体
  2. 同样使用DETR结构,只是此时query的不是人体的位置,而是关键点的信息,并最终回归关键点的位置
  3. 结构是是类似的,都是有个backbone+位置嵌入,然后Transformer的Encoder和decoder,
    • 上面人体检测得到的是人体特征,是bounding box回归(中心点+方向,或者左上点坐标+高宽),
    • 下面是关键点特征,是关键点回归
  4. 另外,这里有个Crop,就是从完整特征图中裁剪出单人对应的图像特征,用于后续关键点检测

在这里插入图片描述
人体检测和关键点检测共用同一个图像特征网络(共用backbone,这和之前基于物体检测的姿态估计是很像的)

  • 设计了Spatial Transformer Network(STN)模块,从完整特征图中裁剪出单人对应的图像特征,用于后续关键点检测
  • 则关键点检测部分的backbone网络,就不用做重复训练了。

2.5.2 TokenPose(2021)(基于热力图的)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6 2D姿态估计小结

在这里插入图片描述

3. 3D姿态估计

3.1 任务描述

在这里插入图片描述
注意,

  • 这里对3D的描述是相对的,给的如果是2D图,去生成3D本来也不太合适。。
  • 并没有准确的深度信息

在这里插入图片描述

在这里插入图片描述
难点,如何从2D恢复3D信息
在这里插入图片描述
方式1:直接预测

  • 直接从2D图像回归3D坐标,但是2D图像不包含深度,这是一个病态问题。
  • 实际上可以借助语义特征(人体是有一个先验知识的),并且人体是刚性的来实现3D姿态的推理
  • 对于一张2D图像,由于人体是先验且刚性的(可以理解为有个模板,同时这个模板不会发生太大的改变),人体的厚度/深度其实是一个可以推断的信息

在这里插入图片描述
方式2,利用视频信息

  • 直接从2D推理到3D,可能会有病态的问题(生成的结果看起来不符合人体结构)
  • 借助视频的帧间信息辅助判断,两帧视频之间,人体姿态并不会发生特别大的变化,
  • 上面的原图(动态图)来自:https://dariopavllo.github.io/VideoPose3D/#demo
    • 源自论文:3D human pose estimation in video with temporal convolutions and semi-supervised training
      在这里插入图片描述

在这里插入图片描述
方式3:利用多视角图像
直接运用同一对象的多视角拍摄的图像来预测和还原出3D信息(2D图像生成3D模型)

3.2 方法介绍

3.2.1 Coarse-to-Fine Volumetric Prediction 2017

粗粒度到细粒度,体数据预测??
论文地址:Coarse-to-Fine Volumetric Prediction for Single-Image 3D Human Pose
在这里插入图片描述
注意,这里输出的就是一个3D的热力图了(Volume 一般指体数据,3D数据)
在这里插入图片描述
采用的是Hourglass级联,深度信息每次逐渐加深,8个Hourglass对应的输出的3D热力图的级联部分的深度大小依次为:{1,2,4,8,16,32,64},( 2 n , n ∈ [ 0 , 6 ] 2^n, n\in[0,6] 2n,n[0,6],7个输出),最后一个Hourglass没有级联了,就是自己最后的输出,也是64

3.2.2 Simple Baseline 3D(2017)

在这里插入图片描述
上面讲过一个Simple Baseline 2D,这里的Simple Baseline 3D的发现是:

直接用2D坐标预测3D坐标就可以取得比较好的效果,不需要借助图像

  • 输入就是归一化的2D坐标,输出就是归一化的3D坐标,不需要使用图像信息。。用的网络也很简单,基本都是全连接层,用了一些防止过拟合的手段。。
  • Amazing😗😗😗!
  • 单纯依靠2D坐标去得出3D姿态估计,其实这里面肯定会存在一些病态问题,比如右脚是前翘还是后翘,
  • 病态问题:指输出结果对输入数据非常敏感的数值分析问题. 对一个数值分析问题, 如果输入数据有微小误差,引起问题解的相对误差很大, 那么称这个问题为病态问题. 一般而言, 病态问题是指条件数很大的数值分析问题.

3.2.3 VideoPose3D

在这里插入图片描述

  • 上面的原图(动态图)来自:https://dariopavllo.github.io/VideoPose3D/#demo
    • 源自论文:3D human pose estimation in video with temporal convolutions and semi-supervised training

基本思路:

  • 单帧图像预测2D关键点,再基于多帧的2D关键点的结果预测3D关键点的位置
  • 单帧算3D可能会有病态(直接从2D图预测3D坐标会有病态问题),但是帧数多了之后,就会一定程度上消除病态性

3.2.4 VoxelPose(2020)

在这里插入图片描述
输入是多视角图像,中间就会利用多视角所来源的相机,根据相机参数来进行3D模型的建立。

4. 人体姿态估计的评估方法/指标

在这里插入图片描述
PCP-以肢体检出率为评价指标,算上头其实一共是9个肢体

在这里插入图片描述
PDJ-以关节点的位置精度作为评价指标,可以获得不同级别的定位精度的检测率,用比例定义距离

在这里插入图片描述
PCK-以关键点的检测精度作为评价指标,不是靠距离比例,直接设定一个距离阈值(设定的时候也可以根据比例去设置,这样设置最简单,没有什么特殊缘由),2D和3D里都可以用这个指标
在这里插入图片描述
略微有些复杂,如果想要这页ppt的文字表述,可以看看这位兄弟的MMPose学习笔记1,我真的懒得打字了。

5. DensePose(人体表面参数化)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
3D网格构建,属于渲染的内容了(使用计算机图形学的传统表示+深度学习的优化方法,挺好)
在这里插入图片描述
上面的两个肩膀是动图,来自:blender.stackexchange.com-Shoulder deformations

在这里插入图片描述

6. 人体参数化模型

6.1 SMPL(人体参数化模型)-2015

论文:SMPL: A Skinned Multi-Person Linear Model
主页:https://smpl.is.tue.mpg.de/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
人体生成3D动画,人穿着特定设备,做动作,生成相应动作的3D动画人物模型,电影动画感觉用得到很多。
课件里的视频来源是这里:https://smpl.is.tue.mpg.de/
在这里插入图片描述
在这里插入图片描述

6.2 SMPLify

论文:Keep it SMPL: Automatic Estimation of 3D Human Pose and Shape from a Single Image,和上面那个论文有一个共同的作者:Michael J. Black
在这里插入图片描述
人体参数化模型可以得到关键点(人体姿态估计),但是更进一步,它的目标其实是直接生成人体的3D mesh,人体姿态估计是这个模型的中间产物,不是最终目的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
穿模,比如:手本来应该插兜,结果插到肚子里了

在这里插入图片描述
把人体建模成类似胶囊组合的形状

在这里插入图片描述
上面说的三种约束, θ , β \theta, \beta θ,β等的进一步数学推导,
在这里插入图片描述
损失函数的设计,可以通过梯度下降求解,通过深度学习直接估计SMPL的那些形态、姿态参数

6.3 HMR

论文:End-to-end Recovery of Human Shape and Pose
和上面两篇一样,都有共同的作者(应该是一个实验室的成果)
在这里插入图片描述
这种求解方式可以适用于,只有2D标注的情况,如果有3D点云数据肯定更好
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7. 课程总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/26128.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32单片机(三)第二节:GPIO输出练习(LED闪烁、LED流水灯、蜂鸣器)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

IIC总线协议的死锁问题

目录 1. IIC的特性 2. IIC死锁问题分析 3. 常见的IIC死锁问题解决方法 1. IIC的特性 IIC协议是一个允许一主多从通信的协议&#xff0c;只能用于短距离通信&#xff0c;并且只需要两根信号线来交换信息。 IIC的两根信号是SCL和SDA&#xff0c;SCL是时钟信号线&#xff0c;S…

javascript基础六:说说你对闭包的理解?闭包使用场景?

一、是什么 一个函数和对其周围状态&#xff08;lexical environment&#xff0c;词法环境&#xff09;的引用捆绑在一起&#xff08;或者说函数被引用包围&#xff09;&#xff0c;这样的组合就是闭包&#xff08;closure&#xff09; 也就是说&#xff0c;闭包让你可以在一个…

CDN加速在网站建设中的应用

近年来&#xff0c;随着互联网技术的不断发展&#xff0c;互联网行业迎来了井喷式发展&#xff0c;各类网站如雨后春笋般不断涌现&#xff0c;网站数量迅速增长&#xff0c;但与此同时也导致网站响应速度慢、访问不流畅等问题。因此&#xff0c;如何优化网站的性能、提高网站的…

【算法】简单讲解如何使用两个栈实现一个队列

文章目录 什么是栈和队列&#xff1f;设计思路代码实现 什么是栈和队列&#xff1f; 栈和队列其实大家基本都知道是什么&#xff0c;或者说&#xff0c;最基本的&#xff0c;他们的特性我们是知道的。 栈是一种FILO先进后出的数据结构&#xff0c;队列是一种FIFO先进先出的数据…

IP-Guard客户端上插入加密盘时提示格式化,能否禁止该弹窗?

客户端上插入加密盘时提示格式化,能否禁止该弹窗? 1、当Shell Hardware Detection服务启动时,操作系统检测硬件的速度要快于客户端,而此时操作系统是不能识别加密后的移动盘的,因此认为加密盘异常,提示需要格式化,策略-客户端配置,选择禁止windows7播放功能。配置后不…

华为OD机试题【字符统计】【2023 B卷 100分】

文章目录 &#x1f3af; 前言&#x1f3af; 题目描述&#x1f3af; 解题思路&#x1f4d9; Python代码实现&#x1f4d7; Java代码实现&#x1f4d8; C语言代码实现 &#x1f3af; 前言 &#x1f3c6; 《华为机试真题》专栏含2023年牛客网面经、华为面经试题、华为OD机试真题最…

【快应用】多语言适配案例

【关键词】 多语言&#xff0c;$t 【问题背景】 快应用平台的能力会覆盖多个国家地区&#xff0c;平台支持多语言的能力后&#xff0c;可以让一个快应同时支持多个语言版本的切换&#xff0c;开发者无需开发多个不同语言的源码项目&#xff0c;避免给项目维护带来困难。使用系…

《Datawhale南瓜书》出第二版啦!

Datawhale干货 作者&#xff1a;Datawhale开源项目团队 作为机器学习的入门经典教材&#xff0c;周志华老师的《机器学习》&#xff0c;自2016年1月底出版以来&#xff0c;首印5000册一周售罄&#xff0c;并在8个月内重印9次。先后登上了亚马逊&#xff0c;京东&#xff0c;当…

[数据集][目标检测]目标检测数据集绝缘子缺陷防震锤1688张5类别VOC格式

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;1688 标注数量(xml文件个数)&#xff1a;1688 标注类别数&#xff1a;5 标注类别名称:["flashover",&…

00): Can‘t connect to MySQL server on ‘localhost:3306‘ (10061)

好久没有使用数据库&#xff0c; 连接数据库报上面的错误&#xff0c;尝试了网上的方法还是没有成功&#xff0c;思索之后想起之前手动关闭了mysql的服务&#xff0c;Windows启动时mysql服务不会自动启动&#xff0c;成功启动mysql服务后再次连接数据库&#xff0c;正常连接。 …

PGXC GaussDB

PGXCA PGXC&#xff08;PostgreSQL eXtended Coordinator&#xff09;是一个基于 PostgreSQL 架构的分布式数据库解决方案。它扩展了 PostgreSQL&#xff0c;为用户提供了在多个节点上分布式存储和处理数据的能力。 PGXC 的设计目标是将 PostgreSQL 扩展为能够处理大规模数据…

Java课程设计之购物车管理系统

一、项目准备 1、开发工具&#xff1a;JDK、Eclipse 2、需求分析&#xff1a; 包括商品管理和购物车管理。 1&#xff09;商品管理主要功能 商品信息导入 显示所有商品信息 2&#xff09;购物车主要功能 添加商品到购物车 修改购物车中的商品数量 显示购物车中的所有商…

MockServer 服务框架设计

【摘要】 大部分现有的 mock 工具只能满足 HTTP 协议下简单业务场景的使用。但是面对一些复杂的业务场景就显得捉襟见肘&#xff0c;比如对 socket 协议的应用进行 mock&#xff0c;或者对于支付接口的失败重试的定制化 mock 场景。为解决上述问题&#xff0c;霍格沃兹测试学院…

pdf怎么合并成一个文件?高效工具分享

PDF是一种非常常用的文档格式&#xff0c;许多人经常需要合并多个PDF文件为一个文件。这是因为有时候我们需要将多个PDF文件打包成一个文件&#xff0c;以便于共享或归档。在本文中&#xff0c;我们将介绍如何使用电脑或手机合并PDF文件。 以下是常见的合并PDF的软件&#xff1…

Java中的this、package、import

this 在Java中&#xff0c;this的作用和其词义很接近。 它在方法内部使用&#xff0c;即这个方法所属对象的引用&#xff1b; 它在构造器内部使用&#xff0c;表示该构造器正在初始化的对象。 this 可以调用类的属性、方法和构造器 什么时候使用this关键字呢&#xff…

Socket(七)

文章目录 1. 单文件服务器2. 重定向器Redirector3. 功能完备的HTTP服务器 1. 单文件服务器 要研究HTTP服务器&#xff0c;先从一个简单的服务器开始&#xff0c;无论接受什么请求&#xff0c;这个服务器都始终发送同一个文件。这个单文件服务器名为SingleFileHTTPServer&#…

车辆CAN信号,依据DBC文件解析流程

CAN信号解析流程 1.车辆CAN对应dbc文件 DBC文件是一种用于描述CAN&#xff08;Controller Area Network&#xff09;数据通信协议的文件格式&#xff0c;DBC文件中包含了CAN数据的信号定义、编码方式、单位、范围等信息&#xff0c;可以用于解析和生成CAN数据帧。 一个DBC文件…

ChatGPT的4个不为人知却非常实用的小功能

重点介绍四个ChatGPT很实用的小功能。 一、停止生成 如果在ChatGPT输出内容的过程中&#xff0c;我们发现结果不是自己想要的&#xff0c;可以直接点击“Stop generating”按钮&#xff0c;这样它就会立即停止输出。 二、复制功能 在ChatGPT返回对话的右侧&#xff0c;有三个图…

MySQL主存复制

介绍 配置-主库master 第一步&#xff1a;修改MySQL数据库的配置文件/etc/my.cnf [mysqld] log-binmysql-bin #[必须]启用二进制日志 server-id100 #[必须]服务器唯一id第二部&#xff1a;重启MySQL服务 systemctl restart mysqld第三步&#xff1a;登录MySQL操作&#x…