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

该研究通过改造ResNet模型,结合ResNeXt和反向瓶颈设计,以及使用大卷积核,提出了一种新的卷积网络架构。在训练技术上应用了数据增强、正则化和优化器AdamW,同时发现指数滑动平均(EMA)对带有BatchNorm层的模型有害。实验结果显示,这种改进的卷积网络在ImageNet预训练和微调策略上表现优越,且在目标检测和语义分割等下游任务中展现出强效性能。
摘要由CSDN通过智能技术生成

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 预训练策略

在这里插入图片描述

ImageNet 微调策略

在这里插入图片描述

宏观设计部分

宏观设计

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

ResNeXt-ify

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

  • 可分离卷积

    深度可分离卷积
    请添加图片描述

    逐通道卷积
    在这里插入图片描述

    逐点卷积
    在这里插入图片描述
    在这里插入图片描述

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

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

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

反向Bottleneck

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

在这里插入图片描述

大型卷积核

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

在这里插入图片描述

注意: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激活。

在这里插入图片描述

更少的归一化层。

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

使用LN替代BN

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

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

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

  1. 计算出均值

  2. 计算出方差

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

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

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

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

在这里插入图片描述
在这里插入图片描述

分离下采样层

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

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

ImageNet的研究结果

在这里插入图片描述

下游任务的研究结果

基于COCO的目标检测与分割

在这里插入图片描述

基于ADE20K的语义分割

在这里插入图片描述

研究展望

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Connext DDS是一种用于实时数据解决方案的软件框架。它是一种分布式数据共享系统,旨在处理实时系统中的大量数据传输和通信需求。Connext DDS支持许多编程语言,其中包括Java。 Connext DDS Java Demo是一个基于Java语言的示例程序,旨在演示如何使用Connext DDS的Java API来创建和管理DDS数据发布者和订阅者,并实现实时数据交换。该Demo提供了一些常见的使用场景和功能示例,以帮助开发人员更好地理解和使用Connext DDS。例如,您可以在Demo中找到如何创建和配置DDS域、主题和类型,如何发布和订阅数据,以及如何处理数据更新和错误处理的示例代码。 通过运行Connext DDS Java Demo,开发人员可以更好地了解使用Connext DDS构建实时系统的基本原理和最佳实践。同时,它也提供了一个起点,供开发人员在使用Connext DDS时进行自定义和扩展。 总而言之,Connext DDS Java Demo是一个使用Java编写的示例程序,用于演示如何使用Connext DDS的Java API来构建实时数据解决方案。通过运行和探索这个Demo,开发人员可以更好地了解Connext DDS框架的基本概念和功能,以便更好地应用于实际项目中。 ### 回答2: Connext DDS Java demo是一个演示Connext DDS Java库的示例程序集合。Connext DDS是一种高性能、分布式数据传输系统,用于实时应用程序的数据通信。它提供了一种可靠、实时的数据传输机制,使得不同应用程序之间能够实时地交换数据。 Connext DDS Java demo提供了一些示例程序,可以帮助开发人员快速了解和使用Connext DDS Java库。这些示例程序展示了如何使用Connext DDS Java库进行数据发布和订阅,以及如何处理数据传输中的错误和异常。 通过运行Connext DDS Java demo中的示例程序,开发人员可以学习和了解如何使用Connext DDS Java库实现实时应用程序中的数据通信。示例程序提供了具体的代码实现和注释,帮助开发人员理解和使用Connext DDS Java库的各种功能和特性。 Connext DDS Java demo还提供了一些高级示例程序,如QoS控制、数据筛选和多个订阅者的示例。这些示例程序展示了如何根据特定的需求和场景配置Connext DDS Java库,以及如何使用不同的QoS策略和数据过滤机制来控制数据传输和订阅。 总之,Connext DDS Java demo是一个帮助开发人员学习和使用Connext DDS Java库的示例程序集合。通过实际运行这些示例程序,开发人员可以深入了解和掌握Connext DDS Java库的各种功能和用法,从而更好地应用于实时应用程序的开发中。 ### 回答3: Connext DDS是一种用于实时数据通信的软件框架,它提供了可靠的数据发布和订阅机制,让不同应用程序之间能够实时进行数据交换。Connext DDS专注于高性能、低延迟的通信,并且支持多种操作系统和编程语言。 Connext DDS提供了许多示例代码,方便开发者学习和使用。其中,Connext DDS Java Demo是一个基于Java语言的示例程序,演示了如何使用Connext DDS进行数据通信。该示例程序包括发布者和订阅者两个部分。 发布者部分向DDS域中的主题发送数据,订阅者部分从相同的主题接收数据。两者之间通过DDS中间件进行数据传输。示例程序中,发布者使用DDS API将数据写入主题,而订阅者使用DDS API从主题中读取数据。通过运行这个示例程序,我们可以看到数据的发布和订阅过程,并且可以了解Connext DDS的基本用法。 为了运行Connext DDS Java Demo,首先需要安装Connext DDS开发包,并配置相关环境变量。然后,我们可以使用示例程序提供的API来编写发布者和订阅者的逻辑。随后,编译和运行这个示例程序,我们就可以看到数据的发布和订阅过程。 总之,Connext DDS Java Demo是一个演示如何使用Connext DDS进行数据通信的示例程序。通过运行这个示例程序,我们可以更好地理解Connext DDS的使用方法,并且可以在实际应用中应用这个框架来进行实时数据通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卖报的大地主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值