Convolutional Pose Machine总结

2023-11-10

#Convolutional Pose Machine总结


目录

Convolutional Pose Machine简介

Convolutional Pose Machine 简称CPM,将深度学习应用于人体姿态分析,是CMU开源项目OpenPose的前身,在MPII竞赛single person中排名第七。

算法详细分析

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

CPM的网络结构和感受野如下图所示:
这里写图片描述

CPM的算法思想来源于Pose Machine,上图中的网络结构详细介绍如下:

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

  1. stage 1
    stage1如上述插图(a)和©所示,stage 1只对输入图片做处理。在该阶段,输入图片经过X代表的经典VGG结构,并用1*1卷积,输出一个belief map,如果人体有p个关节点,那么belief map有p层,每一层表示一个关节点的heatmap。belief map与label计算该阶段的loss,并存储起来,在网络末尾将每一层的loss加起来作为total loss用于反向传输,实现中间监督,避免梯度消失。

  2. stage t
    对于stage 2 以及后面的stage,其结构一致,我们统称为stage t。
    在stage t 中,网络的输入包含两个内容:
    (1)上一个stage输出的belief map;
    (2)对原始图片的处理结果,这里的处理操作如插图(d)x‘部分所示,与stage 1中的X一样,也是借鉴经典的VGG中的结构。
    如果图片中有多个人物,需要对多人进行姿态估计时,在这里还要输入一个center map。center map是一个高斯响应,当图片中有多人时,center map告诉神经网络目前要处理的人的位置,从而自底向上处理多人pose问题。
    stage t阶段输出与stage 1 一致,也是标注关节点位置的belief map。

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

论文中指出,为了增大感受野,一般有如下几种方式:

  1. 增大pool,但是这种做法对图片额外添加的信息过多,会牺牲精度;
  2. 增大卷积核,但这种方式会增加参数量;
  3. 增加卷积层,但卷积层过多会造成网络的负担,造成梯度消失等问题。

论文中提出的增大卷积和的方式是增大stride,确实stride越大感受野相应的也增大,并且论文中指出,在高精度区域,8stride和4stride表现一样好。

算法流程

训练阶段

网络输入彩色图像(绿色ori image)。以半身模型为例,分为四个阶段(stage)。每个阶段都能输出各个部件的响应图(蓝色score),使用时以最后一个阶段的响应图输出为准。
这里写图片描述
center map(绿色)是一个提前生成的高斯函数模板,用来把响应归拢到图像中心。
这里写图片描述

使用阶段

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

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

创新点

CPM的网络结构相当于结合了VGG(网络结构图中的X和X‘部分)和FCN(pixcel level的处理,输出不是向量而是与图片等宽等高的矩阵),在此基础之上加入三个辅助内容:

  1. belief map
    一方面是获取每一个stage输出的heatmap,同时该belief map有助于后续stage的训练,根据论文中下图图片描述可知,belief map提供的易于检测部位的上下文信息为不易检测的部位(遮挡部位)提供了检测的线索:
    这里写图片描述
  2. 中间监督
    在每一个stage的输出阶段计算bilief map和label的loss,最后将所有loss加和得到total loss,根据每一个stage的loss更新该阶段的参数w,这种方法实现中间监督,可以有效避免梯度消失(或者梯度爆炸)
  3. center map
    center map是一个与图片同等大小、通道数为1的高斯模版,用于处理图片中多个人物的情况,实现多目标的姿态估计。

数据集

  1. MPII Human Pose Dataset
    数据集内容如下,该数据集定义了人体带检测的关节点的种类以及坐标,神经网络也是根据这些坐标信息实现pixel level的训练。
    这里写图片描述

  2. LSP dataset

  3. FLIC dataset

效果展示

  1. 手势预测:
    对于手部关节点,CPM提出的方法可以做出很好的预测,convolutional-pose-machines-tensorflow 如下所示的手势预测:
    这里写图片描述

  2. 身体姿态预测:
    单人效果:
    这里写图片描述
    多人效果:
    这里写图片描述

  3. 其它
    根据上面两项功能类推,对于一些与面部相关的预测也是可以实现的。


本文主要是自己对CPM学习的总结,文中有错误之处欢迎批评指正。


参考资料

博客

  1. 贴出了相关的代码,很清晰明了
    https://blog.csdn.net/yeahDeDiQiZhang/article/details/78131566?locationNum=1&fps=1
  2. 给出了网络的结构流程图和详细的讲解
    https://blog.csdn.net/shenxiaolu1984/article/details/51094959
  3. 对论文思路有较清晰的解读
    https://blog.csdn.net/mpsk07/article/details/79522809
  4. 画出来CPM的网络结构流程图
    https://blog.csdn.net/qq_36165459/article/details/78321054

github

  1. convolutional-pose-machines-release(论文对应的代码)
    https://github.com/shihenw/convolutional-pose-machines-release
  2. convolutional-pose-machines-release的python版
    https://github.com/shihenw/convolutional-pose-machines-release/blob/master/testing/python/demo.ipynb
  3. convolutional-pose-machines-tensorflow
    https://github.com/timctho/convolutional-pose-machines-tensorflow
  4. cpm
    https://github.com/psycharo/cpm
  5. Convolutional-Pose-Machine-tf
    https://github.com/mpskex/Convolutional-Pose-Machine-tf
  6. 3D_hand_pose_estimation_from_single_depth_image
    https://github.com/Peng154/3D_hand_pose_estimation_from_single_depth_image
  7. tf-pose-estimation
    https://github.com/ildoonet/tf-pose-estimation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Convolutional Pose Machine总结 的相关文章

  • java中访问修饰符的权限

    在java中 最常见的访问修饰符有以下四个 public default 默认 即不写修饰符 protected private 它们主要用来规定所修饰成员的开放程度 用来保护成员不被随意调用和修改 在新建一个类时 只能用public和de
  • 【区块链】深度长文:2018新风口,区块链3.0时代即将来临?

    徐小平说 区块链将掀起一场革命 1月9日 徐小平在真格投资组合群里分享了一段关于拥抱区块链时代的内容 并表示不能外传 被泄露的微信截图 岂料 很快去传了出去 他表示 这本是其与被投公司间的 低调 内容分享 现在被人擅自传出去 也没办法 最后
  • Express基本认识

    express是一个基于nodejs 且快速 开放的一个web开发框架 安装命令 yarn add express 查看express的所有版本 npm view express versions 搭建基本的express程序 const
  • ./configure --prefix=

    一直用这个选项prefix 但不知道 啥意思 转载自 inux安装软件采用源码安装灵活自由 适用于不同的平台 维护也十分方便 源码的安装一般由3个步骤组成 配置 configure 编译 make 安装 make install 具体的安装
  • centos7设置开机为命令行启动

    图形界面默认安装之后 每次启动都是图形界面启动 图形界面需要占用系统大量的内存和CPU资源 对于个人电脑和服务器 将Centos 默认启动改为文本方式 会显著提高运行效率 方法一 不修改默认启动方式 root模式下 init 3 gt 切换
  • sqlserver查看执行计划

    方式一 通过Microsoft sql server management studio工具栏中的 显示估计的执行计划 按钮 选中SQL 然后点击该按钮 SQL就会给我们选中SQL的图形执行计划 方式二 set showplan all o
  • 【无监督学习】0、有监督学习、无监督学习、半监督学习

    文章目录 一 有监督学习 二 半监督学习 三 无监督学习 3 1 对比式学习 一 有监督学习 有监督学习最大的特点就是数据集是带标签的 如有监督分类任务 就是给每张图都分配一个真实标签 表示这张图是 dog cat 或者是 bird 而标签

随机推荐

  • 【iOS】内存管理

    文章目录 前言 理解引用计数 引用计数原理 属性存取方法中的内存管理 自动释放池 保留环 以ARC简化引用计数 使用ARC时必须遵守的命名规则 变量的内存管理语义 ARC如何清理实例变量 覆写内存管理的方法 在dealloc方法中只释放应用
  • Lua 15分钟快速上手(上)

    本系列相关文章 Flutter 热更新及动态UI生成 Lua 15分钟快速上手 上 Lua 15分钟快速上手 下 Lua与C语言的互相调用 LuaDardo中Dart与Lua的相互调用 在之前的博客 Flutter 热更新及动态UI生成 一
  • 【python环境搭建】conda 安装过程中无法激活 python 虚拟环境问题

    目录 1 概要 2 解决办法 1 概要 最近重新学习python 需要搭建conda 环境 遇到一个懵逼的问题 C Users 67656 gt conda activate Date CommandNotFoundError Your s
  • Unity API Camera摄像机的使用

    Camera main 返回主摄像机的Camera组件 第一个启用的标签为 MainCamera 的摄像机 只读 场景中的主要摄像机 如果场景中没有这样的摄像机 则返回null 此属性在内部使用FindGameObjectsWithTag
  • 合宙Air724UG LuatOS-Air LVGL API控件--按钮 (Button)

    按钮 Button 按钮控件 这个就不用多说了 界面的基础控件之一 示例代码 按键回调函数 event handler function obj event if event lvgl EVENT CLICKED then print Cl
  • 执行Shell脚本的4种方法

    假设我们编写好的shell脚本的文件名为hello sh 文件位置在 root bin目录中并已有执行权限 添加权限的方法 chmod x hello sh 1 方法一 切换到shell脚本所在的目录 此时 称为工作目录 执行shell脚本
  • anaconda代码

    因为老是不记得代码 要找来找去的 索性自己写一下怕忘记 windos conda info envs 查看本机所有的虚拟环境 conda remove n 你自己的环境的名字 all 删除虚拟环境 conda create n 自己想取的名
  • linux网络服务network没了,Linux网络服务(network service)管理

    Linux操作系统中重新启动网络的方法 网页链接 https ywnz com linux 4463 html 1 网络管理员服务 这是使用命令行重新启动网络的最简单方法 它等同于图形化方式 重新启动Network Manager服务 su
  • Unity2D修改Sprite颜色和透明度

    Unity2D修改Sprite颜色和透明度 简单注意原理在前边 后面是实现方法 首先创建一个Sprite 最好选择纯白色的Sprite 选择的图片需要是白色的才会在修改颜色后有明显的显示 因为颜色修改后 它的最终显示是本来的图片的颜色与修改
  • QT 信号和槽

    信号和槽是一种高级接口 应用于对象之间的通信 它是 QT 的核心特性 要正确的处理信号和槽 必须借助一个称为 moc Meta Object Compiler 的 QT 工具 该工具是一个 C 预处理程序 它为高层次的事件处理自动生成所需要
  • 解决bug“ImportError: numpy.core.multiarray failed to import”

    解决bug ImportError numpy core multiarray failed to import 在这之前升级scikit image从老版本0 13 0到0 17 2 但运行pycharm工程出现如下bug from fi
  • msys2 安装 mingw64

    https blog csdn net zhuwade article details 121944279
  • vue+element 图片右上角添加删除小×、按钮预览图片

    思维方法 这个问题实际就是一个思维方式的问题 我最开始思考的就很复杂 后来我同事给出的解决方法就好 方法是 在判断有图片的时候 在图片的右上角加上一个小 的图片 在这个图片上加方法 点击就把图片清空 所以有的时候 一件事情不能想的太复杂 代
  • pytorch源码分析之torch.utils.data.Dataset类和torch.utils.data.DataLoader类

    写在之前 介绍 Pytorch深度学习框架优势之一是python优先 源代码由python代码层和C语言代码层组成 一般只需要理解python代码层就可以深入理解pytorch框架的计算原理 所以学习pytorch源码需要熟练掌握pytho
  • 使用Eclipse编译带jni工程时出现make: *** No rule to make target `all'. Stop.解决办法

    使用Eclipse编译带jni工程时出现make No rule to make target all Stop 解决办法 在引用第三方开发的用eclipse开发jni 总是出现如题所示的异常 如下图所示 出现如上的错误 具体操作如下 1
  • 函数式编程总结

    函数式编程总结 一 定义 简单说 函数式编程 是一种 编程范式 programming paradigm 也就是如何编写程序的方法论 它属于 结构化编程 的一种 主要思想是把运算过程尽量写成一系列嵌套的函数调用 举例来说 现在有这样一个数学
  • APNS编程----iOS真机测试消息推送

    一 准备工作 1 拥有一台iOS为操作系统的苹果设备 iPhone iPad iPod都可以 2 拥有苹果开发者账号 需要真机调试 最好是是付费开发者 后面的步骤将会更顺利 3 需要一台PC做推送服务器 如果是台拥有MAC OS系统 将会更
  • Eclipse语言包下载

    Eclipse语言包下载
  • PAT 甲级(Python) #1033 To Fill or Not to Fill (25 分)贪心算法和分治法的python实现

    1033 To Fill or Not to Fill 25 分 KY155 To Fill or Not to Fill 分治法求解 不完善 include
  • Convolutional Pose Machine总结

    Convolutional Pose Machine总结 目录 文章目录 目录 Convolutional Pose Machine简介 算法详细分析 算法流程 训练阶段 使用阶段 创新点 数据集 效果展示 参考资料 博客 github C