最近一直在准备3D人体重建的项目,所以在这里记录一下对hourglass net的一些浅显的理解。

本文将以SHN来表示来表示stacked hourglass network。SHN在人体姿势预测(human pose estimation)效果很好。也常常被用到和SMPL相关的项目的当中,比如SMPLR。
hourglass 网络可以在像素级的精度上来预测RGB图片中人体关节的位置,使用SHN的效果大致如下所示,

在计算机视觉领域,我们会发现使用一般的CNN网络结构就可以很好的对物品进行分类,也就是说,计算机知道该图片中有什么,但是不知道这个东西在哪里,因为在CNN所输出的feature map中包含了很少的空间信息(spatial information),而想要精准的定位人体的关节,不仅仅需要让计算机知道以照片里有什么,还需要让他知道这个东西在哪里。

hourglass network,顾名思义,这个网路的形状就很想一个沙漏。网络的形状如下图:

整个网络包含了一下几个组成部分:

  • convolutional layers
  • pooling layers
  • residual layers
  • bottleneck layers
  • upsampling layers

首先卷积层的作用一定是提取输入图像的 feature map,将输入的RGB图像进行分解。最大池化层的作用可以理解成是选取在feature map中哪些地方对于预测重要,哪些地方对于预测不重要,经过池化层之后的图片进一步变小。残差层是hourglass 网络的非常重要的组成部分,这个网络在很大程度上是基于残差模块的。残差层的作用是将网络前面的层的输出向后传递。然后bottleneck layer其实本质上也是一种residual。只不过,bottleneck layer 改变了卷积的形式,将两个3x3的核,变成了1x1,3x3,1x1三个核的组合。使用较小的核可以节约不少的计算机内存。最后的upsampling层使用 the nearest neighbor 的技术来填充已经被缩小到预设值的图片,直到图片和原输入图片的大小一致。

知晓了网络每一层的具体作用之后,现在可以来大致的记录一下网络的具体工作流程和每一层的具体细节。hourglass network 本身其实可以理解成是一个encoder-decoder的结构,encoder最大程度的提取图像在每一个scale的特征以及空间信息(spatial information),decoder则是将网络在不同分辨率下提取的特征进行综合,最后得到一个与输入图像大小一致的heatmap。值得注意的是,很多情况网络会以一个或者多个全连接成作为最后的输出层,但是hourglass 网络使用了一个1x1的卷积层来代替了全连接层,这样做的目的是为了让网络可以接受不同维度的输入。

首先,网络对输入图片的尺寸大小是有要求的。论文中规定的图片输入大小是64x64大小的图片。由于训练量巨大,若图片的尺寸很大,那么对计算机内存就会产生很大的压力。每当图片进过一次最大池化层的时候,网络都会分成两个分支,一个分支是将当前池化层的输出继续向后传递,另一个分支则将当前池化层的输出传给一个bottleneck layer, 可以理解成网络是在保存当前层的输出。当输入图片从encoder端输出的时候,该图片的大小只有4x4了,然后也生成了4个不同scale的feature map。值得注意的是,stacked hourglass network 使用的是 immediate supervision,因为它是由很多个hourglass network组合而成,在每一个hourglass network输出之后就计算损失,而不是到跑完所有的hourglass networks都跑完之后在计算损失。

接下来记录一下网络每一层的具体结构

第一层与其他三层有些也的不同,当输入图片之后,会经过一个7x7的卷积核,batchnorm还有一个relu激活函数,然后过了bottleneck layer之后,网络分成两路,一路继续提取feature map,一路保存当前尺寸的特征图,留给以后的层时候,这样做的目的是为了尽可能的保存多的不同scale中的空间信息。






最后一层的输出层没有现在是在论文给出的图中,但是前向提到了,他是一个1x1的卷积层,它的结构如下图所示:

可以看到的是输入到下一个hourglass net的是原始的输出加上当前hourglass net的损失,意思是下一个hourglass 网络将在一定程度上基于上一个网络的损失进行训练,这也是为什么residual 模块对于 stacked hourglass 网络很重要的原因之一。

堆叠沙漏网络(stacked hourglass network)相关推荐

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

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

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

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

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

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

  4. Hourglass Network 沙漏网络 (pose estimation姿态估计)

    在ECCV2016<Stacked Hourglass Networks for Human Pose Estimation>这篇paper中提出 是一个姿态估计(pose estimat ...

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

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

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

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

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

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

  8. Stacked Hourglass Networks for Human Pose Estimation

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

  9. Stacked Hourglass Networks 人体姿态检测

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

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

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

最新文章

  1. 【多标签文本分类】Ensemble Application of Convolutional and Recurrent Neural Networks for Multi-label Text
  2. 【Python】分享14条非常实用的Pandas函数方法,建议珍藏!!
  3. [MySQL]MySQL分区与传统的分库分表(精华)
  4. kotlin访问控制符可见性
  5. java 带宽控制_如何使用Java netty正确限制带宽使用?
  6. [Ajax] Ajax的基本用法
  7. python---(10) python模块的使用
  8. 为 Joomla 而生的 Kunena 论坛安装手册
  9. blender 上一步 下一步_下一步是模拟宇宙
  10. 诺基亚x6 云服务器,手机上面怎么玩端游?诺基亚X6通过云电脑玩DNF教程
  11. 【Python 基础篇】Python代码 之 三目表达式总结
  12. 证件照制作如此简单——基于人脸检测与自动人像分割轻松制作个人证件照(C++实现)
  13. python 取整求余函数
  14. oracle筛选后怎样重新排序,excel表格筛选后怎么重新排序
  15. Android: Fragment (Trying to instantiate a class that is not a Fragment)
  16. 计算机组装维修设置还原点,怎样恢复出厂设置组装电脑
  17. 用python画圆锥_用python画一幅美瞳,今日份来自程序员的浪漫
  18. 深信服技术支持工程师(安全、云计算方向)面试题目
  19. ⭐App爬虫之路⭐:海量食谱数据爬取持久化!!!
  20. Python强化知识之获取网络资源 Urllib(一)

热门文章

  1. java面向对象孙卫琴_[转]归去来兮,回归本源 ——评孙卫琴新作《Java面向对象编程》...
  2. xshell 执行脚本API介绍(附带xsh的python包)
  3. 定义一个描述学生通讯录的类AddressBook并输出
  4. java 中== 和equal的区别
  5. 手机怎么设置腾达路由器后显示远端服务器,怎么用手机设置腾达(Tenda)路由器wifi密码?...
  6. python读取fits第三方库_python-astropy.io.fits从具有多个HDU的大型fits文件中读取行
  7. 根据VendorId 和DeviceId 查看PCI设备的名称
  8. 用计算机写作文教学难点,《用计算机写作文》教学设计
  9. 弹力弹珠java_利用java编写一个弹球小游戏
  10. IP-SAN和FC-SAN存储的区别