本文主要用于介绍CMU开源项目OpenPose的前身CPM。本笔记主要为方便初学者快速入门,以及自我回顾。
论文链接:https://arxiv.org/pdf/1712.00726.pdf
基本目录如下:
- 摘要
- 核心思想
- 总结
------------------第一菇 - 摘要------------------
1.1 论文摘要
PM提供了一套用于预测丰富空间信息的框架,在本论文的工作中,我们将卷积网络集成进PM框架中来学习图片特征和图片空间模型并用于人体姿态预测。本论文的主要贡献就在于提出的模型能够清晰的学习到多个变量之间的空间关联关系,因此该模型十分适用于去解决类似姿态关键点预测的问题。我们提出的其实就是一个包含了多个卷积网络的序列框架,该架构使得网络能够直接用上一阶段网络输出的置信图来进一步精确预测每一个关键点的位置。
该网络架构的提出,还天然的用到了中继监督训练的方法(intermediate supervision),而这种训练方法经过实验论证也确实能够在一定程度上消除梯度消失问题。我们在多个数据集上,包括MPII, LSP和FLIC上,利用该模型架构,均取得了不错的结果~
------------------第二菇 - 核心思想------------------
2.1 背景知识介绍 - Pose Machines
姿态识别又可以被视作是结构预测问题,就是我们根据解剖学上的一些关键点(anatomical landmark),对一张图片上的每一个点建模,然后去预测这些关键点。
在深入本文细节之前,我们有必要先来了解一下 Pose Machines
简单来讲,其实Pose Machines就是一种序列化的预测框架,可以学习到丰富的空间信息。借用原论文的描述就是,
Our approach incorporates rich spatial interactions among multiple parts and information across parts of different scales.
这里先约定一下符号表示,就是图片上的所有点,就是所有的个关键点的集合,并且。
一个推理模型包含了一连串的分类器,。它们被训练后用于预测每一个关键点的位置。在每一个阶段,分类器都会根据图片特征和上一个分类器预测的结果(主要是周围点的预测结果),来预测一个位置是属于某一个关键点()的置信区间。在每一个阶段,的置信区间计算公式,
其中,
就是一连串的前置位的分类器在每一个位置预测的是关键点的置信区间。
就是特征方程,用于处理前面生成的置信区间;就是向量相加的操作。
如果还是有点迷糊的同学,我贴一张原论文的图,想必大家对 Pose Machines 就有更深的体会了,
其实真的就是一种序列化的预测框架,只不过内部的分类器都是可以自己定义的。
2.2 什么是 Convolutional Pose Machines ?
如名字所示,CPM其实就是将卷积网络集成进Pose Machines框架中,如下图所示,
我们分2个阶段来看,首先是第一阶段。
2.2.1 Keypoint Localization Using Local Image Evidence
在第一阶段中,CPM仅仅根据图片的原始信息来提取特征。上图中的部分应该说是把结构图画的很清楚了,一共包含了5个卷积层,再接2个的卷积层构造出全卷积网络的架构。每一层的感受野都在图上标记清楚了。在实际的训练过程中,输入的图像要求大小是,最后的输出大小是,其中就是关键点的个数,再外加一个背景。部分基础不扎实的同学,可能会对感受野和输出大小犯迷糊,这里我贴一张计算的过程图(外国网站上的一个计算感受野的),方便理解,
2.2.2 Sequential Prediction with Learned Spatial Context Features
第二阶段设计的初衷就是,在预测一些比较难的部位的时候(比如:手肘),利用一些其它已经预测出的部位,或是该部位周围关键点信息的时候,往往能够帮助预测出这些部分,如下图所示的右手肘,
因此在第二阶段,分类器就会接受2部分的输出,一部分是来自上一阶段的特征输出,另一部分是来自对图片的特征提取,如上图所示。只不过,在CPM中,我们的分类器依然是卷积神经网络。两部分的输出也是通过向量相连的方式,再传入到后续分类网络中。
然后,在第二阶段,网络为了尽可能的增大感受野,动用了3个的卷积核,最后将感受野增至。作者对此的解释就是
large enough to allow the learning of potentially complex and long-range correlations between parts
意思就是尽可能的去学习关节点内在的一些依赖关联关系。而作者选择通过增大卷积核的方式来增大感受野也是为了控制整体的参数数量(其他方式还包括,采用pooling操作但是牺牲精度;或者增加卷积层个数,但是会增大参数量)。作者也在论文中贴了一张实验结果图,来证明,增大感受野能够提升最后的准确率,
而这种关系也预示,其实网络内部确确实实有在学习各关键点之间的关联关系(This improvement in accuracy with receptive field size suggests that the network does indeed encode long-range interactions between parts and that doing so is beneficial.)
至此整套网络架构算是磕磕绊绊的讲清楚了~其实真要理解起来很简单,就是将卷积网络嵌套进Pose Machines框架中。
2.3 CPM训练细节
2.3.1 损失函数
训练深度神经网络的时候经常会面临梯度消失的问题,然而CPM的架构设计却能够很好的解决这个问题。每一个阶段PM都会被重复训练去预测每一个关键点的置信图。用作为标签的真实置信图(ideal belief map),在每一个真实的关键点附近构造高斯分布所产生的,记为,然后我们的损失函数就是去最小化,
整体的损失函数就是把各个阶段的损失函数相加,
这里也贴一张原论文用于展现梯度的示意图,
其他一些具体的训练过程结果这里就不展示了,比较简单,大家自行品读原论文即可。
------------------第三菇 - 总结------------------
3.1 总结
到这里,整篇论文的核心思想已经说清楚了。本论文主要是提出了卷积神经网络嵌入到PM框架中的CPM网络架构用于人体关键点检测,并实验证明了其可行性,为后续发展奠定了基础
简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下本文作者的思路,也简单表述了一下,自己对CPM网络架构的理解。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~😁