文章目录
- HRNet CVPR2019
- 1. 简介
- 2. 网络架构
- 2.1 总揽图
- 2.2 3*3卷积块
- 2.3 BasicBlock
- 2.4 三层残差块
- 2.5 HighResolutionNet
- 结构初始化 `__init__()`
- 构建 stage 间转换层 `_make_transition_layer()`
- 构建 stage1 的 layer `_make_layer()`
- 构建 stage 2/3/4 的 layer `_make_stage`
- 2.6 高分辨率模块HighResolutionModule
- check_branches()
- 构建一个横向分支make_one_branch
- forward
- 构建 multi-scale 特征融合层:fuse_layer函数
- transition_layers函数(上图中画叉的那一个分支)
- 3. 训练
- 4. 代码
- 4.1 简易版
- 4.2 原版
HRNet,是高分辨率网络 (High-Resolution Net) 的缩写。
论文地址
代码链接
代码链接2
中科大和微软亚洲研究院,发布了新的人体姿态估计模型,刷新了三项COCO纪录,还中选了CVPR 2019。
这个名叫HRNet的神经网络,拥有与众不同的并联结构,可以随时保持高分辨率表征,不只靠从低分辨率表征里,恢复高分辨率表征。如此一来,姿势识别的效果明显提升:
在COCO数据集的关键点检测、姿态估计、多人姿态估计这三项任务里,HRNet都超越了所有前辈。
改变输入头,就可以做目标分割,分类等任务

从 IMG 到 1/4 大小的 feature map,得到此尺寸的特征图后,之后的 HRNet 始终保持此尺寸的图片
:如下图所示的 4 阶段 由 组成的模型
- 每个stage产生的multi-scale特征图
- stage 的连接处有 transition 结构,用于在不同 stage 之间连接,完成 channels 及 feature map 大小对应。

将stage4输出的4种scale特征concat到一起,加上num_channels->num_classes层,得到分割结果


expansion的参数,这个参数用来控制卷积的输入输出通道数。

- 原图先降成1/4大小
- 执行1个stage1(4个block)
- 通过卷积生成1/2分辨率的流(现在有两条流)
- 执行1个stage2(两个流的4个block以及两个流之间交融)
- 通过卷积生成1/4分辨率的流(现在有三条流)
- 执行4个stage3(三个流的4个block以及三个流之间交融)
- 通过卷积生成1/8分辨率的流(现在有四条流)
- 执行3个stage4(四个流的4个block以及四个流之间交融)
- 上采样下面三条流,使之大小变回原大小,在concat拼接channel用于后续分割任务
结构初始化
HRNet 类定义,通过 config 指定的模型结构,实例化特定结构的模型,构建过程如下
构建 stage 间转换层
transition layer 完成 stage 之间连接需要的 两种转换
- input channels 转换
- feature size downsample
以下为 hrnet_w48 的 transition 具体结构
构建 stage1 的 layer
stage1 产生 1/4 feature map,没有 branch 分支结构,采用与 resnet 完成一样的 函数构建层
构建 stage 2/3/4 的 layer
stage 2/3/4 为 HRNet 核心结构,用到了 ,内含 branch 构建和 特征 fuse 模块
实现下图红框中的,branch 并行 多 scale 特征提取 和 末端将 多 scale 特征通过 upsample/downsample 方式融合

check_branches()
这个函数的作用是检查,在高分辨率模块中num_branches(int类型),和len(num_inchannels(里面的元素是int)),和len(num_channels(里面的元素是int))它们三个的值是否相等。
构建一个横向分支make_one_branch
它的作用就是创建一个新的分支,如图

make_branches函数是看看每个stage里面有多少branch,然后有几个就调用几次_make_one_branch函数。
根据 stage cfg 中指定的 branch 数量,构建多个并行的 branch,调用之前的 ,如 stage 2/3/4 各有 2/3/4 个 branches
forward
构建 multi-scale 特征融合层:fuse_layer函数
HighResolutionModule 末尾的特征融合层
以下图红框即 stage3 中 蓝色 branch 输出结果为例,其输出结果要转换成 4 种尺度的特征,用于每个 branch 末尾的特征融合
- 1/8 ↗ 1/4,不同层,channel 不同,size 不同 👉 通道转换 + 上采样 (在 forward 函数中由双线性插值完成)
- 1/8 → 1/8,相同层,channel 一致,size 一致 👉 None,直接使用 feature
- 1/8 ↘ 1/16,不同层,channel 不同,size 不同 👉 通道转换 + 下采样 (通过串联的 stride=2 的 3x3 conv 完成)
- 1/8 ↘ 1/32,同上

transition_layers函数(上图中画叉的那一个分支)
- 构建 stage1 的 layer _make_layer()
stage1 产生 1/4 feature map,没有 branch 分支结构,采用与 resnet 完成一样的 _make_layer() 函数构建层 - 构建 stage 2/3/4 的 layer _make_stage
stage 2/3/4 为 HRNet 核心结构,用到了核心类 HighResolutionModule,内含 make_branches 构建和特征 _make_fuse_layers 模块

原文博客地址
到此这篇hrnet group待遇(hrnet one工资高吗)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/35895.html