【网络结构设计】8、ConvNeXt | 卷积神经网络还有很大的优化空间

本文主要是介绍【网络结构设计】8、ConvNeXt | 卷积神经网络还有很大的优化空间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、背景
    • 二、方法
      • 2.1 训练方法
      • 2.2 宏观设计
      • 2.3 ResNeXt-ify:79.5%→80.5%
      • 2.4 Inverted Bottleneck: 80.5%→80.6%
      • 2.5 Large Kernel Sizes
      • 2.6 微观设计
    • 三、实验
    • 四、结论

在这里插入图片描述

论文链接:https://arxiv.org/pdf/2201.03545.pdf

代码链接:https://github.com/facebookresearch/ConvNeXt

一、背景

2020年出现了 ViT,是基于 Transformer 的网络模型,并且很快超越了基于 CNN 的网络模型的效果。

原始 ViT 由于只能提取单层特征,无法使用于目标检测和分割等任务。

层级 Transformer(Swin 等),引入了卷积神经网络的特性,提出了一个基于 Transformer 的 backbone,并且在下有任务上取得了很好的效果。

但这种效果应该来源于 Transformer 的内在优势,而非卷积固有的归纳偏差能力。

所以本文中,作者探索了 CNN 的边界,使用 Transformer 的设计思想,重新优化了标准 ResNet。

卷积神经网络有很多内在的归纳偏置的能力,有助于其适应于不同的视觉任务。比如最重要的平移不变性,这个特性就很适用于目标检测。卷积神经网络的计算效率也比较高,因为卷积核是共享的。

Transformer 是从 NLP 衍生到图像任务上的,这也使得两个任务的网络形式有了进一步的统一,除过图像需要 patch 之外,其他都很类似。ViT 没有引入图像的相关归纳偏置,且和 NLP 使用的网络结构很相似。随着大模型和大数据集的引入,ViT 的效果比 CNN 强很多,尤其在图像分类上,但图像任务不仅仅只有图像分类。Transformer 没有卷积网络的归纳偏置能力,所以原始的 ViT 模型无法成为一个通用的 backbone,最重要的一点在于计算量,ViT 内部使用的 attention 结构计算量是输入图像的平方倍,所以如果输入图像分辨率增大的话,计算量会提高很多。

Swin Transformer 是一个重要的转折,该方法将 sliding window 引入了 Transformer,和卷积网络非常类似,也证明了 Transformer 能够作为 backbone,并且能够在除过图像分类外的场景取得 SOTA 的效果,

不同于卷积的逐步进步,Transformer一提出的效果就是很好的,所以本文主要对比卷积和 Transformer 的架构差异,并测试纯卷积网络的极限。
在这里插入图片描述

二、方法

如何修正卷积网络?

作者对比:

  • ResNet50 和 Swin-T , FLOPs 大约 4.5 × 1 0 9 4.5 \times 10^9 4.5×109
  • ResNet200 和 Swin-B, FLOPs 大约 15.0 × 1 0 9 15.0 \times 10^9 15.0×109

作者探索的过程如下,如图2所示:

  • 训练 ResNet50 :使用和 Transformer 相同的训练方式训练 ResNet50,然后和原始训练 ResNet50 的结果做对比,作为基准
  • 修正的设计原则:
    • 宏观设计
    • ResNeXt
    • inverted bottleneck
    • 大卷积核
    • 不同层的微观设计
      在这里插入图片描述

2.1 训练方法

作者使用 DeiT 和 Swin 的训练方法,epoch 从 90 增加到 300,AdamW 优化器,各种数据增强方式,使得 ResNet50 的准确率从 76.1% 提升到了 78.8%。这也说明了卷积网络没有 Transformer 效果好的原因也和训练方式有关。

2.2 宏观设计

由于 Swin 也是多级的网络结构,每个stage的特征图分辨率是不同的,所以,以下两个问题的考虑是很有必要的:

1、改变 stage compute ratio: 78.8% → 79.4%

原始的 ResNet 在不同 stage 的计算量分布其实是依靠经验性的,最重的 res4 stage 主要是向下兼容下游任务,如目标检测在 14x14 的特征图上连接检测头。但 Swin-T 每个 stage 的计算量比率基本为 1:1:3:1,更大的网络是 1:1:9:1,所以作者将 ResNet50 的每个 stage 中的 blocks 的个数设置从 (3, 4, 6, 3) 修改为 (3, 3, 9, s3)。该操作将准确率从 78.8% 提高到了 79.4%。

2、改变 stem cell structure 为 “Patchify”:79.4%→79.5%

Stem 的设计决定了图片的前处理方式,ResNet 的 stem 一般都会降低输入图像的分辨率,ResNet 的 stem 是步长为 2 的 7x7 卷积,后面跟随一个 max pooling,输入图像总共会下采样 4 倍。但 Transformer 是使用不重叠的卷积对图像进行分块。所以此处作者也使用了类似的方法,使用步长为 4 的 4x4 卷积,这一操作将准确率从 79.4% 提升到了 79.5%。

2.3 ResNeXt-ify:79.5%→80.5%

作者也参考了 ResNeXt 的设计,因为 ResNeXt 比原始的 ResNet 有着更好的 FLOPs 和 accuracy 平衡,主要思想是卷积被分成了不同组。

所以,本文作者使用了 depth-wise 卷积,该卷积其实类似于 self-attention 中的加权求和,并且很大程度上降低了计算量。所以,作者提升了网络的宽度到和 Swin-T 相同(64→96),准确率提高到了 80.5%。
在这里插入图片描述

2.4 Inverted Bottleneck: 80.5%→80.6%

Transformer block 中的一个很重要的设计师 inverted bottleneck,也就是 MLP 的 hidden 层维度是输入维度的 4 倍(图4),在ConvNets中使用的扩展比为 4,图 3 的 a 到 b 展示了相关改变。
在这里插入图片描述

2.5 Large Kernel Sizes

由于 Transformer 中的 self-attention 和卷积中的卷积核卷积是有较大不同的,self-attention 能够捕捉全局的特征,尽管 Swin 的 window size 大小为 7 ,那也比 ResNet 中的 3 大很多。

1、将 depth-wise 层向上移动:图 3b 到图 3c ,80.6%→79.9%

为了探索大卷积的效果,作者将 depth-wise 卷积的位置向上移动了,图 3b 到图 3c,这和 Transformer 类似,Transformer 的 MSA block 是在 MLP 之前的。由于作者已经采用了 inverted bottleneck block,所以复杂的模块(MSA,large-kernel conv)就会有更少的通道。FLOPs 降低到了 4.1 G,准确率降低到了 79.9%

2、增大卷积核

作者使用了多种不同大小的卷积核,包括 3, 5, 7, 9, 11。效果从 79.9% (3x3)提升到了 80.6%(7x7),并且效果在 7x7 的时候已经达到饱和了。所以作者都是使用了 7x7 的 depth-wise 卷积。

2.6 微观设计

1、使用 GELU 替换 ReLU

虽然没有带来效果的提升,仍然是 80.6%,但作者仍然认为 GELU 效果更好一些

2、使用更少的激活函数:80.6%→81.4%

参考 Transformer,作者移除了两个 BN 层,只在 1x1 卷积前面保留了一个 BN 层,将效果提升到了 81.4%,超越了 Swin-T 的效果。同时,作者发现在每个 block 之前都使用 BN 不会提高效果。

3、使用 LN 代替 BN:81.4%→81.5%

直接在原始 ResNet 中替换 BN 并不会带来提升,反而会带来效果下降,但在整体做了修改之后替换 BN,就可以得到效果的提升,提升到了 81.5%。

4、分离下采样层:

在 ResNet 中,空间下采样一般都是使用步长为 2 的 3x3 卷积,在 Swin 中,在每两个 stage 中间都会使用分离的下采样层,所以,作者也使用了步长为 2 的 2x2 大小的卷积来实现下采样。且发现在分辨率改变的地方添加 normalization 层会提高训练稳定性。该操作提升效果到了82%,Swin-T 是 81.3%。

三、实验

作者也建立了不同大小的模型, ConvNeXt-T/S/B/L,对标 Swin-T/S/B/L。

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

四、结论

本文提出的纯 CNN 的网络 ConvNeXt,在多种任务上取得了超越 Transformer 的效果,同时能够保留 ConvNet 的简洁高效性质。作者期望本文的结论能够推进对卷积及训练的重新思考。

这篇关于【网络结构设计】8、ConvNeXt | 卷积神经网络还有很大的优化空间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/472811

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

MySQL中慢SQL优化方法的完整指南

《MySQL中慢SQL优化方法的完整指南》当数据库响应时间超过500ms时,系统将面临三大灾难链式反应,所以本文将为大家介绍一下MySQL中慢SQL优化的常用方法,有需要的小伙伴可以了解下... 目录一、慢SQL的致命影响二、精准定位问题SQL1. 启用慢查询日志2. 诊断黄金三件套三、六大核心优化方案方案

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

使用国内镜像源优化pip install下载的方法步骤

《使用国内镜像源优化pipinstall下载的方法步骤》在Python开发中,pip是一个不可或缺的工具,用于安装和管理Python包,然而,由于默认的PyPI服务器位于国外,国内用户在安装依赖时可... 目录引言1. 为什么需要国内镜像源?2. 常用的国内镜像源3. 临时使用国内镜像源4. 永久配置国内镜