【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在模型搭建过程中的一个融合模块,就是把卷积与批归一化的参数进行融合,想卷积带有批归一化的性质,使得推理过程中可以加快模型推理速度,简化整个模型结构,实现训练与推理两个阶段的解耦。
850 0
YOLOv5的Tricks | 【Trick4】参数重结构化(融合Conv+BatchNorm2d)
|
4月前
|
机器学习/深度学习 网络架构 计算机视觉
YOLOv5改进有效涨点系列->适合多种检测场景的BiFormer注意力机制(Bi-level Routing Attention)
YOLOv5改进有效涨点系列->适合多种检测场景的BiFormer注意力机制(Bi-level Routing Attention)
267 0
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【YOLOv8改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征
YOLO目标检测专栏探讨了模型创新,如注意力机制,聚焦通道和空间信息的全局注意力模组(GAM),提升DNN性能。GAM在ResNet和MobileNet上优于最新方法。论文及PyTorch代码可在给出的链接找到。核心代码展示了GAM的构建,包含线性层、卷积和Sigmoid激活,用于生成注意力图。更多配置详情参阅相关博客文章。
【YOLOv8改进 - 注意力机制】GAM(Global Attention Mechanism):全局注意力机制,减少信息损失并放大全局维度交互特征
|
2月前
|
机器学习/深度学习 算法 测试技术
【YOLOv8改进 - 注意力机制】Focused Linear Attention :全新的聚焦线性注意力模块
YOLOv8专栏探讨了该目标检测算法的创新改进,包括使用聚焦线性注意力模块,解决了Transformer在视觉任务中的效率和表达力问题。该模块增强自注意力,提高焦点能力和特征多样性,保持线性复杂度。文章提供了实证证据证明其在多个基准上的性能提升,并在GitHub上发布了代码。论文和更多实战案例链接见文中。
|
2月前
|
机器学习/深度学习 编解码 计算机视觉
【YOLOv10改进-注意力机制】HAT(Hybrid Attention Transformer,)混合注意力机制
YOLOv10专栏介绍了一种名为HAT的新方法,旨在改善Transformer在图像超分辨率中的表现。HAT结合通道和窗口注意力,激活更多像素并增强跨窗口信息交互。亮点包括:1) 更多像素激活,2) 有效跨窗口信息聚合,3) 任务特定的预训练策略。HAT模型包含浅层特征提取、深层特征提取和图像重建阶段。提供的代码片段展示了HAT类的定义,参数包括不同层的深度、注意力头数量、窗口大小等。欲了解更多详情和配置,请参考给定链接。
|
3月前
|
存储 人工智能 算法
Multi-Head RAG:多头注意力的激活层作为嵌入进行文档检索
现有的RAG解决方案可能因为最相关的文档的嵌入可能在嵌入空间中相距很远,这样会导致检索过程变得复杂并且无效。为了解决这个问题,论文引入了多头RAG (MRAG),这是一种利用Transformer的多头注意层的激活而不是解码器层作为获取多方面文档的新方案。
53 1
|
3月前
|
机器学习/深度学习 算法 计算机视觉
【YOLOv8改进】CPCA(Channel prior convolutional attention)中的通道注意力,增强特征表征能力 (论文笔记+引入代码)
该专栏聚焦YOLO目标检测的创新改进与实战,介绍了一种针对医学图像分割的通道优先卷积注意力(CPCA)方法。CPCA结合通道和空间注意力,通过多尺度深度卷积提升性能。提出的CPCANet网络在有限计算资源下,于多个数据集上展现优越分割效果。代码已开源。了解更多详情,请访问提供的专栏链接。
|
3月前
|
机器学习/深度学习 编解码 PyTorch
【YOLOv8改进】HAT(Hybrid Attention Transformer,)混合注意力机制 (论文笔记+引入代码)
YOLO目标检测专栏介绍了YOLO系列的改进方法和实战应用,包括卷积、主干网络、注意力机制和检测头的创新。提出的Hybrid Attention Transformer (HAT)结合通道注意力和窗口自注意力,激活更多像素以提升图像超分辨率效果。通过交叉窗口信息聚合和同任务预训练策略,HAT优化了Transformer在低级视觉任务中的性能。实验显示,HAT在图像超分辨率任务上显著优于现有方法。模型结构包含浅层和深层特征提取以及图像重建阶段。此外,提供了HAT模型的PyTorch实现代码。更多详细配置和任务说明可参考相关链接。
|
3月前
|
机器学习/深度学习 测试技术 计算机视觉
【YOLOv8改进】DAT(Deformable Attention):可变性注意力 (论文笔记+引入代码)
YOLO目标检测创新改进与实战案例专栏探讨了YOLO的有效改进,包括卷积、主干、注意力和检测头等机制的创新,以及目标检测分割项目的实践。专栏介绍了Deformable Attention Transformer,它解决了Transformer全局感受野带来的问题,通过数据依赖的位置选择、灵活的偏移学习和全局键共享,聚焦相关区域并捕获更多特征。模型在多个基准测试中表现优秀,代码可在GitHub获取。此外,文章还展示了如何在YOLOv8中应用Deformable Attention。
|
3月前
|
测试技术 计算机视觉
【YOLOv8改进】LSKA(Large Separable Kernel Attention):大核分离卷积注意力模块 (论文笔记+引入代码)
YOLO目标检测专栏介绍了大可分卷积核注意力模块LSKA,用于解决VAN中大卷积核效率问题。LSKA通过分解2D卷积为1D卷积降低计算复杂度和内存占用,且使模型关注形状而非纹理,提高鲁棒性。在多种任务和数据集上,LSKA表现优于ViTs和ConvNeXt,代码可在GitHub获取。基础原理包括LSKA的卷积核分解设计和计算效率优化。示例展示了LSKA模块的实现。更多详情及配置参见相关链接。
下一篇
DDNS