CVPR 2023|EfficientViT:让ViT更高效部署实现实时推理(附源码)

news2024/11/15 11:03:39

点击蓝字 关注我们

关注并星标

从此不迷路

计算机视觉研究院

388c1bc6233cd86ecf6ed9c705a1ea21.gif

4d1398e662bd457dbf86f15c30a4c630.gif

公众号ID计算机视觉研究院

学习群扫码在主页获取加入方式

355098aca145510cf5f63dd9ae34cf25.png

论文地址:https://arxiv.org/pdf/2305.07027.pdf

项目代码:https://github.com/microsoft/Cream/tree/main/EfficientViT

计算机视觉研究院专栏

Column of Computer Vision Institute

Vision transformers由于其高建模能力而取得了巨大成功。然而,它们显著的性能伴随着沉重的计算成本,这使得它们不适合实时应用。

cea8454ce93c960a96e6089b7e169ffc.gif

01

总  述

在今天分享中,研究者提出了一个名为EfficientViT的高速Vision transformers家族。我们发现,现有transformer模型的速度通常受到内存低效操作的限制,特别是MHSA中的张量整形和逐元函数。因此,研究者设计了一种具有三明治布局的新构建块,即在有效的FFN层之间使用单个存储器绑定的MHSA,这在增强信道通信的同时提高了存储器效率。

47da5a387baeafe9d5f0c0460d399a51.png

此外,研究者发现注意力图在头部之间具有高度相似性,导致计算冗余。为了解决这一问题,提出了一种级联的组注意力模块,该模块为具有不同全特征分割的注意力头提供反馈,这不仅节省了计算成本,而且提高了注意力的多样性。

综合实验表明,EfficientViT优于现有的高效模型,在速度和准确性之间取得了良好的平衡。例如,EfficientViT-M5在精度上超过MobileNetV3 Large 1.9%,而在Nvidia V100 GPU和Intel Xeon CPU上的吞吐量分别高出40.4%和45.2%。与最近的高效型号MobileViT XXS相比,EfficientViT-M2实现了1.8%的卓越精度,同时在GPU/CPU上运行速度快5.8倍/3.7倍,转换为ONNX格式时速度快7.4倍。

cb3b26ef9d4cbb5ee3536818564a149e.gif

02

 背景

最近有几项工作设计了轻便高效的Vision transformers模型。不幸的是,这些方法大多旨在减少模型参数或Flops,这是速度的间接指标,不能反映模型的实际推理吞吐量。例如,在Nvidia V100 GPU上,使用700M浮点的MobileViT XS比使用1220M浮点的DeiT-T运行得慢得多。尽管这些方法以较少的Flops或参数获得了良好的性能,但与标准同构或分级transformer(例如DeiT和Swin)相比,它们中的许多方法并没有显示出显著的壁时钟加速,并且没有得到广泛采用。

43d1b1841a52e79395d0c3607ea57dd0.png

为了解决这个问题,研究者探讨了如何更快地使用Vision transformers,试图找到设计高效transformer架构的原则。基于主流的Vision transformers DeiT和Swin,系统地分析了影响模型推理速度的三个主要因素,包括内存访问、计算冗余和参数使用。特别是,发现transformer模型的速度通常是内存限制的。

基于这些分析和发现,研究者提出了一个新的存储器高效transformer模型家族,命名为EfficientViT。具体来说,设计了一个带有三明治布局的新块来构建模型。三明治布局块在FFN层之间应用单个存储器绑定的MHSA层。它减少了MHSA中内存绑定操作造成的时间成本,并应用了更多的FFN层来允许不同信道之间的通信,这更具内存效率。然后,提出了一种新的级联群注意力(CGA)模块来提高计算效率。其核心思想是增强输入注意力头部的特征的多样性。与之前对所有头部使用相同特征的自我注意不同,CGA为每个头部提供不同的输入分割,并将输出特征级联到头部之间。该模块不仅减少了多头关注中的计算冗余,而且通过增加网络深度来提高模型容量。

a897abf87898d518f7593fa35617e770.png

轻量级CNN和ViT模型吞吐量和精度对比的展示

最后但同样重要的是,通过扩大关键网络组件(如价值预测)的通道宽度来重新分配参数,同时缩小重要性较低的组件(如FFN中的隐藏维度)。这种重新分配最终提高了模型参数的效率。

9c9c88d35adb74e9176449d65408e4ea.gif

03

 动机

Vision transformers加速

  • Memory Efficiency

70606593d70a02b8dfefba2bd874cad7.png

内存访问开销是影响模型速度的一个关键因素。Transformer中的许多运算符,如频繁的整形、元素相加和归一化,都是内存效率低下的,需要跨不同内存单元进行耗时的访问,如上图,尽管有一些方法通过简化标准softmax自注意的计算来解决这个问题,例如稀疏注意和低秩近似,但它们往往是以精度下降和加速度有限为代价的。

2b308c379c3bfaf714d828a22d41f8a0.png

在这项工作中,研究者转而通过减少内存低效层来节省内存访问成本。最近的研究表明,内存低效操作主要位于MHSA层,而不是FFN层。然而,大多数现有的ViT使用相等数量的这两层,这可能无法实现最佳效率。因此,研究者探索了在具有快速推理的小模型中MHSA和FFN层的最优分配。具体而言,将Swin-T和DeiT-T缩减为几个推理吞吐量分别高1.25倍和1.5倍的小型子网络,并比较不同MHSA层比例的子网络的性能。

  • Computation Efficiency

MHSA将输入序列嵌入到多个子空间(头)中,并分别计算注意力图,这已被证明在提高性能方面是有效的。然而,注意力图的计算成本很高,研究表明,其中一些并不重要。

为了节省计算成本,探讨如何减少小型ViT模型中的冗余注意力。以1.25×推理加速训练宽度缩小的Swin-T和DeiT-T模型,并测量每个头部和每个块内剩余头部的最大余弦相似性。从下图中,观察到注意力头部之间存在高度相似性,尤其是在最后一个块中。

eece1c4dd259b9d3e685c88bb1130464.png

这一现象表明,许多头部学习相同完整特征的相似投影,并产生计算冗余。为了明确鼓励头部学习不同的模式,应用了一种直观的解决方案,即只向每个头部提供完整特征的一部分,这类似于DeiT-T中的组卷积思想。用改进的MHSA训练缩小模型的变体,并计算图中的保持相似性。研究表明,在不同的头部中使用不同的通道分割特征,而不是像MHSA那样对所有头部使用相同的完整特征,可以有效地减少注意力计算冗余。

  • Parameter Efficiency

典型的ViT主要继承了NLP transformer的设计策略,例如,使用Q、K、V投影的等效宽度,在阶段上增加水头,以及在FFN中将膨胀比设置为4。对于轻型车型,这些部件的配置需要仔细重新设计。受[Rethinking the value of network pruning]的启发,采用Taylor结构修剪来自动查找Swin-T和DeiT-T中的重要成分,并探索参数分配的基本原理。修剪方法在一定的重新源约束下去除不重要的通道,并保留最关键的通道以最好地保持准确性。它使用梯度和权重的乘积作为信道重要性,近似于去除信道时的损耗波动。

192f27475bfe4feabd5f6c50b657f1cd.gif

04

新框架

f7119089cb747a8083d56d35af8dc77b.png

实验可视化

f9e248802c50f759975777c3779438e6.png

bc3a59d701bb5efc51dfd36a52e8b858.png

f029568db4d5ef3f90c53b0879b63d77.gif

© THE END 

转载请联系本公众号获得授权

7378a952a7271f135c81144af3989645.gif

计算机视觉研究院学习群等你加入!

ABOUT

计算机视觉研究院

计算机视觉研究院主要涉及深度学习领域,主要致力于目标检测、目标跟踪、图像分割、OCR、模型量化、模型部署等研究方向。研究院每日分享最新的论文算法新框架,提供论文一键下载,并分享实战项目。研究院主要着重”技术研究“和“实践落地”。研究院会针对不同领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!

441846680198df7b649f16dfbf7aa0a4.png

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

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

相关文章

打通B端企业私域运营体系:海康威视企业公众号矩阵一探究竟

B端企业私域运营体系的打造需要全新的思路和流程重构,要紧紧围绕B端客户的需求和特性来构建矩阵号,而且要时刻意识到与C端私域运营的巨大差异。 B端企业的获客是一个大部分企业都十分关注但难以提升的部分,传统B端企业的营销以百度等在线渠道…

candence:常见表贴焊盘绘制举例

常见表贴焊盘绘制举例 一、先来看看X7R电容的相关信息 以贴装瓷片电容X7R系列为例 1、误差范围: 2、尺寸大小 3、推荐焊盘尺寸 二、绘制 0603 (inch) 电容的焊盘 下面开始绘制焊盘: 1、 双击打开Pad Designer 2、设置单位等。 3、 点击"LAYER&…

GeSciLiVis | 想知道你感兴趣的基因有多少人在研究吗!?用这个包来解决吧!!!~

1写在前面 天气好热啊,我这里还下着大暴雨!~😥 不知道各位小伙伴那里的温度怎么样,端午临近,各位有假期吗!?😘 换组后工作轻松了不少,也有时间做点自己的事情了。&#x…

JDK8-2-流(2.1)- 流操作-distinct

JDK8-2-流&#xff08;2.1&#xff09;- 流操作-distinct 去重操作&#xff0c;如下开头两个菜品一样&#xff0c;对 menu 去重如下&#xff1a; public class DishDistinctTest1 {public static final List<Dish> menu Arrays.asList(new Dish("pork", fal…

如何白嫖一年CSDN会员?618活动!亲测有效!!!

活动详情 CSDN会员免费送一年&#xff0c;仅剩3天&#xff01; 下载权益同样延长一年&#xff01; 一年一次的机会&#xff0c;走过不要错过&#xff01; 博主已经领取到了&#xff01; 会员权益 1、修改专属域名&#xff0c;别人都是https://blog.csdn.net/qq_xxxxxxxx&…

用ipad2022款pro平板和平精英吃鸡120帧是种什么体验

用ipad2022款pro平板和平精英吃鸡120帧是种什么体验&#xff0c;平板玩游戏把把吃鸡的秘密#和平精英 #吃鸡 #我眼中的电子竞技 和平精英 微信游戏 怎么很多小伙伴都准备入手二款的 iPad Pro&#xff0c;绝大多数小伙伴都是冲着这个吃鸡来的&#xff0c;咱们今天就看一下新款平…

AI绘图新玩法「艺术风二维码」保姆级教程分享,注册账号就能玩,一分钟出图,定制自己的二维码!

大家好&#xff0c;我是卷了又没卷&#xff0c;薛定谔的卷的AI算法工程师「陈城南」~ 担任某大厂的算法工程师&#xff0c;带来最新的前沿AI知识和工具&#xff0c;包括AI相关技术、ChatGPT、AI绘图等&#xff0c;欢迎大家交流~。 最近AI绘图界又出了一个现象级的玩法&#xf…

FPGA基础知识-开关级建模

目录 学习目标 学习内容 1.MOS开关 2.CMOS开关 3.双向开关 4.电源和地 5.阻抗开关 6.开关中的延迟说明 学习时间 学习总结 学习目标&#xff1a; 提示&#xff1a;这里可以添加学习目标 1.能够描述基本 MOS开关:nmos.pmos和cmos。 2.理解双向传输开关、电源和地的建…

webpack配置preload和prefetch预加载技术

我们前面已经做了代码分割&#xff0c;同时会使用 import 动态导入语法来进行代码按需加载&#xff08;我们也叫懒加载&#xff0c;比如路由懒加载就是这样实现的&#xff09;。 但是加载速度还不够好&#xff0c;比如&#xff1a;是用户点击按钮时才加载这个资源的&#xff0…

【第二次】21级计科计算机组成原理课外练习

【第二次】21级计科计算机组成原理课外练习 一、单选题二、填空题 一、单选题 2-1 设计算机字长 8位&#xff0c;设x -10, [x]补 为 ( ) A.F0H B.E6H C.FAH D.F6H 2-2 对字长为8位的二进制代码10110110&#xff0c;下列说法错误的是&#xff08;&#xff09;。 A.如果代码为…

主流通信协议详解、二进制协议和文本协议的区别和使用场景

二进制协议和文本协议的特征和使用场景 二进制协议和文本协议具有不同的特征和适用场景&#xff1a; 二进制协议的特征&#xff1a; 数据表示&#xff1a;使用二进制编码来表示数据&#xff0c;以字节为单位进行传输。效率&#xff1a;由于数据以原始二进制形式传输&#xff…

年龄越来越大,技术人究竟该往哪个方向提升?(很多人都有这个困惑)

【1】 有位匿名朋友&#xff0c;在星球中提问&#xff1a; 想咨询一下沟通交流能力应该如何培养。平时遇到问题话到嘴边不会说&#xff0c;或者说出来的和开始想的不一致&#xff0c;请沈总赐教。 分享下自己的实践&#xff1a; 首先&#xff0c;充分准备。 我在和老板&#xf…

Linux ACL访问控制

文章目录 1、场景2、ACL权限设置1) ACL权限管理命令2) 给用户和用户组添加ACL权限3) 最大有效权限mask4) 默认ACL权限和递归ACL权限5) 删除ACL权限 1、场景 在普通权限中&#xff0c;用户对文件只有三种身份&#xff0c;就是属主、属组和其他人&#xff1b;每种用户身份拥有读…

实验篇(7.2) 14. 站对站安全隧道 - 多条隧道冗余(FortiGate-IPsec) ❀ 远程访问

【简介】IPsec VPN虽然价廉物美&#xff0c;但是由运营商原因&#xff0c;偶尔出现不稳定情况&#xff0c;例如访问慢甚至断开等&#xff0c;好在现在大多数企业都有二条甚至更多条宽带&#xff0c;我们可以创建多条IPsec VPN&#xff0c;来保证不间断访问。 实验要求与环境 Ol…

线性搜索算法-数据结构和算法教程

线性搜索被定义为一种顺序搜索算法&#xff0c;它从一端开始&#xff0c;遍历列表的每个元素&#xff0c;直到找到所需的元素&#xff0c;否则搜索继续到数据集的末尾。 线性搜索算法是如何工作的&#xff1f; 在线性搜索算法中&#xff0c; 每个元素都被认为是键的潜在匹配…

回归预测 | MATLAB实现基于QPSO-LSTM、PSO-LSTM、LSTM多输入单输出回归预测

回归预测 | MATLAB实现基于QPSO-LSTM、PSO-LSTM、LSTM多输入单输出回归预测 目录 回归预测 | MATLAB实现基于QPSO-LSTM、PSO-LSTM、LSTM多输入单输出回归预测效果一览基本描述模型描述程序设计参考资料 效果一览 基本描述 1.Matlab实现QPSO-LSTM、PSO-LSTM和LSTM神经网络时间序…

事件循环(字数不足凑字)

浏览器的进程模型 何为进程&#xff1f; 程序运行需要有它自己专属的内存空间&#xff0c;可以把这块内存空间简单的理解为进程。 每个应用至少有一个进程&#xff0c;进程之间相互独立&#xff0c;即使要通信&#xff0c;也需要双方同意。 即使崩溃也互不影响。 何为线程&…

12. python从入门到精通——文件及目录操作

目录 基本文件操作 创建和打开文件&#xff1a;open()函数 关闭文件:可以不关闭文件因为有垃圾回收功能 打开文件时使用with语句:不需要自己关闭文件&#xff0c;可以自己关闭 写入文件内容 file.write方法 file.writelines方法:可以向文件中写入字符串列表&#xff0c;…

MyBatis插件开发——解析和记录输出完整的SQL语句

实现功能 自定义MyBatis插件&#xff0c;该插件实现当MyBatis执行SQL发生异常时输出错误原因&#xff0c;SQL参数以及完整的SQL语句。在日常的开发中我们可以通过mybatis配置设置是否输出SQL&#xff0c;但是对于正常运行的SQL全部输出出来日志量过大&#xff0c;所以这里实现…

使用VScode + clangd 阅读 c/c++ 源码环境搭建

使用Vscode clangd 阅读c/c源码 一、需求 在嵌入式软件开发的工作中&#xff0c;我们常常需要分析C/C代码&#xff0c;比如linux kernel 的代码&#xff0c;而公司的代码一般都会存放在服务器中&#xff0c;服务器一般是linux&#xff0c;且无法联网&#xff0c;我们只能通过…