当前位置: 首页 > news >正文

论文解读:On the Integration of Self-Attention and Convolution

自注意力机制与卷积结合:On the Integration of Self-Attention and Convolution(CVPR2022)

引言

1:卷积可以接受比较大的图片的,但自注意力机制如果图片特别大的话,运算规模会特别大,即上图中右边(卷积)会算得比较快,左边(自注意力机制)会算得比较慢,所以我们要想些办法让自注意力机制规模小一点,本篇文章就只让qkv计算部分区域,而不是整个全局图片了。

2:自注意力机制中的qkv与卷积中的卷积核(比如说3x3的卷积核)能否一起得到?额,好像两者不是一类东西,但如果qkv用1x1的卷积核话,似乎有可能..

但是1x1的卷积核与3x3的卷积核似乎很难配套,有没有可能将3x3的卷积核用9个1x1的卷积核去替代呢?那既然两者(自注意力机制与卷积)都用到1x1的卷积,不妨两者共享1x1的卷积?

3. Revisiting Convolution and Self-Attention

3.1. Convolution

原理

这里先不扎进去研究论文上的公式,先用图看原理

9个1x1的卷积核输出的结果,再拼接起来

例子:4个1x1的卷积核代替1个2x2的卷积核

最左边的3x3正方形为图片特征(这里channel=1)

注意:需要3x3的卷积中pading=1;1x1的卷积中pading=0;这样的话输出结果的形状大小才相同

从这里我们可以看出来,其实这种代替的方法得出的数值结果是不相同的,只不过是4个1x1的卷积核模仿了1个2x2的卷积核的学习过程而已。

公式讲述

标准卷积公式

标准公式中的f_{i+p-\lfloor k/2 \rfloor,j+p-\lfloor k/2 \rfloor}的讨论?

i+p-\lfloor k/2 \rfloor,j+p-\lfloor k/2 \rfloor应该是对Stage2中Conv1输出结果偏移大小的描述

这里k=3,则\lfloor k/2 \rfloor=1,所以Conv1的输出结果偏移\pm{=1}

重写卷积公式

将上式进行重写

其中g_{i,j}^{(p,q)}为一个卷积核输出的结果

g_{i,j}为所有卷积核的结果相加

定义Shift操作

将Shift定义为

定义为:

其中\Delta{x},\Delta{y}分别为水平和垂直位移。则等式3可以改写为

将标准卷积分为两个阶段

第一阶段,将输入的特征图沿某个位置的核权重进行线性投影,即(p,q)。这与标准的1 × 1卷积相同。

第二阶段,投影后的特征图根据核位置进行平移(所以到底下图用多大的Filter(下图是3x3)得提前定好,因为这个跟每个Conv 1x1得到结果的平移,即与S(\Delta{x},\Delta{y})息息相关?不是,这是由\lfloor k/2 \rfloor

决定的,即S(\pm{\lfloor k/2 \rfloor},\pm{\lfloor k/2 \rfloor})),最后聚合在一起。可以很容易地观察到,大部分的计算开销是在1 × 1卷积中进行的,而接下来的移位和聚合是轻量级的。

3.2. Self-Attention

原理

很简单,这里用一句话来描述:用三个1x1的卷积核得到Q、K、V,之后,由于(a)卷积与(b)self-attention是并行计算的,为了让(b)self-attention赶上(a)卷积,这里只做局部区域的自注意力机制(与swin-transformer有点像),局部区域对应公式中给出的N_{k}(i,j)

公式解读

这里为一个具有 N 个头的标准自注意力模块。F\in{R^{C_{in}*H*W}},G\in{C_{out}*H*W}为输入特征图和输出的特征图,其中H,W的图片的大小,输出与输入图片的尺寸保持不变。f_{ij}\in{R^{C_{in}}}.g_{ij}\in{R^{C_{out}}}分别为F和G对应的像素(i,j)的特征张量,则注意力模块的的计算为。

[ 输出特征 = 多个注意力头的相同位置值相加( 注意力权重 × Value ) ]

其中 || 是 N 个注意力头的输出的相同位置值相加(参考文章中说是: N 个注意力头的输出的串联,我觉得有点不对,因为他们是并行得到,串联有种一个头依赖另一个头的感觉)。W_{l}^{(q)},W_{l}^{(k)},W_{l}^{(v)}是queris,keys,values的投影矩阵。

自注意力机制的特点

1:N_{k}(i,j)为像素的局部区域,其自注意力机制以(i,j)为中心,这说明自注意力机制并非全局的,而是仅在自己(i,j)为中心的区域做自注意力机制。

2:A(W_{q}^{(l)}f_{ij},W_{k}^{(l)}f_{ab})是关于N_{k}(i,j)内特征相应的权重。

广泛采用的自我注意模块权重计算如下:

其中d是W_{q}^{(l)}f_{ij}的特征尺寸。

留意:softmax的作用范围是在N_{k}(i,j)这个区域里面的。

将多头注意力机制分成两个阶段

第一阶段类似于传统卷积,进行1×1卷积,将输入特征投影为查询、键和值。

第二阶段包括注意力权重的计算和价值矩阵的聚合,即收集局部特征。

3.3. Computational Cost(比较一、二阶段的计算代价)

为了充分了解卷积和自注意力模块的计算瓶颈,本文分析了每个阶段的浮点运算(FLOPs)和参数数量,并在下表中进行了总结。

研究表明,中卷积中第一阶段的理论FLOPs 和参数对通道大小C呈二次(即平方)复杂性,而第二阶段的计算成本与C呈一次线性关系。在自注意力模块中也有同样的情况,其中所有的训练参数被保存在阶段I。至于理论得到FLOPs,考虑正常情况下,在ReNET模型中,其中K_{a}=7,对于不同的层深度有C=64, 128, 256,512。结果表明,当3C^{2}>2k^{2}_{a}C时,第一阶段消耗的操作明显大于第二阶段的消耗,并且随着通道大小的增加,差异更明显。

所以随着通道越大,第一阶段的消耗是非常可怕。那么如果我们能够在卷积和自注意力机制中都共享第一阶段,即用同样的一阶段参数,那么将会大大节省计算代价,这便是 4.1. Relating Self-Attention with Convolution 讲的内容。

4. Method

4.1. Relating Self-Attention with Convolution

额,这里说得很抽象...,其实就是上面3.3最后的结论。

自注意力和卷积模块这两个阶段的作用非常相似。第一阶段是特征学习模块,两种方法通过执行1×1卷积来共享相同的操作,从而将特征投影到更深的空间。另一方面,第二阶段对应于特征聚合的过程,尽管他们的学习方法不同。

从计算角度来看,在卷积模块和自注意力模块的第一阶段进行的1×1卷积需要理论的FLOPs和的参数与通道大小C呈2次相关的。相比之下,在第二阶段,两个模块都是轻量级的或几乎没有计算,毕竟只是呈线性关系。

总结:

(1)卷积和自注意力在通过1×1卷积投影输入特征图时实际上共享相同的操作,这能够大大节省计算开销。

(2) 虽然对于捕获语义特征至关重要,但第二阶段的聚合操作是轻量级的,并且不会获得额外的学习参数。

4.2. Integration of Self-Attention and Convolution

ACmix包括两个阶段。

第一阶段:

输入特征通过三个1×1卷积投影得到3个H*W*C,之后通过reshape将每个H*W*C

reshape成H*W*\frac{C}{N}*N,其中N是第二阶段中自注意力机制的头数。

第二阶段:

卷积的stage2在进行偏移之前,先将H*W*\frac{C}{N}*3N通过全连接得到K^{2}H*W*\frac{C}{N}

,之后偏移聚合得到H*W*\frac{C}{N}*N自注意力机制为N个头分别进行self-attention,每个头的结果H*W*\frac{C}{N}为之后再把N个头拼接起来,得到H*W*\frac{C}{N}*N

最后,两条路径的输出相加,其中\alpha,\beta为可学习参数

4.3. Improved Shift and Summation

如图4.2节中的图所示,中间特征为卷积路径遵循传统卷积模块中进行的移位和求和操作。尽管理论上它们是轻量级的,但向不同方向移动张量实际上会破坏数据,并且局部性和矢量化难以实现。这可能会大大损害我们的实际效率。

作为补救措施,我们采用固定核的深度卷积来替代低效的卷积张量位移。取Shift(f,−1,−1)

例如,位移特征计算为:

其中c代表输入特性的通道数。

因此,通过针对特定移位方向精心设计的核权重,卷积输出相当于简单的张量移位。为了进一步结合来自不同方向的特征之和,将所有输入特征和卷积核分别连接起来,并将移位运算表示为单组卷积。

在此基础上,作者还引入了一些调整,以增强模块的灵活性。如上图(c.II)所示,将作为偏移使用的卷积核作为可学习的参数,并将移位核作为初始化。这提高了模型容量,同时保持了原始轮流操作的能力。

另外,还使用多组卷积核来匹配卷积和自注意力路径的输出通道维度,如上图(c.III)所示。

一个例子:用矩阵乘法来代替平移

论文里对应的图

4.5. 探索注意力权重

[⋅]表示特征串联,\phi(.)表示两个具有中间非线性激活函数的线性投影层,W_{k}(i,j)表示每个查询标记的专用接收域,W表示整个特征图。然后,计算出的注意力权重可应用于等式(12),并符合一般公式。

5. Experiments

5.1. ImageNet Classification

本篇文章将ACmix应用在4个基本模型当中,包括:ResNet, SAN, PVT and Swin-Transformer,并进行比较。

文章还应用在其他下游任务中,这里就不列举了。

参考资料

论文下载

📎论文On the Integration of Self-Attention and Convolution.pdf

代码

GitHub - LeapLabTHU/ACmix: Official repository of ACmix (CVPR2022)

参考文章

On the Integration of Self-Attention and Convolution-CSDN博客

📎On the Integration of Self-Attention and Convolution-CSDN博客 (2023_12_19 16_38_40).html

相关文章:

论文解读:On the Integration of Self-Attention and Convolution

自注意力机制与卷积结合:On the Integration of Self-Attention and Convolution(CVPR2022) 引言 1:卷积可以接受比较大的图片的,但自注意力机制如果图片特别大的话,运算规模会特别大,即上图中右边(卷积)会算得比较快…...

【Spring】15 ApplicationContextAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架提供了许多回调接口,用于在 Bean 的生命周期中执行特定的操作。ApplicationContextAware 接口是其中之一,它允许 Bean 获取对 A…...

Android 版本控制工具--Git

要在Android中使用Git,需要进行以下步骤: 安装Git:首先在你的开发环境中安装Git。在Windows中,你可以从官方网站(https://git-scm.com/downloads)上下载Git的可执行文件并进行安装。在Mac上,你可…...

Wireshark高级网络安全分析

第一章:Wireshark基础及捕获技巧 1.1 Wireshark基础知识回顾 1.2 高级捕获技巧:过滤器和捕获选项 1.3 Wireshark与其他抓包工具的比较 第二章:网络协议分析 2.1 网络协议分析:TCP、UDP、ICMP等 2.2 高级协议分析:HTTP…...

llvm后端之DAG设计

llvm后端之DAG设计 引言1 核心类设计2 类型系统2.1 MVT::SimpleValueType2.2 MVT2.3 EVT 3 节点类型 引言 llvm后端将中端的IR转为有向无环图,即DAG。如下图: 图中黑色箭头为数据依赖;蓝色线和红色线为控制依赖。蓝色表示指令序列化时两个节…...

反序列化 [SWPUCTF 2021 新生赛]ez_unserialize

打开题目 查看源代码 得到提示&#xff0c;那我们用御剑扫描一下看看 我们知道有个robots.txt&#xff0c;访问一下得到 那我们便访问一下 cl45s.php看看 得到网站源代码 <?phperror_reporting(0); show_source("cl45s.php");class wllm{public $admin;public …...

centos(linux)安装jenkins

官网&#xff1a;https://pkg.jenkins.io/redhat/ 安装官网进行操作&#xff1a; sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.reposudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io-2023.key若出现如下错误&#xff1a; …...

Wireshark统计和可视化

第一章&#xff1a;Wireshark基础及捕获技巧 1.1 Wireshark基础知识回顾 1.2 高级捕获技巧&#xff1a;过滤器和捕获选项 1.3 Wireshark与其他抓包工具的比较 第二章&#xff1a;网络协议分析 2.1 网络协议分析&#xff1a;TCP、UDP、ICMP等 2.2 高级协议分析&#xff1a;HTTP…...

高通平台开发系列讲解(SIM卡篇)SIM软件架构介绍

文章目录 一、SIM软件架构二、MMG SDI Task三、GSTK Task四、Simlock Task沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍SIM的相关组件。 SIM软件架构: SIM软件架构指的是与SIM卡(Subscriber Identity Module,订阅者身份模块)相关的软件系统设计和…...

音频筑基:瞬态、基音、偏噪信号类型分析

音频筑基&#xff1a;瞬态、基音、偏噪信号类型分析 是什么深入理解从编码角度看&#xff0c;基音信号编码通常会有啥问题&#xff1f;在频域感知编码过程中&#xff0c;瞬态信号会有啥问题&#xff1f;如何解决&#xff1f;瞬态信号场景下&#xff0c;5/10ms帧长编码有啥区别&…...

HarmonyOS ArkTS 中DatePicker先择时间 路由跳转并传值到其它页

效果 代码 代码里有TextTimerController 这一种例用方法较怪&#xff0c;Text ,Button Datepicker 的使用。 import router from ohos.router’则是引入路由模块。 import router from ohos.router Entry Component struct TextnewClock {textTimerController: TextTimerContr…...

Axure RP 8 for Mac/win中文版:打造完美交互式原型设计体验

Axure RP 8&#xff0c;一款引领潮流的交互式原型设计工具&#xff0c;为设计师提供了无限的可能性&#xff0c;让他们能够创造出逼真的原型&#xff0c;从而更好地展示和测试他们的设计。 Axure RP 8拥有丰富的功能和工具&#xff0c;让设计师可以轻松地创建出复杂的交互式原…...

迪文屏开发保姆级教程——页面键盘

迪文屏页面键盘保姆级教程。 本篇文章主要介绍了在DGBUS平台上使用页面键盘的步骤。 迪文屏官方开发指南PDF&#xff1a;&#xff08;不方便下载的私聊我发给你&#xff09; https://download.csdn.net/download/qq_21370051/88647174?spm1001.2014.3001.5503https://downloa…...

Unity的UI界面——Text/Image

编辑UI界面时&#xff0c;要先切换到2d界面 &#xff08;3d项目的话&#xff09; 1.Text控件 Text控件的相关属性&#xff1a; Character:&#xff08;字符&#xff09; Font&#xff1a;字体 Font Style&#xff1a;字体样式 Font Size&#xff1a;字体大小 Line Spac…...

sklearn和tensorflow的理解

人工智能的实现是基于机器学习&#xff0c;机器学习的一个方法是神经网络&#xff0c;以及各种机器学习算法库。 有监督学习&#xff1a;一般数据构成是【特征值目标值】 无监督学习&#xff1a;一般数据构成是【特征值】 Scikit-learn(sklearn)的定位是通用机器学习库&…...

css中BFC

css BFC BFC具有以下特性创建BFC的方式有多种BFC的应用场景和作用 扩展&#xff1a; CSS动画 transition: 过渡动画animation / keyframestransform都有哪些属性 举例 css BFC BFC&#xff0c;即块级格式化上下文&#xff08;Block Formatting Context&#xff09;&#xf…...

华为OD机试 - 小朋友来自多少小区(Java JS Python C)

题目描述 幼儿园组织活动,老师布置了一个任务: 每个小朋友去了解与自己同一个小区的小朋友还有几个。 我们将这些数量汇总到数组 garden 中。 请根据这些小朋友给出的信息,计算班级小朋友至少来自几个小区? 输入描述 输入:garden[] = {2, 2, 3} 输出描述 输出:7 备…...

前端:NPM的介绍和使用

一、NPM的介绍 NPM是Node.js的包管理器&#xff0c;用于管理Node.js的包NPM提供了方便的方式来安装、管理和分享Node.js的包 二、NPM的使用 1. 安装NPM 要使用NPM&#xff0c;首先需要安装Node.js。安装完成后&#xff0c;可以在命令行中运行以下命令来检查Node.js和NPM是否…...

力扣57. 插入区间

双指针法 思路&#xff1a; 用待插入区间左右边界初始化双指针 left 和 right&#xff1b;遍历待归并区间&#xff1a; 如果元素整体边界在 [left, right] 左侧&#xff08;item[1] < left&#xff09;&#xff0c;则将给元素插入结果数组中&#xff1b;如果元素整体边界在…...

Linux c++开发-11-Socket TCP编程简单案例

服务端&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include <sys/types.h>#include <errno.h>int main(void) {//1.socketint server_sock socket(A…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...