ConvNeXt论文阅读

论文A ConvNet for the 2020s

作者Zhuang Liu, Hanzi Mao, Chao-Yuan Wu, Christoph Feichtenhofer, Trevor Darrell, Saining Xie;

一作单位:Facebook AI Research, UC Berkeley

录用情况:CVPR'2022

2020年以来,很多多层级的Transformer架构被提出,获得了优异的性能;本文找到一种更加现代的卷积神经网络,能够与Transformer相匹敌;本文的实验显然需要庞大的机器才能完成,但是这些结果给CNN爱好者们一个新的方向,正如题目所说,在2020年代,该如何设计、训练CNN?

ConvNets v.s. Hierarchical Transformers

滑动窗口机制带来了,等变性 (translation equivariance),共享参数的计算;

Hierarchical Transformers 是为了解决ViT在面对高分辨率输入计算量大,训练难,尺度单一提出的架构,引入例如 patch merging 这样的操作,得到CNN式的多尺度特征图;

ConvNet -> ConvNeXt

  1. 按照与DeiT和Swin Transformer类似的配置训练ResNet,性能从76.1% 提升到 78.8%;接下来的训练保持此训练配置;
  2. 按照Swin各层块比例为1:1:3:1,将ResNet-50的层数从(3,4,6,3)改变为(3,3,9,3),性能从78.8% 提升到 79.4%;接下来的训练保持此层数;
  3. 将卷积网络第一层常用的stem conv改为ViT所使用的patchify,即使用步长为4的4x4卷积,性能从79.4%变为79.5%;接下来的训练保持此设置;
  4. 在high level上,策略是使用更多的组数、更大的宽度;使用深度可分离卷积,在空间和通道维度依次加权求和;使用depth-wise卷积减少FLOPs,增加宽度补偿性能,最终达到了80.5%;
  5. 使用inverted bottleneck(两头细中间粗),尽管在depth-wise卷积处的计算量增加了,但是在下采样处shortcut的1x1卷积计算量减少了,最终网络的FLOPs是减少的(4.6G),并且性能从80.5%提升到了80.6%;
  6. 更大的卷积核:将bottle neck中的depth wise卷积提前(性能减小到79.9%,FLOPs减小到4.1G),之后将卷积核尺寸从3x3增加到7x7,性能从79.9提升到80.6%;
  7. 用GELU替换RELU,性能没有变化;
  8. 由于在Transformer中的每个MLP Block中只有一个非线性函数,因此在每个残差块中仅保留一个GELU激活函数(两个1x1卷积之间),性能提升到81.3%;
  9. 在每个残差块中,将之保留在第一个1x1卷积之前的BN,性能提升到81.4%;
  10. 用LN代替每个残差块中的BN,性能提升到81.5%;
  11. 在ResNet中,使用步长为2的残差块来进行下采样,而在Swin中,下采样是用专门的模块实现的,并且实验表明,在分辨率改变时使用LN有助于使训练更加稳定,在Stem之后,每个下采样层之前,以及GAP之后使用LN,性能提升到82.0%;

实验

文章之后的部分记录了更多实验:不同尺寸的模型、与ViT相同的架构(无downsample),在检测和分割任务上的表现;