单人检测:stacked hourglass network
文章链接:https://arxiv.org/abs/1603.06937
文章提出一种网络结构stacked hourglass network,来处理单人的关键点估计问题。
如下图所示,该网络通过不断堆叠hourglass结构,多次重复bottom-up,top-down的过程。
图中,每一个形为沙漏的单个模型,称其为hourglass。
下文将针对几个问题进行分析:
- 为什么要用hourglass这种结构
- 为什么要堆叠多个hourglass
- 多个stage如何进行监督学习
hourglass
如上图中,每个hourglass的结构都形如下图。
图中每一个box都对应一个残差块。
hourglass的设计是为了获取到多个分辨率下的特征。我们需要给关键点进行定位(high resolution);需要对身体有一个整体的理解,理解哪些特征是关键点(low resolution)。也就是说,我们既需要高层的语义特征来进行检测,也需要底层的高分辨率来进行定位。
hourglass模型
hourglass的设计非常简单。
bottom-up: 左边是输入是$64\times{64}$的特征图(成为$l_1$层),通过四次降采样(max pooling)变为$4\times4$的特征(称为$l_8$层),通过卷积和池化操作学习到低分辨率下的特征。
left-right: 左边学到的最高层的特征$l_8$通过两次$1\times1$的残差块卷积得到右边的最高层特征$r_8$
top-down: 然后每次通过对之前学习到的特征进行上采样并于左边的结果进行结合。例如右边最高层的特征$r_8$为$4\times4$的,通过一次上采样的得到$r’_4$为$8\times8$,$r’_4$与$l_4$进行conbine得到$r_4$。
最终得到的$r_1$为$64\times64$既可作为结果进行预测,也可作为输入进行下一轮的hourglass。
hourglass理解
hourglass的模型与特征金字塔网络模型类似,想要具有丰富语义的高层特征,又想要具有高分辨率的底层特征。
因为hourgalss是将上采样的高层特征与原来的特征图向结合,所以进行堆叠的时候,理论上可以使hourglass的输出与输入相等。也就是说如果不能学习到更好的结果的话,至少不会更差。这种设计思想又与残差网络类似。
stacked-hourglass(multi-stages)
这种多个stage的方法,其他姿势估计方法也经常会使用,例如openpose,这些方法在多个迭代阶段和中间监督下均表现出出色的性能。
后续的bottom-up,top-down stages可以对特征进行更深刻的学习。
原文是使用了8个stage作为最后的模型。
supervision
在每个stage中都进行中间监督,使用相同的ground-true计算损失。
下图是一个完整的stage的结构。
在经过一个hourglass之后,得到了一个$64\times64$的特征,使用一个$1\times1$的卷积,得到该stage的head。再对head使用一个$1\times1$的卷积得到$64\times64\times{num_class}$的heatmap,即途中蓝色部分。使用该heatmap与gt可以计算损失。
我们看到,输出的heatmap有使用$1\times1$的卷积对维度进行处理,与原来的head分支进行合并,作为下一次hourglass的输入再进行学习。