YOLOv8模型改进6【增加注意力机制Gaussian Context Transformer+解决报错:ImportError:cannot import name ‘GCT‘ ......】

本文介绍了如何在YOLOv8模型中集成Gaussian Context Transformer注意力机制,这是一种轻量高效的注意力模块。通过在模型结构中加入GCT,改善了模型的性能。同时,文章提供了遇到ImportError: cannot import name ‘GCT’错误时的解决方法,即更新代码并在相应位置声明GCT。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Gaussian Context Transformer注意力机制简介

Gaussian Context Transformer缩写为:GCT注意力机制。它是一种通道注意力结构的注意力模块,与SE注意力相似,但它可以做到在几乎不引入参数的前提下优于SE等注意力模型。(属于轻量高效类型的注意力机制)

GCT注意力机制的模型结构如图所示:
在这里插入图片描述
下图是GCT模块在模型参数方面的表现:
在这里插入图片描述
下图为GCT模块在目标检测任务上的表现:
在这里插入图片描述
在这里插入图片描述
【注:论文-Gaussian Context Transformer链接】:https://openaccess.thecvf.com/content/CVPR2021/papers/Ruan_Gaussian_Context_Transformer_CVPR_2021_paper.pdf

【注:没有找到Github上的代码,但是有厉害的大哥给了代码,具体见下面的改进】

二、增加GCT注意力机制到YOLOv8模型上

基本上还是一样的,主要看差别吧:(注意:依据的代码是直到发文为止最新的YOLOv8代码进行的改进,请及时更新代码)

【1: …/ultralytics/nn/modules/conv.py

在文件末尾增加有关GCT模块的代码:

#增加GCT注意力
class GCT(nn.Module):
    def __init__(self, channels, c=2, eps=1e-5):
        super().__init__()
        self.avgpool = nn.AdaptiveAvgPool2d(1)
        self.eps = eps
        self.c = c

    def forward(self, x):
        y = self.avgpool(x)
        mean = y.mean(dim=1, keepdim=True)
        mean_x2 = (y ** 2).mean(dim=1, keepdim=True)
        var = mean_x2 - mean ** 2
        y_norm = (y - mean) / torch.sqrt(var + self.eps)
        y_transform = torch.exp(-(y_norm ** 2 / 2 * self.c))
        return x * y_transform.expand_as(x)

【2:…ultralytics-main/ultralytics/nn/modules/__init__.py

这个是一样的,在这个文件下对GCT模块进行声明,声明的名字要与前面的GCT代码模块名保持一致,可以参考这篇文章:https://blog.youkuaiyun.com/A__MP/article/details/136597192

1:找到这段,在后面加上模块名:GCT
from .conv import (
    CBAM,
    Channe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小的学徒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值