人体姿势识别,Convolutional pose machines文献阅读笔记。

开源实现

https://github.com/shihenw/convolutional-pose-machines-release(caffe版本)
https://github.com/psycharo/cpm (tensorflow版本,但是只有用pre-trained model做predict,没有training)

论文原文下载地址:https://www.researchgate.net/publication/301880946_Convolutional_Pose_Machines

论文阅读笔记:

 

思路通过关键点的连线判断四肢的方向和位置(比如,手肘,肩膀,手腕,膝盖,脚踝,臀部等14个关键点)。(但是我觉得关键点的难度应该是在人体的姿势变化大,关键点不清晰和被遮挡等问题上)

 

摘要姿势识别即关键点定位技术, a sequential architecture(序列化结构。把一个网络分成几个序列化的模块)组成卷积的网络,在特征图上进行一系列的操作。解决组合序列化的模块,一旦网络过长,可能会出现梯度消失的现象,可能会杀死前面的序列的问题。将训练结果在多个数据库上进行评估。

 

方法:

 

1. 序列化网络:

  详见核心和特色:sequential网络架构。

 

2.Keypoint Localization

 

第一个Stage14个特征图,就对应14个关键点,特征图预测每个点在图像中每一个部位的概率。

 

 

 

3.Sequential prediction

 

感受野大小9*9,26*26,60*60..........,400*400(经过卷积之后,能看到的区域越来越大,可以更好地得到上下文信息,能看到更大的感受野,就有更高的准确率)分多个stage的好处就在于加卷积的时候,感受野越来越大。

 

 

 

 

 

 

纠错:关键点之间是互相影响的,要分辨出不同的关键点,需要更大的感受野通过其他关键点信息判断关键点。

 

如何得到更大的感受野:

 

  1)加更多的卷积层,网络越深,最后一层卷积层看到的越向前,获得的感受野更大。

  2)增大kernel size

 

4.关于梯度下降的问题:

 

卷积层多了,就会出现梯度消失的问题。

 

 Intermediate Supervision方法:

 

红色是正常传,epoch是每一次迭代,传到Stage2梯度就无法再变化了。

 

我理解的Intermediate Supervision:每一个阶段的Stage都已经有一个结果了,得出每个Stage的Loss,Loss1,Loss2.Loss3,每一层都有一次监督,每一层都能有参数的更新。

 

 

 

5.训练:

 

1.Loss Function:

 

 

 

 

Grand Truth:一个点的坐标与标准的欧氏距离。

 

在每一个关键点的真实位置上,放置一个高斯响应。标定后生成label数据。

 

2.数据拓展:

 

为了丰富训练样本,对原始图片进行随机旋转缩放镜像。

 

 

 

 

 

论文核心思想和特色:

 

一.Sequential网络的架构:

 

 

 

 

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

 

六个Stage

 

第一个Stage:输入图像,经过卷积得到46*46*1514+114为关键点,1为背景)的特征图。

 

第二个Stage:输入图像,经过卷积46*46*32(纹理特征,之后综合前一个Stage的结果进行连接。得到46*46*4835+15+1(中心约束))之后再卷积得到,46*46*15.

 

第三个Stage之后:直接拿到第二个Stage的中间结果,卷积成46*46*128.分成四个46*46*32和前一个阶段性预测结果进行卷积。

 

Center Map:在人的周围加上一个高斯响应。Stage2之后都会有一个Center map的聚拢。提前生成的高斯函数模板,用来把响应归拢到图像中心

 

二:.各部件响应图来表达各部件之间的空间约束

 

响应图和特征图一起作为数据在网络中传递。

 

三:中继监督:

 

 

posted @ 2018-05-28 10:56  纸月809  阅读(3478)  评论(0编辑  收藏  举报