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

【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

相关文章:

  • Vue3实现PDF在线预览功能
  • Spring Boot - 日志功能深度解析与实践指南
  • 三、GIT与Github推送(上传)和克隆(下载)
  • Python 数据结构揭秘:栈与队列
  • 【ArcGIS微课1000例】0136:制作千层饼(DEM、影像、等高线、山体阴影图层)
  • 树莓派4b如何连接ov7670摄像头
  • shell编程之免交互
  • 为你的网站加上Loading等待加载效果吧 | Loading页面加载添加教程
  • 金丹三层 —— 内存函数和字符串操作函数详解
  • Android MediaCodec设置H264 Profile到High
  • Hadoop - HDFS文件系统
  • 宝塔Linux面板部署Python flask项目
  • MacOS中安装和配置Podman
  • linux系统编程(6)--守护进程
  • IDEA vs Eclipse:使用体验对比
  • 蓝桥杯算法全集之多重背包问题I(动态规划算法)
  • Vim超详细下载安装与使用教程
  • C语言模拟实现:atoi函数
  • unity物理碰撞检测和触发器碰撞检测的区别
  • 强引用和弱引用区别
  • php面向对象讲解
  • 2023年全国最新保安员精选真题及答案42
  • 计算机网络中端到端与点到点的区别
  • 【创作赢红包】求最大公因数与最小公倍数
  • 【新2023Q2模拟题JAVA】华为OD机试 - 总最快检测效率 or 核酸检测效率
  • 【云原生进阶之容器】第五章容器运行时5.5--容器运行时之Kata Containers