首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >明月深度学习实践005:2020的屠榜架构ResNeSt

明月深度学习实践005:2020的屠榜架构ResNeSt

作者头像
明月AI
发布2021-10-28 14:21:12
发布2021-10-28 14:21:12
6650
举报
文章被收录于专栏:野生AI架构师野生AI架构师

在年初ResNeSt刚出来的时候,就注意到这个,又是一个国人出品的屠榜架构。显然,这个架构也引起了很多争议,觉得这个论文只是一些技巧集合,不足以支撑一篇优秀论文,不过作为一个实用主义者,是不是优秀论文其实并不关注,只要效果够好,而且推断时间能在约束条件下。

前面写SENet和SKNet,现在终于可以写到ResNeSt。

1. ResNeXt结构


在开始ResNeSt之前,还是先再说一说ResNeXt。

这是16年底推出的网络结构,简单说就是将残差块和分组卷积叠加在一起,论文地址:https://arxiv.org/pdf/1611.05431.pdf

我们知道采用并联的方式连接电路有助于提升电路的稳定性,并联集成模型也能提升模型的效果,而分组卷积和它们类似,据说作者已经证明和验证了分组卷积是有接近于普通卷积的精度的(英语好的可以自己看)。

可以看作者的实验数据:

而ResNet50和ResNeXt50的参数和计算量都是差不多的:

C=32是分组数量。

2. SENet与SKNet:注意力机制的发展


SENet是18年,SKNet是19年,两者有一定的继承关系,都使用了注意力机制。

这是SENet的架构,它的中心思想就是对通道计算权重,达到强化重要特征,并弱化不重要的特征。

到了SKNet则进一步,在SENet的基础上,使用了多个不同size的卷积核来提取不同感受野的特征,类似于多分支上做继承学习。SKNet多少也有点ResNeXt的影子。

在有了SKNet之后,ResNeSt其实已经呼之欲出了。作者对此也进行比对:

Split Attention已经有拆分注意力的意思。

3. ResNeSt:拆分注意力网络


作者自己在B站发布了视频讲解该网络,还是中文的哦:https://www.bilibili.com/video/BV1PV411k7ch

  • 作者论文:https://arxiv.org/pdf/2004.08955.pdf
  • 开源代码:https://github.com/zhanghang1989/ResNeSt (代码实现跟论文不太一样)
  • 关于ResNeSt的点滴疑惑:https://aijishu.com/a/1060000000110446

总的来说,我觉得该架构就是ResNeXt,SENet和SKNet的集合体,在SKNet中已经使用了多个不同size的卷积核来提升效果,如果把ResNeXt的多分支结构嫁接过来,会怎么样呢?

我们先看其架构图:

这个图看着很复杂,其实就是三块:

  • Feature-map Group: 特征图分组,具体做法是先将输入特征图拆分成K个Cardinal(这个单词不知道该翻译成什么,姑且当作一个特定名词好了),其实就是类似ResNeXt网络的多分支。
  • Split Attention in Cardinal Groups:然后在每个Cardinal分组上实现注意力计算:这里的做法有点类似SKNet,只是这里使用的是R个相同的卷积核来提取特征。
  • ResNeSt Block:最后合并所有分支上的注意力结构结果。

3.1 Cardinal分组内的分离注意力结构

结构图如下:

注意这里的输入input的通道数是c=C/K,可以对比SKNet结构去理解。

按我的理解,这就是一个SKNet,只是它的卷积核是一样的。

3.2 ResNeSt Block

我总结一下其结构,应该是这样的:

如果把虚线部分看成是一个整体,这就是一个变形的SENet。

这里如果V的size跟input的Shape如果是相同的话,则

Output = V + Input

而如果Shape并不相同的话,则需要对Input进行一次变换:

Output = V + T(Input)

这里的变换可能是一次卷积运算,或者卷积和池化的组合运算。

4. Radix-major Split-Attention Block


在论文的后半部分,还有一个图Radix-major Split-Attention Block:

个人觉得这个图跟论文前面部分的图是有冲突的,而作者开源的代码跟这个图是比较接近的(感觉代码实现跟这个图也还是有差别的)。

但是如果这样的架构,是否还需要这么复杂呢?是否还需要分组使用两个超参数K和R呢,直接使用一个K是不是就可以了?

5. 小结


ResNeSt = ResNeXt + SENet + SKNet

暂时给我的感觉是,ResNeSt这个架构设计得有点复杂,有些结构好像是有点绕,感觉应该是可以简单一些的。例如,我觉得本来SKNet就已经包含了SENet的思想,现在又类似在SENet中嵌入SKNet,是否需要这么复杂?(或者我的理解有问题?)

关于ResNeSt,估计还需要再写一篇才行,论文里还包含很多训练技巧没有提到过。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 野生AI架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档