• 【ARXIV2201】ConvNeXt


    请添加图片描述

    论文:https://arxiv.org/abs/2201.03545
    代码:https://github.com/facebookresearch/ConvNeXt

    Facebook 和 UC Berkeley 的科研人员提出了 ConvNeXt,对标的是2021年最火的 Swin Transformer,在相同的FLOPs下, ConvNeXt 比 Swin Transformer 拥有更高的准确率,在ImageNet 22K上达到 87.8% 。

    论文本质上是一系列 Trick 的集合,主要包括五方面:1、macro design;2、ResNeXt;3、inverted bottleneck;4、large kerner size;5、micro designs 。下面以 ResNet50 为基础进行介绍与分析。

    1、 宏观设计

    • 如下图所示,原始ResNet50中,resblock的比例是(3,4,6,3),仿照 swin 的结构,resblock调整成(3,3,9,3),调整后,准确率由78.8提升至79.4。
    • 原始的ResNet50中,第一步是通过7x7的卷积(步长为2)+ 3x3池化(步长为2)将图像尺寸从224变成56。作者采用 swin 的做法,使用4x4的卷积(步长为4)处理,准确率从79.4提升为79.5。

    请添加图片描述

    2、借鉴ResNeXt

    ResNeXt 通过特征分组提升了性能。一般来说,特征分组有助于构建一系列子空间,增加特征的多样性,Transfomer 里的 multi-head 就是这个道理。作者直接应用 depthwise conv,即group数和 channel 数相同,同时,卷积的通道数从64提升到96,准确率达到80.5%。

    3、借鉴Inverted Bottleneck

    作者认为 Tranformer block 中的MLP非常像 MobileNetV2 中的 Inverted Bootleneck,因此借鉴了这一结构。作者应用的结构如下图所示,通道数变化为 96== >384==>96,第一层和第三层为 1x1 conv,中间第二层为 deconv 3x3。 性能进一步提升至80.6%。

    4、更大的卷积核

    • 如下图所示,将deconv上移到第一层,这样就类似 Transformer 了,MSA放在MLP之前,因为这样GFLOPs就减少了,但是准确率下降到了79.9%
    • 作者将 deconv 3x3 又改成了 7x7 (这个大小和 swin 一样。当然作者也尝试了更大尺寸,发现卷积核更大时准确率不再上升了,如下图所示),准确率从 79.9 提升到 80.6。

    5、Micro design

    • 将ReLU替换为GELU。 准确率没有变化,尽管没有变化,也许和其它trick 结合后,会发生显著变化。
    • 减少激活函数。 Transformer中只有并不是所有层后都有激活,作者仿照着减少了激活函数,具体如下图所示,准确率从80.6显著提升至81.3。
    • 减少 Norm 。 如上图所示,作者仿照Transformer 的结构,只在第一次卷积后使用 BN,性能提升至 81.4,此时性能已经超越了swin。
    • 将 BN 替换为 LN。 作者参照 Transformer ,全部使有和LN,性能又提升至 81.5。
    • 添加下层样层。 ResNet中 stage2-stage4 中使用步长为2的3x3卷积进行下采样,而Swin 中的下采样是通过 Patch Merging 模块实现的,参照这个设计,作者添加了一个单独的下采样层(2x2卷积,步长为2),准确率提升为82.0。

    Micro design 的性能演化如下图所示,这就是基于 ResNet50 改进的最终版本了,已经显著超越了同等的 swin transformer。

    根据B站 霹雳吧啦 老师的讲解,源代码中还有一个Layer Scale 论文中没有提及,来自 ICCV2021 的 Going deeper with image transformers,将输入的特征层乘上一个可训练的参数,该参数就是一个向量,元素个数与特征层channel相同,即对每个channel的数据进行缩放(听起来很像通道级的 attention),感兴趣可以看看作者源代码。

  • 相关阅读:
    微信小程序HTTPS
    微信商城-1简介
    va_list
    Event log c++ sample.
    EVENT LOGGING
    Analyze Program Runtime Stack
    unknow table alarmtemp error when drop database (mysql)
    This application has request the Runtime to terminate it in an unusual way.
    How to check if Visual Studio 2005 SP1 is installed
    SetUnhandledExceptionFilter
  • 原文地址:https://www.cnblogs.com/gaopursuit/p/15852647.html
Copyright © 2020-2023  润新知