欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Convolutional Pose Machine(CPM)解读

程序员文章站 2022-04-19 11:14:21
...

Convolutional Pose Machine(CPM)解读

#Convolutional Pose Machine总结


目录

Convolutional Pose Machine简介

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

算法详细分析

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

CPM的网络结构和感受野如下图所示:
Convolutional Pose Machine(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越多,感受野也就越大。下面是论文中给出的准确率随感受野上升的曲线图:
    Convolutional Pose Machine(CPM)解读

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

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

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

算法流程

训练阶段

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

使用阶段

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

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

创新点

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

  1. belief map
    一方面是获取每一个stage输出的heatmap,同时该belief map有助于后续stage的训练,根据论文中下图图片描述可知,belief map提供的易于检测部位的上下文信息为不易检测的部位(遮挡部位)提供了检测的线索:
    Convolutional Pose Machine(CPM)解读
  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的训练。
    Convolutional Pose Machine(CPM)解读

  2. LSP dataset

  3. FLIC dataset

效果展示

  1. 手势预测:
    对于手部关节点,CPM提出的方法可以做出很好的预测,convolutional-pose-machines-tensorflow 如下所示的手势预测:
    Convolutional Pose Machine(CPM)解读

  2. 身体姿态预测:
    单人效果:
    Convolutional Pose Machine(CPM)解读
    多人效果:
    Convolutional Pose Machine(CPM)解读

  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
                                </div><div data-report-view="{&quot;mod&quot;:&quot;1585297308_001&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/cherry_yu08/article/details/80846146&quot;,&quot;extend1&quot;:&quot;pc&quot;,&quot;ab&quot;:&quot;new&quot;}"><div></div></div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet">
                            </div>

#Convolutional Pose Machine总结


目录

Convolutional Pose Machine简介

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

算法详细分析

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

CPM的网络结构和感受野如下图所示:
Convolutional Pose Machine(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越多,感受野也就越大。下面是论文中给出的准确率随感受野上升的曲线图:
    Convolutional Pose Machine(CPM)解读

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

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

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

算法流程

训练阶段

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

使用阶段

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

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

创新点

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

  1. belief map
    一方面是获取每一个stage输出的heatmap,同时该belief map有助于后续stage的训练,根据论文中下图图片描述可知,belief map提供的易于检测部位的上下文信息为不易检测的部位(遮挡部位)提供了检测的线索:
    Convolutional Pose Machine(CPM)解读
  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的训练。
    Convolutional Pose Machine(CPM)解读

  2. LSP dataset

  3. FLIC dataset

效果展示

  1. 手势预测:
    对于手部关节点,CPM提出的方法可以做出很好的预测,convolutional-pose-machines-tensorflow 如下所示的手势预测:
    Convolutional Pose Machine(CPM)解读

  2. 身体姿态预测:
    单人效果:
    Convolutional Pose Machine(CPM)解读
    多人效果:
    Convolutional Pose Machine(CPM)解读

  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
                                </div><div data-report-view="{&quot;mod&quot;:&quot;1585297308_001&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/cherry_yu08/article/details/80846146&quot;,&quot;extend1&quot;:&quot;pc&quot;,&quot;ab&quot;:&quot;new&quot;}"><div></div></div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet">
                            </div>
相关标签: 图像处理