HourglassNet 堆叠沙漏网络

论文地址: https://arxiv.org/abs/1603.06937

概述

Hourglass Network本来是用于姿态估计(pose estimation)这个方向,它的主要贡献是在于利用多尺度特征来识别姿态。之前的那些网络结构,大部分都是只利用了网络的最后一层的卷积特征,这样会造成一定程度上的信息缺失。那么就设计了Hourglass Network,可以同时使用多层的卷积特征,充分利用了语义信息。

网络结构

整体的Hourglass Network是由单个Hourglass Network模块串联而成,串联而成的结构相比较单级结构能够复用全身关节信息来提高单个关节的识别精度。

Hourglass Model

hourglass model

上图即为整体网络的基本单元,这个结构类似与镜像结构,C1~C4对应C4b~C1b,且每个方块还通过加号与右边对应位置方块合并。结构与resnet非常类似。

C4b详细说明下整个操作,具体有两部分:

  • C7经过上采样,分辨率增大一倍
  • C4aC4大小一致,其分辨率也是C7的两倍,恰好与被上采样后的C7大小一致,进行element-wise数值相加,那么便得到C4b

C3b~C1b也经过同样的操作得到。这样将feature map层层叠加后,得到最后一层的feature即保留了所有层的信息,又和输入原图大小一致,那么就可以通过1x1卷积生成代表关键点概率的heatmap。

各层详细的卷积参数见下图:

two stages hourglass

这是二阶Hourglass,浅绿色方块内上一层数字代表输入的维度,下一层代表输出的维度。

Heap Map

heat map

上图即为各个关键点的heap map,实际上所有的关键点预测都是一起的。

串联结构

其实单层的hourglass network就可以完成姿态估计的训练了,那么为什么还要串联起来呢?

关节点之间是可以互相参考预测的,即知道双肩的位置后,可以更好的预测肘部节点,给出腰部和脚踝位置,又可以用于预测膝盖。其他姿态估计文章有利用图模型(Graphic Model)来结合CNN做预测的,这个图模型就是对人体关节点的结构做抽象归纳。但是目前的图模型效果一般。

既然热力图代表了输入对象的所有关节点,那么热力图就包含了所有关节点的相互关系,可以看作是图模型。所以将第一个沙漏网络给出的热力图作为下一个沙漏网络的输入,就意味着第二个沙漏网络可以使用关节点件的相互关系,从而提升了关节点的预测精度

中间监督

这个操作类似于inception v3,在结构中间位置就设置了一个loss的反向传播,这个设计是为了在网络变得更深的情况下让网络能够更好的收敛。

而Hourglass Network每个子沙漏网络都会输出一个heat map预测,那么将这每一个输出都参与到loss的计算中,实验证实,预测精确度要远远好于只考虑最后一个沙漏预测的loss

总结

这篇博客只详细介绍了网络结构,但没有涉及到网络的训练,其实写到这里我对这个网络能work还存在点疑问,接下去的内容有时间再补一下。

参考博客: