首页
/ 深入解析External-Attention-pytorch中的注意力机制模型

深入解析External-Attention-pytorch中的注意力机制模型

2025-07-06 04:26:49作者:瞿蔚英Wynne

前言

注意力机制作为深度学习领域的重要技术,近年来在计算机视觉、自然语言处理等方向取得了显著成果。本文将全面解析External-Attention-pytorch项目中集成的多种注意力机制模型,帮助读者深入理解各模型的原理、结构及应用场景。

1. 外部注意力(External Attention)

1.1 核心思想

外部注意力模型发表于2021年5月的arXiv,主要解决了自注意力机制(Self-Attention)的两个痛点:

  1. O(n²)的计算复杂度问题
  2. 传统自注意力仅在同一样本内计算不同位置间的注意力,忽略了不同样本间的关系

该模型创新性地使用两个串联的MLP结构作为记忆单元,将计算复杂度降至O(n)。这两个记忆单元基于所有训练数据学习,因此隐式地考虑了不同样本间的联系。

1.2 模型结构

外部注意力结构图

结构特点:

  • 采用线性层替代传统的QKV计算
  • 引入外部记忆单元存储全局信息
  • 计算效率显著高于传统自注意力

1.3 应用示例

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 Transformer核心组件

自注意力机制源自2017年NeurIPS的"Attention Is All You Need"论文,已成为Transformer架构的核心组件。其核心思想是通过计算特征中不同位置间的权重来更新特征表示。

2.2 计算流程

  1. 输入特征通过FC层映射为Q、K、V三个特征
  2. Q和K点积得到注意力图
  3. 注意力图与V点积得到加权特征
  4. 最后通过FC层映射得到新特征

2.3 代码实现

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. 压缩激励注意力(SE Attention)

3.1 通道注意力先驱

SE Attention发表于CVPR 2018,是通道注意力机制的开创性工作。其核心思想是通过学习通道间的重要性关系来增强特征表示能力。

3.2 关键步骤

  1. 空间维度应用自适应平均池化
  2. 通过两个FC层学习通道注意力
  3. 使用Sigmoid归一化得到通道注意力图
  4. 将注意力图与原始特征相乘

3.3 应用示例

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. 选择性核注意力(SK Attention)

4.1 多尺度特征融合

SK Attention发表于CVPR 2019,致敬了SE Attention的思想,但创新性地引入了多尺度卷积核的动态选择机制。

4.2 三阶段流程

  1. Split阶段:使用不同大小的卷积核进行多分支卷积
  2. Fuse阶段:采用SE结构获取通道注意力矩阵
  3. Select阶段:将不同核的特征加权融合

4.3 代码实现

from attention.SKAttention import SKAttention
import torch

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

5. CBAM注意力

5.1 双注意力机制

CBAM发表于ECCV 2018,同时使用通道注意力和空间注意力,并将两者串联。其创新点在于:

  1. 通道注意力中结合AvgPool和MaxPool
  2. 空间注意力中使用7×7大卷积核提取空间信息

5.2 结构特点

CBAM结构图 CBAM结构图

5.3 应用示例

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注意力

6.1 并行双注意力

BAM与CBAM同期工作,同样采用双注意力机制,但将通道注意力和空间注意力的结果相加而非串联。

6.2 结构特点

  1. 通道注意力结构与SE类似
  2. 空间注意力使用空洞卷积提取特征
  3. 最终采用广播机制相加两种注意力

6.3 代码实现

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注意力

7.1 高效通道注意力

ECA发表于CVPR 2020,是对SE Attention的改进,主要优化点:

  1. 使用一维卷积替代全连接层
  2. 仅计算相邻k个通道的注意力(局部注意力)
  3. 显著减少参数量和计算量

7.2 结构对比

ECA结构图

7.3 应用示例

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注意力

8.1 双自注意力网络

DANet发表于CVPR 2019,将自注意力机制扩展到场景分割任务中,创新性地同时使用位置自注意力和通道自注意力。

8.2 结构特点

DANet结构图

8.3 代码实现

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. 金字塔分割注意力(PSA)

9.1 多尺度特征探索

PSA发表于2021年5月的arXiv,主要研究如何获取和探索不同尺度的空间信息来丰富特征空间。

9.2 四阶段流程

  1. 通道分组+不同尺度卷积
  2. SE结构获取注意力图
  3. 分组softmax
  4. 注意力与特征相乘

9.3 应用示例

from attention.PSA import PSA
import torch

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

10. 高效多头自注意力(EMSA)

10.1 自注意力优化

EMSA发表于2021年5月的arXiv,主要解决自注意力的两个问题:

  1. 计算复杂度随n平方增长
  2. 每个头只有q、k、v的部分信息

10.2 创新点

在FC层前使用卷积降低空间维度,从而获得空间维度上更小的K和V。

10.3 代码实现

from attention.EMSA import EMSA
import torch

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)

总结

本文详细解析了External-Attention-pytorch项目中集成的10种注意力机制,从经典的Self-Attention到最新的External Attention、EMSA等,涵盖了通道注意力、空间注意力、混合注意力等多种类型。每种注意力机制都有其独特的优势和应用场景,读者可根据具体任务需求选择合适的注意力模块。

随着注意力机制研究的不断深入,相信未来会出现更多高效、强大的注意力模型,推动深度学习在各领域的发展。