Stacked Hourglass Networks 理解

介绍

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 / 2 n 1/2^n 1/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

  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 堆叠沙漏网络(Stacked Hourglass Networks)是一种用于人体姿态估计的深度学习模型。它由多个沙漏模块(Hourglass Module)堆叠而成,每个沙漏模块都包含了卷积神经网络和池化层,用于提取特征。堆叠沙漏网络的优点是可以对不同尺度的特征进行处理,从而提高了姿态估计的准确性。 ### 回答2: Stacked Hourglass Networks (SHN)是一种用于图像分割和人体姿势估计的神经网络结构,由卡内基梅隆大学和康奈尔大学的研究人员于2016年提出。SHN通过多层级的堆叠半监督网络,在对输入图像进行多尺度特征提取的同时实现了高分辨率的姿态估计。 SHN主要由两部分构成:堆叠的小型Hourglass网络和批量标准化(BN)。Hourglass网络是指由多层卷积层和上采样层、下采样层构成的一个可编程的Block,用于具体化姿态估计的操作。堆叠在一起的小型Hourglass网络在不同的分辨率和空间上进行特征提取,以共同实现最终的分割和姿态估计结果。批量标准化是一种用于规范化网络输入和加速网络收敛的技术。 SHN对于图像分割和人体姿势估计具有较高的准确率和鲁棒性。采用上述网络结构进行人体姿势估计,可优化难度较大的人体部位之间的相互作用和相互影响,使得姿态估计的精度和稳定性得到了显著提高,在肢体遮挡、图像噪声和背景复杂等困难情况下也可以取得良好的表现。 总之,作为一种多层级、半监督的神经网络结构,SHN在图像分割和人体姿势估计中发挥着越来越重要的作用,也为相关领域的研究和应用提供了一个重要的思路和工具。 ### 回答3: Stacked Hourglass Networks是一个先进的计算视觉网络,用于实现人类关键点检测和姿势估计。与其他现有的方法相比,它具有更准确,更可重复和更快速的输出。该模型通过串联8个Hourglass模块构建,Hourglass模块是特殊的卷积神经网络,可以对图像进行多次分辨率下采样和上采样以提高输出精度。这些模块也具有回归和分类头,能够同时预测关键点的位置和姿势。Stacked Hourglass Networks 模型已经在许多场景中取得成功,如动态手势识别、行人关键点检测和3D姿态估计等。 Stacked Hourglass Networks的核心思想基于卷积神经网络和图像金字塔技术。在处理人体关键点检测时,由于人的姿势会因为动态变化和视角变换而导致关键点位置的不稳定性。因此,处理这个任务的模型需要在不同的尺度下检测关键点和姿势。Stacked Hourglass Networks通过多个Hourglass模块的串联,每个模块将输入图像分别经过多次下采样和上采样,产生一系列不同尺度的特征图。这些特征图经过回归和分类头进行训练和预测,最后合成出整个图像输入的关键点和姿势输出。 Stacked Hourglass Networks模型具有许多优点,如精度高,稳健,具有可解释性等。在实际应用中已经取得了很好的效果。未来,Stacked Hourglass Networks模型仍然有很大的研究空间,可以通过各种改进和方法来提高性能,同时可以将其用于更多的视觉任务中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值