Stacked Hourglass学习笔记

本文介绍了2016 ECCV论文中Stacked Hourglass Networks,一种用于精确人体姿态估计的神经网络结构,通过hourglass模块堆叠实现多尺度特征融合。文章详细解读了模块设计、ResidualModule、中间监督等关键概念,并展示了其在FLIC和MPII数据集上的实验成果。

 

  论文链接:https://arxiv.org/pdf/1603.06937.pdf

概述

这篇文章发表于2016ECCV,作者提出了一种新的人体姿态估计结构Stacked Hourglass Networks。它将多个hourglass堆叠在一起,看上去像沙漏一样,所以称作堆叠的沙漏网络。

这种堆叠在一起的Hourglass模块结构是对称的,bottom-up过程将图片从高分辨率降到低分辨率,top-down过程将图片从低分辨率升到高分辨率,这种网络结构包含了许多pooling和upsampling的步骤,pooling可以将图片降到一个很低的分辨率,upsampling可以结合多个分辨率的特征。

网络结构

Hourglass Module整体结构

Hourglass模块设计的初衷就是为了捕捉每个尺度下的信息,因为捕捉像脸,手这些部分的时候需要局部的特征,而最后对人体姿态进行预测的时候又需要整体的信息。为了捕获图片在多个尺度下的特征,通常的做法是使用多个pipeline分别单独处理不同尺度下的信息,然后再网络的后面部分再组合这些特征,而作者使用的方法就是用带有skip layers的单个pipeline来保存每个尺度下的空间信息。

在Hourglass模块中,卷积和max pooling被用来将特征降到一个很低的分辨率,在每一个max pooling步骤中,网络产生分支并在原来提前池化的分辨率下使用更多的卷积,当到达最低的分辨率的时候,网络开始upsample并结合不同尺度下的特征。这里upsample(上采样)采用的方法是最邻近插值,之后再将两个特征集按元素位置相加。

当到达输出分辨率的时候,再接两个1×1的卷积层来进行最后的预测,网络的输出是一组heatmap,对于给定的heatmap,网络预测在每个像素处存在某一关节点的概率。

Residual Module

上面提到的是Hourglass模块的整体架构,接下来是对架构中的每一块进行细致的讲解,即Fig.3中的每一个方块都是由一个Residual Module(残差块)组成:

 Residual Module

结合源码中的细节,事实上Residual Module的结构是这样的:

为什么要用到残差块呢?首先,从残差模块的架构图中,并没有使用超过3x3的卷积核,这也是论文作者所强调的。不适用超过3x3的卷积核主要是有两个原因。一是GPU的算力限制,因此作者使用1x1的卷积核来控制整体模型的参数数量。二是最近的研究发现,用连续的小尺寸的卷积核会比同等参数量的单一大尺寸的卷积核能获取更多的空间特征,比如可以用两个连续的3x3卷积核来取代一个5x5的卷积核。

残差模块Pytorch代码

 其次,前面提到:Hourglass模块则是采用单一的带有skip layer的管道来为每个分辨率保存空间信息。Residual Module中虚线部分就是skip layer。我们可以结合残差模块的pytorch代码可以看出:如果输入和输出的channel数是一致的,则直接将输入的feature map与最后一层卷积输出的feature map直接进行相加。而如果channel数不一致,则先使用1x1的卷积核,在不改变输入feature map的size大小的同时,使channel数和输出的channel一致。

Hourglass Module

在详细介绍了Hourglass Module 的整体结构及其组成单元残差模块后,再回过头来仔细分析一下Hourglass模块的结构。事实上,Hourglass模块是一个递归结构。在论文中,作者是使用了四阶递归结构。首先从一阶递归的Hourglass模块来介绍,如下图所示。

 一阶Hourglass模块结构

绿色框Max Pool是下采样,蓝色框是残差块,红色框是上采样。多阶的Hourglass Module就是将上图虚线框中的块递归地替换为一阶Hourglass Module,由于作者在实验中使用的是4阶的Hourglass Moudle,所以这里画出了4阶的Hourglass Module的示意图:

四阶Hourglass模块结构

整体结构

网络输入的图片分辨率为256×256,在hourglass模块中的最大分辨率为64×64,整个网络最开始要经过一个7×7的步长为2的卷积层,之后再经过一个残差块和Max pooling层使得分辨率从256降到64。由于原文中作者是堆叠了8个Hourglass Module,这里放出8阶的结构图:

 图中的4阶Hourglass Module就是前面讲的4阶Hourglass Module,可以看到整个网络还是挺庞大的,图中的渐变红色块就是加入了中间监督的地方,即在此处使用loss函数。

Intermediate Supervision(中间监督)

为什么中间监督那么关键?这是因为当通过每个Hourglass模块时,网络都将有机会在局部和全局上下文中处理特征,然后生成预测。 随后的Hourglass模块允许这些高级特征再次被处理,以进一步评估和重新评估更高阶空间关系。 这与其他采用多个迭代阶段和中间监督下表现出色的姿态估计方法相似。

中间监督的位置放在哪里合适呢?首先我们知道,大多数高阶特征只会在比较低的分辨率时才会出现,除非是在上采样发生时的最后。如果把监督放在网络上采样后,那就没有办法在更大的全局上下文中相对重新评估这些特征。如果希望网络能够做出最好的预测,那这些特征就不能在一个局部上下文中进行预测。局部和全局线索被整合在每个Hourglass模块中,而让网络进行早期预测需要它对图像有一个高层次的理解的形象,即使这只是整体网络的一部分。自底向上、自顶向下处理的后续阶段允许更深层次的处理。

这种在尺度之间来回切换的方法尤其重要,因为保留特征的空间位置对完成最后的定位步骤至关重要。关节点的精确位置是其它决定不可缺少的线索。对于像姿势检测这样的结构化问题,输出是许多不同特性的相互作用,这些特性应该结合在一起,形成对场景的连贯理解。

最终,作者将中间监督设计在如下图所示位置:

通过一个额外的1x1卷积将中间预测映射到更多的通道,从而将它们重新集成到特征空间中。这些来自前一个Hourglass模块的特征输出被添加回来自当前Hourglass模块的中间特征。结果输出直接作为下一个Hourglass模块的输入,生成另一组预测。 在最终的网络设计中,使用了8个Hourglass模块。 值得注意的是,这8个Hourglass模块的权重不是共享的,损失适用于所有Hourglass模块的预测并使用相同的ground truth。

 训练细节

作者在FLIC和MPII Human Pose数据集上进行了训练与评估。这篇论文只能用于单人姿态检测,但是在一张图片中经常有多个人,解决办法就是只对图片正中心的人物进行训练。将目标人物裁剪到正中心后再将输入图片resize到256×256。为了进行数据增量,作者将图片进行了旋转(+/-30度)、scaling(0.75-1.25)。

网络使用RMSprop进行优化,学习率为2.5e-4. 测试的时候使用原图及其翻转的版本进行预测,结果取平均值。网络对于关节点的预测是heatmap的最大激活值。损失函数使用均方误差(Mean Squared Error,MSE)来比较预测的heatmap与ground truth的heatmap(在节点中心周围使用2D高斯分布,标准差为1) 

为了提高高精度阈值的性能,在转换回图像的原始坐标空间之前,预测在其下一个最高邻居的方向上偏移四分之一像素。

实验结果

评测指标采用的是标准的PCK指标(Percentage of Correct Keypoints),这个指标指出了检测结果关键点落在ground truth的标准化距离之内的比例。对于FLIC数据集来说,距离按躯干大小标准化,对于MPII数据集来说,距离按头的大小标准化。

 参考博客:

https://zhuanlan.zhihu.com/p/45002720

https://zhuanlan.zhihu.com/p/412363029

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值