百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

深度学习中的 Attention 机制

bigegpt 2024-09-02 16:28 3 浏览

近几年,Attention-based 方法因其可解释和有效性,受到了学术界和工业界的欢迎。但是,由于论文中提出的网络结构通常被嵌入到分类、检测、分割等代码框架中,导致代码比较冗余,对于像我这样的小白很难找到网络的核心代码,导致在论文和网络思想的理解上会有一定困难。因此,我把最近看的 Attention、MLP 和 Re-parameter 论文的核心代码进行了整理和复现,方便各位读者理解。本文主要对该项目的 Attention 部分做简要介绍。

项目地址

https://github.com/xmu-xiaoma666/External-Attention-pytorch

1. External Attention

1.1. 引用

Beyond Self-attention: External Attention using Two Linear Layers for Visual Tasks.---arXiv 2021.05.05

论文地址:https://arxiv.org/abs/2105.02358

1.2. 模型结构

1.3. 简介

这是五月份在 arXiv 上的一篇文章,主要解决的 Self-Attention(SA) 的两个痛点问题:(1)O(n^2) 的计算复杂度;(2)SA 是在同一个样本上根据不同位置计算 Attention,忽略了不同样本之间的联系。因此,本文采用了两个串联的 MLP 结构作为 memory units,使得计算复杂度降低到了 O(n);此外,这两个 memory units 是基于全部的训练数据学习的,因此也隐式地考虑了不同样本之间的联系。

1.4. 使用方法

from attention.ExternalAttention import ExternalAttention
import torch
input=torch.randn(50,49,512)
ea = ExternalAttention(d_model=512,S=8)
output=ea(input)
print(output.shape)

2. Self Attention

2.1. 引用

Attention Is All You Need---NeurIPS2017

论文地址:https://arxiv.org/abs/1706.03762

2.2. 模型结构

2.3. 简介

这是 Google 在 NeurIPS2017 发表的一篇文章,在 CV、NLP、多模态等各个领域都有很大的影响力,目前引用量已经 2.2w+。Transformer 中提出的 Self-Attention 是 Attention 的一种,用于计算特征中不同位置之间的权重,从而达到更新特征的效果。首先将 input feature 通过 FC 映射成 Q、K、V 三个特征,然后将 Q 和 K 进行点乘的得到 attention map,在将 attention map 与 V 做点乘得到加权后的特征。最后通过 FC 进行特征的映射,得到一个新的特征。(关于 Transformer 和 Self-Attention 目前网上有许多非常好的讲解,这里就不做详细的介绍了)

2.4. 使用方法

from attention.SelfAttention import ScaledDotProductAttention
import torch

input=torch.randn(50,49,512)
sa = ScaledDotProductAttention(d_model=512, d_k=512, d_v=512, h=8)
output=sa(input,input,input)
print(output.shape)

3. Squeeze-and-Excitation(SE) Attention

3.1. 引用

Squeeze-and-Excitation Networks---CVPR2018

论文地址:https://arxiv.org/abs/1709.01507

3.2. 模型结构

3.3. 简介

这是 CVPR2018 的一篇文章,同样非常具有影响力,目前引用量 7k+。本文是做通道注意力的,因其简单的结构和有效性,将通道注意力掀起了一波小高潮。大道至简,这篇文章的思想可以说非常简单,首先将 spatial 维度进行 AdaptiveAvgPool,然后通过两个 FC 学习到通道注意力,并用 Sigmoid 进行归一化得到 Channel Attention Map, 最后将 Channel Attention Map 与原特征相乘,就得到了加权后的特征。

3.4. 使用方法

from attention.SEAttention import SEAttention
import torch

input=torch.randn(50,512,7,7)
se = SEAttention(channel=512,reduction=8)
output=se(input)
print(output.shape)

4. Selective Kernel(SK) Attention

4.1. 引用

Selective Kernel Networks---CVPR2019

论文地址:https://arxiv.org/pdf/1903.06586.pdf

4.2. 模型结构

4.3. 简介

这是 CVPR2019 的一篇文章,致敬了 SENet 的思想。在传统的 CNN 中每一个卷积层都是用相同大小的卷积核,限制了模型的表达能力;而 Inception 这种 “更宽” 的模型结构也验证了,用多个不同的卷积核进行学习确实可以提升模型的表达能力。作者借鉴了 SENet 的思想,通过动态计算每个卷积核得到通道的权重,动态地将各个卷积核的结果进行融合。

个人认为,之所以所这篇文章也能够称之为 lightweight,是因为对不同 kernel 的特征进行通道注意力的时候是参数共享的(i.e. 因为在做 Attention 之前,首先将特征进行了融合,所以不同卷积核的结果共享一个 SE 模块的参数)。

本文的方法分为三个部分:Split,Fuse,Select。Split 就是一个 multi-branch 的操作,用不同的卷积核进行卷积得到不同的特征;Fuse 部分就是用 SE 的结构获取通道注意力的矩阵 (N 个卷积核就可以得到 N 个注意力矩阵,这步操作对所有的特征参数共享),这样就可以得到不同 kernel 经过 SE 之后的特征;Select 操作就是将这几个特征进行相加。

4.4. 使用方法

from attention.SKAttention import SKAttention
import torch

input=torch.randn(50,512,7,7)
se = SKAttention(channel=512,reduction=8)
output=se(input)
print(output.shape)

5. CBAM Attention

5.1. 引用

CBAM: Convolutional Block Attention Module---ECCV2018

论文地址:https://openaccess.thecvf.com/content_ECCV_2018/papers/Sanghyun_Woo_Convolutional_Block_Attention_ECCV_2018_paper.pdf

5.2. 模型结构

5.3. 简介

这是 ECCV2018 的一篇论文,这篇文章同时使用了 Channel Attention 和 Spatial Attention,将两者进行了串联(文章也做了并联和两种串联方式的消融实验)。

Channel Attention 方面,大致结构还是和 SE 相似,不过作者提出 AvgPool 和 MaxPool 有不同的表示效果,所以作者对原来的特征在 Spatial 维度分别进行了 AvgPool 和 MaxPool,然后用 SE 的结构提取 channel attention,注意这里是参数共享的,然后将两个特征相加后做归一化,就得到了注意力矩阵。Spatial Attention 和 Channel Attention 类似,先在 channel 维度进行两种 pool 后,将两个特征进行拼接,然后用 7x7 的卷积来提取 Spatial Attention(之所以用 7x7 是因为提取的是空间注意力,所以用的卷积核必须足够大)。然后做一次归一化,就得到了空间的注意力矩阵。

5.4. 使用方法

from attention.CBAM import CBAMBlock
import torch

input=torch.randn(50,512,7,7)
kernel_size=input.shape[2]
cbam = CBAMBlock(channel=512,reduction=16,kernel_size=kernel_size)
output=cbam(input)
print(output.shape)

6. BAM Attention

6.1. 引用

BAM: Bottleneck Attention Module---BMCV2018

论文地址:https://arxiv.org/pdf/1807.06514.pdf

6.2. 模型结构

6.3. 简介

这是 CBAM 同作者同时期的工作,工作与 CBAM 非常相似,也是双重 Attention,不同的是 CBAM 是将两个 attention 的结果串联;而 BAM 是直接将两个 attention 矩阵进行相加。

Channel Attention 方面,与 SE 的结构基本一样。Spatial Attention 方面,还是在通道维度进行 pool,然后用了两次 3x3 的空洞卷积,最后将用一次 1x1 的卷积得到 Spatial Attention 的矩阵。最后 Channel Attention 和 Spatial Attention 矩阵进行相加(这里用到了广播机制),并进行归一化,这样一来,就得到了空间和通道结合的 attention 矩阵。

6.4. 使用方法

from attention.BAM import BAMBlock
import torch

input=torch.randn(50,512,7,7)
bam = BAMBlock(channel=512,reduction=16,dia_val=2)
output=bam(input)
print(output.shape)

7. ECA Attention

7.1. 引用

ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks---CVPR2020

论文地址:https://arxiv.org/pdf/1910.03151.pdf

7.2. 模型结构

7.3. 简介

这是 CVPR2020 的一篇文章。

如上图所示,SE 实现通道注意力是使用两个全连接层,而 ECA 是需要一个的卷积。作者这么做的原因一方面是认为计算所有通道两两之间的注意力是没有必要的,另一方面是用两个全连接层确实引入了太多的参数和计算量。

因此作者进行了 AvgPool 之后,只是使用了一个感受野为 k 的一维卷积(相当于只计算与相邻 k 个通道的注意力),这样做就大大地减少的参数和计算量。(i.e. 相当于 SE 是一个 global 的注意力,而 ECA 是一个 local 的注意力)。

7.4. 使用方法:

from attention.ECAAttention import ECAAttention
import torch

input=torch.randn(50,512,7,7)
eca = ECAAttention(kernel_size=3)
output=eca(input)
print(output.shape)

8. DANet Attention

8.1. 引用

Dual Attention Network for Scene Segmentation---CVPR2019

论文地址:https://arxiv.org/pdf/1809.02983.pdf

8.2. 模型结构

8.3. 简介

这是 CVPR2019 的文章,思想上非常简单,就是将 self-attention 用到场景分割的任务中,不同的是 self-attention 是关注每个 position 之间的注意力,而本文将 self-attention 做了一个拓展,还做了一个通道注意力的分支,操作上和 self-attention 一样,不同的通道 attention 中把生成 Q,K,V 的三个 Linear 去掉了。最后将两个 attention 之后的特征进行 element-wise sum。

8.4. 使用方法

from attention.DANet import DAModule
import torch

input=torch.randn(50,512,7,7)
danet=DAModule(d_model=512,kernel_size=3,H=7,W=7)
print(danet(input).shape)

9. Pyramid Split Attention(PSA)

9.1. 引用

EPSANet: An Efficient Pyramid Split Attention Block on Convolutional Neural Network---arXiv 2021.05.30

论文地址:https://arxiv.org/pdf/2105.14447.pdf

9.2. 模型结构

9.3. 简介

这是深大 5 月 30 日在 arXiv 上上传的一篇文章,本文的目的是如何获取并探索不同尺度的空间信息来丰富特征空间。网络结构相对来说也比较简单,主要分成四步,第一部,将原来的 feature 根据通道分成 n 组然后对不同的组进行不同尺度的卷积,得到新的特征 W1;第二部,用 SE 在原来的特征上进行 SE,从而获得不同的阿头疼托尼;第三部,对不同组进行 SOFTMAX;第四部,将获得 attention 与原来的特征 W1 相乘。

9.4. 使用方法

from attention.PSA import PSAimport torch
input=torch.randn(50,512,7,7)
psa = PSA(channel=512,reduction=8)
output=psa(input)
print(output.shape)

10. Efficient Multi-Head Self-Attention(EMSA)

10.1. 引用

ResT: An Efficient Transformer for Visual Recognition---arXiv 2021.05.28

论文地址:https://arxiv.org/abs/2105.13677

10.2. 模型结构

10.3. 简介

这是南大 5 月 28 日在 arXiv 上上传的一篇文章。本文解决的主要是 SA 的两个痛点问题:(1)Self-Attention 的计算复杂度和 n 呈平方关系;(2)每个 head 只有 q,k,v 的部分信息,如果 q,k,v 的维度太小,那么就会导致获取不到连续的信息,从而导致性能损失。这篇文章给出的思路也非常简单,在 SA 中,在 FC 之前,用了一个卷积来降低了空间的维度,从而得到空间维度上更小的 K 和 V。

10.4. 使用方法

from attention.EMSA import EMSA
import torch
from torch import nn
from torch.nn 
import functional as F
input=torch.randn(50,64,512)
emsa = EMSA(d_model=512, d_k=512, d_v=512, h=8,H=8,W=8,ratio=2,apply_transform=True)
output=emsa(input,input,input)
print(output.shape)

相关推荐

一条命令搞定pip国内镜像源设置(pip install 指定镜像)

玩python的同学想必没有不用pip的吧,pip是python包管理工具,和Nodejs的npm、Java的maven类似,这些依靠开源力量建立起的庞大软件库极大提高了开发的效率,不过默认pytho...

Cadence Allegro在PCB中手动或者自动添加差分对属性

设计PCB过程中,若设计中有差分对信号,则需要将是差分的2个信号设置为差分对,设置差分对有2种方式:手动添加及自动添加一、手动添加差分对:1、点击Setup-Constraints-Constrain...

合亿 Gutab 三防|车载工业平板功能介绍,车载工业平板厂家推荐

在商用车队管理迈向智能化、特种车辆作业追求高效化的今天,车载工业平板早已突破传统“车载导航”的单一功能,成为连接车辆、司机与云端管理的核心枢纽。从物流运输的实时调度中枢,到矿山开采的无人驾驶控制器,再...

「探长分享-黑匣子」本田冠道 2020款

【品牌】探长360汽车黑匣子【产品型号】2TPro【安装车型】本田冠道2020款【功能特点】360全景安全辅助,行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,震动监控,一步标...

「探长分享-黑匣子」奥迪A6L 2019款

【品牌】探长360汽车黑匣子【产品型号】2TPro【安装车型】奥迪A6L2019款【功能特点】360全景安全辅助,行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,震动监控,一步...

探长360全景案例分享:奥迪Q7 2011款360全景效果展示

【品牌】DCT360汽车黑匣子【产品型号】3TPro【安装车型】奥迪Q72011款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小时停...

「探长分享-黑匣子」保时捷Cayenne 2015款

【品牌】探长360汽车黑匣子【产品型号】4TPro【安装车型】保时捷Cayenne2015款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,...

苍蝇再小也是肉,变态电路的大阳巧客S2差点难死大神

这台大阳巧客S2电动四轮车是我家第二台四轮俱全的篷车!哈哈!大阳巧客S2配置4.5Kw永磁同步电机,SVPWM矢量控制正弦波系统,车辆在加速、爬坡上性能有提升,效率高,操控灵敏。这台车前段时间刚更换了...

「探长分享-黑匣子」奥迪Q5L 2020款

360汽车黑匣子【产品型号】4TPro【安装车型】奥迪Q5L2020款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小时停车监控,一秒一...

「探长分享-黑匣子」丰田兰德酷路泽 2016款

【品牌】探长360汽车黑匣子【产品型号】3TPro【安装车型】丰田兰德酷路泽2016款【功能特点】360全景安全辅助,四路行车录像,极致高清摄像头,模拟/数字高清/AHD多种信号格式输出,24小...

驾驶室盲区是酿成重卡事故主因?后视系统:这个锅我不背

小时候家中长辈常常提醒:离大货车远一点!司机根本看不到你!早期的货车可能真的存在驾驶盲区,比如车辆正下方,因驾驶座过高,恰好是司机看不到的视野盲区。而如今的重卡在环视系统上已经非常完善,是否还存在驾驶...

前后双录,360 G580行车记录仪(360行车记录仪g580s)

相信每一位车主都会为爱车安装行车记录仪,行车记录仪的作用不仅能为交通事故还原证据,还能防止碰瓷。传统的单镜头行车记录仪只能拍摄车头方向的行车画面,如果遇到后方车辆故意碰瓷的事故时,没有监控和后摄画面则...

海康威视同轴录像机怎么使用,海康XVR配置说明

海康威视同轴录像机支持模拟、同轴以及数字IP摄像机接入,因此在使用多种类型摄像机、老久监控项目改造等场景广泛使用。首先,新录像机第一次使用需要设置管理密码激活,密码需由8-16位数字、小写字母、大写...

亿道三防2代工业级车载平板电脑震撼登场,农机矿车专用

亿道三防近日推出2024年全新2代车载平板电脑V12R,引领多项技术创新和升级,为农机、矿车等车载领域带来了超越期待与想象的震撼体验。V12R是一款从里到外,性能、功能全线拉满的工业级车载平板电脑!拥...

分析神州十八号返回舱内的摄像机最有可能是什么类型的摄像头

有没有发现,神州十八号返回舱内摄像机的图像虽然清晰度不是很高,但是画面非常干净,没有一点干扰,几乎看不到噪点。图像清晰度不高不太可能是镜头原因,很可能是图像传感器的分辨率比较低的原因,图像传感器分辨率...