论文标题: A ConvNet for the 2020s https://arxiv.org/abs/2201.03545
https://github.com/facebookresearch/ConvNeXt
这篇文章是一篇“ 文艺复兴 ”工作。读起来的时候能感觉到作者对于 ConvNet 无限的热爱,尤其是在读 Introduction 部分的时候。通篇读下来,作者的核心论点,同时也是最吸引我的一句话是 “the essence of convolution is not becoming irrelevant; rather, it remains much desired and has never faded” 。整篇文章写的非常漂亮。
Introduction
作者在 Introduction 部分里,从 ConvNet 的前世今生开始讲起,并且在第二段就表明了一个观点: “The full dominance of ConvNets in computer vision was not a coincidence” 。确实,卷积神经网络在 transformer 诞生前称霸了整个计算机视觉领域,而作者的这篇工作就是让 ConvNet 重新在视觉领域大放异彩! 作者认为 ViT 之所以效果好,是因为它是一个大模型,能够适配大量数据集,这使得它能够在分类领域中领先 ResNet 一大截。但是 CV 中不仅仅只有分类任务,对于大部分的 CV 任务,利用的都是滑动窗口,全卷积这样的方式。同时作者指出了 ViT 的一个最大问题: ViT 中的 global attention 机制的时间复杂度是平方级别的,对于大图片来讲,计算效率会很低 。让作者更佳坚信卷积不会被时代淘汰的一个很关键的原因是 SwinTransformer 的出现,这种利用 local window attention 的机制更加充分地证明了卷积这种提取局部的特征信息的作法一定是 work 的,且一定能发挥应有的性能。同时,作者也指出当下大家都去研究 transformer 是因为 transformer 的效果超越了利用 ConvNet 做的视觉任务。因此,整篇工作,作者就是为了探究构建一个 ConvNet 要看看它的极限到底在哪里。
Modernizing a ConvNet: a Roadmap
作者从 ResNet-50 开始,研究了一系列“network modernization”操作,通过 FLOPs 和在 ImageNet-1K 上的 Acc 这两个指标来验证改进操作是否有效。下图是一些列操作的结果。
Training Techniques
首先是训练技巧上更新变成与 DeiT 相似,作者将 epochs 从 90 改成了 300,利用 AdamW 优化器,数据增广手段包括:Mixup,Cutmix,RandAugment,Random Erasing,regularization schemes(包括 Stochastic Depth 和 Label Smoothing)。经过这个改进,ResNet-50 从 76.1% 提升到 78.8% 。
Macro Design
Changing stage compute ratio: 作者仿照 Swin 的层级设计中的 compute ratio 1:1:3:1,将 compute ratio 由原来的(3, 4, 6, 3)变为(3, 3, 9, 3),经过这个改进 Acc 由 78.8% 提升到 79.4%。 Changing stem to "Patchify": 作者仿照 ViT,进行了non-overlapping的convolution。是利用 4×4 ,stride 4 的卷积进行操作,Acc 由 79.4% 提升到 79.5% 。
ResNeXt-ify
在这一部分作者尝试采用 ResNeXt 的思路,对 FLOPs 和 Acc 进行一个 trade-off。核心是 grouped convolution。作者采用的是 depthwise convolution 也就是卷积数与通道数相等。这里也提到了 ViT 就是 depthwise conv 和 1×1 conv 进行 channel mixing,也同时在 spatial 维度上进行特征融合。depthwise 这种操作在 MobileNet 和 Xception 上都有用到。利用它可以降低 FLOPs。作者同时将 channel 数量从 64 变为了和 Swin-T 一样的 96. 这使得 Acc 提到了 80.5%。FLOPs 提升到了 (5.3G) 。
Inverted Bottleneck
如 Fig3 所示,作者作者修改了 Bottleneck 的结构如(b)所示,从 80.5% 提升到了 80.6%。
Large Kernel Sizes
作者为了与 Swin 同步,想选用大的 kernel size,因为 Swin 中最小也是 7×7 ,也比 ResNet kernel size 3×3 大。 Moving up depthwise conv layer: 如 Fig3 的(c)所示,作者将 depthwise 换了个地方。这种变化也是有处处可言的,还是借鉴了 Transformer,MSA block 提供给 MLP Layers 先验信息。因此,作者认为这是一个自然的做法。这种做法使得 FLOPs 降到了 4.1G ,同时带来了 Acc 上的下降,降到了 79.9 % 。 Increasing the kernel size:为了大卷积核,作者做了上述准备工作,然后实验了 3,5,7,9,11 这 5 个卷积核大小的效果。这几种卷积核的 FLOPs 基本相同,其中 7×7 效果是最好的达到了 80.6% , 3×3 的效果只有 79.9% 。作者同时做了对于能力强的模型例如 ResNet-200 这样的大模型,效果并没有明显提升。 到这里作者也吐槽到,这些做法都是从 ViT 中借鉴过来的。 Micro Design
在这一部分,大多是 layer 层面的工作已经做完了。现在 focusing 到 激活函数 与归一化上。 Replacing ReLU with GELU: GELU 比 ReLU 在 transformer 中用的更多,例如 Google 的 BERT,还有 OpenAI 的 GPT-2。因此,这里也将 ReLU 替换为了 GELU,Acc 没有变化,还是 80.6% 。 Fewer activation fuctions: 还是 transformer 的设计上,没有用很多归一化函数,因此相比于 ResNet Block,作者去掉了很多 BN Layer,只留了一个 BN Layer 在 1×1 conv 前。这使得 Acc 上升到了 81.4%。目前已经超过了 Swin-T 的 results。作者还发现如果在 Block 前面加 BN,并不会有 Acc 上的提升。 Substituting BN with LN: 作者写道,BN 的存在可能会对模型的性能产生负面影响。在 transformer 中,用的是 LN,于是作者把 BN 换成了 LN,效果提升到了 81.5%。 Separate downsampling layers: 在 ResNet 中,spatial 维度上的下采样是在 resuidal block 前面进行的,利用 3×3 stride 2 的卷积还有 1×1 conv stirde 2 shortcut connection 做的。在 Swin 中,利用的是 separate downsampling layer 做的,且在每两个 stage 之间。作者这里修改成了利用 2×2 conv layers stride 2 做 spatial 上的下采样。这次修改,效果提升到了82.0%。 终于作者的修改到这里就结束了,这是一个纯卷积的结构,作者给其命名为 ConvNeXt 。下图是整体的 architecture。
Results
Liu, Z., Mao, H., Wu, C. Y., Feichtenhofer, C., Darrell, T., & Xie, S. (2022). A ConvNet for the 2020s.arXiv preprint arXiv:2201.03545.
#投 稿 通 道 #
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读 ,也可以是学术热点剖析 、科研心得 或竞赛经验讲解 等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品 ,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬 ,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱: hr@paperweekly.site
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02 )快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」 也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」 订阅我们的专栏吧