ConvMixer 论文与代码解析

paper:Patches Are All You Need?

official implementation:https://github.com/locuslab/convmixer

精度上去了,推理速度只有卷积和ViTs的四分之一!

出发点

文章讨论了卷积神经网络(CNN)在视觉任务中的主导地位,以及近期基于Transformer模型的架构(特别是Vision Transformer,ViT)在某些情况下可能超越了CNN的性能。ViT由于自注意力层的二次运行时间复杂度,需要使用patch embeddings来处理更大的图像尺寸。

作者探讨了ViT的高性能是否源于Transformer架构本身的强大能力,还是部分归因于使用patches作为输入表示。

创新点

文章提出了一个新的模型——ConvMixer,这是一个非常简单的模型,它直接在patches上操作输入,分离空间和通道维度的混合,并在整个网络中保持相同的尺寸和分辨率。ConvMixer使用标准的卷积来实现混合步骤,而不是Transformer架构。

  • 模型设计:ConvMixer的设计灵感来自于ViT和MLP-Mixer,但它只使用标准的卷积操作来处理输入patches。
  • 简化架构:与ViT和MLP-Mixer相比,ConvMixer通过简化架构,减少了模型的复杂性。
  • 性能与效率:尽管ConvMixer的实现非常简单,但作者展示了它在相似参数计数和数据集大小下,性能超过了ViT、MLP-Mixer以及传统的视觉模型如ResNet。

通过ConvMixer的性能表现,作者认为patch embeddings(图像分块嵌入)可能是导致新型架构(如Vision Transformers)性能提升的一个关键因素。通过在网络的初始阶段一次性完成所有的下采样,即减小内部分辨率并增加有效感受野大小,有助于混合远距离的空间信息。

此外,ConvMixer提供了一个强大的“等距”(isotropic)架构模板,该架构通过简单的patch embeddings stem实现,这为深度学习提供了一个有效的框架

方法介绍

如图2所示,ConvMixer的结构非常简单,包括一个patch embedding层,然后重复堆叠一个简单的全卷积block。在patch embedding后保持空间分辨率一直到网络结束,对于patch size为 \(p\) embdding维度为 \(h\) 的patch embedding层可以通过一个输入通道数为 \(c_{in}\),输出通道数为 \(h\),kernel size为 \(p\),stride为 \(p\) 的卷积实现

ConvMixer block由一个depthwise convolution和一个pointwise convolution组成。MLP和self-attention可以mix distance spatial locations,即具有很大或者全局的感受野从而可以捕获长距离依赖关系,受此启发,ConvMixer中的深度卷积采用了非常大的卷积核,比如7或 9。在每个卷积后都有一个激活函数和一个post-activation BatchNorm

最后通过一个global average pooling和一个softmax classifier得到最终的分类预测结果。

实验结果

ConvMixer不同大小的模型通过ConvMixer-h/d来命名,其中h表示hidden dimension即patch embedding的维度,d表示网络深度即图2中ConvMixer Layer的数量。和三种不同架构的代表性网络在ImageNet上的性能对比如表1所示,注意这里ConvMixer没有经过专门的调参,训练配置都是直接采用ResNet和DeiT中的一些常规设置,并且训练Epoch也更短。可以看到ConvMixer取得了几句竞争力的结果,同时参数量也很少,但存在一个非常大的缺点,吞吐很小或者说推理速度很慢。

但这里有一个问题就是ConvMixer的patch size非常小只有DeiT的一半,比ResMLP-B24/8还小1,这种情况下比较是不公平的。如果增大patch size,就达不到卷积网络或ViTs的精度,减小的patch size精度上去了延迟只有卷积和ViTs的四分之一,表明ConvMixer和MLP类的网络还存在局限。

代码解析

这里以timm中的实现为例,输入大小为(1, 3, 224, 224),模型选择"convmixer_768_32",具体配置如下

model_args = dict(dim=768, depth=32, kernel_size=7, patch_size=7, act_layer=nn.ReLU, **kwargs)

其中核心部分block的实现非常简单,如下,每层就是7x7 depthwise conv + ReLU + BN + 1x1 conv + ReLU + BN,此外还是用了residual connection。

class Residual(nn.Module):def __init__(self, fn):super().__init__()self.fn = fndef forward(self, x):return self.fn(x) + xself.blocks = nn.Sequential(*[nn.Sequential(Residual(nn.Sequential(nn.Conv2d(dim, dim, kernel_size, groups=dim, padding="same"),act_layer(),nn.BatchNorm2d(dim))),nn.Conv2d(dim, dim, kernel_size=1),act_layer(),nn.BatchNorm2d(dim)) for i in range(depth)])

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

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

相关文章

Pinia的基本用法

Pinia的安装和引入 1.安装Pinia npm install pinia2. 在vue项目的main.js文件中引入pinia import { createApp } from vue import { createPinia } from pinia import App from ./App.vueconst pinia createPinia() const app createApp(App)app.use(pinia) app.mount(#ap…

2024广东省职业技能大赛云计算赛项实战——Ansible部署Zabbix

Ansible部署Zabbix 前言 今年的比赛考了一道Ansible部署Zabbix的题目,要求就是用两台centos7.5的云主机,一台叫ansible,一台叫node,使用对应的软件包,通过ansible节点控制node节点安装zabbix服务。这道题还是算比较简…

OAuth 2.0资源授权机制与安全风险分析

文章目录 前言OAuth2.01.1 OAuth应用1.2 OAuth基础1.3 授权码模式1.4 其它类模式1.5 openid连接 安全风险2.1 隐式授权劫持2.2 CSRF攻击风险2.3 Url重定向漏洞2.4 scope校验缺陷 总结 前言 OAuth 全称为Open Authorization(开放授权),OAuth …

内网穿透与异地组网强强联合,这款工具屌爆了!!!

在数字化飞速发展的今天,远程访问的需求日益增长,网络已成为我们生活和工作中不可或缺的一部分。然而,远程网络连接的稳定性和安全性往往是我们关注的焦点。节点小宝作为一款创新型的远程管理工具,凭借其使用简单,高速…

【计算机网络篇】数据链路层(13)共享式以太网与交换式以太网的对比

文章目录 🍔共享式以太网与交换式以太网的对比🔎主机发送单播帧的情况🔎主机发送广播帧的情况🔎多对主机同时通信 🛸使用集线器和交换机扩展共享式以太网的区别 🍔共享式以太网与交换式以太网的对比 下图是…

【数据分享】《中国保险年鉴》1981-2022

而今天要免费分享的数据就是1981-2022 年间出版的《中国保险年鉴》并以多格式提供免费下载。(无需分享朋友圈即可获取) 数据介绍 《中国保险年鉴》自1981年首版发行以来,已连续出版了四十余年,见证了中国保险业从萌芽到繁荣的全…

怎么隐藏宝塔面板左上角绑定的手机号码?

宝塔面板后台的左上角会显示我们绑定的宝塔账号(手机号码),每次截图的时候都要去抹掉这个号码,那么能不能直接将这个手机号码隐藏掉呢? 如上图红色箭头所示的手机号码,其实就是我们绑定的宝塔账号&#xff…

NavicatforMySQL11.0软件下载-NavicatMySQL11最新版下载附件详细安装步骤

我们必须承认Navicat for MySQL 支援 Unicode,以及本地或远程 MySQL 服务器多连线,使用者可浏览数据库、建立和删除数据库、编辑数据、建立或执行 SQL queries、管理使用者权限(安全设定)、将数据库备份/复原、汇入/汇出数据&…

API-其他事件

学习目标: 掌握其他事件 学习内容: 页面加载事件元素滚动事件页面尺寸事件 页面加载事件: 加载外部资源(如图片、外联CSS和JavaScript等)加载完毕时触发的事件。 为什么要学?? 有些时候需要等…

NodeJs 使用中间件实现日志生成功能

写在前面 今天我们实现一个记录 nodejs 服务请求日志的功能,大概的功能包括请求拦截,将请求的信息作为日志文件的内容写入到 txt 文件中,然后输出到指定的日志到当天日期目录中,从而实现后续查找用户请求信息的功能,下…

10分钟微调专属于自己的大模型_10分钟微调大模型

1.环境安装 # 设置pip全局镜像 (加速下载) pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ # 安装ms-swift pip install ms-swift[llm] -U# 环境对齐 (通常不需要运行. 如果你运行错误, 可以跑下面的代码, 仓库使用最新环境测试) pip install -r r…

《web应用技术》第十二次课后作业

1.servlet基础知识 1.定义 Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。 2.生命周期 init 方法被设计成只调用一次。它在第一次创建 Servlet 时被…

如何高效使用 .http 文件记录和测试API接口

1. 前言 在现代软件开发中,API(应用程序接口)成为了系统间通信的重要桥梁。.http 文件作为一种轻量级的API请求描述方式,不仅便于开发者记录和分享API接口信息,还能够帮助自动化测试流程。本文将深入介绍如何有效地使…

暑假追高必备:ChildLife全新钙镁锌小绿钙

2024年暑假将至,家长们对于孩子的健康关注再次提升,其中补钙成为许多家长关注的重点。暑假期间,孩子有更多时间进行户外活动,加上高温流汗多,身体的钙更容易流失,因此需要额外地补充。为此,美国…

数据恢复篇:如何恢复丢失的Android短信?

许多用户发现自己处于重要短信意外从Android手机中删除的情况。幸运的是,有一些行之有效的方法可以在没有root的情况下恢复已删除的短信Android,这可以成为救命稻草。这些技术不需要深厚的技术知识,也不需要损害设备的安全性。为了帮助您摆脱…

iOS项目开发遇到问题杂项坑点记录

ios17 弹窗UIAlertController展示逻辑变化,单个词一行展示不下不换行(这前版本会换行),直接截断超出部分。 UINavigationController push立刻pop会异常,使用用setViewCollerllers可以避免这个问题 键盘切换后立刻切页…

通过搭建 24 点小游戏应用实战,带你了解 AppBuilder 的技术原理

本文将通过一个 24 点小游戏的案例,详细介绍百度智能云千帆 AppBuilder 的基本技术原理和使用方法,帮助读者快速掌握 AI 原生应用的开发流程。 1 三步构建 AI 原生应用方法论 AI 原生应用与传统应用的最大区别是交互形态彻底的拟人化,通过文…

Java日志 - JUL

一、JUL学习总结 (1)总结 JDK自带的日志系统中已经为我们创建了一个顶层的RootLogger,可以针对这个顶层的RootLogger设置多个Handler(如ConsoleHandler, FileHandler等),如果想在控制台输出debug级别以上的…

还不到6个月,GPTs黄了

相比起来,人们还不如使用一个足够强大、灵活且通用的AI助手来满足各类复杂需求。更严重的是一些独立GPTs显露出的安全隐患。除此之外,最大的问题在于OpenAI模糊不清的货币化政策。 文章正文 上周,不少人发现微软官网忽然更新了一条“GPT Bu…

AI论文降重:一键操作,让你的论文查重率瞬间下降

高查重率是许多毕业生的困扰。通常,高查重率源于过度引用未经修改的参考资料和格式错误。传统的降重方法,如修改文本和增添原创内容,虽必要但耗时且成效不一。 鉴于此,应用AI工具进行AIGC降重成为了一个高效的解决方案。这些工具…