(week 1)【算法分析与论文阅读】1. Convolutional Pose Machines模型

论文来源
题目: Convolutional Pose Machines - CVPR2016
作者: Shih-En Wei, Varun Ramakrishna, Takeo Kanade, Yaser Sheikh
团队: The Robotics Institute Carnegie Mellon University

简介

CPM是目前比较有名的一个人体姿态估计模型,给定一张图片,可以得到人体的关节点,对body的估计有14个关节点,对手的估计有21个关节点。我们将利用这个模型得到给定图片body的14个关节点信息,并提取出来作为SMPL模型的输入,以产生后续的三维模型。

基本思想

Pose Machines为学习丰富的隐式空间模型提供了一个序列预测框架。Convolutional Pose Machines则将Convolutional Network整合进Pose Machines,提供了一种学习用于姿态估计任务的图像特征和图像相关的空间模型。CPMs是由全卷积网络组成的序列化结构,卷积网络直接在前一阶段的置信图(belief maps)操作,输出越来越精细化的关节点位置估计结果,它对 long-range 范围内变量间的关系进行建模,以处理结构化预测任务。
(week 1)【算法分析与论文阅读】1. Convolutional Pose Machines模型_第1张图片

算法流程与网络结构

该结构是通过设计一个卷积网络组成的序列结构来实现的,该结构之前操作前一阶段的置信图,不断修正,产生预测估计。作者提出的方法提供了一个自然学习目标函数来加强中间监督,从而补充反向传播的梯度并调节学习过程,解决训练过程中的梯度消失问题。

有一个博主总结的这个模型的三大特点:

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

CPM结构是
(week 1)【算法分析与论文阅读】1. Convolutional Pose Machines模型_第2张图片
其工作流程是:

  • 基于每个scale,计算网络预测的各关节点的heatmap
  • 累加各个关节点对应的所有尺度的heatmap,取最大值所在位置为预测是关节点位置

使用CPMs得到人体的关节点

我们选用了现有的CPM代码,根据README.md中的提示就可以得到不错的结果

  1. 首先配置环境,需要Windows10/Ubuntu16.04,TensorFlow1.4.0,OpenCV3.2,需要注意的是一定要保证TensorFlow和OpenCV的版本不要过高或过低,否则代码是无法运行的
  2. 由于我们只需要得到人体全身的关节点数据,所以只下载了body pose model的模型文件,这个是根据需要提前下好并放到models/weights文件夹里的,之后会用得到
  3. 然后根据提示跑示例程序就好,由于我们没有特殊需要,所以训练模型、损失函数、优化操作、stage设置等都没有做修改,只把图片路径换成了自己的路径
  4. 得到的结果:如果想要输出关节点的位置信息(我们就是这样,为了得到关节信息作为SMPL的输入),就需要找到存储关节点坐标的变量并输出或存储。观察demo_body_cpm.py中第415行,发现定义了一个joints_coor_set数组,储存着关节点的位置信息
    在这里插入图片描述
    把这个变量的内容保存起来即可。另外注意一下节点的顺序问题,经过验证,我们发现顺序是(头部,脖子,右肩,右肘,右臂,左肩,左肘,左臂,右胯,右膝,右脚,左胯,左膝,左脚)。

给定图片
(week 1)【算法分析与论文阅读】1. Convolutional Pose Machines模型_第3张图片

经过6个stage的训练之后得到的关节点标注为
(week 1)【算法分析与论文阅读】1. Convolutional Pose Machines模型_第4张图片
输出关节点位置信息
(week 1)【算法分析与论文阅读】1. Convolutional Pose Machines模型_第5张图片

参考内容

https://www.aiuai.cn/aifarm176.html

你可能感兴趣的:(创新实训)