文章目录

  • 介绍
  • 原理
  • 结构
    • 残差模块
    • 单沙漏模块
      • 一阶Hourglass
      • 二阶Hourglass
      • N阶Hourglass
    • 堆叠沙漏模块
      • 中间监督
  • Volumetric Regression Network(VRN)

介绍

Stacked Hourglass(Stacked HG, 堆叠沙漏)网络最早出现在2016年的Stacked Hourglass Networks for
Human Pose Estimation中,Stacked HG网络的作用是通过估计人体关键点的热度图来实现关键点的定位。这种网络结构的特点就是能够充分利用多尺度的特征映射,并且输入和输入有相同的输出,因此除了人体关键点检测,也在其他领域得到了应用。之前做过一个单张图片3D人脸重建的项目,主要借鉴了这篇论文Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric CNN Regression,其中使用的体素回归网络(VRN)就是通过多个沙漏模块组合实现的。

原理

传统的CNN提取特征,随着网络层数的加深,感受野变大,网络提取的特征也由低级轮廓信息变为高级的语义信息。以前估计姿态的网络结构,大多只使用最后一层的卷积特征,这样会造成信息的丢失。事实上,对于姿态估计这种关联型任务,全身不同的关节点,并不是在相同的feature map上具有最好的识别精度。举例来说,胳膊可能在第3层的feature map上容易识别,而头部在第5层上更容易识别,见下图。所以,需要设计一种可以同时使用多个feature map的网络结构。

网络的设计动机是对于在每一个尺度下捕捉信息的需求。尽管局部信息对于识别人面部,手部特征很有效,但对于人体姿态的最终估计则需要对整个人体的联合理解。人体的方位,四肢的布局,关节点之间的关系等这些线索都可能是在在不同尺度下获得的最佳识别结果。

结构

整个Stacked Hourglass Networks的结构如下图,可分解为:残差模块、单沙漏模块、堆叠沙漏模块。

残差模块

借助于残差网络的思想,也是整个网络最基础的模块,如下图所示:

第一行为卷积路,由三次卷积操作串联而成,间插有Batch Normalization(浅蓝)和ReLU(浅紫);
第二行为跳级路,只包含一个1x1的卷积层,负责改变输入的通道数,以便与第一行的卷积结果相加;如果跳级路的输入输出通道数相同,则这一路为单位映射。
所有卷积层的步长为1,pading为1,不改变数据尺寸,只对数据深度(channel)进行变更。
因此Residual Module只由两个参数控制:输入深度M和输出深度N,而与图片尺寸H和W无关。

作用:残差模块提取了较高层次的特征(卷积路),同时保留了原有层次的信息(跳级路),不改变数据尺寸,只改变数据深度,也解决了反向传播时可能存在的梯度消失问题。

单沙漏模块

单沙漏模块由残差模块组成,根据内部结构的复用程度,可以实现更多尺度的特征信息融合。

一阶Hourglass


上下两路都包含若干上面提到的残差模块(浅绿),该模块与输入尺寸无关,只需要提供输入和输出的通道数。逐步提取更深层次特征。上路在原尺度进行特征提取,下路在降采样(红色/2)的尺度空间上进行特征提取,之后把特征升采样(红色*2)到与上路相同尺寸,并进行特征融合。
具体地,降采样使用max pooling,升采样使用最近邻上采样(nearest neighbor upsampling)方式,最后将两个不同的特征集进行逐元素相加。

二阶Hourglass

和残差模块类似,如果把上面提到的一阶Hourglass进行封装,需要控制的参数也只有输入和输出的通道数,而与feature map的尺寸无关。因此,把上图中灰色虚线框内的残差模块替换成一阶Hourglass本身的结构,得到的就是一个二阶Hourglass,结构如下:

下路经过了两次降采样,再两次升采样的过程。从特征融合的角度来看,实质是在H/4尺度上与H/2尺度上特征融合的结果,再去和原尺度空间上提取的特征进行融合。

N阶Hourglass

在二阶Hourglass基础上,对Hourglass的结构不断复用,即可得到N阶的Hourglass结构。

上图是四阶Hourglass的结构,一般的N阶Hourglass的结构图如下:

关键步骤:
每次降采样之前,分出上半路保留原尺度信息;
每次升采样之后,和上一个尺度的数据相加;
两次降采样之间,使用三个Residual模块提取特征;
两次相加之间,使用一个Residual模块提取特征。

网络细节:首先Conv层和Max Pooling层用于将特征缩放到很小的分辨率;
每一个Max Pooling(降采样)处,网络进行分叉,上下两路在不同尺度空间进行卷积操作提取特征;
得到最低分辨率特征后,网络开始进行upsampling,并逐渐结合不同尺度的特征信息. 这里对较低分辨率采用的是最近邻上采样方式,将两个不同的特征集进行逐元素相加;
整个hourglass是对称的,获取低分辨率特征过程中每有一个网络层,则在上采样的过程中相应低就会有一个对应网络层;
得到hourglass网络模块输出后,再采用两个连续的 1×1 Conv层进行处理,得到最终的网络输出。

作用:N阶Hourglass子网络提取并融合了从原始尺度到1/2n1/2^n1/2n尺度的特征信息,借助于残差模块,输出相对于输入不改变数据尺寸,只改变数据深度。

堆叠沙漏模块

多个N阶Hourglass结构堆叠在一起,组成了一个完整的Stacked Hourglass结构,如下图:

其中,N1代表第一个Hourglass结构,提取出的混合特征经过1个1x1的全卷积网络后,分成上下两个分支,上部分支继续经过1x1卷积后,进入下一个沙漏网络。下部分支先经过1x1卷积后,生成Heat Map,就是图中蓝色部分。
上图中蓝色方块比其他三个方块要窄一些,因为Heat Map矩阵的通道数就是预测的人体关键点个数,设为 [64, 64, N_Landmark],而其他几个黑色方块的深度只是代表特征的通道数,如 [64, 64, 256]。
Heat Map继续经过1x1卷积,将通道数调整到与上部分支一致,如256,最后与上部分支合并,并与上一层N1的输入一起作为下一个沙漏网络的输入。

内部细节如下图:

其中Conv_1就是Heat Map,shape为[64,64, N_Landmark],每一个通道表征了某一个关节点在每个像素点存在的概率。可以看到下一层Hourglass结构的输入,由之前说过的三部分相加得到,最后一层Hourglass结构的输出就是其Conv_1的结果。

上图就是各个关节点的Heat Map,左边第一张为输入图像以及最终的预测关节点位置,第二张为负责颈部节点的通道所预测的概率结果,红色和黄色代表着对应像素位置是颈部的概率很高,其他蓝色区域意味着这里几乎不会是颈部位置。之后的几张分别表示Heat Map的不同通道所预测的不同节点的概率结果。

既然单独的Hourglass结构已经可以输出Heat Map进行预测,为什么还要采用堆叠的方式?
在人体关键点检测任务中,关节点之间是可以互相参考预测的,即知道双肩的位置后,可以更好的预测肘部节点,给出腰部和脚踝位置,又可以用于预测膝盖。既然热力图代表了输入对象的所有关节点,那么热力图就包含了所有关节点的相互关系,可以看作是图模型。所以将第一个沙漏网络给出的热力图作为下一个沙漏网络的输入,就意味着第二个沙漏网络可以使用关节点件的相互关系,从而提升了关节点的预测精度。

中间监督

传统的识别或者检测网络,loss只比较最后的预测与ground truth之间的差异。在堆叠沙漏网络结构中,如果只使用最后的Heat Map对整个网络进行梯度下降,输出层的误差经过多层反向传播会大幅减小,即发生vanishing gradients现象。 为解决此问题,在每个阶段的输出上都计算损失,因为堆叠沙漏网络的每一个子沙漏网络都会输出一个Heat Map(堆叠沙漏模块中的蓝色方块),所以将每个沙漏输出的Heat Map参与到loss计算和反向传播中,这种方法称为intermediate supervision,可以保证底层参数正常更新,因此预测精确度要远远好于只考虑最后一个沙漏预测的loss。

Tensorflow的实现代码地址:https://github.com/wbenbihi/hourglasstensorlfow

Volumetric Regression Network(VRN)

传统的基于CNN实现3D人脸重建的方法,大多是通过预测3DMM模型的参数实现的,而VRN通过上面介绍的沙漏模块,实现了单张图片到人脸体素模型预测的End-to-end网络。
对于一个3D人脸模型,先划定体素网格的大小,比如192x192x200,然后对需要体素化的模型从x, y, z三个方向进行一个等比例的划分。接下来从x,y,z三个方向发出射线,判断射线在是否在模型里,在模型外的数据是0, 在模型内的数据是1,于是一个3D模型转换成了一个对应的192x192x200矩阵,可以将其作为CNN的输出(沙漏模块的输出),这样便完成了模型的体素化(并且这样得到的体素结果是没有空洞的)。
下面第一张图是3D人脸模型的mesh表示,可以看出就是一个曲面;第二张是voxel,也就是体素表示,可以看出人脸是由很多个立方体构成的。


作者在通过沙漏结构实现VRN时,提出了三种思路:

  • VRN模型使用两个沙漏模块堆积而成,并且没有使用hourglass的间接监督结构。
  • VRN-guided 模型是使用了Stacked Hourglass Networks for Human Pose Estimation 的工作作为基础,在前半部分使用两个沙漏模块用来获取68个标记点,后半部分使用两个沙漏模块,以一张RGB图片和68个通道(每个通道一个标记点)的标记点作为输入数据。 (论文在实验中发现效果最好的方法)
  • VRN-Multitask 模型,用了三个沙漏模块,第一个模块后分支两个沙漏模块,一个生成三维模型,一个生成68个标记点。

三种思路的网络结构如下图:

对这篇论文感兴趣的可以:http://aaronsplace.co.uk/papers/jackson2017recon/
其中附加了一个在线测试demo的网页链接:Online demo

总的来说,Stacked Hourglass Networks的结构虽然最早是用来提取人体关键点,但其核心思想是多尺度空间上的特征提取及融合,并且借助于模块的复用,使得网络结构有较好的扩展性,为了网络的收敛又提出了中间监督的方法,这些对于其它很多任务都有较高的参考价值。

主要参考的博客有:https://blog.csdn.net/shenxiaolu1984/article/details/51428392
https://blog.csdn.net/wangzi371312/article/details/81174452
https://www.cnblogs.com/z1141000271/p/9962464.html

Stacked Hourglass Networks 理解相关推荐

  1. Stacked Hourglass Networks 人体姿态检测

    本文是人体关键点中非常经典的一篇文章:Stacked Hourglass Networks for Human Pose Estimation 论文地址: https://arxiv.org/abs/ ...

  2. Paperreading之五  Stacked Hourglass Networks(SHN)和源码阅读(PyTorch版本)

    1.前言 这篇文章是ECCV2016的论文,Jia Deng组的工作,是top-down算法,非常经典,当时也是在各种公开数据集上霸榜.在FLIC和MPII上都是第一名(在当时),是sota算法.现在 ...

  3. Paperreading之五 Stacked Hourglass Networks(SHN)和源码阅读(PyTorch版本)

    版权声明:遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/baolinq/article/details/845753 ...

  4. (Stacked Hourglass Networks for Human Pose Estimation)用于人体姿势估计的堆叠沙漏网络

    摘要 This work introduces( 提出) a novel(新奇的) convolutional network architecture for the task of human p ...

  5. 论文阅读 Hourglass:Stacked Hourglass Networks for Human Pose Estimation

    摘要   本文介绍了一种新的卷积网络结构.为了最好的捕捉与身体相关的各种空间关系,所有尺度的特征都被处理和整合.我们展示了重复的自底向上.自顶向下的处理过程与中间监督结构一起使用是如何有效改善网络性能 ...

  6. Stacked Hourglass Networks for Human Pose Estimation

    介绍 这是一篇2016年做单人姿态估计的文章 实验用的是MPII sigle 和 FLIC ,指标PCKh 通过堆叠沙漏结构的网络进行人体姿态估计 沙漏结构指通过pooling得到低分辨率的特征,然后 ...

  7. 论文分享 Stacked Hourglass Networks for Human Pose Estimation

    Alejandro Newell, Kaiyu Yang, and Jia Deng University of Michigan, Ann Arbor 2016.7 https://github.c ...

  8. 【人体姿态】Stacked Hourglass算法详解

    Newell, Alejandro, Kaiyu Yang, and Jia Deng. "Stacked hourglass networks for human pose estimat ...

  9. 《Stacked Attention Networks for Image Question Answering》论文解读与实验

    这是去年10月份,自己看的第一篇关于VQA的论文,由于课程内容需要,对论文内容理解得还算深入,并在github上找了一些代码来实验.下面直接开始~ 1. 实验目的 完成一项视觉问答(VQA)的任务,即 ...

  10. Stacked Attention Networks for Image Question Answering(用于图像问答的堆叠注意力网络)

    Stacked Attention Networks for Image Question Answering Abstract 1.introduction 2. 相关工作 略 3.堆叠注意力网络( ...

最新文章

  1. Unity3D 镜面反射
  2. AI一分钟 | 特斯拉官方回应致死事故:鉴定报告尚不完整
  3. 国王游戏(洛谷-P1080)
  4. 水滴公司更新招股书:发行价区间为10-12美元
  5. 设计素材导航网站,宝藏都在里面!
  6. for循环的几种写法(变化)
  7. Linux后台运行jar不产生nohup.out
  8. 【Unity3d】使GUI适应屏幕分辨率
  9. Running SharePoint on Windows 7(转)
  10. 北大助理教授献给「后浪」的建议:奔涌吧,深度学习!
  11. BIM模型文件下载——某体育馆项目Revit模型
  12. Excel:数据处理
  13. 手写一个识别旺旺/千牛,手机在线/电脑在线状态的小工具
  14. 认知:设计模式之观察者模式
  15. MySQL复制表数据到新表的方法 亲测可用
  16. 三星位置共享服务器,三星智能共享怎么用?三星智能共享图文详细使用教程
  17. 字母异位词(anagram)的不同复杂度实现
  18. python解除windows锁屏_用python获取win10锁屏图片
  19. oracle import mapping,ORACLE 数据泵导入导出数据
  20. java解析xml 前言中不允许有内容_关于xml加载提示: Error on line 1 of document : 前言中不允许有内容...

热门文章

  1. 用Vue.js做了一个九宫格图片展示模块(可点击进行缩放)
  2. ajax请求在ie浏览器上的兼容性问题
  3. ​深度:50+中老年健身运动需求升级,老年健身房能否成为下一个线下消费入口?
  4. 【统计学】用Stata做时间序列分析
  5. 2021-02-04-scrapy爬虫案例1:爬取博客园新闻版块详情页-基础入门篇
  6. agx 安装ros opencv_CARLA与Autoware和ROS的联合仿真安装过程
  7. Scrapy爬虫框架之爬取校花网图片
  8. 80211协议beacon帧字段解析一
  9. wps工资表怎么用计算机,wps制作工资表的方法步骤图
  10. Cross-lingual Document Retrieval using Regularized Wasserstein Distance