2D人体姿态估计 - Convolutional Pose Machines(CPM)

2023-11-09

https://github.com/namedBen/Convolutional-Pose-Machines-Pytorch

https://github.com/timctho/convolutional-pose-machines-tensorflow

CVPR2016

 Convolutional Pose Machines(CPM)的主要贡献在于:

a)   用Heatmap来表示关节点的位置及位置约束关系,并且将Heatmap和Feature Map同时作为数据在网络中传递,同时在多个尺度处理输入的特征,充分考虑各个关节点之间的空间位置关系。

b)   多个阶段(Stage)有监督训练,避免过深网络难以优化的问题。

OpenPose是GitHub上最受欢迎的人体姿态估计项目(14.8K Stars, 4.2K Folks),其人体关键点检测正是主要基于Convolutional Pose Machines。

 Pose estimation是一种全卷积网络,输入是一张人体姿势图,输出n张热力图,代表n个关节的响应。

CPM(Convolutional Pose Machines) [5] 利用序列化的卷积神经网络来学习纹理信息和空间信息,实现 2D 人体姿态估计。CPM 通过设计多阶段的网络结构逐渐扩大网络的感受野,获取远距离的结构关系。每一阶段融合空间信息,纹理信息和中心约束来得到更为准确的热图预测。

 Convolutional Pose Machine(CPM)解读

论文阅读理解 - Convolutional Pose Machines

【人体姿态】Convolutional Pose Machines

2D关键点检测之CPM:Convolutional Pose Machines - 知乎 (论文说明最全)

1、思想

本文的特色有三:

  • 1.用各部件响应图来表达各部件之间的空间约束。响应图和特征图一起作为数据在网络中传递。
  • 2.网络分为多个阶段(stage)。各个阶段都有监督训练,避免过深网络难以优化的问题。
  • 3.使用同一个网络,同时在多个尺度处理输入的特征和响应。既能确保精度,又考虑了各个部件之间的远距离关系。

2、算法

流程如下:

  •     在每一个尺度下,计算各个部件的响应图
  •     对于每个部件,累加所有尺度的响应图,得到总响应图
  •     在每个部件的总响应图上,找出相应最大的点,为该部件位置

为了捕捉关节点间 long-range 的相互关系,CPMs 中每个 stage 的网络设计的启发点是:同时在图像和置信图上得到大的接受野(large receptive field).

 

 

 图中(a)和(b)是pose machine中的结构,(c)和(d)是其对应的卷积网络结构,(e)展示了图片在网络中传输的不同阶段的感受野

  • 基于每个 scale,计算网络预测的各关节点 heatmap;
  • 依次累加每个关节点对应的所有 scales 的 heatmaps;
  • 根据累加 heatmaps,如果其最大值大于指定阈值,则该最大值所在位置 (x,y) 即为预测的关节点位置.

3、Stage 1

对输入图片做处理,其中X代表经典的VGG结构,并且最后采用1×1卷积输出belief map,如果人体有p个关节点,那么belief map有p层,每一层表示一个关节点的heatmap。belief map与label计算该阶段的loss,并存储起来,在网络末尾将每一层的loss加起来作为total loss用于反向传输,实现中间监督,避免梯度消失。

stage t=1 时, CPM 根据图片局部信息(local image evidence)预测关节点. 利用图片局部信息local,是指网络的接受野被约束到输出像素值的局部图片块. 如图:

 输入图片 368×368 ,卷积层不改变 feature maps 的 width 和 height,经三次 pooling 层,输出的 feature maps 大小 46×46,共 P+1 个 feature maps.(P个关节点)

t≥2 时网络的输出是一致的,都是 46×46×(P+1) 的 feature maps.

Stage T:对于Stage 2以后的Stage,其结构都统称为Stage T,其输入为上一个Stage的输出以及对原始图片的特征提取的联合,输出于Stage 1一致

4、Stage t>1

启发点:关节点的置信图(belief maps),尽管存在 noisy, 但却是包含有用信息的. 如图:

Figure 3. belief maps 的空间信息. 容易检测的关节点可以为难以检测的关节点提供有用信息. (shouler, neck, head) 关节点,对于 (right elbow) 后续 stages 的 belief maps 来说,有助于消除其错误的估计(red),并提升其正确估计(green).

如果图片中有多个人物,需要对多人进行姿态估计时,在这里还要输入一个center map。center map是一个高斯响应,当图片中有多人时,center map告诉神经网络目前要处理的人的位置,从而自底向上处理多人pose问题。

5、CPM 训练

CPM 每个 stage 都会输出关节点的预测结果,重复地输出每个关节点位置的 belief maps,以渐进精细化的方式估计关节点. 故,在每个 stage 输出后均计算 loss,作为中间监督 loss,避免梯度消失问题.

如:

每个 stage 的 Loss 函数:

MPII 数据增强处理:

  • 随机旋转图片 [-40, 40]
  • 图片缩放 [0.7, 1.3]
  • 水平翻转

6、intermediate supervision 中间监督方法

  如果直接对整个网络进行梯度下降,输出层的误差经过多层反向传播会大幅减小,而发生梯度消失现象。

    

  本文为了解决这个问题,提出了中间监督方法,从而保证底层参数的正常更新。

    

  效果如下图,可以看到,加入中间监督之后,在靠近输入的stage,其梯度比没有中间监督大很多,从而保证学习的效果。

7、感受野
感受野即输出图片一个像素在原始图片上映射的区域大小。CMP采用大卷积核获得大感受野,对于推断被遮挡的关节很有效。可以看到在网络的stage 2 的输出部分,感受野已经扩大到400400的大小。
作者在论文中指出,预测的准确率随着感受野的增大而提高(这里应该指的是在同一个网络中感受野的增大,即在同一次训练过程中感受野的增大),在FLIC数据集中对于手腕关节的预测,当感受野增大到250pixcel时预测的准确率趋于稳定状态,这表明神经网络编码了(encode)身体部件之间的长距离交互。在以上网络结构图最好的输出结果中,将原始图片预处理至368
368,stage 2 输出值的感受野相当于原始输入图片的400*400像素,此时感受野可以覆盖图片中身体的任何一个部件。stage越多,感受野也就越大。下面是论文中给出的准确率随感受野上升的曲线图:
这里写图片描述

8、使用阶段

人物检测
人物检测部分代码与姿态估计类似,只是最后一个stage输出的是一个指示了人物位置的map。
首先将图片resize到固定大小,然后pad(因为网络会将图片downsize所以先pad,这样能得到与原始图片相同大小的输出图片),运行网络,得到定义人物位置的块:
这里写图片描述
对应人物的位置:
这里写图片描述
单人姿态估计的话可以省略这一步。

姿态估计
根据上面的center position将每个人物分割开来,使用CPM网络进行预测。输出的图片中,另加一层background channel绘制关节点的位置,如果需要,可以连接关节点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2D人体姿态估计 - Convolutional Pose Machines(CPM) 的相关文章

随机推荐

  • 利用CIBERSORT免疫细胞类群分析详细教程

    利用CIBERSORT免疫细胞类群分析详细教程 现在最火的组学技术是什么 无疑便是单细胞测序了 通过单细胞测序 科研人员可以获得比原来更为精细的细胞图谱 但是单细胞测序诸多限制条件 也是不能让大家很好地利用这项技术解决自己的科学问题 除了较
  • 【Qt】通过QtCreator源码学习Qt(十二):Q_D和Q_Q指针(简称“d指针”)详解

    1 Q D和Q Q指针 简称 d指针 简介 参考博客 https www devbean net 2016 11 qt creator source study 07 https blog csdn net rabinsong articl
  • SpringBoot项目中统计所有Controller中的方法

    对接口方法进行抽象 Data public class ControllerMethodItem public String controllerName public String methodName public String req
  • vscode中preLaunchTask“g++”已终止,退出代码为1的解决方案

    问题背景 楼主原来做的项目 电脑中装了MinGW64 还有MinGW的32位版在用vscode时发现出现了 preLaunchTask g 已终止 退出代码为1的问题 找了好久 解决了问题 launch json 注释的位置 这里修改GDB
  • Vue中实现放大镜效果

    先来看一下我们需要实现的效果是怎样的 这里我们没有使用原生的 js 方法去实现 而是使用的 Vue3 官方推荐的一个工具库 vueuse cor 中的 useMouseInElement 方法来实现放大镜的效果 首先来看一下 useMous
  • 如何安装和配置树莓派

    如何安装和配置树莓派 如果你有一块树莓派的板子 还有一个没安装系统的SD卡 怎么能把系统装上 配置好跑起来 这篇文章主要就讲这个事 这是一块Raspberry Pi Zero W板 以及一个空SD卡 当然 我们需要一个SD卡读卡器 还需要一
  • Flink Native Kubernetes (一)

    目录 文章目录 目录 概述 Linux 集群描述 版本 部署K8S环境 配置Yum 安装docker 安装Rancher 安装K8s 工作集群 添加KubeCtl命令上下文 运行FlinkDemo FlinkSession关于K8s的基础环
  • 三:Sensor SLPI层代码分析---

    三 Sensor SLPI层代码分析 在学习SLPI侧代码前我们先了解下SEE的registry config registry 放在 persist sensors registry registry中 它是通过config生成的 是给S
  • 循环遍历本地的图片使用BASE64编码,并在ajax也遍历图片

    前端调用ajax到后端去图片的方法 并返回 public void search HttpServletRequest request HttpServletResponse response throws Exception String
  • 【毕业设计】基于stm32的智能扫地机器人设计与实现 - 单片机 物联网

    文章目录 0 简介 1 课题背景 2 硬件系统总体框架 2 1 电机驱动 2 2 红外线传感器 2 3 超声波传感器 2 4 MPU6050 2 5 ATK ESP8266 WI FI 模块 2 6 电源管理模块 3 软件系统设计 3 1
  • 前端知识点

    写在前面 CSDN话题挑战赛第1期 活动详情地址 CSDN 参赛话题 前端面试宝典 话题描述 欢迎各位加入话题创作得小伙伴 如果我没有猜错得话 我觉得你是应该同我一样是一位前端人 如今前端在IT事业中的占比越来越重 已经成为不可缺少的部分
  • 2019年DNS服务器速度排行榜

    第一名 DNSPod 不得不说腾讯自从收购了DNSPod后 无论是服务还是速度都有显著的提升 无论是访问速度还是解析速度都在国内是处于龙头大哥的地位 昔日的老大114的地位已经不保 作为腾讯旗下的公司 在游戏解析这一块来说 技术自然是领先于
  • 排序算法详解(堆,归并,快速排序最简及理解写法)

    十大排序算法和复杂度 常见排序的详解 只讲解真实场景中常用的 简单的就不分析了大家稍微看一下就行 快速排序 快排的思想主要就是每次把一个位置放好后 可以把数组分成两半 递归处理子问题即可 空间复杂度OlogN 分析 每次都分成两半处理子问题
  • IDEA报错程序包xxx不存在,但Depandencies依赖里明明有

    IDEA报错程序包xxx不存在 但依赖里明明有 看一下这个项目的pom xml 我这边引用的是公共依赖 应该是运行的时候依赖没有引用过来 搞了半天 网上搜了很多没搜到 后来我把 settings gt Runner 设置调了一下 就没有问题
  • CUDA之Warp Shuffle详解

    之前我们有介绍shared Memory对于提高性能的好处 在CC3 0以上 支持了shuffle指令 允许thread直接读其他thread的寄存器值 只要两个thread在 同一个warp中 这种比通过shared Memory进行th
  • Zabbix 学习(六) 自动发现功能与主动监控的实现

    一 自动发现 当被监控的设备非常多的时候 手工添加将会变得非常不方便 可以使用自动发现功能 实现添加主机 添加到主机组 链接模板 自动发现流程 创建自动发现规则 创建动作 当主机被发现之后 执行什么操作 通过动作 添加主机 将模板应用到发现
  • qt 实现翻金币游戏

    游戏玩法介绍 游戏设置关卡二十关 通过选关界面可以选择进入到对应的关卡中 进入对应关卡之后 点击任意金币 可以使该硬币以及周边 上 下 左 右 金边翻转 如果硬币都翻转为金币 则游戏胜利 游戏界面设置 开始界面 开始场景中需要自定义一个按钮
  • MyBatis实现简单的增删查改操作(XML配置)

    最近在跟着B站传智的课程学习SSM 先学的是MyBatis 写一篇博客记录一下如何利用MyBatis实现简单的增删查改 主要是记录一下实现过程 实现思路 注意事项 避坑 本教程使用XML配置进行实现 一 软件环境 Java IDEA mys
  • Windows下,Hexo+GitHub搭建博客

    一 注册GitHub账号 二 创建GitHub仓库 创建git仓库时候 仓库的名称有格式要求 例如我的GitHub仓库用户名是thinkerwalker 那么我创建的仓库名称就是thinkerwalker github io 此处的警告是因
  • 2D人体姿态估计 - Convolutional Pose Machines(CPM)

    https github com namedBen Convolutional Pose Machines Pytorch https github com timctho convolutional pose machines tenso