ConvNeXt(CVPR 2022)论文解读

paper:A ConvNet for the 2020s

official implementation:https://github.com/facebookresearch/ConvNeXt

third-party implementation:https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/convnext.py

背景

在2020年代,视觉识别领域开始被Vision Transformers(ViTs)主导,这些模型迅速超越了传统的卷积神经网络(ConvNets)成为图像分类的顶尖模型。然而,虽然ViTs在图像分类任务中表现优异,但在目标检测和语义分割等计算机视觉任务中却存在困难。因此,层次化的Transformers(如Swin Transformers)重新引入了若干ConvNet的设计元素,使得Transformers在各种视觉任务中表现出色 。

本文的创新点

本文重新审视了ConvNet的设计空间,并测试了一个纯ConvNet能够达到的性能极限。作者从标准的ResNet出发,逐步“现代化”其设计,使其接近视觉Transformer的设计,并在此过程中发现了一些关键组件,这些组件有助于缩小性能差距。

具体如下

  1. ConvNeXt架构:完全由标准的ConvNet模块构建,没有使用任何基于注意力的模块,展示了纯ConvNet模型在现代计算机视觉任务中的竞争力。
  2. 现代化的ConvNet设计:通过一系列设计决策(如宏观设计、ResNeXt结构、inverted bottleneck、大核卷积和微观层级设计等),将标准的ResNet模型逐步现代化
  3. 简化和效率:ConvNeXt在保持简洁设计的同时,提供了与Transformer相当的性能,且在某些情况下效率更高。
  4. 广泛的评估:ConvNeXt在多个视觉识别任务上进行了评估,包括ImageNet分类、COCO目标检测和ADE20K语义分割,证明了其通用性和有效性。

方法介绍

Modernizing a ConvNet:  a Roadmap

作者提供了一个从ResNet到转变成一个类似于一个Transformer的ConvNet的过程轨迹,具体考虑了两种模型尺寸,一种是ResNet-50/Swin-T,FLOPs在4.5x10^9左右,另一种是ResNet-200/Swin-B,FLOPs在15.0x10^9左右。为简单起见,我们将用ResNet-50 / Swin-T模型来展示结果。对更高容量模型的结论是一致的。

作者的探索是为了研究和借鉴Swin-Transformer不同级别的设计同时保持一个标准ConvNet的简洁。具体的探索路线图如下:起点是一个ResNet-50,我们首先用vision Transformer相似的训练技巧来训练它,得到了相比原始的ResNet-50改进很多的结果,以这个作为baseline。然后我们研究了一系列的设计决策总结为 1)宏观设计 2)ResNeXt 3)inverted bottleneck 4)large kernel size 5)不同层的微观设计。图2展示了通过“网络现代化”每一步的过程和对应的结果。所有模型在ImageNet-1K上训练和评估。

Training Techniques

除了网络架构的设计外,训练过程也会影响最终的性能。Vision Transformer不仅带来了新的模块和架构设计决策,还引入了不同的训练技巧(比如AdamW优化器)。这主要涉及到优化策略和相关的超参设置。因此我们第一步是用vision Transformer的训练程序来训练一个baseline模型,ResNet-50/200。这里的训练设置类似于DeiT和Swin Transformer的。训练从90个epoch延长到300个,优化器选择AdamW,数据增强包括Mixup、Cutmix、RandAugment、Random Erasing以及正则化包括Stochastic Depth和Label Smoothing。完整的超参设置如表5所示

增强的训练方案使得ResNet-50的精度从76.1%提升到了78.8%(+2.7%),这意味着传统的卷积网络和vision Transformer之间的性能差异很大一部分是训练技巧造成的。在接下来整个“现代化”的过程中我们都使用相同的超参和训练配置。

Macro Design

Changing state compute ratio. 在ResNet中不同stage计算量分布的设计主要是经验性的,沉重的'res4' stage是为了与下游任务兼容比如目标检测,其中一个检测head作用于14x14的特征图上。Swin-T遵循相同的原理但不同stage的计算比略有不同1:1:3:1,对于更大的Swin Transformer这个比例为1:1:9:1。遵循这种设计,我们将ResNet-50不同stage中block的数量从(3, 4, 6, 3)改为(3, 3, 9, 3),这保持了和Swin-T相近的FLOPs。这步操作将模型的精度从78.8%提高到了79.4%。

Changing stem to "Pachify". 标准的ResNet中stem部分包含一个stride=2的7x7卷积和一个max pool,使得输入图像降采样4x。在vision Transfrmer中,stem阶段采用了一个更激进的"patchify"策略,它使用一个更大的卷积核(例如14或16)并且卷积核之间不重叠(即步长等于卷积核大小)。Swin Transformer用了类似的"patchify"层但使用了一个较小的patch size 4以适应架构的多级设计。我们用一个4x4-s4的卷积层作为patchify layer替换原本的stem,这一步将模型的精度从79.4%提升到79.5%。

ResNeXt-ify

在这一部分中,我们尝试采用ResNeXt的思想,它比普通的ResNet有更好的FLOPs/accuracy权衡。核心组件是分组卷积。ResNeXt的指导原则是“使用更多的组,扩大宽度”。更准确地说,ResNeXt对bottleneck block中的3×3conv层采用了分组卷积。由于这大大减少了FLOPs,网络宽度被扩大,以补偿容量损失。

本文作者使用了深度卷积,它是组卷积的一种特殊情况,group数量等于通道数。作者注意到,深度卷积类似于self-attention中的加权求和操作,它在每个通道上计算即只在空间维度进行信息的融合。depthwise卷积和1x1卷积的组合分离了空间的融合通道的融合,这也是vision Transformer的特性,即每个operation要么融合空间维度的信息要么融合通道维度的信息但不会同时进行。使用深度卷积有效降低了FLOPs,但如预期一样精度也降低了。根据ResNeXt的策略作者将网络宽度增加到了和Swin-T一样(64到96)。随着FLOPs的增加(5.3G)网络性能达到了80.5%。

Inverted Bottleneck

Transformer block的一个重要设计是它用了一个inverted bottleneck,即MLP block中隐藏层的维度是输入的4倍,如图4所示。

作者探索了inverted block的设计,图3(a)到(b)展示了这种配置。尽管深度卷积层的FLOPs有所增加,由于降采样residual block shortcut 1x1卷积层带来的FLOPs下降,整个网络FLOPs降低到了4.6G。这里带来了精度的略微提升,80.5%到80.6%。

 

Large Kernel Sizes

Vision Transformer最显著的一个特点就是非局部的self-attention,这使得每一层都有全局的感受野。而ConvNet中往往是堆叠小核(3x3)卷积层,它们在现代GPU上有高效的硬件实现。尽管Swin Transformer重新将local window引入到了self-attention block,但窗口大小至少为7x7,显著大于ResNe(X)t的3x3。因此这里作者重新研究了在ConvNet中使用大的卷积核。

Moving up depthwise conv layer. 为了探索大卷积核,一个前提是上移depthwise卷积层的位置(图3(b)到(c))。这个设计在Transformer中很明显:MSA block放置在MLP层之前。由于我们有一个inverted bottleneck block,这是一个很自然的设计选择——复杂低效的模块(MSA,大核卷积)的通道数将会变少,而高效密集的1x1卷积将会完成繁重的工作。这一中间步骤将FLOPs降低到了4.1G,精度也暂时下降到了79.9%。

Increasing the kernel size. 在有了上述前提下,采用更大核的卷积的好处是显著的。作者实验了几个kernel size,包括3、5、7、9和11,网络的性能从79.9%(3x3)提升到了80.6%(7x7),而网络的FLOPs几乎保持不变。此外作者还观察到,采用更大卷积核的增益在7x7时达到饱和点。

至此,我们结束了对宏观尺度上网络架构的研究,有趣的是,vision Transformer中采用的大部分设计选择可以直接应用于ConvNet。

Micro Design

这一部分,作者将研究微观尺度上的几个架构上的差异,这里大多数探索都是在层的级别上完成的,重点关注激活函数和normalization层的选择。

Replacing ReLU with GELU 自然语言处理和视觉架构的一个差异是具体使用的激活函数类型。ReLU由于其简洁和高效被广泛使用于ConvNet中。在原始的Transformer中也使用了ReLU。而GELU,可以被视为ReLU的平滑版本,被广泛应用于一些最先进的Transformer架构中,包括BERT、GPT-2和ViT。作者发现,在本文的ConvNet中也可以用GELU替代ReLU,尽管精度保持不变(80.6%)。

Fewer activation functions. Transformer和ResNet的一个微小区别是前者使用的激活函数更少。考虑一个有key/query/value线性embedding层的Transformer block,projection layer以及MLP block中的两个线性层,其中只在MLP block中有一个激活函数。作为对比,通常每个卷积层后都添加一个激活函数。这里作者探索了在ConvNet中用相同的策略时,性能将如何变化。如图4所示,我们从residual block中去掉所有的GELU只保留两个1x1卷积层之间的一个GELU,复制了Transformer的风格。这一步将精度提高了0.7%至81.3%,基本上match了Swin-T的性能。

Fewer normalization layers. Transformer block通常也配置较少的normalization layer。这里作者去掉了两个BN层,只保留1x1卷积前的一个BN层。这进一步将性能提升到了81.4%,已经超越了Swin-T。

Substituting BN with LN. BatchNorm是ConvNet中一个重要组成部分因为它提高了收敛性减少了过拟合。但BN也有许多复杂的问题,这可能会对模型的性能产生不利影响。另一方面,Transformer中使用了更简单的Layer Normalization并在不同的场景中表现出了良好的性能。在GN的文章中作者提到用LN替换BN会带来次优的性能。但经过上述对网络架构和训练技巧的修改后,本文作者发现用LN训练ConvNet没有任何问题,性能还稍微提高了一点到81.5%。

Separate downsampling layers. 在ResNet中,降采样是在每个stage开始的residual block中进行的,通过3x3-s2的卷积实现(shortcut中通过1x1-s2的卷积)。在Swin Transformer中,在每个stage之间有一个单独的降采样层。本文探索了一种类似的策略,即使用2x2-s2的卷积进行降采样。结果作者发现这种修改会导致训练发散,进一步研究发现,在改变分辨率的地方添加归一化层有助于稳定训练。经过这一步,精度提升到了82.5%,超越了Swin-T的81.3%。

至此就得到了本文的最终结构,作者称之为ConvNeXt。ResNet、Swin Transformer和ConvNeXt的block结构如图4所示。网络详细的结构配置如表9所示。

实验结果

不同大小的ConvNeXt的配置如下

作者在ImageNet上进行了两组实验,一组是直接在ImageNet-1K上进行训练与评估,另一组是在ImageNet-22K上进行预训练并在ImageNet-1K上微调,两组实验的结果如表1所示。其中上半部分是直接在ImageNet-1K上进行训练的结果,可以看到在精度-计算权衡方面ConvNeXt和两个强ConvNet基线(RegNet和EfficientNet)相比取得了具有竞争力的结果。在相似计算量的前提下,ConvNeXt在所有计算量的范围中都超过了Swin Transformer。

在ImageNet-22K上预训练的结果如表1下半部分所示,进行这组实验的原因是:一个普遍的观点是,vision Transformer有更少的归纳偏置,因此在更大规模数据的预训练下可以比卷积网络表现得更好。通过实验结果可知,在大规模数据预训练下,ConvNeXt的性能表现不比Swin Transformer差,表明了ConvNeXt也是一个scalable架构。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录-算法训练营day55【动态规划16:两个字符串的删除操作、编辑距离、编辑距离总结篇】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part16● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇 详细布置 583. 两个字符串的删除操作 本题和动态规划:115.不同的子序列 相比,其实就是两个字符串都…

流量回放平台与传统测试工具的对比分析

文章目录 一、流量回放平台的优势与挑战二、传统测试工具的优势与挑战三、实际案例演示四、解决方案五、答疑解惑5.1、传统工具不是也可以做到流量会放平台的无侵入性测试和性能瓶颈分析吗?5.2、开发流量回放平台的成本和使用传统测试工具的成本哪个更大&#xff1f…

基于SSM框架的垃圾分类系统的设计与实现(含源码+sql+开题报告+论文+论文答辩模板)

图1 前台首页截图 首页展示:首页展示法律法规、公示公告、用户交流论坛、分类指南、垃圾站点、以及个人中心; 法律法规:展示我国《城市生活垃圾分类及其评价标准》以及《生活垃圾分类标志》等最新法律法规; 公示公告&#xff1…

另一棵树的子树(oj题)

一、题目链接 https://leetcode.cn/problems/subtree-of-another-tree/submissions/536304222 二、题目思路 1.首先遍历大树,判断大树的根结点的值是否等于小树的根结点的值,如果不相等,就找大树的左孩子或者右孩子,以左孩子为根…

【线性表 - 数组和矩阵】

数组是一种连续存储线性结构,元素类型相同,大小相等,数组是多维的,通过使用整型索引值来访问他们的元素,数组尺寸不能改变。 知识点数组与矩阵相关题目 # 知识点 数组的优点: 存取速度快 数组的缺点: 事先必须知道…

php 实现:给图片加文字水印,图片水印,压缩图片

演示环境: 1、windows10 2、phpstudy 3、php7.4 一、案例演示: 二、素材准备 1、准备一张原始图片 2、准备一张水印图片(透明底图的最好) 3、字体库(windows系统自带的字体库,路径在:C:\Window…

Navicat连接Oracle

目标: 1.Navicat连接Oracle数据库,报错 无监听程序。 一、下载安装Navicat15 https://zhuanlan.zhihu.com/p/675991635 下载安装资源 链接:百度网盘 请输入提取码 提取码:1u1q 二、测试SQL PLUS连接数据库 在全部程序--》Ora…

Python | Leetcode Python题解之第123题买卖股票的最佳时机III

题目: 题解: class Solution:def maxProfit(self, prices: List[int]) -> int:n len(prices)buy1 buy2 -prices[0]sell1 sell2 0for i in range(1, n):buy1 max(buy1, -prices[i])sell1 max(sell1, buy1 prices[i])buy2 max(buy2, sell1 - …

Hadoop+Spark大数据技术 第七次作业

第七次作业 1. 简述Spark SQL使用的数据抽象DataFrame与Dataset的区别。 DataFrame: 基于 Row 对象的二维表格结构,类似于关系型数据库中的表。 行和列都有明确的 Schema(模式),可以进行类型推断。 提供了丰富的操作接口&#xff…

行列视(RCV)数据安全如何保障?

行列视(RCV)的数据安全保障是一项至关重要的任务,涉及多个层面的技术和策略来确保数据的完整性、保密性和可用性。以下是关于RCV数据安全保障的几个方面: 首先,RCV采用了先进的加密技术来保护数据的传输和存储。通过使…

英伟达(NVIDIA)A800性能及应用场景

英伟达(NVIDIA)A800是一款高性能的人工智能(AI)加速卡,设计用于满足大规模深度学习、数据分析以及其他高性能计算需求。以下是其主要性能参数及应用概述: 性能参数: 数据传输速率:…

docker私有镜像仓库的搭建及认证

简介: docker私有镜像仓库的搭建及认证 前言 在生产上使用的 Docker 镜像可能包含我们的代码、配置信息等,不想被外部人员获取,只允许内 网的开发人员下载。 Docker 官方提供了一个叫做 registry 的镜像用于搭建本地私有仓库使用。在内部网…

苍穹外卖数据可视化

文章目录 1、用户统计2、订单统计3、销量排名Top10 1、用户统计 所谓用户统计,实际上统计的是用户的数量。通过折线图来展示,上面这根蓝色线代表的是用户总量,下边这根绿色线代表的是新增用户数量,是具体到每一天。所以说用户统计…

CS4344国产替代音频DAC数模转换芯片DP7344采样率192kHz

目录 DAC应用简介DP7344简介结构框图DP7344主要特性微信号:dnsj5343参考原理图 应用领域 DAC应用简介 DAC(中文:数字模拟转换器)是一种将数字信号转换为模拟信号(以电流、电压或电荷的形式)的设备。电脑对…

BSD盲区检测系统性能要求及试验方法

相关术语 盲区检测(bsd,blind spot detection)试验车辆(subject vehicle)目标车辆(target vehicle)横向距离(lateral distance):试验车车身最外缘(不包含外后视镜)与目标车辆车身最外缘(不包含外后视镜)之间的横向距离。 纵向距离(longitudinal distance):试验…

SpringBoot的第二大核心AOP系统梳理

目录 1 事务管理 1.1 事务 1.2 Transactional注解 1.2.1 rollbackFor 1.2.2 propagation 2 AOP 基础 2.1 AOP入门 2.2 AOP核心概念 3. AOP进阶 3.1 通知类型 3.2 通知顺序 3.3 切入点表达式 execution切入点表达式 annotion注解 3.4 连接点 1 事务管理 1.1 事务…

云计算与 openstack

文章目录 一、 虚拟化二、云计算2.1 IT系统架构的发展2.2 云计算2.3 云计算的服务类型 三、Openstack3.1 OpenStack核心组件 一、 虚拟化 虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之…

组装电脑(使用老机箱)

昨天同事拿来一台联想 ThinkCentre M6210t的台式机,说计算机实在是太慢了,在只保留主机箱想升级一下。   她拿来了配件,有电源、主板、CPU、CPU风扇、内存条、机箱风扇、硬盘:   主板:华硕 Prime H610M-K D4&#…

element-plus 自定义命名空间 el-config-provider namespace 不起作用,html 的class值改变了,但是样式不对

今天按照文档,对elemen plus vite 的项目,进行qiankun嵌套,发现子应用的element和主应用的element plus样式冲突,所以决定用element plus 的自定义命名空间处理下。 使用方法,按照文档来 第一步:vue文件内…

element-ui表格全选

项目场景&#xff1a; 根据项目需求&#xff0c;要求在表格外加【全选】复选框&#xff0c;切换分页也需将每一行都勾选上 实现方式&#xff1a; 借用element-ui文档的这几个方法和属性 <el-checkboxv-model"checkAll"change"handleCheckAllChange"&g…