EfficientFormer:高效低延迟的Vision Transformers

我们都知道Transformers相对于CNN的架构效率并不高,这导致在一些边缘设备进行推理时延迟会很高,所以这次介绍的论文EfficientFormer号称在准确率不降低的同时可以达到MobileNet的推理速度。

Transformers能否在获得高性能的同时,跑得和MobileNet一样快?为了回答这个问题,作者首先回顾了基于vit的模型中使用的网络架构和运算,并说明了一些低效的设计。然后引入一个维度一致的纯Transformer(没有MobileNet块)作为设计范例。最后以延迟为目标进行优化设计,获得一系列称为EfficientFormer的最终模型。最后还设计了EfficientFormerV2。

延迟分析

作者在论文中发现:

1、内核大、步幅大的补丁嵌入是移动设备上的速度瓶颈。

2、一致的特征维度对于令牌混合器的选择很重要。MHSA不一定是速度瓶颈。

3、convn - bn比LN (GN)-Linear更有利于延迟,对于延迟的降低,精度的小损失是可以接受的。

4、非线性的延迟取决于硬件和编译器。

EfficientFormer整体架构

该网络由补丁嵌入(PatchEmbed)和元Transformer块堆栈组成,表示为MB:

X0为批大小为B,空间大小为[H, W]的输入图像,Y为期望输出,m为块总数(深度)。MB由未指定的令牌混合器(TokenMixer)组成,后跟一个MLP块:

Xi|i>0是第i MB的中间特征。阶段Stage(或S)被定义为几个MetaBlocks的堆栈。该网络包括4个阶段。在每个阶段中,都有一个嵌入操作来投影嵌入维数和下采样令牌长度,表示为嵌入,如上图所示。

也就是说effentformer是一个完全基于transformer的模型,没有集成MobileNet结构。

Dimension-Consistent设计

网络从四维划分开始,后期进行三维划分。首先,输入图像由stem层进行处理,这是两个3 × 3,步幅为2的卷积作为patch嵌入:

其中Cj是第j级的通道号(宽度)。然后网络从MB4D开始,使用简单的Pool mixer提取低级特征:

式中,ConvB,G表示是否有BN和GeLU跟随卷积。在处理完所有MB4D块后,执行一次重塑以转换特征大小并进入3D分区。MB3D使用传统的ViT:

式中,LinearG表示线性后接GeLU, MHSA为:

其中,Q, K, V分别表示查询,键和值,b是参数化的作为位置编码的注意力偏差。

在定义了总体体系结构之后,下一步作者就开始搜索高效的体系结构。

以延迟为目标架构优化

定义了一个搜索高效模型的超级网络MetaPath (MP),它是一些可能块的集合:

其中I表示单位路径。

在网络的S1和S2中,每个区块可以选择MB4D或I,在S3和S4中,每个区块可以选择MB3D、MB4D或I。

在最后两个阶段只启用MB3D的原因有2个:1、由于MHSA的计算相对于令牌长度呈二次增长,因此在早期阶段将其集成将大大增加计算成本。2、网络的早期阶段捕获低级特征,而后期阶段学习长期依赖关系。

搜索空间包括Cj(每个Stage的宽度),Nj(每个Stage的块数,即深度)和最后N个应用MB3D的块。

搜索算法使用Gumbel Softmax采样对超级网络进行训练,以获得每个MP内块的重要性得分:

其中α评估MP中每个块的重要性,因为它表示选择一个块的概率。ε ~ U(0,1)保证探索。对于S1和S2, n∈{4D, I},对于S3和S4, n∈{4D, 3D, I}。

最后通过收集不同宽度的MB4D和MB3D的设备上延迟(16的倍数),构建一个延迟查找表。

也就是说EfficientFormer的架构不是通过人工设计的,而是通过NAS(Neural Architecture Search)搜索出来的。作者通过查找表计算每个动作产生的延迟,并评估每个动作的准确率下降。根据每延迟精度下降(-%/ms)选择动作。这个过程迭代地执行,直到达到目标延迟。(细节见论文附录)

结果展示

ImageNet上与广泛使用的基于cnn的模型相比,EfficientFormer在准确率和延迟之间实现了更好的权衡。

传统的vit在延迟方面仍然表现不佳。EfficientFormer-L3的top-1准确率比PoolFormer-S36高1%,在Nvidia A100 GPU上快3倍,在iPhone NPU上快2.2倍,在iPhone CPU上快6.8倍。

EfficientFormer-L1的Top1精度比MobileViT-XS高4.4%,并且在不同的硬件和编译器上运行得更快。

MS COCO数据集,EfficientFormers的表现始终优于CNN (ResNet)和Transformer (PoolFormer)。

使用ADE20K,在类似的计算预算下,EfficientFormer始终比基于CNN和transformer的主干性能好得多。

论文地址:

EfficientFormer: Vision Transformers at MobileNet Speed

https://avoid.overfit.cn/post/eb0e56c5753942cf8ee70d78e2cd7db7

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

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

相关文章

Spring MVC 和 Spring Boot 的区别

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

向量数据库库Milvus Cloud2.3 的QA问题

1. Milvus 从 2.2.x 升级至 2.3.x 的最大变化是什么? 如果用一句话来总结,那就是使用的场景更加丰富了。具体可以从两个方面来体现,即部署环境和用户的使用感。 例如,从部署环境来看,Milvus 原来只支持 X86 架构的 CPU,版本升级后,不仅可以支持 GPU,还能够支持 ARM 架构…

十五、异常(2)

本章概要 自定义异常 异常与记录日志 异常声明 自定义异常 不必拘泥于 Java 已有的异常类型。Java异常体系不可能预见你将报告的所有错误,所以你可以创建自己的异常类,来表示你的程序中可能遇到的问题。 要自己定义异常类,必须从已有的异…

HTML详细基础(二)文件路径

目录 一.相对路径 二.绝对路径 三.超链接标签 四.锚点链接 首先,扩展一些HTML执行的原理: htmL(hypertext markup Language) 是一种规范(或者说是一种标准),它通过标记符(tag)来标记要显示…

奇舞周刊第507期:通过 View Transition API 在状态之间添加丰富的过渡动画

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 通过 View Transition API 在状态之间添加丰富的过渡动画 W3C 2023 年度全球技术大会 (TPAC2023) 于今年9月 11 - 15 日召开。W3C CSS 工作组成员 Bramus Van Damme(Google) 为本届…

SpringBoot集成easypoi实现execl导出

<!--easypoi依赖&#xff0c;excel导入导出--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.4.0</version></dependency>通过Exce注解设置标头名字和单…

Linux工具(二)

前言&#xff1a;在Linux工具&#xff08;一&#xff09;中&#xff0c;我们学习了yum软件安装工具和vim文本编辑器工具&#xff0c;那么本次我们就再来介绍两种工具&#xff0c;分别是&#xff0c;编辑器gcc/g、项目自动化构建工具-make/Makefile &#xff0c;接着我们再来写一…

React的高阶函数

1.认识高阶函数 高阶组件 本身不是一个组件&#xff0c;而是一个函数函数的参数是一个组件&#xff0c;返回值也是一个组件 高阶组件的定义 import ThemeContext from "../context/theme_context"function withTheme(OriginComponent) {return (props) > {retur…

python安全工具开发笔记(六)——Python爬虫BeautifulSoup模块的介绍

一、Python爬虫基础知识介绍 1.1 Python相关库 1、requests、re 2、BeautifulSoup 3、hackhttp 1.2 Python BeautifulSoup Python BeautifulSoup模块的使用介绍∶ 1、解析内容 from bs4 import BeautifulSoup soup BeautifulSoup(html_doc) 2、浏览数据 soup.title soup…

vue 实现数字验证码功能

需求&#xff1a;写了一个 手机发送验证码后 输入固定验证码的功能 封装成一个组件,如下: <template><div class"conts"><div class"box"><div class"code_list"><div :class"[ code_item, hideIndex 0 ? co…

mysql超级聚合with rollup

超级聚合&#xff0c;是在group by的基础上&#xff0c;再次进行聚合。 它再次聚合的列&#xff0c;是select中没有用到聚合函数的列。 文章目录 例子1解释例子2表以及数据 例子1 mysql> SELECT year, country, product, SUM(profit) AS profitFROM salesGROUP BY year, c…

Vue+ElementUI实现动态树和表格数据的分页模糊查询

目录 前言 一、动态树的实现 1.数据表 2.编写后端controller层 3.定义前端发送请求路径 4.前端左侧动态树的编写 4.1.发送请求获取数据 4.2.遍历左侧菜单 5.实现左侧菜单点击展示右边内容 5.1.定义组件 5.2.定义组件与路由的对应关系 5.3.渲染组件内容 5.4.通过动态…

PHP8中伪变量“$this->”和操作符“::”的使用-PHP8知识详解

对象不仅可以调用自己的变量和方法&#xff0c;也可以调用类中的变量和方法。PHP8通过伪变量“$this->”和操作符“::”来实现这些功能。 1.伪变量“$this->” 在通过对象名->方法调用对象的方法时&#xff0c;如果不知道对象的名称&#xff0c;而又想调用类中的方法…

zabbix实现钉钉报警

首先钉钉创建一个团队 自定义关键词 查看zabbix-server脚本存放的位置&#xff1a; [rootcontrolnode ~]# grep ^AlertScriptsPath /etc/zabbix/zabbix_server.conf AlertScriptsPath/usr/lib/zabbix/alertscripts zabbix server设置 在配置文件书写脚本目录vim /etc/za…

威胁追踪如何增强您的网络安全态势

网络威胁的复杂性、频率和影响正在加剧。2022 年&#xff0c;勒索软件攻击达到2.361 亿次&#xff0c;其中 39% 的英国企业遭受网络攻击。 这些攻击需要工具和资源来识别和纠正漏洞&#xff0c;以在云环境中维护强大的安全框架&#xff0c;从而降低数据泄露和合规违规的风险。…

ptmalloc源码分析 - realloc()函数的实现(11)

目录 一、步骤1-判断边界情况&#xff0c;realloc也可以执行malloc和free的功能 二、步骤2-原chunk如果MMAP方式分配&#xff0c;申请新内存并拷贝实现 三、步骤3-非MMAP方式分配&#xff0c;则_int_realloc进行合并/裁剪等实现 1. _int_realloc函数&#xff1a;老chunk足够…

系统化思考,从初级到高级书单推荐

用思考工具进行系统思考&#xff0c;解决复杂问题&#xff0c;成为某个领域的高手&#xff0c;下面这几本书就是补充你脑海的系统思考的工具&#xff0c;一定要保存。 《简单的逻辑学》 作者&#xff1a;麦克伦尼 一切的系统源自于逻辑&#xff0c;如果你没有逻辑分析的能力&…

jenkins容器内配置python项目运行环境(Python3.7.3)

目录 1.查看启动的容器2.进入jenkins容器内部3.使用wget&#xff1a;提示没有wget命令4.查看jenkins容器系统版本5.换成国内源&#xff08;阿里&#xff09;5.更新apt-get6.安装wget7.创建python存放目录8.下载python9.解压10.安装依赖11.运行脚本configure12.make编译make ins…

JavaWeb 学习笔记 11:JDBC

JavaWeb 学习笔记 11&#xff1a;JDBC 1.简介 JDBC 是一个 Java 为接入不同类型的数据库定义的一个数据库连接和执行 SQL 的 API。 可以用下图表示&#xff1a; 图中的具体数据库的驱动实际上就是数据库厂商提供的 JDBC 接口的实现类。 2.快速开始 用 Maven 创建一个简单的…

使用 PyTorch 的计算机视觉简介 (5/6)

一、说明 本文主要介绍CNN中在pytorch的实现&#xff0c;其中VGG16网络&#xff0c;数据集来源&#xff0c;以及训练过程&#xff0c;模型生成和存储&#xff0c;模型调入等。 二、预训练模型和迁移学习 训练 CNN 可能需要大量时间&#xff0c;并且该任务需要大量数据。但是&am…