首页 > 其他分享 >YOLO11改进|注意力机制篇|引入MSCA注意力机制

YOLO11改进|注意力机制篇|引入MSCA注意力机制

时间:2024-10-09 09:52:01浏览次数:11  
标签:dim YOLO11 nn 卷积 self MSCA attn 机制 注意力

在这里插入图片描述

目录

一、【MSCA】注意力机制

1.1【MSCA】注意力介绍

在这里插入图片描述

下图是【MSCA】的结构图,让我们简单分析一下运行过程和优势

  • 处理过程:
  • 多尺度卷积(Multi-Scale Convolution):MSCA 模块的核心是多尺度卷积,它使用不同尺寸的卷积核(如 7×1、11×1、21×1 等)来提取特征。这些不同尺寸的卷积核能够捕捉到不同感受野中的信息,从而增强模型对不同大小目标的检测能力。图中的多个卷积核(d.7x1、d.11x1 等)从不同尺度上提取空间特征,获取从局部到全局的多尺度信息。
  • 通道混合(Channel Mixing):在多尺度卷积操作后,所有尺度的特征会通过通道混合操作进行融合。这个步骤通过 1x1 卷积对不同通道的信息进行整合,提升了特征间的相关性。
  • 卷积注意力(Convolutional Attention):MSCA 最后一步是卷积注意力机制,它利用卷积操作捕捉图像中的关键区域,并对不同位置的特征进行加权,以强调重要的特征区域。这个过程可以使模型更关注关键信息,抑制背景噪声。
  • 优势:
  • 多尺度感知能力:通过多种不同尺寸的卷积核,MSCA 可以捕捉到不同尺度的特征,无论是大目标还是小目标,都能够被有效检测到。这种多尺度特征提取能力特别适合处理复杂场景和具有多样性尺寸的目标。
  • 局部与全局信息的有效结合:MSCA 模块不仅能提取局部细节信息,还能够通过较大感受野的卷积捕获全局上下文信息。这种局部和全局信息的结合提高了检测的精度和鲁棒性。
  • 轻量化与高效性:通过 1x1 卷积进行通道混合,可以有效减少参数量和计算量,使得模型在保证高效检测的同时也具备轻量化的特性,适用于资源有限的应用场景。
  • 注意力机制增强:引入卷积注意力机制后,模型能够自适应地调整对不同区域的关注度,从而提高了对关键信息的捕捉能力,减少了背景干扰的影响。
    在这里插入图片描述

1.2【MSCA】核心代码

import torch
import torch.nn as nn
from torch.nn import functional as F



class MSCA(nn.Module):
    def __init__(self, dim):
        super().__init__()
        # 使用5x5核的卷积层,应用深度卷积
        self.conv0 = nn.Conv2d(dim, dim, 5, padding=2, groups=dim)

        # 两组卷积层,分别使用1x7和7x1核,用于跨度不同的特征提取,均应用深度卷积
        self.conv0_1 = nn.Conv2d(dim, dim, (1, 7), padding=(0, 3), groups=dim)
        self.conv0_2 = nn.Conv2d(dim, dim, (7, 1), padding=(3, 0), groups=dim)

        # 另外两组卷积层,使用更大的核进行特征提取,分别为1x11和11x1,也是深度卷积
        self.conv1_1 = nn.Conv2d(dim, dim, (1, 11), padding=(0, 5), groups=dim)
        self.conv1_2 = nn.Conv2d(dim, dim, (11, 1), padding=(5, 0), groups=dim)

        # 使用最大尺寸的核进行特征提取,为1x21和21x1,深度卷积
        self.conv2_1 = nn.Conv2d(dim, dim, (1, 21), padding=(0, 10), groups=dim)
        self.conv2_2 = nn.Conv2d(dim, dim, (21, 1), padding=(10, 0), groups=dim)

        # 最后一个1x1卷积层,用于整合上述所有特征提取的结果
        self.conv3 = nn.Conv2d(dim, dim, 1)

    def forward(self, x):
        u = x.clone() # 克隆输入x,以便之后与注意力加权的特征进行相乘
        attn = self.conv0(x) # 应用初始的5x5卷积

        # 应用1x7和7x1卷积,进一步提取特征
        attn_0 = self.conv0_1(attn)
        attn_0 = self.conv0_2(attn_0)

        # 应用1x11和11x1卷积,进一步提取特征
        attn_1 = self.conv1_1(attn)
        attn_1 = self.conv1_2(attn_1)

        # 应用1x21和21x1卷积,进一步提取特征
        attn_2 = self.conv2_1(attn)
        attn_2 = self.conv2_2(attn_2)
        attn = attn + attn_0 + attn_1 + attn_2 # 将所有特征提取的结果相加

        attn = self.conv3(attn) # 应用最后的1x1卷积层整合特征

        return attn * u # 将原始输入和注意力加权的特征相乘,返回最终结果

if __name__ == "__main__":
    # 创建 AttentionModule 实例,这里以64个通道为例
    attention_module = MSCA(dim=64)

    # 创建一个假的输入数据,维度为 [batch_size, channels, height, width]
    # 例如,1个样本,64个通道,64x64的图像
    input_tensor = torch.rand(1, 64, 64, 64)

    # 通过AttentionModule处理输入
    output_tensor = attention_module(input_tensor)

    # 打印输出张量的形状
    print(output_tensor.shape)

二、添加【MSCA】注意力机制

2.1STEP1

首先找到ultralytics/nn文件路径下新建一个Add-module的python文件包【这里注意一定是python文件包,新建后会自动生成_init_.py】,如果已经跟着我的教程建立过一次了可以省略此步骤,随后新建一个MSCA.py文件并将上文中提到的注意力机制的代码全部粘贴到此文件中,如下图所示在这里插入图片描述

2.2STEP2

在STEP1中新建的_init_.py文件中导入增加改进模块的代码包如下图所示在这里插入图片描述

2.3STEP3

找到ultralytics/nn文件夹中的task.py文件,在其中按照下图添加在这里插入图片描述

2.4STEP4

定位到ultralytics/nn文件夹中的task.py文件中的def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)函数添加如图代码,【如果不好定位可以直接ctrl+f搜索定位】

在这里插入图片描述

三、yaml文件与运行

3.1yaml文件

以下是添加【MSCA】注意力机制在Backbone中的yaml文件,大家可以注释自行调节,效果以自己的数据集结果为准

# Ultralytics YOLO 

标签:dim,YOLO11,nn,卷积,self,MSCA,attn,机制,注意力
From: https://blog.csdn.net/A1983Z/article/details/142767445

相关文章

  • JAVA基础: synchronized 和 lock的区别、synchronized锁机制与升级
    1synchronized和lock的区别synchronized是一个关键字,lock是一个接口,实际使用的是实现类synchronized通过触发的是系统级别的锁机制,lock是API级别的锁机制synchronized自动获得锁,自动释放锁。lock需要通过方法获得锁并释放锁synchronized可以修饰代码段和方法,lock......
  • YOLO11改进 | 注意力机制 | 反向残差注意力机制
     秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • YOLO11改进 | 注意力机制 | 十字交叉注意力机制CrissCrossAttention【含目标检测,语义
    秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • YOLOv8改进 - 注意力篇 - 引入SimAM注意力机制
    一、本文介绍作为入门性篇章,这里介绍了SimAM注意力在YOLOv8中的使用。包含SimAM原理分析,SimAM的代码、SimAM的使用方法、以及添加以后的yaml文件及运行记录。二、SimAM原理分析SimAM官方论文地址:SimAM文章SimAM官方代码地址:SimAM源代码​SimAM注意力机制:是一种轻量级的自......
  • YOLOv8改进 - 注意力篇 - 引入EMA注意力机制
    一、本文介绍作为入门性篇章,这里介绍了EMA注意力在YOLOv8中的使用。包含EMA原理分析,EMA的代码、EMA的使用方法、以及添加以后的yaml文件及运行记录。二、EMA原理分析EMA官方论文地址:EMA文章EMA代码:EMA代码EMA注意力机制(高效的多尺度注意力):通过重塑部分通道到批次维度,并将......
  • YOLOv11改进 | 注意力篇 | YOLOv11引入24年最新Mamba注意力机制MLLAttention
    1. MLLAttention介绍1.1 摘要:Mamba是一种有效的状态空间模型,具有线性计算复杂度。最近,它在处理各种视觉任务的高分辨率输入方面表现出了令人印象深刻的效率。在本文中,我们揭示了强大的Mamba模型与线性注意力Transformer具有惊人的相似之处,而线性注意力Transforme......
  • YOLO11改进|卷积篇|引入轻量级自适应提取卷积LAE
    目录一、【LAE】卷积1.1【LAE】卷积介绍1.2【LAE】核心代码二、添加【LAE】卷积机制2.1STEP12.2STEP22.3STEP32.4STEP4三、yaml文件与运行3.1yaml文件3.2运行成功截图一、【LAE】卷积1.1【LAE】卷积介绍下图是【LAE】卷积的结构图,让我们简单分析一下运行过程......
  • 深度学习中的注意力机制:原理、应用与发展
    一、引言在深度学习领域,注意力机制(AttentionMechanism)已经成为一种极为重要的技术手段。它的出现使得模型能够像人类一样,在处理大量信息时聚焦于关键部分,从而提高模型的性能和效率。从自然语言处理到计算机视觉等多个领域,注意力机制都展现出了卓越的能力,极大地推动了深度......
  • 技术解读GaussDB (for MySQL)流控机制
    本文分享自华为云社区《【华为云MySQL技术专栏】GaussDB(forMySQL)流控技术解读》,作者:GaussDB数据库。本文主要介绍GaussDB(forMySQL)在不同服务层次上是如何实现过载保护的,具体包括反馈式和主动平滑流控两种机制。1.背景介绍GaussDB(forMySQL)是存储计算分离架构的云......
  • 数据库锁定机制
    数据库锁定机制话说如果你只是单纯的说"锁表",总是让人感觉有点Low,而我们就直接换个比较高大上一点的名词,锁定机制!为了保证数据的完整,也就是他的一致性和有效性,所以才会让数据库出现了锁定机制,相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不......