0%

【2020】ResNeSt: Split-Attention Networks

引言

概述

本文主要介绍ResNet的变体:ResNeSt。

目前代码已经提供PyTorch和MXNet两个版本。

【Code】https://github.com/zhanghang1989/ResNeSt

性能显著提升,参数量并没有显著增加。

借鉴了:Multi-path 和 Feature-map Attention思想。

其中:

  • GoogleNet 采用了Multi-path机制,其中每个网络块均由不同的卷积kernels组成。
  • ResNeXt在ResNet bottle模块中采用组卷积,将multi-path结构转换为统一操作。
  • SE-Net 通过自适应地重新校准通道特征响应来引入通道注意力(channel-attention)机制。
  • SK-Net 通过两个网络分支引入特征图注意力(feature-map attention)。

主要贡献

  • 在ResNet的基础上进行了修改,结合了feature-map split attention机制。
  • 在图像分类和迁移学习上都有很大提升,可以作为这些领域的benchmark。

方法

概述

ResNeSt主要引入了Split-Attention block,由feature-map group和split attention operation组成。

SE-Net、SK-Net、ResNeSt的结构图如下:

其中Split Attention的结构如下:

从图1和图2可知,都有split的影子。比如图1中的 \(K(k)\) 和图2中的 \(R(r)\) 都是超参数,也就是共计 \(G = K*R\) 组。

Feature-map Group

如图 2,仿照ResNeXt block,将特征分为多个组,特征组的数量由超参数K控制。

每一个组由分成多个cardinal组,数量由R控制。

因此所有组的数量为\(G=K\times R\)

每个小组应用一系列变化\(\{F_1, F2, ..., F_G\}\),每个组的中间表示使用\(U_i=F_i(X)\),其中\(i \in \{1,2,...,G\}\)

Split Attention in Cardinal Groups

受SENet和SKNet启发,每一个cardinal组的表达通过像素级相加的方式融合起来,公式表示为\(\hat{U}^k=\sum_{j=R(k-1)+1}^{Rk}{U_j}\),其中\(\hat{U}^k \in R^{H \times H \times C/K}, k \in 1,2,...,K\)

通过空间维度的全局平均池化实现聚合通道维度的全局上下文信息,第c个组件具体公式如下: \[ s_c^k=\frac{1}{H \times W}\sum_{i-1}^{H}\sum_{j=1}^{W}{\hat{U}_c^k(i,j)} \] cardinal组表示的加权融合使用通道维度soft注意力实现,其中每个channel的特征图使用加权组合产生。 \[ V_{c}^{k}=\sum_{i=1}^{R} a_{i}^{k}(c) U_{R(k-1)+i} \]

\[ a_{i}^{k}(c)=\left\{\begin{array}{ll} \frac{\exp \left(\mathcal{G}_{i}^{c}\left(s^{k}\right)\right)}{\sum_{j=0}^{R} \exp \left(\mathcal{G}_{j}^{c}\left(s^{k}\right)\right)} & \text { if } R>1 \\ \frac{1}{1+\exp \left(-\mathcal{G}_{i}^{c}\left(s^{k}\right)\right)} & \text { if } R=1 \end{array}\right. \]

ResNeSt Block

最终结果通过short cut连接:\(Y = V+X\)

当特征图大小不匹配时加入相应的变换:\(Y=V+T(X)\)\(T\)可以使用strided convolution或combined convolution-with-pooling。

Network Tweaks

Average Downsampling

对于某些要求空间信息的拓展任务来说保存空间信息使必要的。在此之前,ResNet通过带有stride的\(3 \times 3\)来实现降采样,但是这样对于边界的处理需要采用padding操作。而在本文中直接使用\(3 \times 3\)平均池化操作。

Tweaks from ResNet-D

  1. 将原始的\(7 \times 7\)卷积操作替换成3个\(3 \times 3\)的卷积操作,他们具有相同的感受野,计算量也较为相似。
  2. 在shortcut中\(1 \times 1\)卷积层前加入\(2 \times 2\)平均池化。

训练策略

这个对大家目前的工作应该具有很大的参考价值(涨点tricks)。

  • Large Mini-batch Distributed Training
  • Label Smoothing
  • Auto Augmentation
  • Mixup Training
  • Large Crop Size
  • Regularization

实验结果

图像分类

目标检测

实例分割

语义分割

作者的次要结论

  • depth-wise convolution is not optimal for training and inference efficiency on GPU,
  • model accuracy get saturated on ImageNet with a fixed input image size,
  • increasing input image size can get better accuracy and FLOPS trade-off.
  • bicubic upsampling strategy is needed for large crop-size (≥ 320).

作者解答

这里的attention和sknet挺像

问题来自知乎

1). 我们相当于把 SKNet 的思想做到 ResNeXt 的 group 里更有效,而且相对于多分支的 SKNet 更模块化,易于优化。

2). 这篇 paper 其实并不是一个什么开创性的工作,感觉大家有点过高期待了,只是几个小伙伴在繁忙工作中抽出3个多星期的时间一起赶出来的,为了全面提高 gluoncv 项目里的所有模型的性能,最简单的方法就是提高 backbone。仅此而已。

参考文献

  1. ResNet最强改进版来了!ResNeSt:Split-Attention Networks
  2. ResNeSt: Split-Attention Networks阅读笔记
  3. 如何评价ResNeSt:Split-Attention Networks?