4.18.2 EfficientViT:具有级联组注意力的内存高效Vision Transformer

现有Transformer模型的速度通常受到内存低效操作的限制,尤其是MHSA(多头自注意力)中的张量整形和逐元素函数。

设计了一种具有三明治布局的新构建块,即在高效FFN(前馈)层之间使用单个内存绑定的MHSA,从而提高内存效率,同时增强通道通信。

注意力图在头部之间具有高度相似性,导致计算冗余。

为了解决这个问题,提出了一个级联的组注意力模块,为注意力头提供完整特征的不同分割。


Transformer模型的速度通常受内存限制。内存访问延迟阻碍了GPU/CPU中计算能力的充分利用,从而对Transformer的运行速度产生严重的负面影响。

内存效率最低的操作是多头自注意力(MHSA)中频繁的张量整形和逐元素函数。通过适当调整MHSA和FFN(前馈网络)层之间的比例,可以在不影响性能的情况下显著减少内存访问时间。

通过向每个头提供不同的特征来显式分解每个头的计算来缓解冗余问题。 

为了提高参数效率,我们使用结构化剪枝来识别最重要的网络组件,并总结模型加速参数重新分配的经验指导。

结构化剪枝是在神经网络已经训练好的情况下,按照一定的剪枝策略来修剪掉一部分神经元或连接,从而减少模型的大小,保持模型的精度,形成一个新的更加简单的模型。

结构化剪枝能够直接减少卷积核的参数量和运算量,减少网络运行时的内存占用,不需要特征运算库即可实现运算加速。

 EfficientViT

  1. MBConv模块使用深度可分离卷积,即每个输入通道只与一个卷积核进行卷积,然后再将结果相加,从而减少了参数数量。
  2. Lighted Multi-scale Self-attention (轻量级多尺度自注意力)

DWConv指的是深度卷积,GConv指的是组卷积。

深度卷积是组卷积的极端情况,即分组数g等于输入通道数cin,也等于输出通道数cout

组卷积常用在轻量型高效网络中,因为它用少量的参数量和运算量就能生成大量的feature
map,而大量的feature map意味着能够编码更多的信息。

组卷积指的是什么:

组卷积是将输入特征图分成多个组,然后在每个组内进行卷积操作,最后将每个组的输出特征图拼接起来作为最终的输出特征图
假设输入特征图的通道数为C,组数为G,每组的通道数为C/G,那么组卷积的操作可以表示为

  1. 将输入特征图分成G组,每组包含C/G个通道。
  2. 对每个组进行卷积操作,得到每组的输出特征图。
  3. 将G个组的输出特征图拼接起来,得到最终的输出特征图。

设计一个具有三明治布局的新块来构建模型:

三明治布局块在FFN层之间应用单个内存绑定的MHSA层;

并应用更多的FFN层来允许不同通道之间的通信,从而提高内存效率

内存绑定的MHSA(多头自注意力)层通过优化数据结构和计算流程,减少了内存使用,提高了计算效率。这种优化可能包括更有效的张量整形操作、减少不必要的数据复制、以及使用更紧凑的数据表示等

级联群体注意力(CGA)

与先前对所有头使用相同特征的自注意力相比,CGA为每个头提供不同的输入分割,并将输出特征级联到各个头。

该模块不仅减少了多头注意力中的计算冗余,而且还通过增加网络深度来提高模型容量。我们通过扩大关键网络组件(例如值投影)的通道宽度来重新分配参数,同时缩小重要性较低的组件(例如FFN中的隐藏维度)

使用Vision Transformers加快速度

内存效率

内存访问开销是影响模型速度的关键因素。Transformer中的许多运算符,例如频繁的整形、逐元素加法和归一化,都是内存效率低下的,需要跨不同内存单元进行耗时的访问。

我们通过减少内存效率低下的层来节省内存访问成本。内存效率低下的操作主要位于MHSA(多头注意力)而不是FFN层。然而,大多数现有的ViT使用相同数量的两层,无法达到最佳效率。

事实证明,适当降低MHSA层利用率可以在提高模型性能的同时提高内存效率。

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

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

相关文章

【STM32HAL库】外部中断

目录 一、中断简介 二、NVIC 1.寄存器 2.工作原理 3.优先级 4.使用NVIC 三、EXTI 1.简介 2.AFIO:复用功能IO,主要用于重映射和外部中断映射配置​编辑 3. 中断使用 4.HAL库配置使用 一、中断简介 中断的意义:高效处理紧急程序,不会…

SPRD Android 14 通过属性控制系统设置显示双栏或者单栏

SPRD Android 14 通过属性控制系统设置显示双栏或者单栏 第一步 确认有添加静态库第二步 验证第三步 修改源码在合适的地方配置 ro.product.is_support_SettingsSplitEnabled 即可。第一步 确认有添加静态库 --- a/packages/apps/Settings/Android.bp +++ b/packages/apps/Set…

php反序列化逃逸

php反序列化逃逸 逃逸是php中反序列化时的恶意利用,以ctf为例演示 第一段演示 逃逸为ctf反序列化的内容,主要是对序列化对象进行过滤,其中替换串长度不一致,造成字符逃逸。攻击者可以构造恶意的payload,改变对象中的…

MATLAB循环语句

MATLAB 循环语句 在某些情况下,您需要多次执行一个代码块。通常,语句是按顺序执行的。首先执行函数中的第一条语句,然后执行第二条,依此类推。 编程语言提供了各种控制结构,允许更复杂的执行路径。 循环语句允许我们…

猫头虎分享已解决Bug || **Error: ‘Promise‘ is undefined**

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

3.8设计模式——State 状态模式(行为型)

意图 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 结构 Context(上下文)定义客户感兴趣的接口;维护一个ConcreteState子类的实例,这个实例定义当前状态。State(状态)定义…

4 -25

1 100个英语单词两篇六级阅读 2 cf补题; 3 仿b站项目看源码 debug分析业务。 上了一天课,晚上去健身。 物理备课,周六去上课腻。 五一回来毛泽东思想期末考试,概率论期中考试。

冯诺依曼体系结构再谈操作系统

前言 前面对基本的指令、权限以及环境开发的基本工具进行了介绍,本期开始我们将进入系统的的学习,例如我们常听的进程等,在进入进程的学习前我们先要铺垫一下,所以本期我们先来介绍一下冯诺依曼体系结构和再谈操作系统&#xff0…

30 番外5 AHK语法应用实战

番外5 AHK语法应用实战 ahk是一种极其轻量,极其易上手,极其方便好用的脚本语言,对于没有编程基础的人来说,可以轻松掌握. 作为一个强大轻量的工具,ahk主要提供了热键宏操作. 什么是热键宏?简单的理解,就是自定义快捷键. AHK使用场景举例 ahk到底有什么用处呢? 1.把一个按键映…

做亚马逊店铺怎么解决网络问题?

在全球电商市场迅速崛起的背景下,亚马逊已成为众多商家拓展海外市场的首选平台。然而,网络问题始终困扰着亚马逊商家,若不能有效解决,不仅影响工作效率,更可能面临店铺被封禁的风险。本文将详细介绍亚马逊店铺运营遇到…

xgp加速器免费 微软商店xgp用什么加速器

2001年11月14日深夜,比尔盖茨亲自来到时代广场,在午夜时分将第一台Xbox交给了来自新泽西的20岁年轻人爱德华格拉克曼,后者在回忆中说:“比尔盖茨就是上帝。”性能超越顶级PC的Xbox让他们趋之若鹜。2000年3月10日,微软宣…

Vision Pro“裸眼上车”,商汤绝影全新舱内3D交互亮相

2023年,Apple Vision Pro的横空出世让人们领略到了3D交互的魅力,商汤绝影通过深厚的技术研发实力和高效的创新迭代效率,带来两大全新座舱3D交互:3D Gaze高精视线交互和3D动态手势交互。 作为全球首创的能够通过视线定位与屏幕图标…

C语言中整型与浮点型在内存中的存储

今天让我们来看看整型的数据和浮点型的数据在内存中是怎么存储的呢 整型数据在内存中的存储 整型数据在内存中存储的是二进制的补码 正数的话也没什么可说的,原码反码补码都相同 我们来看看负数: 以-5为例 原码:10000000 00000000 00000000 0…

传染病模型SIR及其变体(python版本)

文章目录 传染病模型及其变体1. SI模型1.1代码2. SIS模型2.1 代码3. 基本再生数 basic reproductive number4. SIR模型4.1 代码5. SEIR模型5.1 代码6. SEIJR模型6.1 代码7. SEIJRD模型7.1 代码传染病模型及其变体 1. SI模型 在该模型里面,群体中只有两种人:易感者和感染者。…

Postman之页面简介 V9.31.0

Postman之页面简介 V9.31.0 一、顶部栏二、左部栏三、中部栏四、下部栏 一、顶部栏 (1)new选项框,生成新建请求、集合、环境等 (2)import选项框,可以导入文件、文件夹、链接、文本信息等 (3&…

ros2_control【B站WMGIII教学学习记录】1

资源 https://www.bilibili.com/video/BV1ku411G7UR? 学习过程中存在bug,记录一下 1 Q:"package ‘joint_state_publisher_gui’ not found, searching: [/home A: sudo apt install ros-humble-joint-state-publisher2 https://fishros.org.cn/forum/to…

go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控

有关包的安装 我们要实现go语言对第三方包的操作需要我们下载第三方包go.etcd.io,下载命令: go get go.etcd.io/etcd/client/v3 ectd的put与get操作 相关函数说明与示例 我们想实现对etcd进行简单的操作的步骤还是比较简单的,在我上一篇文…

爬虫抓取网站数据

Fiddler 配置fiddler工具结合浏览器插件 配置fiddler Tools--Options 抓包技巧 谷歌浏览器开启无痕浏览,使用SwitchyOmega配置好代理端口 Ctrl x 清理所有请求记录,可以删除指定不需要日志方便观察 设置按请求顺序 观察cookie,观察请求hesder cookie和row返回结果 Swit…

【C语言】深入理解KMP算法及C语言实现

一、KMP算法简介 KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、James H. Morris和 Vaughan Pratt共同发明。KMP算法的核心思想是当一次字符比较失败时,利用已经得到的部分匹配信息,将模…

vue-project-tree vue3 树形结构展示组件

GitHub:vue-project-tree by one-ccs Gitee:vue-project-tree by one-ccs 遵循 MIT 开源协议 文章目录 vue-project-tree一、使用二、API1、属性2、事件3、方法4、插槽 vue-project-tree 使用 Vue3 TS 实现的树形结构展示组件,有拖拽、排序…