姿势识别CPM

参考文献:

1. https://blog.csdn.net/shenxiaolu1984/article/details/51094959

神经网络的基础功能是分类单人姿势识别论文:Convolutional Pose Machines,即CPM,是openpose的前身。其主要思想为通过多个stage去修正,定位响应图,其输入为单张图片,并且特征图和响应图在网络中一起传播(这句话很重要,是一起传播),输出为n的节点的响应图。其网络模型如下。tensorflow实现的源码如下:https://github.com/mpskex/Convolutional-Pose-Machine-tf

我觉的在这里有必要解释一下这个网络的思想,采用了级联网络,使用的全卷积神经网络的思想(FCN),FCN主要是改进卷积神经网络的全连接层为反卷积,从而进行像素级别的图像分割。FCN网络的输入为单张图片,输出为同等大小的热力图。这个热力图可以自己定义,比如可以根据像素区域的位置进行划分,从而进行不同类别的像素分类。当然也根据骨骼点的位置在相应的位置生成热力图去拟合。

 

姿势识别CPM_第1张图片

 

我觉得这种解释可能还不太准确,因此,提取一下的作者的源码,网络的输入为376×376大小的图像,center map的大小为376×376和原图像大小一致,输出为46×46×15的热图,15是关节点的个数,各个关节点分别计算,网络训练时,loss的计算也是根据这个46×46×15的热力图来计算。

pose_image_in = tf.placeholder(tf.float32, shape=(None, 16, 376, 376, 15),name='pose_image_in')
pose_centermap_in = tf.placeholder(tf.float32, shape=(None, 16, 376, 376, 1),name='pose_centermap_in')
labels_placeholder = tf.placeholder(tf.float32, shape=(None, 46, 46, 15),name='gt_heatmap_placeholder')

接下来,我们计算一下这15是怎么得到,我们根据文章中最经典的4个stage来计算。此图与上面的代码并不是一个,因此图片大小可能不一致。

姿势识别CPM_第2张图片

stage1:   输入为原始368×368×3。经过stage1为46×46×15,这个大小也为最终的热力图的大小。

stage2:输入为原始图像,经过卷积操作变为46×46×32大小,接下来进行一个链接操作,为图中的concat,46×46×15+46×46×32 + 46+46 × 1= 46×46×48,再经过卷积操作变为46×46。

stage3:这时候不再用原始图像作为输入,而是从stage2中取出46×46×128的feature map进行输入,依次进过conv层,串联层输出46×46×15的热力图。

state4:end,此时的网络结构与stage的网络结构一致。

 

你可能感兴趣的:(深度学习)