【YOLOv8改进 - 注意力机制】S2Attention : 整合空间位移和分割注意力

简介: YOLOv8专栏探讨了MLP主干网络的创新,如S2-MLPv2,它通过通道扩展和分块空间移位提高性能,达到83.6%的ImageNet top-1准确率。文章介绍了分割注意力模块,用于融合特征图。提供了S2Attention类的代码示例,展示如何结合空间位移和分割注意力。详细内容和实战案例可在[CSDN博客](https://blog.csdn.net/shangyanaf)找到。

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

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

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

介绍

image-20240716171111387

摘要

最近,基于MLP的视觉骨干网络开始出现。与CNN和视觉Transformer相比,具有较少归纳偏差的MLP架构在图像识别中表现出竞争力。其中,采用直接空间移位操作的空间移位MLP(S2-MLP)比包括MLP-mixer和ResMLP在内的早期工作取得了更好的性能。最近,使用较小的补丁和金字塔结构,Vision Permutator(ViP)和Global Filter Network(GFNet)在性能上超过了S2-MLP。本文中,我们改进了S2-MLP视觉骨干网络。我们在通道维度上扩展特征图,并将扩展后的特征图分成若干部分,对分割部分进行不同的空间移位操作。同时,我们利用分割注意力操作融合这些分割部分。此外,类似于其他方法,我们采用了较小尺度的补丁并使用金字塔结构来提升图像识别的准确性。我们将改进后的空间移位MLP视觉骨干网络称为S2-MLPv2。使用55M参数,我们的中型模型S2-MLPv2-Medium在ImageNet-1K基准测试中使用224 × 224的图像,在没有自注意力和外部训练数据的情况下实现了83.6%的top-1准确率。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

分割注意力模块概述

分割注意力(Split Attention)模块旨在融合来自不同操作的多个特征图。这个模块在ResNeSt网络中首次提出,并被Vision Permutator等模型采用,用于增强特征图的表现能力。

具体实现步骤

  1. 特征图的平均计算

    • 假设有 $k$ 个大小为 $n \times c$ 的特征图$[X_1, X_2, \cdots, X_K]$,其中$(n$) 是patches的数量, $c$ 是通道数。
    • 首先,计算这些特征图的平均值:
      $$ a = \sum_{k=1}^{K} 1X_k $$
      其中, $1 \in \mathbb{R}^n$ 是一个全1的行向量。
  2. 通过MLP生成注意力权重

    • 计算得到的平均值 (a) 会经过一系列的MLP层生成注意力权重:
      $$ \hat{a} = \sigma(aW_1)W_2 $$
      其中,$\sigma$ 是GELU激活函数,$$W_1 \in \mathbb{R}^{c \times \bar{c}}\) 和 \(W_2 \in \mathbb{R}^{\bar{c} \times Kc}$$ 是MLP层的权重矩阵,$\hat{a} \in \mathbb{R}^{Kc}$ 是输出。
  3. 计算注意力矩阵

    • 输出 (\hat{a}) 会被重塑为矩阵 (\hat{A} \in \mathbb{R}^{K \times c}),然后通过softmax函数计算得到注意力矩阵:
      $$ \bar{A} = \text{softmax}(\hat{A}) $$
      其中,(\bar{A} \in \mathbb{R}^{K \times c})。
  4. 生成注意力特征图

    • 通过将每个特征图与注意力矩阵进行逐元素乘法,生成加权后的特征图 (\hat{X}):
      $$ \hat{X}[i, :] = \sum_{k=1}^{K} X_k[i, :] \odot \bar{A}[k, :] $$
      其中,(\odot) 表示逐元素乘法。

yolov8代码

class S2Attention(nn.Module):
    # S2注意力模块,整合空间位移和分割注意力
    def __init__(self, channels=512):
        super().__init__()
        # 定义MLP层
        self.mlp1 = nn.Linear(channels, channels * 3)
        self.mlp2 = nn.Linear(channels, channels)
        self.split_attention = SplitAttention()

    def forward(self, x):
        b, c, w, h = x.size()
        x = x.permute(0, 2, 3, 1)  # 调整维度顺序
        x = self.mlp1(x)  # 通过MLP层扩展特征
        x1 = spatial_shift1(x[:, :, :, :c])  # 应用第一种空间位移
        x2 = spatial_shift2(x[:, :, :, c:c * 2])  # 应用第二种空间位移
        x3 = x[:, :, :, c * 2:]  # 保留原始特征的一部分
        x_all = torch.stack([x1, x2, x3], 1)  # 堆叠特征
        a = self.split_attention(x_all)  # 应用分割注意力
        x = self.mlp2(a)  # 通过另一个MLP层缩减特征维度
        x = x.permute(0, 3, 1, 2)  # 调整维度顺序回原始
        return x

task与yaml配置

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

相关文章
|
PyTorch 算法框架/工具
Pytorch出现‘Tensor‘ object is not callable解决办法
Pytorch出现‘Tensor‘ object is not callable解决办法
1044 0
Pytorch出现‘Tensor‘ object is not callable解决办法
|
机器学习/深度学习 人工智能 自然语言处理
视觉 注意力机制——通道注意力、空间注意力、自注意力
本文介绍注意力机制的概念和基本原理,并站在计算机视觉CV角度,进一步介绍通道注意力、空间注意力、混合注意力、自注意力等。
14267 58
|
机器学习/深度学习 计算机视觉 网络架构
改进YOLOv8:添加CBAM注意力机制(涨点明显)
改进YOLOv8:添加CBAM注意力机制(涨点明显)
8374 1
|
机器学习/深度学习 数据可视化 测试技术
YOLO11实战:新颖的多尺度卷积注意力(MSCA)加在网络不同位置的涨点情况 | 创新点如何在自己数据集上高效涨点,解决不涨点掉点等问题
本文探讨了创新点在自定义数据集上表现不稳定的问题,分析了不同数据集和网络位置对创新效果的影响。通过在YOLO11的不同位置引入MSCAAttention模块,展示了三种不同的改进方案及其效果。实验结果显示,改进方案在mAP50指标上分别提升了至0.788、0.792和0.775。建议多尝试不同配置,找到最适合特定数据集的解决方案。
3572 0
|
并行计算 PyTorch Shell
YOLOv11改进策略【Neck】| 有效且轻量的动态上采样算子:DySample
YOLOv11改进策略【Neck】| 有效且轻量的动态上采样算子:DySample
1162 11
YOLOv11改进策略【Neck】| 有效且轻量的动态上采样算子:DySample
|
机器学习/深度学习 自然语言处理 计算机视觉
【YOLOv11改进 - 注意力机制】CoTAttention:上下文转换器注意力
【YOLOv11改进 - 注意力机制】CoTAttention:上下文转换器注意力Contextual Transformer (CoT) 是一种新型的Transformer风格模块,通过3×3卷积对输入键进行上下文编码,生成静态上下文表示,并通过两个1×1卷积学习动态多头注意力矩阵,增强视觉表示能力。CoTNet将CoT块应用于ResNet架构中,替代3×3卷积,提升图像识别、目标检测和实例分割等任务的性能。源码可在GitHub获取。
【YOLOv11改进 - 注意力机制】CoTAttention:上下文转换器注意力
|
机器学习/深度学习 编解码 PyTorch
CVPR 2023 | 主干网络FasterNet 核心解读 代码分析
本文分享来自CVPR 2023的论文,提出了一种快速的主干网络,名为FasterNet。核心算子是PConv,partial convolution,部分卷积,通过减少冗余计算和内存访问来更有效地提取空间特征。
10668 58
|
并行计算 PyTorch Linux
大概率(5重方法)解决RuntimeError: CUDA out of memory. Tried to allocate ... MiB
大概率(5重方法)解决RuntimeError: CUDA out of memory. Tried to allocate ... MiB
11293 0
|
机器学习/深度学习 存储 计算机视觉
【YOLOv8改进】BRA(bi-level routing attention ):双层路由注意力(论文笔记+引入代码)
**BiFormer和HCANet摘要** BiFormer是CVPR2023提出的一种新型视觉Transformer,采用双层路由注意力机制实现动态稀疏注意力,优化计算效率和内存使用,适用于图像分类、目标检测和语义分割任务。代码可在GitHub获取。另一方面,HCANet是针对高光谱图像去噪的深度学习模型,融合CNN和Transformer,强化全局和局部特征建模,通过多尺度前馈网络提升去噪效果。HCANet在HSI数据集上表现优秀,其代码同样开放源代码。
|
机器学习/深度学习 计算机视觉
YOLOv8改进 | 卷积模块 | 在主干网络中添加/替换蛇形卷积Dynamic Snake Convolution
本专栏介绍的DSCNet采用蛇形动态卷积,增强对管状结构特征提取,尤其适合血管等弯曲目标。动态卷积核自适应调整,灵感来自蛇形曲线,能灵活捕捉不同尺度细节。论文及官方代码链接已提供,适用于提升目标检测的准确性和鲁棒性。

热门文章

最新文章