【YOLOv8改进 - 注意力机制】Sea_Attention: Squeeze-enhanced Axial Attention,结合全局语义提取和局部细节增强

简介: 【YOLOv8改进 - 注意力机制】Sea_Attention: Squeeze-enhanced Axial Attention,结合全局语义提取和局部细节增强

YOLO目标检测创新改进与实战案例专栏

专栏目录: YOLO有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLO基础解析+创新改进+实战案例

介绍

image-20240613134033529

摘要

自从引入视觉变换器(Vision Transformers)以来,许多计算机视觉任务(如语义分割)的格局发生了显著的变革,这些任务曾经被CNN压倒性地主导。然而,计算成本和内存需求使得这些方法在移动设备上,尤其是在高分辨率逐像素语义分割任务中显得不适用。在本文中,我们介绍了一种新的方法——压缩增强轴向变换器(SeaFormer)用于移动端语义分割。具体来说,我们设计了一个通用的注意力模块,其特点是压缩轴向和细节增强的结合。它可以进一步用于创建一系列具有优越性价比的骨干架构。结合一个轻量级的分割头,我们在ADE20K和Cityscapes数据集上的ARM架构移动设备上实现了分割精度和延迟之间的最佳平衡。关键是,我们在没有任何花哨技巧的情况下,以更好的性能和更低的延迟击败了移动友好型的竞争对手和基于变换器的对手。除了语义分割之外,我们还将提出的SeaFormer架构应用于图像分类问题,展示了其作为通用移动友好型骨干的潜力。我们的代码和模型已在https://github.com/fudan-zvg/SeaFormer公开发布。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

在文章中提出了一种名为"Squeeze-enhanced Axial Attention"的注意力模块,结合了全局语义提取和局部细节增强,旨在提高计算效率并同时聚合全局信息。以下是Squeeze-enhanced Axial Attention的技术原理:

  1. 全局语义提取

    • 首先,从输入特征图 $x$ 中通过线性投影得到查询向量 $q$、键向量 $k$ 和数值向量 $v$。
    • 通过水平和垂直方向的压缩操作,将查询、键、数值向量分别压缩为 $q(h)$、$k(h)$、$v(h)$ 和 $q(v)$、$k(v)$、$v(v)$。
    • 使用 softmax 函数计算每个位置的注意力权重,并将权重与对应数值向量相乘,得到全局语义提取的输出。
  2. 局部细节增强

    • 在全局语义提取的基础上,引入了一个卷积操作的细节增强核,用于增强空间细节。
    • 通过另一组线性投影得到新的查询、键、数值向量,并将它们与全局语义提取的输出进行通道拼接。
    • 将通道拼接后的特征传递给一个由3x3深度卷积和批量归一化组成的块,以增强局部细节信息。
  3. 时间复杂度

    • 压缩操作使得 Squeeze-enhanced Axial Attention 的时间复杂度降低到 $O(HW)$,有效减少了计算成本。
    • 通过将全局语义提取和局部细节增强相结合,实现了全局信息聚合和局部细节增强的平衡,提高了特征提取的效率和性能。

以下是该注意力模块的公式:

  1. Squeeze-enhanced Axial Attention的公式:

    • 全局语义提取部分:
      $$ q(h) = \frac{1}{W} \left( q \rightarrow (C_{qk}, H, W) \frac{1}{W} \right) \rightarrow (H, C_{qk}) $$

      $$ q(v) = \frac{1}{H} \left( q \rightarrow (C_{qk}, W, H) \frac{1}{H} \right) \rightarrow (W, C_{qk}) $$

  • 局部细节增强部分:
    $$ y_o = \sum_{p \in N^{m \times m}(o)} \text{softmax}_p(q > o \cdot k_p) \cdot v_p $$

    $$ y_o = \sum_{p \in N^{1 \times W}(o)} \text{softmax}_p(q > o \cdot k_p) \cdot v_p + \sum_{p \in N^{H \times 1}(o)} \text{softmax}_p(q > o \cdot k_p) \cdot v_p $$

在这些公式中,$q(h)$ 和 $q(v)$ 分别表示全局语义提取部分的查询向量,$y_o$ 表示输出向量,$k_p$ 和 $v_p$ 分别表示键向量和数值向量,$N^{m \times m}(o)$、$N^{1 \times W}(o)$ 和 $N^{H \times 1}(o)$ 分别表示局部邻域的位置集合。

核心代码


class Sea_Attention(torch.nn.Module):
    def __init__(self, dim, key_dim=16, num_heads=4,
                 attn_ratio=2,
                 activation=None,
                 norm_cfg=dict(type='BN', requires_grad=True), ):
        super().__init__()
        self.num_heads = num_heads
        self.scale = key_dim ** -0.5
        self.key_dim = key_dim
        self.nh_kd = nh_kd = key_dim * num_heads  # num_head key_dim
        self.d = int(attn_ratio * key_dim)
        self.dh = int(attn_ratio * key_dim) * num_heads
        self.attn_ratio = attn_ratio

        self.to_q = Conv2d_BN(dim, nh_kd, 1, norm_cfg=norm_cfg)
        self.to_k = Conv2d_BN(dim, nh_kd, 1, norm_cfg=norm_cfg)
        self.to_v = Conv2d_BN(dim, self.dh, 1, norm_cfg=norm_cfg)

        self.proj = torch.nn.Sequential(activation(), Conv2d_BN(
            self.dh, dim, bn_weight_init=0, norm_cfg=norm_cfg))
        self.proj_encode_row = torch.nn.Sequential(activation(), Conv2d_BN(
            self.dh, self.dh, bn_weight_init=0, norm_cfg=norm_cfg))
        self.pos_emb_rowq = SqueezeAxialPositionalEmbedding(nh_kd, 16)
        self.pos_emb_rowk = SqueezeAxialPositionalEmbedding(nh_kd, 16)

        self.proj_encode_column = torch.nn.Sequential(activation(), Conv2d_BN(
            self.dh, self.dh, bn_weight_init=0, norm_cfg=norm_cfg))
        self.pos_emb_columnq = SqueezeAxialPositionalEmbedding(nh_kd, 16)
        self.pos_emb_columnk = SqueezeAxialPositionalEmbedding(nh_kd, 16)

        self.dwconv = Conv2d_BN(self.dh + 2 * self.nh_kd, 2 * self.nh_kd + self.dh, ks=3, stride=1, pad=1, dilation=1,
                                groups=2 * self.nh_kd + self.dh, norm_cfg=norm_cfg)
        self.act = activation()
        self.pwconv = Conv2d_BN(2 * self.nh_kd + self.dh, dim, ks=1, norm_cfg=norm_cfg)
        self.sigmoid = h_sigmoid()

task与yaml配置

详见:https://blog.csdn.net/shangyanaf/article/details/139652325

相关文章
|
机器学习/深度学习 PyTorch Go
YOLOv5的Tricks | 【Trick4】参数重结构化(融合Conv+BatchNorm2d)
这篇文章是想要记录yolov5在模型搭建过程中的一个融合模块,就是把卷积与批归一化的参数进行融合,想卷积带有批归一化的性质,使得推理过程中可以加快模型推理速度,简化整个模型结构,实现训练与推理两个阶段的解耦。
930 0
YOLOv5的Tricks | 【Trick4】参数重结构化(融合Conv+BatchNorm2d)
|
6月前
|
机器学习/深度学习 网络架构 计算机视觉
YOLOv5改进有效涨点系列->适合多种检测场景的BiFormer注意力机制(Bi-level Routing Attention)
YOLOv5改进有效涨点系列->适合多种检测场景的BiFormer注意力机制(Bi-level Routing Attention)
325 0
|
14天前
|
机器学习/深度学习 计算机视觉
【YOLOv11改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征
【YOLOv11改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征本文提出了一种全局注意力机制,通过保留通道和空间信息,增强跨维度的交互,减少信息损失。该机制结合3D置换与多层感知器用于通道注意力,卷积空间注意力子模块用于空间注意力。实验结果表明,在CIFAR-100和ImageNet-1K数据集上,该方法在ResNet和MobileNet上优于多种最新注意力机制。
【YOLOv11改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征
|
14天前
|
机器学习/深度学习 计算机视觉 Python
【YOLOv11改进 - 注意力机制】EMA(Efficient Multi-Scale Attention):基于跨空间学习的高效多尺度注意力
【YOLOv11改进 - 注意力机制】EMA(Efficient Multi-Scale Attention):基于跨空间学习的高效多尺度注意力.EMA(Efficient Multi-Scale Attention)模块是一种高效多尺度注意力机制,旨在提高计算机视觉任务中的特征表示效果。该模块通过结合通道和空间信息、采用多尺度并行子网络结构以及优化坐标注意力机制,实现了更高效和有效的特征表示。EMA模块在图像分类和目标检测任务中表现出色,使用CIFAR-100、ImageNet-1k、MS COCO和VisDrone2019等数据集进行了广泛测试。
【YOLOv11改进 - 注意力机制】EMA(Efficient Multi-Scale Attention):基于跨空间学习的高效多尺度注意力
|
14天前
|
机器学习/深度学习 编解码 算法
【YOLOv11改进 - 注意力机制】MLCA(Mixed local channel attention):混合局部通道注意力
【YOLOv11改进 - 注意力机制】MLCA(Mixed local channel attention):混合局部通道注意力本项目提出了一种轻量级的 Mixed Local Channel Attention (MLCA) 模块,结合通道信息和空间信息,提升网络表达效果。基于此模块,开发了 MobileNet-Attention-YOLO (MAY) 算法,在 Pascal VOC 和 SMID 数据集上表现优异,mAP 分别提高了 1.0% 和 1.5%。MLCA 通过局部池化、一维卷积和信息融合,有效捕获局部和全局信息。项目代码和详细配置可在 GitHub 和 CSDN 获取。
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【YOLOv8改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征
YOLO目标检测专栏探讨了模型创新,如注意力机制,聚焦通道和空间信息的全局注意力模组(GAM),提升DNN性能。GAM在ResNet和MobileNet上优于最新方法。论文及PyTorch代码可在给出的链接找到。核心代码展示了GAM的构建,包含线性层、卷积和Sigmoid激活,用于生成注意力图。更多配置详情参阅相关博客文章。
【YOLOv8改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征
|
4月前
|
机器学习/深度学习 算法 测试技术
【YOLOv8改进 - 注意力机制】Focused Linear Attention :全新的聚焦线性注意力模块
YOLOv8专栏探讨了该目标检测算法的创新改进,包括使用聚焦线性注意力模块,解决了Transformer在视觉任务中的效率和表达力问题。该模块增强自注意力,提高焦点能力和特征多样性,保持线性复杂度。文章提供了实证证据证明其在多个基准上的性能提升,并在GitHub上发布了代码。论文和更多实战案例链接见文中。
|
4月前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv10改进-注意力机制】HAT(Hybrid Attention Transformer,)混合注意力机制
YOLOv10专栏介绍了一种名为HAT的新方法,旨在改善Transformer在图像超分辨率中的表现。HAT结合通道和窗口注意力,激活更多像素并增强跨窗口信息交互。亮点包括:1) 更多像素激活,2) 有效跨窗口信息聚合,3) 任务特定的预训练策略。HAT模型包含浅层特征提取、深层特征提取和图像重建阶段。提供的代码片段展示了HAT类的定义,参数包括不同层的深度、注意力头数量、窗口大小等。欲了解更多详情和配置,请参考给定链接。
|
5月前
|
机器学习/深度学习 计算机视觉
YOLOv8改进 | 卷积模块 | 在主干网络中添加/替换蛇形卷积Dynamic Snake Convolution
本专栏介绍的DSCNet采用蛇形动态卷积,增强对管状结构特征提取,尤其适合血管等弯曲目标。动态卷积核自适应调整,灵感来自蛇形曲线,能灵活捕捉不同尺度细节。论文及官方代码链接已提供,适用于提升目标检测的准确性和鲁棒性。
|
5月前
|
机器学习/深度学习 算法 计算机视觉
【YOLOv8改进】CPCA(Channel prior convolutional attention)中的通道注意力,增强特征表征能力 (论文笔记+引入代码)
该专栏聚焦YOLO目标检测的创新改进与实战,介绍了一种针对医学图像分割的通道优先卷积注意力(CPCA)方法。CPCA结合通道和空间注意力,通过多尺度深度卷积提升性能。提出的CPCANet网络在有限计算资源下,于多个数据集上展现优越分割效果。代码已开源。了解更多详情,请访问提供的专栏链接。