改进YOLOv8:添加CBAM注意力机制(涨点明显)

这篇具有很好参考价值的文章主要介绍了改进YOLOv8:添加CBAM注意力机制(涨点明显)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、计算机视觉中的注意力机制

计算机视觉中的注意力机制是一种聚焦于局部信息的机制,其基本思想是让系统学会忽略无关信息而关注重点信息。这种机制在图像识别、物体检测和人脸识别等任务中都发挥了重要作用。

注意力机制的实现方法有多种,其中包括空间注意力模型、通道注意力模型、空间和通道混合注意力模型等。这些模型可以将图像中的关键信息提取出来,并通过抑制无用信息来提高模型的性能。在计算机视觉中,注意力机制被广泛应用于各种任务,如目标检测、图像分类、人脸识别等。

通过引入注意力机制,计算机视觉系统可以更加高效地处理图像数据,减少计算资源的浪费,同时提高模型的性能和准确性。在未来,随着深度学习技术的不断发展,注意力机制在计算机视觉领域的应用前景将会更加广阔。

1.1 CBAM:通道注意力和空间注意力的集成者

CBAM(Convolutional Block Attention Module)是一种注意力机制,它结合了通道注意力和空间注意力来提高卷积神经网络的性能。通道注意力模块通过计算每个通道的重要性,以区分不同通道之间的特征。空间注意力模块则计算每个像素在空间上的重要性,以更好地捕捉图像中的空间结构。

论文题目:《CBAM: Convolutional Block Attention Module》
论文地址: https://arxiv.org/pdf/1807.06521.pdf

改进YOLOv8:添加CBAM注意力机制(涨点明显),YOLO,YOLO,CBAM
上图可以看到,CBAM包含CAM(Channel Attention Module)和SAM(Spartial Attention Module)两个子模块,分别进行通道和空间上的Attention。这样不只能够节约参数和计算力,并且保证了其能够做为即插即用的模块集成到现有的网络架构中去。

CBAM的工作原理如下:

  1. 通道注意力模块:通过在通道维度上对输入特征图进行最大池化和平均池化,然后将这两个池化结果输入到一个全连接层中,最后输出一个通道注意力权重向量。这个权重向量可以用来加权输入特征图的每个通道,以增强重要的通道特征并抑制不重要的通道特征。
  2. 空间注意力模块:类似于通道注意力模块,空间注意力模块也是通过对输入特征图进行操作来计算每个像素的重要性。它通常使用全局平均池化来获取每个像素的特征向量,然后通过一个全连接层来输出每个像素的权重。这些权重可以用于加权输入特征图的每个像素,以强调图像中的重要区域并抑制不重要的区域。

通过将通道注意力和空间注意力模块串联起来,可以得到一个完整的CBAM模块,用于插入到卷积神经网络中以提升模型性能。CBAM可以显著提高计算机视觉任务的性能,例如目标检测、图像分类和语义分割等。

2.Yolov8加入CBAM

改进YOLOv8:添加CBAM注意力机制(涨点明显),YOLO,YOLO,CBAM

2.1 CBAM加入cony.py中(相当于yolov5中的common.py)

  
"""
通道注意力模型: 通道维度不变,压缩空间维度。该模块关注输入图片中有意义的信息。
1)假设输入的数据大小是(b,c,w,h)
2)通过自适应平均池化使得输出的大小变为(b,c,1,1)
3)通过2d卷积和sigmod激活函数后,大小是(b,c,1,1)
4)将上一步输出的结果和输入的数据相乘,输出数据大小是(b,c,w,h)。
"""
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:
        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:
        return x * self.act(self.fc(self.pool(x)))

"""
空间注意力模块:空间维度不变,压缩通道维度。该模块关注的是目标的位置信息。
1) 假设输入的数据x是(b,c,w,h),并进行两路处理。
2)其中一路在通道维度上进行求平均值,得到的大小是(b,1,w,h);另外一路也在通道维度上进行求最大值,得到的大小是(b,1,w,h)。
3) 然后对上述步骤的两路输出进行连接,输出的大小是(b,2,w,h)
4)经过一个二维卷积网络,把输出通道变为1,输出大小是(b,1,w,h)
4)将上一步输出的结果和输入的数据x相乘,最终输出数据大小是(b,c,w,h)。
"""
class SpatialAttention(nn.Module):
    # Spatial-attention module
    def __init__(self, kernel_size=7):
        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):
        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):  # ch_in, kernels
        super().__init__()
        self.channel_attention = ChannelAttention(c1)
        self.spatial_attention = SpatialAttention(kernel_size)
        
        

    def forward(self, x):
        return self.spatial_attention(self.channel_attention(x))
    
    

2.2 CBAM加入tasks.py中(相当于yolov5中的yolo.py)

from ultralytics.nn.modules import (C1, C2, C3, C3TR, SPP, SPPF, Bottleneck, BottleneckCSP, C2f, C3Ghost, C3x, Classify,
                                    Concat, Conv, ConvTranspose, Detect, DWConv, DWConvTranspose2d, Ensemble, Focus,
                                    GhostBottleneck, GhostConv, Segment,CBAM, GAM_Attention , ResBlock_CBAM)

如图所示:
改进YOLOv8:添加CBAM注意力机制(涨点明显),YOLO,YOLO,CBAM

2.4 还是在tasks.py,def parse_model(d, ch, verbose=True):函数中

#        添加CBAM注意力机制
        elif m is CBAM:
            c1, c2 = ch[f], args[0]
            if c2 != nc:  # if c2 not equal to number of classes (i.e. for Classify() output)
                c2 = make_divisible(min(c2, max_channels) * width, 8)
            args = [c1,  *args[1:]]

如图所示:
改进YOLOv8:添加CBAM注意力机制(涨点明显),YOLO,YOLO,CBAM

2.5 CBAM修改对应yaml

CBAM加入yolov8
将yolov8.yaml复制一份,改为yolov8n-CBAM.yaml
路径:ultralytics/ultralytics/cfg/models/v8/yolov8n-CBAM.yaml

改进YOLOv8:添加CBAM注意力机制(涨点明显),YOLO,YOLO,CBAM
yolov8n-CBAM.yaml

# Ultralytics YOLO 🚀, GPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect
 
# Parameters
nc: 7  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
  s: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
  m: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
  l: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
  x: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs
 
# YOLOv8.0n 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, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]]  # 9

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 6], 1, Concat, [1]]  # cat backbone P4
  - [-1, 3, C2f, [512]]  # 12
  - [-1, 1, CBAM, [512]]

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 4], 1, Concat, [1]]  # cat backbone P3
  - [-1, 3, C2f, [256]]  # 16 (P3/8-small)
  - [-1, 1, CBAM, [256]]

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 13], 1, Concat, [1]]  # cat head P4
  - [-1, 3, C2f, [512]]  # 20 (P4/16-medium)
  - [-1, 1, CBAM, [512]]

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # cat head P5
  - [-1, 3, C2f, [1024]]  # 24 (P5/32-large)
  - [-1, 1, CBAM, [1024]]

  - [[17, 21, 25], 1, Detect, [nc]]  # Detect(P3, P4, P5)
 

可以看到在head层添加了四层CBAM注意力机制,至此完成!文章来源地址https://www.toymoban.com/news/detail-791562.html

到了这里,关于改进YOLOv8:添加CBAM注意力机制(涨点明显)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 改进YOLO系列:改进YOLOv8,教你YOLOv8如何添加20多种注意力机制,并实验不同位置。

    注意力机制(Attention Mechanism)是深度学习中一种重要的技术,它可以帮助模型更好地关注输入数据中的关键信息,从而提高模型的性能。注意力机制最早在自然语言处理领域的序列到序列(seq2seq)模型中得到广泛应用,后来逐渐扩展到了计算机视觉、语音识别等多个领域。

    2024年02月16日
    浏览(43)
  • YOLOV8改进:在C2f模块不同位置添加注意力机制

    本文以CBAM注意力机制为例,在c2f模块的不同位置添加注意力机制,没有用v8自带的CBAM模块,而是自己之前用过的代码。 CBAM简单介绍: CBAM这是一种用于前馈卷积神经网络的简单而有效的注意模块。 给定一个中间特征图,我们的模块会沿着两个独立的维度(通道和空间)依次

    2024年02月11日
    浏览(51)
  • YOLOv8、YOLOv7、YOLOv5改进注意力机制:首发最全汇总 | S2A, SE,SimAM, SKA,ShA, SOCA, CA, CBAM, CrissCrossA, NAM, GAM等

    💡统一使用 YOLOv5 代码框架, 结合不同模块来构建不同的YOLO目标检测模型。 🌟本项目包含大量的改进方式,降低改进难度,改进点包含 【Backbone特征主干】 、 【Neck特征融合】 、 【Head检测头】 、 【注意力机制】 、 【IoU损失函数】 、 【NMS】 、 【Loss计算方式】 、 【自注

    2024年02月06日
    浏览(113)
  • Yolov5 中添加注意力机制 CBAM

    CBAM(Convolutional Block Attention Module)是一种注意力机制,它通过关注输入数据中的重要特征来增强卷积神经网络(CNN)的性能。CBAM的原理可以分为两个部分:空间注意力模块和通道注意力模块。 空间注意力模块:该模块关注输入特征图的每个空间位置的重要性。它首先对特征

    2024年02月10日
    浏览(41)
  • YOLOv8/v7/v5全网首发独家创新,内涵CBAM注意力改进、ECA改进,SPPF改进等

    💡💡💡 全网独家首发创新(原创),纯自研模块,适合paper !!! 💡💡💡 内涵CBAM注意力改进、ECA改进,SPPF改进等!!! 重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征 分析SPPF的问题点,只关注边缘信息而忽略背景信息 如何改进

    2024年01月23日
    浏览(66)
  • YOLOv8改进 | 如何在网络结构中添加注意力机制、C2f、卷积、Neck、检测头

    本篇文章的内容是在大家得到一个 改进版本的 C2f一个新的注意力机制、或者一个新的卷积模块、或者是检测头的时候如何 替换我们YOLOv8模型中的原有的模块 ,从而用你的模块去进行训练模型或者检测。因为最近开了一个专栏里面涉及到挺多改进的地方,不能每篇文章都去讲

    2024年02月05日
    浏览(65)
  • 涨点技巧:注意力机制---Yolov8引入CBAM、GAM、Resnet_CBAM

    一般来说,注意力机制通常被分为以下基本四大类: 通道注意力 Channel Attention 空间注意力机制 Spatial Attention 时间注意力机制 Temporal Attention 分支注意力机制 Branch Attention 轻量级的卷积注意力模块,它结合了通道和空间的注意力机制模块 论文题目:《CBAM: Convolutional Block Atte

    2024年02月04日
    浏览(52)
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制

    记录在YOLOv5添加注意力机制,方便自己查阅。 由于本人水平有限,难免出现错漏,敬请批评改正。 更多精彩内容,可点击进入YOLO系列专栏或我的个人主页查看 YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU https://blog.csdn.net/FriendshipTang/article/details/129969044 YOLOv7训练自己的数据集(口罩检测)

    2024年02月03日
    浏览(44)
  • 改进YOLOv8 | 即插即用篇 | 手把手教你 YOLOv8 添加注意力机制 | 适用于【检测任务】【分类任务】【分割任务】【关键点任务】| 20+ 种全打通!

    🍀更新日志 2023/5/23 更改 DoubleAttention 写法。 2023/10/12 更改博文,适配最新版添加方式。 视频教程地址-哔哩哔哩

    2024年02月07日
    浏览(45)
  • YOLOv5、YOLOv8改进:S2注意力机制

    目录 1.简介 2.YOLOv5改进 2.1增加以下S2-MLPv2.yaml文件 2.2common.py配置 2.3yolo.py配置  S2-MLPv2注意力机制   最近,出现了基于 MLP 的视觉主干。与 CNN 和视觉Transformer相比,基于 MLP 的视觉架构具有较少的归纳偏差,在图像识别方面实现了有竞争力的性能。其中,spatial-shift MLP (S2-MLP),

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包