【CV中的注意力机制】史上最强"ResNet"变体--ResNeSt

关注上方深度学习技术前沿,选择“星标公众号”

资源干货,第一时间送达!

【前言】:我们前面已经详细介绍了Attention机制和视觉注意力机制在图像分类结构中的应用--SENet 和 基于SENet的改进版--SKNet。本篇我们将来介绍另一篇SENet的改进版,与此同时,它也针对ResNet网络结构的变体,号称史上最强“ResNet”--它就是ResNeSt。

ResNeSt:Split-Attention Networks

  • 论文地址:https://hangzhang.org/files/resnest.pdf

  • 代码地址:https://github.com/zhanghang1989/ResNeSt

ResNeSt 的全称是:Split-Attention Networks,也就是特别引入了Split-Attention模块。ResNeSt中的S 应该就是 Split。

ResNeSt 实际上是站在巨人们上的"集大成者",特别借鉴了:Multi-path Feature-map Attention思想主要是基于 SENet,SKNet 和 ResNeXt,把 attention 做到 group level

其中:

  • GoogleNet 采用了Multi-path机制,其中每个网络块均由不同的卷积kernels组成。

  • ResNeXt在ResNet bottle模块中采用组卷积,将multi-path结构转换为统一操作。

  • SE-Net 通过自适应地重新校准通道特征响应来引入通道注意力(channel-attention)机制

  • SK-Net通过两个网络分支引入特征图注意力(feature-map attention)。

  • ResNeSt将通道维度的注意力机制扩展到特征图组表示,可以使用统一的CNN操作符进行模块化和加速

ResNeSt 和 SE-Net、SK-Net 的对应图示如下:

Split-Attention 网络

1

Split-Attention 块

Split-Attention 块是一个由特征图组和 split attention 运算组成的计算单元,下图展示了 Split-Attention 块的整体思路:

2

特征图组(Feature-map Group)

与 ResNeXt 块一样,输入的特征图可以根据通道维数被分为几组,特征图组的数量由一个基数超参数 K 给出,得到的特征图组被称为基数组(cardinal group)。研究者引入了一个新的底数超参数 R,该参数规定了基数组的 split 数量。

然后将块输入 X 根据通道维数 X = {X1, X2, ...XG} 分为 G = KR 个组。在每个单独的组中应用不同的变换 {F_1, F_2, ...F_G},则每个组的中间表征为 Ui = Fi(Xi), i ∈ {1, 2, ...G}。

3

基数组中的 Split Attention 

根据 [30,38],每个基数组的组合表征可以通过跨多个 split 的元素求和融合来获得。第 k 个基数组的表征为:,k ∈ 1, 2, ...K。带有嵌入 channel-wise 统计数据的全局上下文信息可以通过全局池化来获得。第 c 个分量的计算公式为:

基数组表征 V^k ∈ R^{H×W×C/K} 的加权融合通过使用 channel-wise 软注意力来聚合。其中,每个特征图通道都是在若干 split 上使用一个加权组合获得的。第 c 个通道的计算公式如下:

4

Split-Attention模块的细节:

对上图的详细解释如下:忽略batch size,并假设C能被K*R整除。模块的输入feature map的shape是[C, H, W],采用group conv的思想,将input沿着channel维度split K个,这K个tensor的集合我们称之为一个group。更进一步,将该group中的每个tensor沿着channel维继续split R个,这R个tensor组成一个subgroup,这样总共有K个subgroup,每个subgroup的大小是R。考虑每个subgroup,其由R个tensor组成,记为U。

1. 先将这R个tensor沿着channel纬相加,然后作global average pooling,得到一个d = C / K / R大小的向量

2. 以该向量作为输入,后接入多层非线性变换,最终输出向量长度必须等于C / K,如此K个subgroup就会产生总长为C的attention权重

3. 每个subgroup中的tensor,channel维等于C / K / R,乘以上步输出的逐channel权重

关于attention权重:

1. R > 1时,每个subgroup中超过1个tensor,不妨设为x、y列向量,权重就是a、b,a * x + b * y,其中a、b都是列向量,同一行的两个scalar之和为1,因此在上面第2步最终输出attention之前用的是softmax;

2. R = 1时,就是SE,上面第2步的最终输出之前用sigmoid,然后a * x

关于实现:

在实际实现中,由于打包成一个模块,因此输入C,输出D,其他参数比如radix不影响D,也就是conv的output channel就是D * radix。另外,由于最终还要concatenate,下面举例解释,假设group以及subgroup的size都是2,tensor就是x、y、v、w,attention weight是a、b、c、d,都假设是1D列向量

1. 原始op

分别a * x + b * y,c * v + d * w,得到两个列向量,然后列方向concatenate,也就是,

2. 向量化实现的op

先将x、v,y、w分别concatenate,同样a、c,b、d也分别concatenate,加权和,因此上述原始op的结果,进行如下等价转换,

这也是开源代码中的实现方式。

5

实验结果

ResNeSt 在ImageNet 图像分类性能如下,轻松超越SKNet、SENet、ResNetXt和ResNet。

ResNeSt 和其他SoTA的CNN模型进行性能比较(特别是NAS阵营)

ResNeSt 在MS-COCO 目标检测和实例分割任务上的表现性能如下,涨点太恐怖!

ResNeSt 在ADE20K 语义分割任务上的表现性能如下:

参考链接

  1.  https://zhuanlan.zhihu.com/p/133496926

  2.  https://zhuanlan.zhihu.com/p/135220104

  3.  https://zhuanlan.zhihu.com/p/133197521

  4.  https://zhuanlan.zhihu.com/p/132655457

  5.  https://zhuanlan.zhihu.com/p/134135389

重磅!DLer-计算机视觉交流群已成立!

欢迎各位Cver加入计算机视觉微信交流大群,本群旨在交流图像分类、目标检测、点云/语义分割、目标跟踪、机器视觉、GAN、超分辨率、人脸检测与识别、动作行为/时空/光流/姿态/运动、模型压缩/量化/剪枝、NAS、迁移学习、人体姿态估计等内容。更有真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、行业技术交流等,欢迎加群交流学习!

进群请备注:研究方向+地点+学校/公司+昵称(如图像分类+上海+上交+小明)

广告商、博主请绕道!

???? 长按识别添加,邀请您进群!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值