YOLOv8模型改进4【增加注意力机制GAM-Attention(超越CBAM,不计成本地提高精度)】

本文介绍了GAM-Attention注意力机制,一种超越CBAM的机制,旨在提高目标检测精度。虽然实际效果依赖于具体任务,但可以在YOLOv8模型上尝试增加GAM以提升性能。通过在通道和空间注意力上增强跨维度信息交互,GAM在分类任务上表现出色。文章详细说明了如何将GAM集成到YOLOv8模型的代码实现中,并提供了训练参数设置的指导。注意在集成过程中可能出现的报错及解决办法。

一、GAM-Attention注意力机制简介

GAM全称:Global Attention Mechanism。它被推出的时候有一个响亮的口号叫做:超越CBAM,不计成本地提高精度。由此可见,它的主要作用是为了目标检测精度的提高。

但是,大家都明白,具体效果怎么样,还得看具体的任务,我浅浅地试了一下,这个注意力机制在小目标检测任务中表现还是可以的,如果你有这方面的需求,可以尝试一下增加GAM注意力机制。

上一篇文章中说,通道注意力与空间注意力被广泛地应用在视觉任务中,CBAM注意力机制就是融合了两者。无独有偶,GAM注意力机制也采用了通道注意力+空间注意力的框架。不同的是GAM注意力机制的作者提出了一种全局吸引机制,这种机制是通过在减少信息约简的同时放大全局交互表示来提高深度神经网络的性能。

因为作者认为以往的注意力方法都忽略了通道与空间的相互作用丢失了跨维信息。考虑到跨维度信息的重要性,并放大跨维度的交互作用,GAM就应运而生

GAM注意力机制的模型结构图如下图所示:
在这里插入图片描述

下面是GAM中通道注意力与空间注意力的结构图
在这里插入图片描述
GAM注意力机制在数据集Cifar100上的分类结果
在这里插入图片描述

GAM注意力机制在数据集ImageNet-1K的分类结果
在这里插入图片描述

【注:代码Pytorch实现Github】:https://github.com/dengbuqi/GAM_Pytorch?tab=readme-ov-file

***【注:论文–Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions链接】**https://arxiv.org/pdf/2112.05561v1.pdf

【注:GAM注意力机制论文中并没有将其应用到目标检测任务中进行尝试,所以再次强调–它的具体性能得用了才知道!】

二、增加GAM-Attention注意力机制YOLOv8模型上

方法基本还是一样的,只会有一些细微的差别:
【1: …/ultralytics/nn/modules/conv.py

在这个文件末尾增加有关GAM-Attention的代码:(有两段,不要少加!!!)

#增加GAM注意力
def channel_shuffle(x, groups=2):  ##shuffle channel
    # RESHAPE----->transpose------->Flatten
    B, C, H, W = x.size()
    out = x.view(B, groups, C // groups, H, W).permute(0, 2, 1, 3, 4).contiguous()
    out = out.view(B, C, H, W)
    return out


class GAM_Attention(nn.Module):
    # https://paperswithcode.com/paper/global-attention-mechanism-retain-information
    def __init__(self, c1, c2, group=True, rate=4):
        super(GAM_Attention, self).__init__()

        self.channel_attention = nn.Sequential(
            nn.Linear(c1, int(c1 / rate)),
            nn.ReLU(inplace=True),
            nn.Linear(int(c1 / rate), c1)
        )

        self.spatial_attention = nn.Sequential(

            nn.Conv2d(c1, c1 // rate, kernel_size=7, padding=3, groups=rate) if group else nn.Conv2d(c1, int(c1 / rate
YOLOv5中集成GAM(Global Attention Mechanism)全局注意力机制,可以通过修改模型的骨干网络或检测头部分来实现。GAM是一种注意力机制,能够增强模型对关键特征的关注能力,同时抑制相关的背景信息,从而提升目标检测精度。 ### 修改YOLOv5的骨干网络 YOLOv5的骨干网络通常是CSPDarknet53,可以在其中插入GAM模块。GAM模块通常包含两个部分:通道注意力和空间注意力。可以通过以下步骤实现: 1. **定义GAM模块**:创建一个包含通道注意力和空间注意力的PyTorch模块。 2. **插入GAM模块**:将GAM模块插入到骨干网络的适当位置,例如在CSP块之后。 ```python import torch import torch.nn as nn class GAM(nn.Module): def __init__(self, in_channels, rate=4): super(GAM, self).__init__() out_channels = int(in_channels / rate) self.linear1 = nn.Linear(in_channels, out_channels, bias=False) self.relu = nn.ReLU() self.linear2 = nn.Linear(out_channels, in_channels, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): b, c, h, w = x.size() # 通道注意力 x_flat = x.view(b, c, -1).mean(dim=2) attention = self.linear1(x_flat) attention = self.relu(attention) attention = self.linear2(attention) attention = self.sigmoid(attention).view(b, c, 1, 1) x = x * attention.expand_as(x) # 空间注意力 x_flat = x.view(b, c, -1).mean(dim=1).view(b, 1, h, w) attention = self.linear1(x_flat.view(b, h*w, -1)) attention = self.relu(attention) attention = self.linear2(attention) attention = self.sigmoid(attention).view(b, 1, h, w) x = x * attention.expand_as(x) return x ``` ### 修改YOLOv5的检测头 在检测头部分,也可以插入GAM模块,以增强对检测头输出的特征图的关注能力。具体来说,可以在检测头的卷积层之间插入GAM模块。 ### 配置文件修改 YOLOv5的模型配置文件(如`yolov5s.yaml`)定义了模型的结构。需要在配置文件中添加GAM模块的位置。例如,可以在骨干网络的某个CSP块后插入GAM模块。 ```yaml # Example modification in yolov5s.yaml backbone: # [from, number, module, args] [[-1, 1, 'Focus', [64, 3]], [-1, 1, 'Conv', [128, 3, 2]], # 0-P3/8 [-1, 3, 'C3', [128]], [-1, 1, 'Conv', [256, 3, 2]], # 1-P4/16 [-1, 6, 'C3', [256]], [-1, 1, 'Conv', [512, 3, 2]], # 2-P5/32 [-1, 9, 'C3', [512]], [-1, 1, 'Conv', [1024, 3, 2]], [-1, 3, 'C3', [1024]], [-1, 1, 'SPP', [1024, [5, 9, 13]]], [-1, 1, 'GAM', [1024]]] # Insert GAM module here ``` ### 训练与评估 完成模型修改后,可以使用标准的YOLOv5训练流程进行训练。需要注意的是,引入GAM模块可能会增加模型的计算复杂度,因此需要适当调整学习率、批次大小等超参数。训练完成后,可以通过验证集评估模型的性能,并根据需要进行进一步的优化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小的学徒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值