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

news2024/11/22 22:18:41

在这里插入图片描述

目录

    • 一、【MSCA】注意力机制
      • 1.1【MSCA】注意力介绍
      • 1.2【MSCA】核心代码
    • 二、添加【MSCA】注意力机制
      • 2.1STEP1
      • 2.2STEP2
      • 2.3STEP3
      • 2.4STEP4
    • 三、yaml文件与运行
      • 3.1yaml文件
      • 3.2运行成功截图

一、【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 🚀, AGPL-3.0 license
# YOLO11 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.50, 0.25, 1024] # summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPs
  s: [0.50, 0.50, 1024] # summary: 319 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPs
  m: [0.50, 1.00, 512] # summary: 409 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPs
  l: [1.00, 1.00, 512] # summary: 631 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPs
  x: [1.00, 1.50, 512] # summary: 631 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs

# YOLO11n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 2, C3k2, [256, False, 0.25]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 2, C3k2, [512, False, 0.25]]
  - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
  - [-1, 2, C3k2, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
  - [-1, 2, C3k2, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]] # 9
  - [-1, 1, MSCA,[]]
  - [-1, 2, C2PSA, [1024]] # 10

# YOLO11n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 2, C3k2, [512, False]] # 13

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 2, C3k2, [256, False]] # 16 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 14], 1, Concat, [1]] # cat head P4
  - [-1, 2, C3k2, [512, False]] # 19 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 11], 1, Concat, [1]] # cat head P5
  - [-1, 2, C3k2, [1024, True]] # 22 (P5/32-large)

  - [[17, 20, 23], 1, Detect, [nc]] # Detect(P3, P4, P5)

以上添加位置仅供参考,具体添加位置以及模块效果以自己的数据集结果为准

3.2运行成功截图

在这里插入图片描述

OK 以上就是添加【MSCA】注意力机制的全部过程了,后续将持续更新尽情期待

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2197320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

硬件SPI解析-基于江科大的源码

一、SPI基本介绍 SPI(Serial Peripheral Interface)通信协议是由摩托罗拉公司(现为NXP Semiconductors的一部分)在20世纪80年代中期开发的。SPI是一种同步串行通信接口,设计用于短距离通信,特别是嵌入式系统…

图片怎么转换成pdf格式?这5种转换方法一看就会

在工作学习中,PDF格式因其跨平台兼容性和安全性成为了工作和学习中不可或缺的文件格式。然而,很多时候我们需要将图片转换为PDF,以便更好地整理、分享和保存。今天,就为大家介绍5种高效的图片转PDF方法,一起来学习下吧…

让机器来洞察他的内心!

本文所涉及所有资源均在传知代码平台可获取。 目录 洞察你的内心:你真的这么认为吗? 一、研究背景 二、模型结构和代码 D. 不一致性学习网络 E. 多模态讽刺分类 三、数据集介绍 四、性能展示 五、实现过程 1. 下载预训练的 GloVe 词向量(Comm…

端口被占用问题的解决方案

一、问题描述 如图,启动服务失败,失败原因是8080端口被占用 二、解决方案 1.更换端口为其它,例如8002 9001等 2.关闭占用端口的进程,推荐这种解决方案 步骤一:在win命令行查询占用该端口号的进程 命令如下 netsta…

使用浏览器这么多年,你真的了解DevTools吗?

Devtools是Web测试时每天都要用的工具,它提供了很多调试功能,可以帮助我们更好的定位问题。而我们平时使用的功能只是它全部功能的子集,很多功能并没用到过。 作为高频使用的工具,还是有必要好好掌握的。测试时在日常工作中提BUG…

项目前置知识

目录 std::bind 定时器 timerfd 时间轮设计 C11正则库 日志打印宏 通用类型ANY std::bind std::bind是C11提供的一个接口,他的功能:传递一个原始函数对象,对其绑定某些参数,生成一个新的函数对象。 其实简单来说&#xff…

YOLO--前置基础词-学习总结(上)

RFBNet是什么意思 RFBNet 是一种用于目标检测的深度学习网络,它的名字来源于 "Receptive Field Block Network"(感受野块网络)。简单来说,RFBNet 是一种可以让计算机更好地“看”图像中不同大小的物体的方法。 在图像处…

混凝土裂缝检测分割系统源码&数据集分享

混凝土裂缝检测分割系统源码&数据集分享 [yolov8-seg-RCSOSA&yolov8-seg-C2f-REPVGGOREPA等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glo…

时间序列+Transformer席卷而来,性能秒杀传统,创新性拉满,引爆顶会!

时间序列分析与Transformer模型的结合,已成为深度学习领域的一大趋势。这种结合能够高效捕捉序列中的长期依赖关系,提升时间序列分析和预测的准确性。 时间序列Transformer技术在股票价格预测、气候预测、交通流量预测、设备故障预测、自然语言处理等多…

43页PPT | 大健康行业BI解决方案

药企应用现状与挑战 大健康行业中的药企在数据分析方面仍面临诸多挑战。传统的数据分析模式依赖于纸质记录和线下手动更新,导致数据时效性低、人力成本高,难以快速发挥数据价值。随着数据量的激增,多源数据的归集和整合成为药企数据分析的难点…

Python画笔案例-080 绘制 颜色亮度测试

1、绘制 颜色亮度测试 通过 python 的turtle 库绘制 颜色亮度测试,如下图: 2、实现代码 绘制 颜色亮度测试,以下为实现代码: """颜色亮度测试.py本程序需要coloradd模块支持,请在cmd窗口,即命令提示符下输入pip install coloradd进行安装。本程序演示brig…

JavaSE——面向对象6.1:继承知识点补充(虚方法表等)

目录 一、子类到底能继承父类中的哪些内容? 二、继承内存图 三、继承中:成员变量和成员方法的访问特点 (一)成员变量的访问特点 (二)成员方法的访问特点 1.this与super访问成员方法的特点 2.方法重写 2.1方法重写的本质:子类覆盖了从…

社区交流礼仪 | 提问的艺术

唠唠闲话 2021 年通过 Julia 社区了解到开源,自此开始融入开源社区,学习和体验这种独特的协作模式与交流文化,受益良多。本篇文章为开源新手必读,文章中探讨的交流模式,不仅对参与开源项目的协作有所帮助,…

计组体系软考题2-计算机组成原理与计算机体系结构概论

一、CPU组成(运算器控制器) 1.运算器 题1-存放操作数/运算结果的ACC累加寄存器 1. 2. 题2-加法器(算术逻辑单元的部件) 题3-判断对错 程序计数器PC(运算器),只存放地址题4- 2. 控制器 题1-…

10.8每日作业

当用户点击取消按钮,弹出问题对话框,询问是否要确定退出登录,并提供两个按钮,yes|No,如果用户点击的Yes,则关闭对话框,如果用户点击的No,则继续登录 当用户点击的登录按钮&#xff…

热网无线监测系统 GetMenuItem 接口存在SQL注入漏洞

漏洞描述 热网无线监测系统 /DataSrvs/UCCGSrv.asmx/GetMenuItem 接口处存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至…

Hydra 新手友好使用教程

1. Hydra 简介 Hydra是一款强大的网络登录暴力破解工具,支持多种协议。本教程将帮助新手快速上手,掌握常用指令和操作。 2. 基本语法 hydra [参数] 目标 3. 核心参数详解 3.1 用户名和密码设置 单个用户名: -l LOGIN 例:-l admin 用户名…

【LeetCode】动态规划—115. 不同的子序列(附完整Python/C++代码)

动态规划—115. 不同的子序列 前言题目描述基本思路1. 问题定义2. 理解问题和递推关系3. 解决方法3.1 动态规划方法3.2 空间优化的动态规划 4. 进一步优化5. 小总结 代码实现PythonPython3代码实现Python 代码解释 CC代码实现C 代码解释1. 变量定义:2. 初始化:3. 动态规划状态转…

高级算法设计与分析 学习笔记11 动态规划

要讲动态规划,当然少不了斐波拉及数列: 可以看到,动态规划效率高的秘诀就在于有记忆,不用做重复的事。 矩阵列乘法: 可以看到,只要找到了一个恰到好处的计算顺序(注意矩阵乘法只有结合律没有交换…

HT8513 内置自适应同步升压和防破音功能的6.5W D类及AB类音频功率放大器

1、特征 防削顶失真功能(防破音,Anti-Clipping Function, ACF) 免滤波器数字调制&#xff0c;直接驱动扬声器 输出功率 3W (VBAT3.3V, RL-4Ω, THDN<1%, 20-20kHz full band) 2.0W (VBAT3.3V, RL8Ω,THDN<1%, 20-20kHz full band) 6.5W (VBAT4.2V, RL2Ω, THDN10%,f1kHz…