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

YOLOv8改进 - 注意力篇 - 引入CBAM注意力机制

时间:2024-09-18 12:21:07浏览次数:11  
标签:__ nn CBAM self YOLOv8 注意力

一、本文介绍

作为入门性第一篇,这里介绍了CBAM注意力在YOLOv8中的使用。包含CBAM原理分析,CBAM的代码、CBAM的使用方法、以及添加以后的yaml文件及运行记录。

二、CBAM原理分析

CBAM官方论文地址:CBAM论文

CBAM的pytorch版代码:CBAM的pytorch版代码

CBAM:卷积块注意力模块,由通道注意力和空间注意力组成。其中通道注意力机制主要检测目标的内容信息,空间注意力主要检测目标位置信息。模块先应用通道注意力,再利用空间注意力;其原理结构如下图所示。

相关代码:

在YOLOv8中,作者已经集成了cbam注意力的代码,仅未应用。

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))

四、YOLOv8中CBAM使用方法

YOLOv8中CBAM模块,作者存于ultralytics/nn/modules/conv.py中。

我们使用CBAM模块,仅需在ultralytics/nn/tasks.py进行CBAM注意力机制的注册,以及在YOLOv8的yaml配置文件中添加CBAM即可。

首先打开task.py文件,按住Ctrl+F,输入parse_model进行搜索。找到parse_model函数。在其最后一个else前面添加以下注册代码:

        elif m in {CBAM,MHSA,SEAttention,ECA,ShuffleAttention,ECA_SA,SE_SA,SA_ECA,SA_ShuffleAttention,CBAM_base,PECA_SA,CPAM, CPAM_SA, MSCA_SA, SKAttention, DoubleAttention,PCPAM_SA,SA_CPAM,CoordAtt}:#自己加的注意力模块
            c1, c2 = ch[f], args[0]
            if c2 != nc:
                c2 = make_divisible(min(c2, max_channels) * width, 8)
            args = [c1, *args[1:]]

然后,就是新建一个名为YOLOv8_CBAM.yaml的配置文件:(路径:ultralytics/cfg/models/v8/YOLOv8_CBAM.yaml)

# Ultralytics YOLO 

标签:__,nn,CBAM,self,YOLOv8,注意力
From: https://blog.csdn.net/2301_79619145/article/details/142319327

相关文章

  • CAS-ViT:用于高效移动应用的卷积加法自注意力视觉Transformer
    近年来,VisionTransformer(ViT)在计算机视觉领域取得了巨大突破。然而ViT模型通常计算复杂度高,难以在资源受限的移动设备上部署。为了解决这个问题,研究人员提出了ConvolutionalAdditiveSelf-attentionVisionTransformers(CAS-ViT),这是一种轻量级的ViT变体,旨在在效率和性......
  • YoloV8改进策略:BackBone改进|Swin Transformer赋能YoloV8,性能跃升的新篇章
    摘要在深度学习领域,目标检测作为计算机视觉的核心任务之一,其性能的提升始终吸引着研究者们的目光。近期,我们创新性地将SwinTransformer这一前沿的Transformer架构引入到YoloV8目标检测模型中,通过替换其原有的主干网络,实现了检测性能的显著提升,为YoloV8系列模型注入了新的......
  • YoloV8 trick讲解
    1.将YOLOv5的 C3结构换成了梯度流更丰富的 C2f结构:C3C3模块的设计灵感来自CSPNet,其核心思想是将特征图的部分通道进行分割和并行处理,目的是减少冗余梯度信息,同时保持较高的网络表达能力。C3结构与传统的残差结构类似,但有一些关键改进。C3结构的具体组成如下:输......
  • 完整代码——SASRec 基于自注意力的序列推荐
    关于“SASRec基于自注意力的序列推荐”这篇论文的学习笔记和代码复现可以看之前写的这两篇:学习笔记——SASRec基于自注意力的序列推荐-CSDN博客代码复现——SASRec基于自注意力的序列推荐-CSDN博客这次是关于这篇论文的代码展示,全文一万六千多字,难免会有所疏漏,有任何问题......
  • YOLOv8改进 | Conv篇 | 最新轻量化自适应提取模块LAE助力边缘设备部署计算(附代码 + 修
    一、本文介绍本文给大家带来的一个改进机制是最新由LSM-YOLO提出的轻量化自适应特征提取(LightweightAdaptiveExtraction,LAE)模块,其是LSM-YOLO模型中的关键模块,旨在进行多尺度特征提取,同时降低计算成本。LAE通过以下方式实现更有效的特征提取:多尺度特征提取、自适应特征提取......
  • YOLOv8改进 | 融合改进 | C2f融合重写星辰网络⭐以及CAA【二次融合 +​ CVPR2024】
      秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • yolov8 obb算法中的GBB和ProbIoU核心内容
    2021年10月提交的原论文《GaussianBoundingBoxesandProbabilisticIntersection-over-UnionforObjectDetection》一.研究背景研究问题:这篇文章要解决的问题是如何更好地表示对象的形状和位置,以便在目标检测任务中提高检测精度。传统的水平边界框(HBB)和定向边界框(OBB)......
  • YoloV8实战:使用Ultralytics实现Sam2的推理
    SegmentAnythingModel2(SAM2)作为Meta公司发布的SegmentAnythingModel(SAM)的升级版本,在图像和视频分割领域展现出了显著的优点和特性。论文连接:https://arxiv.org/pdf/2408.00714Demo:https://sam2.metademolab.comCode:https://github.com/facebookresearch/segme......
  • 爆改YOLOv8|使用MobileViTv1替换Backbone
    1,本文介绍MobileNetV1是一种轻量级卷积神经网络,旨在提高计算效率。它的核心是深度可分离卷积,将传统卷积分解为深度卷积和逐点卷积,从而减少计算量和参数量。网络结构包括初始卷积层、多个深度可分离卷积层、全局平均池化层和全连接层。MobileNetV1的设计使其在资源受限的设备......
  • 爆改YOLOv8|使用MobileNetV4替换yolov8的Backbone
    1,本文介绍MobileNetV4是最新的MobileNet系列模型,专为移动设备优化。它引入了通用反转瓶颈(UIB)和MobileMQA注意力机制,提升了推理速度和效率。通过改进的神经网络架构搜索(NAS)和蒸馏技术,MobileNetV4在多种硬件平台上实现了高效和准确的表现,在ImageNet-1K数据集上达到87%......