A ConvNet for the 2020 一篇总结性的论文

最近在看论文时发现了一篇总结性的文章,推荐给大家最近一段时间transform 太火了,基本上大家都在用这些东西,传统CNN 用的反而少了起来,因此这篇论文提出了一些提高CNN 的方法,最后超过了大热的transform。这篇文章是ConVNet for the 2020.这是一篇总结性的论文。

大概扫一扫你会发现好像没什么创新点,好像文章说的东西你都懂啊?是的,可以理解这次提出的ConvNeXt其实就是ResNet的魔改,类似于打比赛刷榜那样,一点点trick不断地加,并用非常solid的实验验证了这些trick的有效性。那就一起来看看这些熟悉的trick是如何work的:

训练技巧

  • 多训练一会呗——ResNets从训练90个epoch加到300个epoch
  • 优化器更新换代了,别守着Adam,试试AdamW!
  • 数据增强扩充数据量:Mixup、Cutmix,RandAugment,RandomErasing
  • 正则化防过拟合:Stochastic Depth,Label Smoothing

一顿操作猛如虎,ResNet-50直接从76.1的精度提高到78.8

结构设计

  • 改一改每一阶段的block数量,ResNet-50从(3,5,6,3)改为(3,3,9,3)
  • ResNeXt化

    加深加宽

  • depthwise conv 代替 bottleneck中的 3x3卷积
  • 使用和Swin-T一样的网络宽度,从原来的64改为96

更大的感受野

transformer的感受野往往可以是global的,而cnn通常用比较小的卷积核,改!加大感受野

这里其实是为了和Swin-T对齐,并没有带来提升

细节决定成败

  • 激活函数也在更新换代,试着在卷积网络中也用一下GELU!虽然在这里也没提升
  • 真的有必要那么多激活函数吗?transformer中其实只有在MLP块中有一层激活函数。删减CNN中的激活函数!只要两层 1x1卷积层之间放激活函数
  • normalization也不是越多越好,删!
  • 用layer norm替代batch norm
  • 学习Swin Transformer在两个stage之间加一层下采样层,带来的问题是训练不稳定了,解决办法是多加点LN层: one before each downsampling layer, one after the stem, and one after the final global average poolingA ConvNet for the 2020 一篇总结性的论文_第1张图片

 

你可能感兴趣的:(论文推荐,深度学习,计算机视觉,人工智能)