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

YOLOv11改进 | 注意力篇 | YOLOv11引入CBAM注意力机制

时间:2024-10-01 12:23:36浏览次数:10  
标签:__ nn CBAM self YOLOv11 512 注意力 size

1.CBAM介绍

摘要:我们提出了卷积块注意力模块(CBAM),这是一种用于前馈卷积神经网络的简单而有效的注意力模块。 给定中间特征图,我们的模块沿着两个独立的维度(通道和空间)顺序推断注意力图,然后将注意力图乘以输入特征图以进行自适应特征细化。 由于 CBAM 是一个轻量级通用模块,因此它可以无缝集成到任何 CNN 架构中,且开销可以忽略不计,并且可以与基础 CNN 一起进行端到端训练。 我们通过在 ImageNet-1K、MS COCO 检测和 VOC 2007 检测数据集上进行大量实验来验证我们的 CBAM。 我们的实验表明各种模型的分类和检测性能得到了一致的改进,证明了 CBAM 的广泛适用性。 代码和模型将公开。

官方论文地址:CBAM论文

官方代码地址:CBAM代码

简单介绍:CBAM的主要思想是通过关注重要的特征并抑制不必要的特征来增强网络的表示能力。模块首先应用通道注意力,关注"重要的"特征,然后应用空间注意力,关注这些特征的"重要位置"。通过这种方式,CBAM有效地帮助网络聚焦于图像中的关键信息,提高了特征的表示力度,下图为其原理结构图。

2.核心代码

import torch
import torch.nn as nn
 
 
class ChannelAttention(nn.Module):
    """Channel-attention module https://github.com/open-mmlab/mmdetection/tree/v3.0.0rc1/configs/rtmdet."""
 
    def __init__(self, channels: int) -> None:
        """Initializes the class and sets the basic configurations and instance variables required."""
        super().__init__()
        self.pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Conv2d(channels, channels, 1, 1, 0, bias=True)
        self.act = nn.Sigmoid()
 
    def forward(self, x: torch.Tensor) -> torch.Tensor:
        """Applies forward pass using activation on convolutions of the input, optionally using batch normalization."""
        return x * self.act(self.fc(self.pool(x)))
 
 
class SpatialAttention(nn.Module):
    """Spatial-attention module."""
 
    def __init__(self, kernel_size=7):
        """Initialize Spatial-attention module with kernel size argument."""
        super().__init__()
        assert kernel_size in (3, 7), "kernel size must be 3 or 7"
        padding = 3 if kernel_size == 7 else 1
        self.cv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False)
        self.act = nn.Sigmoid()
 
    def forward(self, x):
        """Apply channel and spatial attention on input for feature recalibration."""
        return x * self.act(self.cv1(torch.cat([torch.mean(x, 1, keepdim=True), torch.max(x, 1, keepdim=True)[0]], 1)))
 
 
class CBAM(nn.Module):
    """Convolutional Block Attention Module."""
 
    def __init__(self, c1, kernel_size=7):
        """Initialize CBAM with given input channel (c1) and kernel size."""
        super().__init__()
        self.channel_attention = ChannelAttention(c1)
        self.spatial_attention = SpatialAttention(kernel_size)
 
    def forward(self, x):
        """Applies the forward pass through C1 module."""
        return self.spatial_attention(self.channel_attention(x))

3.YOLOv11中添加CBAM方式  

3.1 在ultralytics/nn下新建Extramodule

3.2 在Extramodule里创建CBAM

在CBAM.py文件里添加给出的CBAM代码

添加完CBAM代码后,在ultralytics/nn/Extramodule/__init__.py文件中引用

3.3 在tasks.py里引用

在ultralytics/nn/tasks.py文件里引用Extramodule

在tasks.py找到parse_model(ctrl+f可以直接搜索parse_model位置)

添加如下代码:

        elif m in {CBAM}:
            c2 = ch[f]
            args = [c2, *args]

4.新建一个yolo11CBAM.yaml文件

# Ultralytics YOLO 

标签:__,nn,CBAM,self,YOLOv11,512,注意力,size
From: https://blog.csdn.net/tsg6698/article/details/142650154

相关文章

  • YOLOv8改进 - 注意力篇 - 引入SCAM注意力机制
    一、本文介绍作为入门性篇章,这里介绍了SCAM注意力在YOLOv8中的使用。包含SCAM原理分析,SCAM的代码、SCAM的使用方法、以及添加以后的yaml文件及运行记录。二、SCAM原理分析SCAM官方论文地址:SCAM文章SCAM官方代码地址:SCAM代码​SCAM注意力机制(空间上下文感知模块):空间上下......
  • YOLOv8改进 - 注意力篇 - 引入(A2-Nets)Double Attention Networks注意力机制
    一、本文介绍作为入门性篇章,这里介绍了A2-Nets网络注意力在YOLOv8中的使用。包含A2-Nets原理分析,A2-Nets的代码、A2-Nets的使用方法、以及添加以后的yaml文件及运行记录。二、A2-Nets原理分析A2-Nets官方论文地址:A2-Nets文章A2-Nets注意力机制(双重注意力机制):它从输入图......
  • YOLOv8改进 - 注意力篇 - 引入SK网络注意力机制
    一、本文介绍作为入门性篇章,这里介绍了SK网络注意力在YOLOv8中的使用。包含SK原理分析,SK的代码、SK的使用方法、以及添加以后的yaml文件及运行记录。二、SK原理分析SK官方论文地址:SK注意力文章SK注意力机制:SK网络中的神经元可以捕获具有不同比例的目标对象,实验验证了神经......
  • EfficientViT(2023CVPR):具有级联组注意力的内存高效视觉Transformer!
    EfficientViT:MemoryEfficientVisionTransformerwithCascadedGroupAttentionEfficientViT:具有级联组注意力的内存高效视觉Transformer万文长字,请耐心观看~论文地址:https://arxiv.org/abs/2305.07027代码地址:Cream/EfficientViTatmain·microsoft/Cream......
  • CAS-ViT:用于高效移动应用的卷积加法自注意力视觉Transformer
    近年来,VisionTransformer(ViT)在计算机视觉领域取得了巨大突破。然而ViT模型通常计算复杂度高,难以在资源受限的移动设备上部署。为了解决这个问题,研究人员提出了ConvolutionalAdditiveSelf-attentionVisionTransformers(CAS-ViT),这是一种轻量级的ViT变体,旨在在效率和性......
  • 图卷积网络(GCN)与图注意力网络(GAT)基础实现及其应用
    创作不易,您的打赏、关注、点赞、收藏和转发是我坚持下去的动力!图卷积网络(GraphConvolutionalNetworks,GCN)是一种能够直接在图结构数据上进行操作的神经网络模型。它能够处理不规则的数据结构,捕获节点之间的依赖关系,广泛应用于社交网络分析、推荐系统、图像识别、化学分......
  • 自注意力机制(1)
    自注意机制1.自注意机制的特点考虑这样一个问题,输入长度为m的序列\(\{x_1,x_2,...,x_m\}\),序列中的元素都是向量,要求输出长度同样为m的序列\(\{c_1,c_2,...,c_m\}\),另外还有两个要求:序列的长度m是不确定的,可以动态变化,但是神经网络的参数数量不能变。输出的向量\(c_i\)不......
  • YOLOv8改进 - 注意力篇 - 引入ECA注意力机制
    一、本文介绍作为入门性第一篇,这里介绍了ECA注意力在YOLOv8中的使用。包含ECA原理分析,ECA的代码、ECA的使用方法、以及添加以后的yaml文件及运行记录。二、ECA原理分析ECA官方论文地址:ECA文章ECA的pytorch版代码:ECA的pytorch代码ECA注意力机制:深度卷积神经网络的高效通......
  • 一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention
    一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention目录一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现RIME-BiTCN-BiGRU-Attention霜冰算法优化双向时间卷积双向门控循环......
  • 顶刊算法 | Matlab实现鹈鹕算法POA-CNN-LSTM-Multihead-Attention多头注意力机制多变
    顶刊算法|Matlab实现鹈鹕算法POA-CNN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测,优化前后对比目录顶刊算法|Matlab实现鹈鹕算法POA-CNN-LSTM-Multihead-Attention多头注意力机制多变量时间序列预测,优化前后对比预测效果基本介绍程序设计参考资料预测效果基本......