【CV论文笔记】Stacked Hourglass Networks for Human Pose Estimation(Stacked Hourglass网络详解)

本文主要用于介绍Alejandro Newell等人于2016年提出的用于关键点检测的Stacked Hourglass网络的论文。本笔记主要为方便初学者快速入门,以及自我回顾。

论文链接:https://arxiv.org/pdf/1603.06937.pdf
源码地址:http://www-personal.umich.edu/~alnewell/pose

基本目录如下:

  1. 摘要
  2. 核心思想
  3. 总结

------------------第一菇 - 摘要------------------

1.1 论文摘要

本论文提出了一种新的卷积网络架构用于人体关键点识别。为了捕获到各种人体关键点之间的空间关联关系,该网络将在各个尺度上提取特征。我们发现重复使用自上而下,自下而上的处理架构,并同时运用中间监督学习(intermediate supervision)的方法能够显著提高模型的准确率。我们将这一网络架构命名为:stacked hourglass,该架构在FLIC和MPII数据集上的表现均超过了以往的方法。

------------------第二菇 - 核心思想------------------

2.1 Stacked Hourglass网络架构详解
2.1.1 Hourglass Design详解

我们从名字就可以看出,整体的Stacked Hourglass是由多个Hourglass模块集成的,因此,我们直接来了解一下单个Hourglass的架构。

设计Hourglass的初衷就是为了能够更好的捕获多个尺度的信息,从而能精确的预测出每一个关键点的关键信息。因此,该网络必须能够有效的处理各个尺度的信息,并能加以融合运用。这里我们直接先上一张Hourglass的架构图,

【CV论文笔记】Stacked Hourglass Networks for Human Pose Estimation(Stacked Hourglass网络详解)_第1张图片
Hourglass架构图.jpg

从结构图我们可以看出,整体的网络架构先利用卷积和池化操作将特征降到一个很低的分辨率(4*4)。在每一步最大池化操作的时候,网络都会加上一个新的卷积分支,用于直接对池化前的原始分辨率提取特征(类似残差操作),并与后面上采样操作后提取出的特征相融合。在到达最低分辨率之后,网络就开始对特征进行上采样(最近邻插值),并结合不同尺度下的信息,之后再与前面连接过的特征按元素位置相加。在到达输出分辨率的时候,再在后面接2个的卷积来进行最后的检测。最终网络的输出就是一组heatmap,用于预测每一个关键点在每一个像素点存在的概率。

2.1.2 Layer Implementation

上图只是描述出了整体的架构,但并未对其中的每一块进行细致的描述(上图一个方框,就代表了一组卷积网络架构)。因此,接下来,跟随文章的节奏,我们还得好好探索一下每一块的具体网络设计。

作者强调,不同的网络结构设计会对结果产生不同程度的影响。最终,作者采用的是最流行的残差模块(residual modules),具体的模块示意图如下,

【CV论文笔记】Stacked Hourglass Networks for Human Pose Estimation(Stacked Hourglass网络详解)_第2张图片
残差模块示意图.jpg

当然,原作者对其的描述并不清晰,只是强调了卷积核大于的不用,利用了瓶颈层(1*1卷积)来控制整体参数的个数等,这里从网上盗了张示意图【1】,方便大家理解,

【CV论文笔记】Stacked Hourglass Networks for Human Pose Estimation(Stacked Hourglass网络详解)_第3张图片
Residual Module网络示意图.jpg

简单理解一下,上面一行就是传统的卷积层提取特征,下面一行其实就是跳级层,只包含了一个卷积核为的。所有的卷积核不改变尺寸,只改变通道数。其实这里已经体现了模块化的思想,即上面的一组卷积操作,就是一个模块。该模块再嵌入到更大的架构中,从而完成更多的任务。

当然直接操作会需要很多的计算资源,因此,输入进一个Hourglass的图像尺寸只有,只不过在进入到每一个Hourglass之前,图像会先经过1个的卷积,再加最大池化操作,用以将图像分辨率从256降到64.

2.1.3 Stacked Hourglass with Intermediate Supervision

了解清楚了Residual Module后,我们再回过头来看Hourglass Module,显然其是一个递归结构,因此我们先来看一下一阶的模块示意图【1】,

【CV论文笔记】Stacked Hourglass Networks for Human Pose Estimation(Stacked Hourglass网络详解)_第4张图片
一阶示意图.jpg

其中Res就是上面说的Residual Module,Up Sample就是上采样。这个图大家应该很好理解了~而且可以发现,整一个图就是一个翻版的Residual Module,而多阶的Hourglass Module就是把虚线框中的块递归的替补为一个一阶的Hourglass Module,这里再盗一张4阶的示意图【1】,

【CV论文笔记】Stacked Hourglass Networks for Human Pose Estimation(Stacked Hourglass网络详解)_第5张图片
四阶示意图.jpg

因此整一个栈结构的Hourglass,就达到了一种重复自上而下,自下而上提取特征的目的,当然,整个架构的核心关键点就是如何在中间生成的热图上去计算损失(The key to this approach is the prediction of intermediate heatmaps upon which we can apply a loss.)

这里作者是在每一个Hourglass模块后面都添加了一个中间监督,用于计算loss,如下图所示,

【CV论文笔记】Stacked Hourglass Networks for Human Pose Estimation(Stacked Hourglass网络详解)_第6张图片
中间监督的位置.jpg

而最终的预测也是在经过各个阶段的Hourglass模块后,再生成的。因此该预测的结果能同时结合局部和全局的信息。至于loss的返向传播问题,这里我的理解一开始也不到位,具体看知乎上大神们的讨论如下,

【CV论文笔记】Stacked Hourglass Networks for Human Pose Estimation(Stacked Hourglass网络详解)_第7张图片
loss函数传播问题.jpg

这里也借用论文中的话,来说明运用这种栈结构的好处,

Local and global cues are integrated within each hourglass module, and asking the network to produce early predictions requires it to have a high-level understanding of the image while only partway through the full network

还有值得一提的就是,Hourglass模块之间的参数是不共享的,但是每一次计算loss的时候,用的是一个GT。

至此,整一套Stacked Hourglass网络就已经解释清楚了。

2.2 训练细节

具体的训练细节本文不展开说了,有兴趣的同学可以深入研究一下,总的来说问题还是有的,比如多人问题,遮挡点问题等,这里贴一张该架构在MPII数据集上的表现,

【CV论文笔记】Stacked Hourglass Networks for Human Pose Estimation(Stacked Hourglass网络详解)_第8张图片
实验结果呈现.jpg

------------------第三菇 - 总结------------------

3.1 总结

到这里,整篇论文的核心思想已经说清楚了。本论文主要是提出了一种可以用于人体关键点检测的Stacked Hourglass网络架构,并实验证明了其可行性,为后续发展奠定了基础

简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下本文作者的思路,也简单表述了一下,自己对整个Stacked Hourglass网络架构的理解。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~

参考文献:
【1】https://zhuanlan.zhihu.com/p/45002720

你可能感兴趣的:(【CV论文笔记】Stacked Hourglass Networks for Human Pose Estimation(Stacked Hourglass网络详解))