news 2026/2/18 6:04:06

YOLOv8改进 - 注意力机制 | GCT (Gaussian Context Transformer) 高斯上下文变换器通过预设高斯关系实现高效通道注意力

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLOv8改进 - 注意力机制 | GCT (Gaussian Context Transformer) 高斯上下文变换器通过预设高斯关系实现高效通道注意力

前言

本文介绍了高斯上下文变换器(Gaussian Context Transformer,GCT),这是一种新型通道注意力模块,旨在提升深度卷积神经网络(CNN)的表现力。传统通道注意力模块通过全连接层或线性变换学习全局上下文与注意力激活的关系,但效果不佳。GCT假设该关系预先确定,由全局上下文聚合、归一化和高斯上下文激励三个操作组成。根据高斯函数标准差是否可学习,分为无参数的GCT - B0和有参数的GCT - B1。我们将GCT引入YOLOv8,在指定目录添加代码文件,在ultralytics/nn/tasks.py中注册,并给出配置文件和实验脚本。实验表明,GCT能提升模型性能。

文章目录: YOLOv8改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

专栏链接: YOLOv8改进专栏

文章目录

  • 前言
  • 介绍
    • 摘要
  • 文章链接
  • 基本原理
      • 主要内容
  • 核心代码
  • 引入代码
  • 注册
    • 步骤1:
    • 步骤2
  • 配置yolov8-GCT.yaml
  • 实验
    • 脚本
    • 结果

介绍

摘要

最近,提出了大量的通道注意力模块,以增强深度卷积神经网络(CNN)的表示能力。这些方法通常通过全连接层或线性变换来学习全局上下文与注意力激活之间的关系。然而,我们的实验证明,尽管引入了许多参数,这些注意力模块可能无法很好地学习这种关系。在本文中,我们假设这种关系是预先确定的。基于这一假设,我们提出了一种简单而高效的通道注意力模块,称为高斯上下文变换器(Gaussian Context Transformer,GCT),它使用满足预设关系的高斯函数实现上下文特征的激发。根据高斯函数的标准差是否可学习,我们开发了两个版本的GCT:GCT-B0和GCT-B1。GCT-B0是一个无参数的通道注意力模块,通过固定标准差来实现。它直接将全局上下文映射到注意力激活,无需学习。相比之下,GCT-B1是一个有参数的版本,它自适应地学习标准差以增强映射能力。在ImageNet和MS COCO基准测试上的大量实验表明,我们的GCT在各种深度CNN和检测器上均能带来一致的性能提升。与一系列最先进的通道注意力模块(如SE和ECA)相比,我们的GCT在有效性和效率上都更具优势。

文章链接

论文地址:论文地址

**代码地址:**代码地址

基本原理

Gaussian Context Transformer(GCT)是一种新型的通道注意力模块,旨在提高深度卷积神经网络(CNN)的表现力。该方法由Ruan等人提出,主要通过使用高斯函数来实现上下文特征的激励,从而简化了传统通道注意力机制的复杂性。

主要内容

  1. 研究背景
    传统的通道注意力模块通常通过全连接层或线性变换来学习全局上下文与注意力激活之间的关系。然而,研究表明,尽管引入了许多参数,这些注意力模块可能并未有效学习这种关系。

  2. 核心假设
    GCT的核心假设是,全局上下文与注意力激活之间的关系是预先确定的,而不是通过学习获得的。基于这一假设,GCT提出了一种简单而高效的通道注意力机制。

  3. GCT的结构
    GCT由三个主要操作组成:

    • 全局上下文聚合(GCA):通过全局平均池化来获取通道级别的统计信息,以帮助网络捕捉长距离依赖关系。
    • 归一化:对聚合后的全局上下文进行归一化处理。
    • 高斯上下文激励(GCE):使用高斯函数对全局上下文进行激励,公式为:
      $
      Y = e{-\frac{norm(avg(X))2}{2c^2}} \cdot X
      $
      其中,c cc是高斯函数的标准差,可以是常数或可学习的参数。
  4. 参数自由的GCT
    当标准差c cc为常数时,GCT被称为GCT-B0,这是一种参数自由的通道注意力模块。研究表明,GCT-B0在多个任务上表现优异,且参数和计算量几乎没有增加。

  5. 实验结果
    在ImageNet和MS COCO等基准测试上进行的综合实验表明,GCT在各种骨干网络和检测器上均能显著提高性能,超越了其他通道注意力模块。

核心代码

classGCT(nn.Module):def__init__(self,channels,c=2,eps=1e-5):super().__init__()self.avgpool=nn.AdaptiveAvgPool2d(1)self.eps=eps self.c=cdefforward(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**2y_norm=(y-mean)/torch.sqrt(var+self.eps)y_transform=torch.exp(-(y_norm**2/2*self.c))returnx*y_transform.expand_as(x)

引入代码

在根目录下的ultralytics/nn/目录,新建一个attention目录,然后新建一个以GCT为文件名的py文件, 把代码拷贝进去。

importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassGCT(nn.Module):def__init__(self,channels,c=2,eps=1e-5):super().__init__()self.avgpool=nn.AdaptiveAvgPool2d(1)self.eps=eps self.c=cdefforward(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**2y_norm=(y-mean)/torch.sqrt(var+self.eps)y_transform=torch.exp(-(y_norm**2/2*self.c))returnx*y_transform.expand_as(x)

注册

ultralytics/nn/tasks.py中进行如下操作:

步骤1:

fromultralytics.nn.attention.GCTimportGCT

步骤2

修改def parse_model(d, ch, verbose=True):

GCT

配置yolov8-GCT.yaml

ultralytics/cfg/models/v8/yolov8-GCT.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 license# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parametersnc:80# number of classesscales:# 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 GFLOPss:[0.33,0.50,1024]# YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8 GFLOPsm:[0.67,0.75,768]# YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients, 79.3 GFLOPsl:[1.00,1.00,512]# YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx:[1.00,1.25,512]# YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbonebackbone:# [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 headhead:-[-1,1,nn.Upsample,[None,2,'nearest']]-[[-1,6],1,Concat,[1]]# cat backbone P4-[-1,3,C2f,[512]]# 12-[-1,1,nn.Upsample,[None,2,'nearest']]-[[-1,4],1,Concat,[1]]# cat backbone P3-[-1,3,C2f,[256]]# 15 (P3/8-small)-[-1,1,GCT,[256]]#17-[-1,1,Conv,[256,3,2]]-[[-1,12],1,Concat,[1]]# cat head P4-[-1,3,C2f,[512]]# 18 (P4/16-medium)-[-1,1,GCT,[512]]# 21-[-1,1,Conv,[512,3,2]]-[[-1,9],1,Concat,[1]]# cat head P5-[-1,3,C2f,[1024]]# 21 (P5/32-large)-[-1,1,GCT,[1024]]# 25-[[16,19,22],1,Detect,[nc]]# Detect(P3, P4, P5)

实验

脚本

importosfromultralyticsimportYOLO yaml='ultralytics/cfg/models/v8/yolov8-GCT.yaml'model=YOLO(yaml)model.info()if__name__=="__main__":results=model.train(data='coco128.yaml',name='GCT',epochs=10,amp=False,workers=8,batch=1,device="cpu")

结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/16 13:36:09

5大核心功能解密:英雄联盟玩家的智能助手完整指南

5大核心功能解密:英雄联盟玩家的智能助手完整指南 【免费下载链接】LeagueAkari ✨兴趣使然的,功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 让我们一起探…

作者头像 李华
网站建设 2026/2/3 5:12:16

哔哩下载姬DownKyi:5分钟快速上手B站视频批量下载终极方案

还在为B站视频无法离线观看而烦恼?想要把喜欢的UP主内容永久保存却无从下手?哔哩下载姬DownKyi作为一款专业的B站视频下载工具,让视频保存变得前所未有的简单高效。这款开源工具支持从普通画质到8K超高清的全方位解析,无论是个人收…

作者头像 李华
网站建设 2026/2/10 8:29:42

百度网盘限速终结者:这款免费解析工具让下载速度飞起来

百度网盘限速终结者:这款免费解析工具让下载速度飞起来 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的龟速下载而烦恼吗?每天面对几十…

作者头像 李华
网站建设 2026/2/13 8:16:20

LeagueAkari自动启动终极教程:从零到精通只需3步

还在为每次游戏前繁琐的启动流程烦恼吗?LeagueAkari的自动启动功能让你告别重复操作!本文将为你介绍这项实用功能的使用方法,让你轻松掌握一键启动游戏客户端的技巧。 【免费下载链接】LeagueAkari ✨兴趣使然的,功能全面的英雄联…

作者头像 李华
网站建设 2026/2/15 2:03:03

5个技巧快速上手智能图像标注:AI训练数据管理终极指南

5个技巧快速上手智能图像标注:AI训练数据管理终极指南 【免费下载链接】BooruDatasetTagManager 项目地址: https://gitcode.com/gh_mirrors/bo/BooruDatasetTagManager 智能图像标注是现代AI训练数据管理的核心环节,BooruDatasetTagManager作为…

作者头像 李华
网站建设 2026/2/3 19:00:00

ncmdump终极指南:轻松解锁网易云音乐NCM格式的免费解决方案

ncmdump终极指南:轻松解锁网易云音乐NCM格式的免费解决方案 【免费下载链接】ncmdump ncmdump - 网易云音乐NCM转换 项目地址: https://gitcode.com/gh_mirrors/ncmdu/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器使用而烦恼吗?nc…

作者头像 李华