yahei · 2020年04月23日

从SENet到ResNeSt

原文链接:https://www.yuque.com/yahei/hey-yahei/typical_cnn#NY1oJ

SENet

论文:《Squeeze-and-Excitation Networks (CVPR2018)
提出了SE模块,是注意力机制的一种应用,学习特征图上通道间的相关性,作为权重ReScale各个通道;SE模块相当于一个轻量级的插件,可以方便地插入到已有的网络中去。
SE模块深受研究者们的喜爱,可以看到后来的新网络都热衷于使用SE模块。但实际应用中,带有SE模块的网络在量化时容易出现明显的性能下降,目前似乎没有很好的解决方案。


image.png
(红框部分即为SE-Block)
SE-Block结构上非常简单,
首先对特征图做全局平均池化拉成维的向量,再经过两个FC层形成瓶颈结构(第一个FC收缩为维,第二个FC再扩增回维),第一个FC用ReLU激活,第二个FC用Sigmoid激活输出一系列0~1的权重对原始特征图进行ReScale操作。

其中是超参数,作者通过实验指出,取通常能取得比较好的结果(权衡计算量和性能提升)。


image.png
(SE-Inception和SE-ResNet)


image.png
(ImageNet上的实验结果)

SKNet

论文:《Selective Kernel Networks (CVPR2019)
可以看作是SENet的一个改进,提出一个SK模块,与SE模块不同的是SK模块混合了两种大小的卷积核,以此获得不同感受野的特征信息。


image.png
(SK-Block)
SK-Block结构上也不复杂,

  1. 分别对特征图使用不同大小的卷积核进行特征提取(如图为3x3卷积核和5x5卷积核),分别得到
  2. 逐元素相加得到
  3. 沿用SE-Block的思路,得到通道数为的权重向量(数值范围在0~1之间)
  4. 去ReScale特征图,用去ReScale特征图,最后逐元素相加融合为,本质上相当于一个软选择


image.png
(ImageNet上的实验结果)

ResNeSt

论文:《ResNeSt: Split-Attention Networks (2020.04)
代码:https://github.com/zhanghang1989/ResNeSt


image.png
(SA-Block)


SA-Block比SE-Block和SK-Block更复杂。

  1. Input1, ..., Input r是个相同输入,相同结构但不同参数的分支输出
  2. 个输入相加后进行全局平均池化得到维向量
  3. 用一个FC将向量维度收缩为构造瓶颈,论文建议取的含义参见后续ResNeSt Block的描述)
  4. 分别用个FC分别将向量维度扩增回,此时一共有维向量
  5. 沿维度方向,对维向量分别做softmax,作为权重去ReScale这通道的特征图

可以把SA-Block看作是SK-Block的一个多分支版本(对应地,二分类sigmoid就被多分类softmax替代),本质也是为了从组通道中选择出合适的一个(软选择)。

image.png
(ResNeSt Block)


ResNeSt Block借鉴了ResNeXt的设计(看着复杂,实际可以用分组卷积简化实现)。

  1. 通道的输入特征图沿着通道分成组,每组的输入通道数为
  2. 每组的输入又分成小组,分别经过各自的“1x1卷积收缩为通道,3x3卷积扩增回通道”,然后经过前述的SA-Block进行软选择,得到通道的输出
  3. 组输出拼接在一块得到通道的输出,然后由1x1卷积变换到通道,与原始输入的短连接相加


image.png
(ImageNet上的实验结果)


论文只简单对FLOPS进行分析,实际上ResNeSt沿用了ResNeXt的分组卷积,要知道分组卷积的效率是比较低的,尽管表面上ResNeSt-50-fast跟ResNetD-50都是4.34GFLOPS,但ResNeSt-50-fast肯定还是要慢一些。我简单拿开源的Gluon模型在RTX2080Ti上跑了一下,ResNeSt-50的推理速度比ResNetD-101稍慢一些,而只有ResNetD-50的一半,fast版本尚未开源(截止到2020.04.20),不知道其实际效果会如何。

推荐阅读
关注数
286
内容数
26
计算机视觉相关学习笔记,欢迎关注。[链接]
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息