【CVPR2022】On the Integration of Self-Attention and Convolution自注意力和卷积的融合

论文题目:On the Integration of Self-Attention and Convolution
论文地址:https://arxiv.org/pdf/2111.14556.pdf
论文代码:https://github.com/LeapLabTHU/ACmix

更详细内容和计算量、参数量等推导发表在知乎

一、研究背景

近年来,卷积和self-attention在计算机视觉中取得了飞速的发展。随着transformers的出现,attention-based的方法取得了更加优异的性能。尽管两种方法都取得了成功,但是两者遵循不同的设计思路。

Convolution: 1.Convolution filter; 2.Receptive field
Self-attention: 1.上下文加权操作; 2.相似度函数

前者在特征图中共享权重,后者通过动态计算像素间的相似度函数从而能够捕获不同区域的特征,进而获得更多的特征信息。
之前的工作从几个角度探索了自注意和卷积的结合:使用自注意力增强卷积;使用自注意力代替卷积;同时使用自注意力和卷积,但是分成了独立的路径。

  • CBAM等证明self-attention可以作为convolution的增强;
  • SAN等提出self-attention可以代替传统的convolution;
  • AA-ResNet等在设计独立架构方面存在局限性。

现有的方法仍将自注意力和卷积视为不同的部分,因此它们之间的关系并未得到充分利用

在本文中,作者团队表明它们二者之间存在很强的潜在关系,因为这两种范式的大量计算实际上是通过相同的操作完成的。总之,卷积和自注意力的内在联系没有得到充分挖掘。这篇论文试图挖掘自注意力和卷积之间更为密切的关系。

本文主要贡献: 1. 揭示了self-attention和convolution之间的潜在关系,为了解两个模块间的关联和设计新的learning paradigms提供了新的视角。 2. self-attention和convolution的组合使得两者的功能得到整合,实验证明混合模型的性能始终优于纯卷积或者自注意力模型。

二、研究内容

作者的思路:

通过分解卷积和自注意力两个模块操作,作者发现他们在很大程度上依赖于相同的11卷积运算。
在这里插入图片描述
基于观察,作者开发了一个混合模型ACmix,首先将输入特征经过 1
1 卷积映射,获得丰富的中间特征,然后在复用中间特征进行不同方式的聚合,在有效发挥二者的优势的同时还不用计算两次。实验结果表明这一混合模型的性能优于纯卷积或纯注意力模型

作者的分析:

1.卷积

传统卷积会通过 k*k 卷积核特征转换后,先聚合后再偏移进入下个位置再卷积。
在这里插入图片描述
拆分成两个阶段:
在这里插入图片描述
在这里插入图片描述

这里的卷积是通过 1*1 卷积核计算feature map所有的特征转换后,先偏移,再聚合,将其拆分成变换和偏移聚合两个阶段。

2.Self-attention

与卷积相比,自注意力让模型在更大的内容空间中聚焦于重要区域,其计算公式如下(考虑N个heads):在这里插入图片描述
其中:
在这里插入图片描述
同理,多头注意力机制也可以用两阶段来看:在这里插入图片描述
两个模块的第一阶段包括相似的操作。为了进一步验证分析的有效性,作者通过实验在表中总结了Resnet 50模型中卷积和自注意模块的实际计算代价。结果:与第二阶段相比,第一阶段贡献了主要的计算复杂度
在这里插入图片描述

3.ACmix

ACmix集成了卷积和自注意力操作,主要是对他们的Stage1做了共享的特征转换操作,如下图所示。
在这里插入图片描述
Stage1: 通过3个 1*1 的卷积,生成3个feature map(主要是针对self attention的q、k和v),并将3个feature map分别在深度方向上分为N组(针对self attention的N 个 heads)。
Stage2中考虑两部分内容:卷积 + self-attention
卷积部分:先通过全连接对通道扩张,3N→k * k,得到 k * k个feature map,这么做的原因是为了和传统卷积的Satge1对上。后面的处理和传统卷积第二步的处理相同,先Shift,再聚合。

虽然理论上来说,将张量沿不同方向移动是轻量级的,但实际上这会破坏数据局部性,并且难以实现矢量化。这可能会大大降低模块在推理时的实际效率。所以作者采用固定权重的深度卷积来代替低效的张量移位。
在这里插入图片描述

  • 为了进一步提高模块计算效率,作者将输入特征和卷积核分别concat(下图中c的1)。
  • 使卷积核变成可学习的,以shiftkernels作为初始化(下图中c的2)。
  • 使用分组卷积核来匹配卷积和自注意力路径的输出通道维度(下图中c的3)
    在这里插入图片描述
    自注意力部分,按照正常的attention操作执行。
    最后,将两部分以不同权重做融合,其中α和β为可学习的参数:
    在这里插入图片描述

三、实验结果

1.ImageNet分类

作者在4个baseline models上应用了ACmix,包括ResNet, SAN, PVT和 Swin-Transformer。实验结果如下图所示:
在这里插入图片描述

2.语义分割

作者在ADE20K上对比了Semantic-FPN和UperNet两种方法,backbone用ImageNet-1K预训练,实验结果如下:
在这里插入图片描述

3.目标检测

目标检测任务使用ResNet和Transformer分别做为backbone网络的试验,使用COCO数据集,结果如下:
在这里插入图片描述
在这里插入图片描述

4.推理速度

在昇腾910硬件平台 + MindSpore框架环境下推理,推理速度如下:
在这里插入图片描述

5.消融实验

1.不同权重融合的消融试验
在这里插入图片描述

2.三种Shift的对比试验(张量平移、固定卷积核、卷积核随机初始化、分组卷积):
在这里插入图片描述

6.不同路径权重的研究

作者进行了并行实验,并在下图中展示了从SAN-ACmix和Swin-ACmix模型的不同层中学习到的参数α、β。
在这里插入图片描述
在网络早期时,卷积所占权重更高,起到特征提取的作用;后期时self-attention慢慢提上来,权重超过卷积。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为你的网站加上Loading等待加载效果吧 | Loading页面加载添加教程

为你的网站加上Loading等待加载效果吧 | Loading页面加载添加教程 效果图 : 教程开始 新建一个loading样式css 将以下代码放进去 然后引用这个文件 code #Loadanimation{ background-color:#fff; height:100%; width:100%; position:fixed; z-index:1; ma…

金丹三层 —— 内存函数和字符串操作函数详解

目录 一.修炼必备 二.字符串操作的常用函数 2.1 strlen()函数 2.2 strcpy()函数 2.3 strcat()函数 2.4 strcmp()函数 2.5 strstr()函数 2.6 strtok()函数 2.7 strerror()函数 三.内存操作的常用函数 3.1 memcpy()函数 3.2 memmove()函数 3.3 memcmp()函数 结语 一…

Hadoop - HDFS文件系统

目录 HDFS文件系统 1、文件系统定义 2、大数据时代,面对海量数据,传统的文件存储系统会面临哪些挑战? 3、分布式存储系统的核心属性及功能含义 一、分布式存储的优点 二、元数据记录的功能 三、分块存储好处 四、副本机制的作用 4、…

宝塔Linux面板部署Python flask项目

目录 👉1、前言 👉2、安装python项目管理器 👉3、上传项目文件及文件夹 👉4、配置项目 👉5、请求测试 学习记录: 👉1、前言 写在前面:前几天我们实现了外网内外登录正方教务系…

IDEA vs Eclipse:使用体验对比

1. 概述 IDEA 和 Eclipse 都是常见的集成开发环境(IDE),用于编写和调试代码。它们都有一些共同的功能,例如代码编辑器、调试器、版本控制等等。但是在具体的使用体验上,它们有很多不同之处。 本文将对 IDEA 和 Eclip…

蓝桥杯算法全集之多重背包问题I(动态规划算法)

一、概念定义有 N 种物品和一个容量是 V 的背包。第 i种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。用下面这个图来分别动态规划的四个经…

Vim超详细下载安装与使用教程

文章目录前言零、DOSBox安装所需资源一、Vim的下载二、Vim的安装三、Vim的使用总结前言 本博客的主要内容为Vim软件的下载安装与使用教程,Vim软件在学习Linux或者汇编语言时十分有用,读者跟着我一步一步做一定可以安装成功,我的步骤肯定是全网…

C语言模拟实现:atoi函数

在实现atoi之前我们先来了解一下atoi函数的作用是什么&#xff1a; 1.实例演示 //实例演示 #include <stdio.h> #include <stdlib.h> int main() {printf("%d\n", atoi("0"));printf("%d\n", atoi("1234"));printf("…

强引用和弱引用区别

强引用 强引用是使用最普遍的引用。如果一个对象具有强引用&#xff0c;那垃圾回收器绝不会回收它。如下&#xff1a; Object strongReference new Object();当内存空间不足时&#xff0c;Java虚拟机宁愿抛出OutOfMemoryError错误&#xff0c;使程序异常终止&#xff0c;也不会…

计算机网络中端到端与点到点的区别

计算机网络中端到端与点到点的区别 数据传输的可靠性是通过数据链路层和网络层的点对点和传输层的端对端保证的。端到端与点到点是针对网络中传输的两端设备间的关系而言的。 在一个网络系统的不同分层中&#xff0c;可能用到端到端传输&#xff0c;也可能用到点到点传输。如…

【新2023Q2模拟题JAVA】华为OD机试 - 总最快检测效率 or 核酸检测效率

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:总最快检测效率 or 核酸检测效…

【云原生进阶之容器】第五章容器运行时5.5--容器运行时之Kata Containers

1 前言 1.1 容器安全 使用Docker轻量级的容器时,最大的问题就是会碰到安全性的问题,其中几个不同的容器可以互相的进行攻击,如果把这个内核给攻掉了,其他所有容器都会崩溃。如果使用KVM等虚拟化技术,会完美解决安全性的问题,但响应的性能会受到一定的影响。

2023年南京晓庄学院五年一贯制专转本秘书学专业考试大纲

2023年南京晓庄学院五年一贯制专转本秘书学专业考试大纲 专业科目一 &#xff1a;秘书实务 【参考书目】《秘书实务》温瑜编&#xff0c;南京大学出版社 2016 年 11 月版 (2019 年再次印刷) 【考试大纲】 ( 一) 考试范围 1.秘书职场&#xff1a; 了解中华人民共和国社会组织和组…

让ChatGPT告诉你Java的发展前景

Java版电商购物系统项目实战 最近很多人问我Java的发展前景怎么样&#xff1f;该怎么学Java基础&#xff1f;java这么卷还该不该学等等。那今天老王以电商场景为例&#xff0c;再结合ChatGPT的回答和大家聊的一下Java有哪些应用前景和技术层面的落地方案。&#xff08;在收获干…

Java小课堂:自定义注解(案例:自定义DecimalFormat注解)

文章目录 引言I 预备知识1.1 元注解1.2 Target注解的ElementType枚举1.3 Retention注解的RetentionPolicy枚举II 自定义注解2.1 基本条件2.2 注解自定义属性的格式III 案例3.1 自定义DecimalFormat注解3.2 自定义json序列化解析引言 需求: 编辑费率限制的值时填写几位就保存几…

损失函数:如何帮助模型学会“自省”?

一个深度学习项目包括了模型的设计、损失函数的设计、梯度更新的方法、模型的保存与加载、模型的训练过程等几个主要模块。每个模块都在整个深度学习项目搭建中意义重大&#xff0c;我特意为你画了一个示意图&#xff0c;方便你整体把握它们的功能。 我们先从损失函数开始说起。…

简单使用AndroidStudio 官方Profiler工具进行内存泄漏检查

简述 Android studio&#xff08;下面简称AS&#xff09;为App提供的性能分析工具&#xff0c;在AS3.0替换掉旧的分析工具&#xff0c;对于其使用方法&#xff0c;官方也有对应的介绍&#xff1a;Android Profiler 对于使用方法&#xff0c;我只用到比较简单的功能&#xff0c…

[数据结构]冒泡排序、快速排序

文章目录交换排序冒泡排序快速排序hoare版本挖坑法前后指针法快速排序的优化三数取中小区间优化快速排序的非递归实现交换排序 基本思想&#xff1a;所谓交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0c;交换排序的特点是&am…

今天面了一个来京东要求月薪25K,明显感觉他背了很多面试题...

最近有朋友去京东面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…

浙江省高校计算机等级考试二级Python 程序设计题6——判断字符串长度|2023备考

笔记整理自B站UPWLB工作生活两不误的个人空间-WLB工作生活两不误个人主页-哔哩哔哩视频教程Python 程序设计题6_哔哩哔哩_bilibili 程序设计题6 Python代码 password input()if len(password) > 8:print(True) else:print(False)输入样例 abcW2121 输出样例 True
最新文章