【论文阅读】ConNeXt —— A ConvNet for the 2020s

A ConvNet for the 2020s

讨论通过改善卷积网络模型,使其达到优于transformer模型的效果(文章基于ResNet模型框架进行改造升级)

研究基线:

基于训练transformer模型的训练技术训练ResNet-50

设计决策:

  1. 宏观设计
  2. ResNeXt
  3. 反向 bottleneck
  4. 大kernel尺寸

训练技巧:

  • AdamW优化器
  • 数据增强:Mixup、Cutmix、RandAugment、RandomErasing
  • 正则化:Stochastic Depth、Label Smoothing

EMA—指数滑动平均,好处在于:1.平滑数据、2.可以存储近似n个时刻的平均值,而不用在内存中保留n个时刻的历史数据,减少了内存消耗。本研究发现EMA会严重损害带有BatchNorm层的模型。

ImageNet 预训练策略

【论文阅读】ConNeXt —— A ConvNet for the 2020s_第1张图片

ImageNet 微调策略

【论文阅读】ConNeXt —— A ConvNet for the 2020s_第2张图片

宏观设计部分

宏观设计

  1. 多级异形特征映射分辨率
    1. 级别计算比例
    2. “干细胞”结构

ResNeXt-ify

  • 使用可分离卷积,分为逐通道卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)。(不同于标准卷积同时对所有channels进行卷积,而是先进行H*W维度的卷积,再进行channels维度的卷积,即各channels分别卷积完,再叠加生成最后的特征图。)

  • 可分离卷积

    深度可分离卷积
    【论文阅读】ConNeXt —— A ConvNet for the 2020s_第3张图片

    逐通道卷积
    【论文阅读】ConNeXt —— A ConvNet for the 2020s_第4张图片

    逐点卷积
    【论文阅读】ConNeXt —— A ConvNet for the 2020s_第5张图片
    【论文阅读】ConNeXt —— A ConvNet for the 2020s_第6张图片

    计算量计算公式:
    在这里插入图片描述

    卷积知识补充[各种卷积的流程和优缺点]((35条消息) 各种卷积的流程和优缺点_深度可分离卷积的优缺点_浪迹天涯的yf的博客-CSDN博客)

  • 对于标准卷积,其各channels间的权重是不重叠的,不共享的。

反向Bottleneck

每个Transformer块中的一个重要设计是它创建了一个反向瓶颈,即MLP块的隐藏维度比输入维度宽四倍

【论文阅读】ConNeXt —— A ConvNet for the 2020s_第7张图片

大型卷积核

Vison Transformer最显著的特点就是非局部注意力,因为多头自注意力机制,每个序列向量对于其他序列向量进行了相关计算,计算公式如下:
A t t e n t i o n ( Q , K , V ) = S o f t M a x ( Q K T d k ) V Attention(Q, K, V) = SoftMax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=SoftMax(dk QKT)V

  1. 使用向上移动的深度卷积层。复杂/低效模块(MSA,大内核conv)将有更少的通道,而高效、密集的1×1层将做繁重的工作。(就是将复杂较大的卷积层放再通道数较少的阶段,也就是偏向输入层方向,而多通道处(分类头处)更适合使用1×1卷积这样的小型的卷积层。
  2. 增加卷积核大小。在每个块中使用7×7卷积核。本文在大模型中验证得出:内核大小增加到7×7以上时,ResNet-200状态模型不会显示出进一步的增益。

微观设计部分

使用GELU替代RELU

【论文阅读】ConNeXt —— A ConvNet for the 2020s_第8张图片

注意:gelu作为激活函数训练时,建议使用一个带动量的优化器

pytorch实现:

def gelu(x):
    """Implementation of the gelu activation function.
        For information: OpenAI GPT's gelu is slightly different (and gives slightly different results):
        0.5 * x * (1 + torch.tanh(math.sqrt(2 / math.pi) * (x + 0.044715 * torch.pow(x, 3))))
        Also see https://arxiv.org/abs/1606.08415
    """
    return x * 0.5 * (1.0 + torch.erf(x / math.sqrt(2.0)))

补充:[深度学习常用激活函数]((35条消息) 常用激活函数(relu,glu,gelu,swish等)_glu激活函数_栋次大次的博客-CSDN博客)

更少的激活函数。在每个块中使用单个GELU激活。

【论文阅读】ConNeXt —— A ConvNet for the 2020s_第9张图片

更少的归一化层。

发现在块的开始添加一个额外的BN层并不能提高性能。

使用LN替代BN

在介绍各个算法之前,我们先引进一个问题:为什么要做归一化处理

神经网络学习过程的本质就是为了学习数据分布,如果我们没有做归一化处理,那么每一批次训练数据的分布不一样,从大的方向上看,神经网络则需要在这多个分布中找到平衡点,从小的方向上看,由于每层网络输入数据分布在不断变化,这也会导致每层网络在找平衡点,显然,神经网络就很难收敛了。当然,如果我们只是对输入的数据进行归一化处理(比如将输入的图像除以255,将其归到0到1之间),只能保证输入层数据分布是一样的,并不能保证每层网络输入数据分布是一样的,所以也需要在神经网络的中间层加入归一化处理。

BN、LN、IN和GN这四个归一化的计算流程几乎是一样的,可以分为四步:

  1. 计算出均值

  2. 计算出方差

  3. 归一化处理到均值为0,方差为1

  4. 变化重构,恢复出这一层网络所要学到的分布

训练的时候,是根据输入的每一批数据来计算均值和方差,那么测试的时候,平均值和方差是怎么来的?

对于均值来说直接计算所有训练时batch 均值的平均值;然后对于标准偏差采用每个batch 方差的无偏估计。

【论文阅读】ConNeXt —— A ConvNet for the 2020s_第10张图片
【论文阅读】ConNeXt —— A ConvNet for the 2020s_第11张图片

分离下采样层

使用带有步长的卷积核进行下采样。

研究表明,在空间分辨率改变的地方添加归一化层有助于稳定训练。

ImageNet的研究结果

【论文阅读】ConNeXt —— A ConvNet for the 2020s_第12张图片

下游任务的研究结果

基于COCO的目标检测与分割

【论文阅读】ConNeXt —— A ConvNet for the 2020s_第13张图片

基于ADE20K的语义分割

【论文阅读】ConNeXt —— A ConvNet for the 2020s_第14张图片

研究展望

混合模型:将卷积和Transformer相结合。

补充:[深度学习模型参数量/计算量和推理速度计算]((35条消息) 深度学习模型参数量/计算量和推理速度计算(一)_flopcountanalysis_曙光_deeplove的博客-CSDN博客)

你可能感兴趣的:(深度学习,计算机视觉,论文阅读,深度学习,cnn)