论文阅读——EfficientViT(cvpr2023)

EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention

1、

从三个角度探讨如何提高vision transformers的效率:内存访问、计算冗余和参数使用。

2.1. Memory Efficiency

红色字体表示操作所花费的时间主要由内存访问决定,而用于计算的时间要小得多。

vision transformers中内存不高效的操作:reshaping, element-wise addition, and normalization

本文通过通过减少内存低效层来节省内存访问成本。

存储低效的层MHSA 层比FFN层多。大多数模型使用相同数量的这两层,无法实现最佳效率。于是作者探索了不同比例MHSA 层比FFN层设置。20%-40% MHSA 层效果比较好。

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

2.2. Computation Efficiency

注意力计算非常耗费资源,并且有一些其实不重要。于是,作者探索了如何减少冗余注意力计算。测量每个头部和每个块内的剩余头部的最大余弦相似性。结果如下:

在注意力头之间存在较高相似性,尤其最后几个block。这一现象表明,许多头部学习相同完整特征的相似投影,并产生计算冗余。为了明确地鼓励头部学习不同的模式,我们应用了一种直观的解决方案,只给每个头部提供完整特征的一部分。我们用改进的MHSA训练缩减模型的变体,并计算相似性,如图4所示。这表明在不同的头部中使用不同的通道分割特征,而不是像MHSA那样对所有头部使用相同的完整特征,可以有效地减少注意力计算冗余。

2.3. Parameter Efficiency

典型的ViT主要继承了NLP变换器的设计策略,例如,使用Q、K、V投影的等效宽度,逐级增加头,并将FFN中的膨胀比设置为4。在轻量级模型中这些组成部件应该被重新精细设计。作者采用Taylor structured pruning -Taylor结构修剪来自动找到Swin-T和DeiT-T中的重要成分,并探索参数分配的基本原理。修剪方法在一定的资源约束下去除不重要的通道,并保留最关键的通道以最好地保持准确性。它使用梯度和权重的乘积作为信道重要性,这近似于去除信道时的损耗波动。

图5 表明:1) 前两个阶段保留了更多的维度,而最后一个阶段保留的维度要少得多;2) Q、K和FFN的尺寸在很大程度上被修剪,而V的维度几乎被保留下来,并且仅在最后几个块处减小。这些现象表明:1)典型的通道配置,在每个阶段后将通道加倍,或对所有块使用等效通道,可能会在最后几个块中产生大量冗余;2) 当它们具有相同的维度时,Q、K中的冗余度远大于V。V更喜欢相对较大的通道,接近输入嵌入维度。

3. Efficient Vision Transformer

3.1. EfficientViT Building Blocks

Sandwich Layout:

self-attention layers减少,FFN layers增加。额外每个FFN之前使用深度卷积(DWConv)增加token interaction。引入局部结构信息的归纳偏差,提高模型的性能。

Cascaded Group Attention:

提出级联组注意力(CGA),它向每个头部提供完整特征的不同分割,从而明确地分解头部之间的注意力计算。

把heads分开分别计算注意力,再合起来,具体看图6.c

将每个头部的输出添加到后续头部,以逐步细化特征表示:

Parameter Reallocation:

Q和K投影设置了小通道尺寸。对于V投影,允许它具有与输入嵌入相同的维度。由于其参数冗余,FFN中的膨胀比也从4降低到2。

3.2. EfficientViT Network Architectures

每个阶段堆叠所提出的Ef ficientViT构建块,并且在每个子采样层,令牌的数量减少4倍(分辨率的2倍子采样)。为了实现高效的二次采样,提出了一种高效的ViT二次采样块,它也具有三明治布局,只是自注意层被倒置的残差块取代,以减少二次采样过程中的信息损失。在整个模型中采用BatchNorm(BN)而不是Layer Norm(LN),因为BN可以折叠到前面的卷积或线性层中,这是比LN的运行时优势。我们还使用ReLU[54]作为激活函数,因为常用的GELU或HardSwish要慢得多,而且有时不能很好地得到某些推理部署平台的支持。

4. Experiments

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

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

相关文章

<JavaEE> 协议格式 -- 传输层协议 TCP

目录 一、TCP协议格式长啥样? 二、TCP协议属性解释 1)源端口号/目的端口号 2)序号/确认序号 3)TCP报头长度 4)保留位 5)标志位 6)窗口大小 7)校验和 8)紧急指针…

过年过节通过html+css+js代码实现:超级好看的放烟花效果(含背景音乐)

文章目录: 一:放烟花 1. 运行效果 2.代码 二:新年快乐 1.运行效果 2.代码 一:放烟花 1. 运行效果 效果图◕‿◕✌✌✌ 过年过节通过htmlcssjs实现放烟花效果代码(含背景音乐) 2.代码 修改后缀为".html"的格式…

【UE5蓝图】读取本地json文件修改窗口大小

效果 插件 蓝图 1.判断文件存在 2.1文件不存在,生成文件 {"ResolutionX":540, "ResolutionY":960} 2.2文件存在,直接读取 3.设置窗口大小 遇到的坑 1.分辨率太大,导致效果不理想,建议先往小填写。 2.选对…

Centos 7.9 升级 OpenSSH 到 openssh-9.4p1及openssl-1.1.1k

Centos 7.9 升级 OpenSSH 到 openssh-9.4p1及openssl-1.1.1k 注:ssh升级到openssh-9.4p1需要openssl-1.1.1及以上!!! openssh-9.4p1和openssl-1.1.1下载地址 一、升级openssl 到openssl-1.1.1k 1.基础环境 首先,安…

【ArcGIS微课1000例】0082:地震灾害图件制作之DEM晕渲图(山体阴影效果)

以甘肃积石山县6.2级地震为例,基于震中100km范围内的DEM数据,制作数字高程模型山体阴影晕渲图。 文章目录 一、效果展示二、实验数据三、晕渲图制作一、效果展示 基于数字高程模型制作的山体阴影晕渲图如下所示: 二、实验数据 本试验所需要的数据包括: 1. 震中位置矢量数…

[Angular] 笔记 23:Renderer2 - ElementRef 的生产版本

chatgpt: Renderer2 简介 在 Angular 中,Renderer2 是一个服务,用于处理 DOM 操作的抽象层。它提供了一种安全的方式来操作 DOM,同时与平台无关,有助于维护应用程序的跨浏览器兼容性和安全性。 Renderer2 的作用是在 Angular 组…

Github 2023-12-31 开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-31统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3Swift项目1Java项目1HTML项目1Astro项目1Python项目1C项目1Dart项目1Jupyter Notebook项目1C项…

Vue(二):计算属性与 watch 监听器

03. Vue 指令拓展 3.1 指令修饰符 可以通过 . 来指明一些指令的后缀,不同的后缀中封装了不同的操作,可以帮助我们简化代码,比如之前使用过的监听 enter 键的弹起,我们需要操作事件对象,来检测用户使用了哪个键&#…

08.哲说建造者模式(Builder Pattern)

“The odds that we’re in ‘base reality’ is one in billions.” —— Elon Musk 这段话出自马斯克在2016年的一次演讲,“人类活在真实世界的几率,可能不到十亿分之一”。此言一出,可谓一石激起千层浪。有人嘲讽马斯克是“语不惊人死不休…

《现代操作系统》第十二章习题答案

计算机硬件的改进主要归功于更小的晶体管。一些限制因素包括:(a) 光的波动性可能限制传统光刻技术制造集成电路的能力,(b) 固体中个别原子的迁移性可能导致非常薄的半导体、绝缘体和导体层的性能退化,(c) 背景辐射活性可能破坏分子键或影响非…

【并发设计模式】聊聊等待唤醒机制的规范实现

在多线程编程中,其实就是分工、协作、互斥。在很多场景中,比如A执行的过程中需要同步等待另外一个线程处理的结果,这种方式下,就是一种等待唤醒的机制。本篇我们来讲述等待唤醒机制的三种实现,以及对应的应用场景。 G…

STM32CubeMX教程13 ADC - 单通道转换

目录 1、准备材料 2、实验目标 3、ADC概述 4、实验流程 4.0、前提知识 4.1、CubeMX相关配置 4.1.1、时钟树配置 4.1.2、外设参数配置 4.1.3、外设中断配置 4.2、生成代码 4.2.1、外设初始化调用流程 4.2.2、外设中断调用流程 4.2.3、添加其他必要代码 5、常用函数…