32_ConvNeXt网络详解

news2024/11/13 10:41:15

1.1 简介

ConvNeXt是一种计算机视觉模型,由Meta AI(前Facebook AI)的研究人员在2022年提出,它旨在探索卷积神经网络(CNN)在图像识别任务上的潜力,尤其是在与当时流行的Vision Transformer(ViT)模型相比较时。ConvNeXt设计的核心目标是结合Transformer模型中的设计理念,如大 kernel size、层归一化位置、 MLP结构等,来升级传统的卷积神经网络架构,从而在不牺牲效率的情况下,达到或超越基于Transformer的模型的性能。

关键特性与设计原则

  1. 大核卷积(Large Kernel Convolution): ConvNeXt 引入了大核卷积层,类似于Transformer中的多头自注意力机制,能够捕捉更广泛的上下文信息。这有助于提高模型对图像中长距离依赖关系的理解能力。

  2. 层归一化(Layer Normalization): 与传统CNN中常用的批量归一化不同,ConvNeXt在每个卷积块之后使用层归一化,这与Transformer模型中的做法一致,有助于稳定训练过程并加速收敛。

  3. MLP结构(Modified MLP Block): ConvNeXt采用了类似于ViT中的MLP(多层感知机)结构,即两层全连接层,中间夹带一个GELU激活函数,但将这种结构融入到卷积网络中,代替了传统的卷积-归一化-激活函数的组合,增强模型的表达能力。

  4. 深分层结构(Deep Hierarchical Structure): 类似于ResNet等经典网络,ConvNeXt采用深度分层的设计,通过逐步下采样和增加特征维度来构建多尺度特征表示。这样的设计有助于模型学习从低级到高级的视觉特征。

  5. 简洁性与可扩展性: ConvNeXt保持了架构的简洁性,易于理解和实现,同时提供了多种规模的变体(例如tiny, small, base, large),以适应不同资源限制下的应用场景。

性能表现

在多个标准基准测试上,包括ImageNet分类、COCO目标检测和ADE20K语义分割等,ConvNeXt展示出了与最先进的Transformer模型相当甚至更好的性能,同时保持了训练和推理的高效性。它的成功证明了经过精心设计的卷积网络依然具有强大的竞争力,并且在某些场景下可能比Transformer更为优越,尤其是在计算资源有限的环境下。

应用领域

由于其出色的性能和效率,ConvNeXt已被广泛应用于图像分类、物体检测、语义分割以及其他计算机视觉任务中,成为研究者和工程师的一个重要工具箱成员,尤其是在追求高精度和实时处理的应用场景下。

总之,ConvNeXt是对传统卷积神经网络的一次现代化升级,它融合了Transformer的优秀设计思想,展现了卷积网络在现代深度学习时代的新活力。

1.2 模型结构

ConvNeXt-T模型结构图:

Layer Scale指的就是一个特征图的缩放。

1.3 网络的设计与实验

这个网络模型的结构很精简,而且结构上看上去也“没什么亮点”,那么它为什么能取得比较优异的性能呢?

作者认为,随着信息技术和时代的发展,各种新的架构和优化策略促使了transformer拥有了更好的效果,那么如果我们使用相同的策略去训练CNN,是否也能达到更好的效果呢?作者进行了一些列的实验。

Macro design

在这一部分又分成两个小部分,分别是stage ratio和patchify stem。

stage ratio:在Resnet50当中,stage间的堆叠比例大致是1:1:2:1,而在swin transformer中它对应四个stage重复block的比例大概是1:1:3:1。所以作者就将resnet50的stage的堆叠比例也改为了1:1:3:1。修改之后,作者发现准确率由78.8上升为79.4,GFLOPS上升。

patchify stem:stem指的是最初的下采样模块,比如说resnet50中的stem就是由conv1中的7x7卷积和下面的那个3x3最大池化下采样组成的。在swin transformer中,是采用4x4,步距为4的卷积得到的。所以作者就将resnet50的stem也替换成了 swin transformer的stem,替换之后,准确率上升0.1个点。GFLOPS下降。

ResNeXt

下图左为resnet的瓶颈结构(像一个沙漏,两头粗中间细)。

下图右为resneXt的结构,采用的是组卷积。

作者将组卷积极端化,直接每个通道安排一个卷积核,进行dw卷积。这么做之后,准确率由79.5降至78.3,GFLOPS大量降低。接下来作者增大了输入特征的维度(channel)使输入通道数和swin transformer保持一致都是96。这么做以后,准确率由78.3提升至80.5。

Inverted Bottleneck

倒残差,两头细中间粗,像一个坚果。

作者比较了一下,然后将resnet中的bottleneck变成了inverted bottleneck。然后准确率上升。

Large kernel size

将DW卷积模块上移,准确率从80.6下降为79.9。作者认为这个DW卷积有点像MSA,而MSA是放在MLP前面的,所以他就将DW放在了1x1前面。

然后调整DW卷积的卷积核尺寸。作者发现当size为7的时候准确率趋于饱和了,再增大就会发现准确率还出现降低的一个情况。而这个7正好和swin transformer窗口的大小是一致的。

Micro designs

对细节进行了一些改动。替换激活函数(准确率为80.6)、更少的激活函数(81.3)、更少的归一化层(81.4)、LN代替BN(81.5)、借鉴patch merging采用单独的下采样层(82.0)

1.4 模型性能

与SWIN  transformer相比,ConvNext效果要更好,且它的推理速度更快。

第四列的指标是指在a100这个GPU上每秒推理图片的数目,convnext-t推理速度相比swin transformer提升了47%

在COCO或者分割数据集上效果也很好。



1.5 模型参数

C代表每一个stage输入特征层的channel。B指每个stage重复block的次数。

附:GELU激活函数

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

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

相关文章

【windows】【系统还原】亦是美kms执行一键关闭defender 之后,windows defender 被卸载了,无论如何都打不开

在那之后,你是否一直无法启动 defender??? 你是否一直担心电脑的安全问题?? 我也尝试了很多方法 无论是 powershell 执行 dism.exe /online /cleanup-image /scanhealth dism.exe /online /cleanup-ima…

【项目】星辰博客介绍

目录 一、项目背景 二、项目功能 1. 登录功能: 2. 列表页面: 3. 详情页面: 4. 写博客: 三、技术实现 四、功能页面展示 1. 用户登录 2. 博客列表页 3. 博客编辑更新页 4.博客发表页 5. 博客详情页 五.系统亮点 1.强…

c# 开发AutoCAD扩展

在C#中开发AutoCAD扩展涉及使用AutoCAD的.NET API, 利用AutoCAD的功能并创建自定义命令、对话框、块、图层和其他图形元素。以下是一些关键步骤和概念,可以帮助你开始使用C#开发AutoCAD扩展: 准备开发环境 安装AutoCAD:确保你有一…

图片转文档,和同行比我的优势在哪?

图片转Word/Excel | 极简AI工具箱,我自己做的这个在线工具。 图片转word,图片转excel这个功能,我认为还是有不小的需求的。百度上搜索,可以看到不少广告。说明有需求才会有这么多公司愿意花钱打广告。 我这里说的不是单纯的文字识…

CPU工作模式- 保护模式

保护模式 概述 随着软件的规模不断增加,需要更高的计算量、更大的内存容量内存一大,首先要解决的问题是寻址问题,因为16位的寄存器最好只能表示 2 16 2^{16} 216个地址,所以CPU的寄存器和运算单元都要扩展成32位虽然扩展CPU内部…

UDP详细总结

UDP协议特点 UDP是无连接的传输层协议; UDP使用尽最大努力交付,不保证可靠交付; UDP是面向报文的,对应用层交下来的报文,不合并,不拆分,保留原报文的边界; UDP没有拥塞控制&#…

ArrayList.subList的踩坑

需求描述&#xff1a;跳过list中的第一个元素&#xff0c;获取list中的其他元素 原始代码如下&#xff1a; List<FddxxEnterpriseVerify> companyList fddxxEnterpriseVerifyMapper.selectList(companyQueryWrapper);log.info("获取多个法大大公司数据量为&#…

【python 已解决】 ‘ValueError: invalid literal for int() with base 10’解决方案深度解析

【python 已解决】 ‘ValueError: invalid literal for int() with base 10’解决方案深度解析 在Python编程中&#xff0c;ValueError: invalid literal for int() with base 10是一个常见的错误&#xff0c;它通常表明在尝试将字符串转换为整数时&#xff0c;字符串中包含了无…

【开发踩坑】生僻字插入MySQL失败

背景 生产环境插入数据报错&#xff1a; java.sql.SQLException: Incorrect string value: \xF0\xAC\xB1\x96 for column answer at row 1设置answer字段值为 “&#x2cc56;”出现错误 生僻字设置出错&#xff1b; 排查 编码 查看库表属性&#xff1a; ENGINE InnoDB A…

【接口自动化_08课_Pytest+Yaml+Allure框架】

上节课一些内容 的补充 1、openxl这个方法&#xff0c;第一个元素是从1开始的&#xff0c;不是从0开始 回写的列在程序里写的是11&#xff0c;是因为是固定值 一、1. Yaml入门及应用 1、什么是yaml YAML&#xff08;/ˈjməl/&#xff0c;尾音类似camel骆驼&#xff09;是一…

springboot+vue+mybatis校园热点新闻系统+PPT+论文+讲解+售后

21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存储达到…

贪心算法(算法篇)

算法之贪心算法 贪心算法 概念&#xff1a; 贪心算法是一种思想&#xff0c;并不是一种算法&#xff0c;贪心算法是分阶段地工作&#xff0c;在每一个阶段&#xff0c;可以认为所作决定是好的&#xff0c;而不考虑将来地后果。算法的每个阶段总是选择当前阶段最优&#xff0…

ChatGPT成功背后的秘密——RLHF,北京大学NLP团队的论文详解来了

1、简介&#xff1a; 人工智能对齐(AIAlignment) 旨在使人工智能系统的行为与人类的意图和价值观相一致。随着人工智能系统的能力日益增强&#xff0c;对齐失败带来的风险也在不断增加。数百位人工智能专家和公众人物已经表达了对人工智能风险的担忧&#xff0c;他们认为“减轻…

【芯片设计- RTL 数字逻辑设计入门 番外篇 12 -- SoC 设计中的 ECO】

请阅读【ARM AMBA AXI 总线 文章专栏导读】 请阅读【芯片设计 RTL 数字逻辑设计扫盲 】 转自&#xff1a;简单了解SoC设计中的ECO — 快乐的芯片工程师 文章目录 ECO 概述Pre-Mask ECO&#xff08;预掩模ECO&#xff09;芯片设计前端与后端的区别 Post-Mask ECO&#xff08;后…

PyTorch Tabular:高效优化结构化数据处理的强大工具

PyTorch Tabular 是一个用于构建和训练深度学习模型以解决各种表格数据问题的库。这个库专为表格数据设计&#xff0c;通过提供灵活的、易于使用的API来简化模型的构建、训练和推理过程。PyTorch Tabular 基于 PyTorch&#xff0c;利用了 PyTorch 的动态计算图和强大的GPU加速能…

10款打工人必备工具网站,提升工作效率

工作效率对于每一位打工人来说都尤为重要&#xff0c;小编就来和大家分享优质的打工人必备工具网站&#xff0c;帮助大家提升工作效率。 1. 办公人导航 办公人导航是一个专门为办公人员设计的实用导航网站&#xff0c;旨在帮助用户高效地找到各种优质的办公资源和工具。该网站…

vscode配置django环境并创建django项目(全图文操作)

文章目录 创建项目工作路径下载python插件&#xff1a;创建虚拟环境1. 命令方式创建2. 图文方式创建 选择虚拟环境在虚拟环境中安装Django创建Django项目 创建项目工作路径 输入 code . 下载python插件&#xff1a; 创建虚拟环境 1. 命令方式创建 切换在工作目录输入命令&…

Linux工具相关介绍

目录 1.linux安装软件 2.Linux软件生态问题 3.linux软件包管理器yum 4.linux里面好玩的小命令 4.1安装源 4.2小火车 4.3人物说话情景 5.vim简单介绍 5.1简单认识 5.2代码编写 5.3命令模式 1.linux安装软件 1.1源代码安装&#xff1a;这个里面可能根据代码bug需要修改…

2024牛客暑期多校训练营1——A,B

题解&#xff1a; 更新&#xff1a; k1的时候要乘n 代码&#xff1a; #include<bits/stdc.h> #define int long long using namespace std; const int N5e35; typedef long long ll; typedef pair<int,int> PII; int T; int n,m,mod; int fac[N][N]; int dp[N][…

字符函数和字符串函数(一)

一、字符分类函数 C语言中有一系列的函数是专门做字符分类的&#xff0c;也就是一个字符是属于什么类型的字符。 这些函数的使用都需要包含一个头文件&#xff1a;ctype.h 这些函数的使用方法非常类似&#xff0c;在这里讲解islower&#xff1a; islower是能够判断参数部分的…