CenterNet中主要提供了三个骨干网络ResNet-18(ResNet-101), DLA-34, Hourglass-104,本文从结构和代码对hourglass进行讲解。 Hourglass Hourglass网络结构最初是在ECCV2016的Stacked hourglass networks for human pose estimation文章中提出的,用于人体姿态估计 Stacked Hourglass就是把多个漏斗形状的网络级联起来,可以获取多尺度的信息。 Hourglass的设计比较有层次,通过各个模块的有规律组合成完整网络。 论文中的n阶hourglass模块示意图 2.3 Hourglass class exkp(nn.Module): ''' 整体模型调用 large hourglass stack 为2 small hourglass stack为1 n这里控制的是hourglass的阶数,以上两个都用的是5阶的hourglass exkp(n=5, nstack=2
Stacked Hourglass Networks for Human Pose Estimation - Demo Code Stacked Hourglass Networks for paths.dofile('util.lua') paths.dofile('img.lua') -- Load pre-trained model m = torch.load('umich-stacked-hourglass.t7 ---------------------------------------- a = loadImageNames(arg[1]) m = torch.load('umich-stacked-hourglass.t7
图 - Stacked Hourglass Networks由多个 stacked hourglass 模块组成,通过重复进行bottom-up, top-down推断以估计人体姿态. Hourglass设计: ? 图 - 单个hourglass模块示例. 图中个方框分别对应一个residual模块. 整个hourglass中,特征数是一致的. 其后是两个residual和hourglass模块. 整个hourglass中的所有residual模块输出特征数都是256. 中间监督 Intermediate Supervision ? 每一个Hourglass网络都添加Loss层. 【人体姿态】Stacked Hourglass算法详解
Stacked Hourglass Networks for Human Pose Estimation ECCV2016 http://www-personal.umich.edu/~alnewell /pose/ Torch code is available 本文使用CNN网络来进行人体姿态估计,使用 Stacked Hourglass Networks,这里的 Hourglass 漏斗形状 ,Stacked Hourglass 就是多个漏斗形状网络级联起来 ? 3 Network Architecture 3.1 Hourglass Design 漏斗网络的设计主要源于 the need to capture information at every 对于人的方向、肢体的排列、相邻关节的关系等信息需要从图像中不同的尺度去衡量和解析 The topology of the hourglass is symmetric ?
论文地址:https://arxiv.org/pdf/2110.13711v1.pdf Hourglass假设,拥有一个明确的层次结构是Transformer有效处理长序列的关键, 所以,Hourglass Hourglass算法伪代码 Hourglass使用缩短操作将tokens合并,因此减少了总的序列长度,然后结合来自早期层的序列再次对它们进行上采样。 Hourglass架构概述 Hourglass的结构从基本层开始,基本层是在完全tokens序列上运行的一堆Transformer块。 在此之后,插入缩短层,其中k1是缩短因子参数。 研究人员将Hourglass应用于三个语言建模任务。为了展示Hourglass跨领域泛化能力,他们在一个与自然语言处理相关的数据集和两个来自计算机视觉领域的数据集上训练Hourglass模型。 Transformer-XL与Hourglass的训练所用存储的比较 特别是,Hourglass在广泛研究的enwik8基准上也提高了语言建模效率。
另外,设计了新颖的沙漏残差单元(Hourglass Residual Units, HRUs),增加网络的接受野. 利用多个 hourglass stacks 得到的注意力图,能够表示不同语义层次的多语义信息. 2. 方法 ? Figure2. 8-stack hourglass网络的基本结构. 各hourglass stack 分别得到多分辨率注意力图. 将多语义注意力图应用到各 hourglass,如 stack 1 - stack 8. 分层注意力机制对局部关节点的缩放应用在 stack 5 - stack 8. 2.1 基础网络 采用 8-stack hourglass 网络作为基础网络,该网络在各 hourglass stack的尾部采用中间监督 2.2 Nested Hourglass 网络 采用HRUs代替残差单元,得到 nested hourglass network,如图. ? Figure3. HRU例示.
Stacked Hourglass Network Hourglass 网络以 feed-forward 方式学习每个 scale 的信息. 重复多次 bottom-up 和 top-down,构建 stacked hourglass 网络,在每个 stack 的末尾添加中间监督. ? 采用 residual unit 来构建 hourglass 网络 block. 但其只能捕捉一个尺度的视觉特征和语义. (a) 网络结构,有 nnn 个 stacks hourglass 网络. (b) 每个 hourglass stack 的细节. 每个 hourglass 的末尾产生 joint 位置的 scoremaps,并使用 squared-error loss.
(1)backbone: hourglass Network 上面英文的意思就是cornerNet借用了hourglass network作为他的backbone特征提取网络,这个hourglass network 图7 两个hourglass module 我们不妨借用hourglass 原文中的结构图。 ? 图8 hourglass module 结构图 图8是一个hourglass module 的结构图。 因为单个hourglass的特征提取能力是有限的,所以可以不断地进行hourglass module的堆叠,可以获得更高的特征提取能力,cornerNet中使用了两个hourglass模块。 并且在原有hourglass的基础上,作者做了以下的改进, ? 可以总结如下: (1) 在输入hourglass module之前,需要将图片分辨率降低为原来的1/4倍。 定义结束hourglass module后,定义由两个hourglass module构成的hourglass网络,代码如下: self.kps = nn.ModuleList([
后续对截取区域的检测使用同样的hourglass网络,最后合并所有的检测结果进行Soft-NMS过滤。 -54,比原CornerNet使用的Hourglass-104包含更少参数且层数更少。 Hourglass-54总层数为54层,包含3个hourglass模块,在第一个模块前先下采样两次。 为此,CornerNet-Squeeze结合SqueezeNet和MobileNet来减少Hourglass-104的复杂度,设计了一个新的轻量级hourglass网络。 hourglass模块前增加一个下采样模层。
CornerNet-Saccade设计了一种新的backbone:Hourglass-54(含3个hourglass模块,深度为54)。 原CornerNet中使用的是Hourglass-104(含2个hourglass模块,深度为54)。 在CornerNet中,大部分计算资源都花在了Hourglass-104上。 Hourglass-104由残差块构成,其由两个3×3卷积层和跳连接(skip connection)组成。 为了降低Hourglass-104的复杂性,本文将来自SqueezeNet和MobileNets 的想法融入到 lightweight hourglass 架构中。 One-stage算法性能比较 CornerNet-Saccade算法性能比较 可见 Hourglass-54要强于Hourglass-104,另外gt attention对涨点帮助很大 CornerNet-Squeeze
模型结构方面,在U-GAT-IT的基础上,在编码器之前和解码器之后各增加了2个hourglass模块,渐进地提升模型特征抽象和重建能力。 = HourGlass(ngf, ngf) self.HourGlass2 = HourGlass(ngf, ngf) # Down-Sampling = HourGlass(ngf, ngf) self.HourGlass4 = HourGlass(ngf, ngf, False) self.ConvBlock2 = (x) x = self.HourGlass2(x) x = self.DownBlock1(x) x = self.DownBlock2(x) (x) x = self.HourGlass4(x) out = self.ConvBlock2(x) return out, cam_logit, heatmap
根据结构划分 One-stage Simple Baselines Two-stage CPN Multi-stage CPM Hourglass MSPN HRNetv1 / 根据作者划分 CMU CPM(2015) OpenPose(2016) MSRA Simple Baselines(2018) HRNetV1(2019) Princeton Hourglass
GitHub 地址:https://github.com/edvardHua/PoseEstimationForMobile 该 repo 使用 TensorFlow 实现 CPM 和 Hourglass 架构地址:https://github.com/edvardHua/PoseEstimationForMobile/tree/master/training/src 该库包含: 训练 CPM 和 Hourglass /ai_challenger_valid.json \ --img_path=/root/hdd \ --output_node_name=hourglass_out_3 预训练模型 CPM:https ://github.com/edvardHua/PoseEstimationForMobile/tree/master/release/cpm_model Hourglass:https://github.com 按照以下命令将模型转换为 mace 格式: cd <your-mace-path># You transer hourglass or cpm model by changing `yml` file.
Hourglass Network [1240] CornerNet使用hourglass网络作为主干网络,这是用于人体姿态估计任务中的网络。 Hourglass模块如图3所示,先对下采样特征,然后再上采样恢复,同时加入多个短路连接来保证恢复特征的细节。 论文采用的hourglass网络包含两个hourglass模块,并做了以下改进: 替换负责下采样的最大池化层为stride=2的卷积 共下采样五次并逐步增加维度(256, 384, 384, 384, 网络会对每个hourglass模块添加一个损失函数进行有监督学习,而论文发现这对性能有影响,没有采用这种方法 Experiments *** [1240] 对比corner pooling的效果。 [1240] 对比hourglass网络与corner检测搭配的效果 [1240] 对比热图和偏移预测的效果。 [1240] 与其它各种类型的检测网络进行对比。
Paper的第三个创新是模型基于hourglass架构,使用focal loss的变体训练神经网络。 Hourglass Network是人体姿态估计的典型架构,论文堆叠两个Hourglass Network生成Top-left和Bottom-right corners,每一个corners都包括corners Hourglass Network Hourglass Network同时包含了bottom-up(from high resolutions to low resolutions)和top-down 针对目标检测任务,论文调整了Hourglass一些策略。 Experiments 论文的训练损失函数包含了第三部分介绍的4个损失函数,α, β 和γ用于调整相应损失函数的权重: ? 多人姿态估计的Hourglass Network算法也不断改进中,其实论文模型的推断速率受限于Hourglass Network的特征提取,有志青年也可以沿着这个思路取得更好的性能。
表1 目前主流的多阶段网络全部基于 Hourglass 变体。从表 1 可知,Hourglass 在重复下采样和上采样的过程中,卷积层的通道数是相同的。这是因为高层语义信息更强,需要更多通道表征。 下采样时,Hourglass 变体会导致特征编码(Encoder)无法很好地表达特征,从而造成一定程度上的特征信息丢失。 表3 我们同时对比了当前主流的多阶段网络 Hourglass 与该工作在精度提升方面的差异。 对于 4 阶段的 Hourglass 和 2 阶段的 MSPN 借助以上两种策略均实现涨点。 实验结果 ? 表6 ? Stacked hourglass networks for human pose estimation.
Hourglass(2016.04,Princeton的Deng Jia组) 设计了hourglass block(本质上就是unet+残差),以resblock的方式串接。 Stacked Hourglass Networks是首个以模块形式堆叠形成的humanPose网络。 最大改进是网络结构更简单,更优美。效果惊艳。 这个网络由多个堆叠起来的Hourglass module组成(因为网络长的很像多个堆叠起来的沙漏)。 一方面,MPII已经出现两年,同时有很多非常好的工作,比如CPM, Hourglass已经把结果推到90+,数据集已经开始呈现出一定的饱和状态。 结构最简单,效果和hourglass一样惊艳。 由于偏并行,工程优化的时候很容易加速 一开始先快速降采样到1/4。随着网络的深入,逐渐添加低分辨率的分支。
根据上面两幅图,可以大致梳理出算法的pipeline: 1、输入一张图像,经过backbone网络(Hourglass network)后,得到feature map。 下面就看看具体的实现细节: Hourglass Network ? Hourglass网络结构示意图 Hourglass是人体pose estimation领域非常经典常用的一个网络结构,其网络结构首先将feature的resolution逐步降低,再逐步的升高。 本文作者使用的Hourglass相对于最原始的Hourglass做了细微的改变,例如改变了使用Hourglass阶数、用stride=2的卷积代替max pooling等等。 使用Hourglass作为backbone,使用Corner Pooling构造了prediction module,用来得到最终的结果。 6、有没有什么比较新奇的东西?
在主干网络方法,论文尝试了多种全卷积encoder-decoder网络:Hourglass网络,带反卷积的残差网络以及DLA(deep layer aggregation)。 实验测试了4种网络结构:ResNet-18、ResNet-101、DLA-34和Hourglass-104,其中使用可变形卷积对ResNet和DLA-34进行了改进。 Hourglass [1240] Hourglass结构如图a所示,框中的数字为特征图的缩放比例,包含两个hourglass模块,每个模块有5个下采样层以及5个上采样层,上采样和下采样对应的层有短路连接 Hourglass的网络尺寸最大,关键点预测的效果也是最好的。
基于Hourglass backbone的CenterNet结构如下图所示 ? 图2 可以将其分为以下几个部分 (1)pre,通过一个步长为2的7x7卷积和步长为2的残差单元,将图片宽高压缩为原来的1/4 (2)Hourglass Module 1,第一个沙漏型的卷积神经网络模块 (3)joint,连接Hourglass Module 2和Hourglass Module 2 (4)Hourglass Module 2,第二个沙漏型的卷积神经网络模块 (5)Head,输出三个分支输出 # Arguments num_stacks: number of hourglass modules. dims: numbers of channels in the hourglass blocks. # Returns A Keras model instance.