当前位置: 首页 > news >正文

YOLO26改进 - 注意力机制 | CGAFusion (Content-Guided Attention Fusion) 抑制噪声提升跨模态检测精度与鲁棒性​

前言

本文介绍了内容引导注意力融合模块(CGAFusion)在YOLO26中的结合应用。CGAFusion由通道注意力、空间注意力和特征融合组成,通过生成通道特定的空间重要性图,有效处理特征非均匀性,提升模型表现。我们将CGAFusion集成到YOLO26的检测头中,并进行相关注册和配置。实验表明,改进后的模型在显著减少参数与FLOPs的同时,仍具备优异性能,在资源受限场景下展现出高效与实用的优势。

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

专栏链接: YOLO26改进专栏

文章目录

  • 前言
  • 介绍
    • 摘要
  • 文章链接
  • 基本原理
      • CGA 的主要组成部分
      • CGA 的原理图CGA 的流程如下所示:
      • CGA 的优势
  • 核心代码
  • YOLO26引入代码
    • 注册卷积
      • 步骤1:
      • 步骤2
    • 配置yolo26-CGAFusion.yaml
  • 实验
    • 脚本
    • 结果

介绍

摘要

摘要——单幅图像去雾是一个极具挑战性的病态问题,其目标是从观测到的雾霾图像中估计出无雾图像。部分现有的基于深度学习的方法试图通过增加卷积的深度或宽度来提升模型性能,但卷积神经网络(CNN)结构的学习能力仍未得到充分发掘。本文提出了一种细节增强注意力模块(DEAB),该模块由细节增强卷积(DEConv)和内容引导注意力(CGA)构成,旨在强化特征学习,进而改善去雾性能。具体而言,DEConv将先验信息融入常规卷积层,以增强模型的表示能力和泛化能力,随后利用重新参数化技术,将DEConv等效转换为标准卷积,且不产生额外的参数和计算开销。CGA通过为每个通道分配独特的空间重要性图(SIM),能够更高效地聚焦于特征中编码的有用信息。此外,本文提出了一种基于CGA的混合融合方案,可有效融合特征并辅助梯度流动。综合上述组件,我们提出了细节增强注意力网络(DEA - Net),用于恢复高质量的无雾图像。大量实验结果证实了DEA - Net的有效性,其将PSNR指标提升至41 dB以上,且仅使用3.653M的参数,超越了当前最先进的(SOTA)方法。我们的DEA - Net源代码将发布于https://github.com/cecret3350/DEA - Net。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

内容引导注意力(Content-Guided Attention, CGA)是一种新颖的注意力机制,旨在为每个通道生成特定的空间重要性图(Spatial Importance Map, SIM),以便在特征学习过程中更好地关注输入特征中的有用信息。CGA 通过结合通道注意力和空间注意力,能够有效地处理特征级别的非均匀性,从而提升模型的表现。

CGA 的主要组成部分

  1. 通道注意力(Channel Attention)

    • 通过对输入特征进行全局平均池化和全局最大池化,生成通道级别的注意力权重。这些权重用于调整不同通道的重要性,使得模型能够更好地利用特征通道的信息。
  2. 空间注意力(Spatial Attention)

    • 通过对输入特征进行空间维度的处理,生成空间级别的注意力权重。这些权重帮助模型关注特征图中的重要区域,增强对关键部分的响应。
  3. 特征融合

    • CGA 通过将通道和空间注意力结合,生成最终的空间重要性图(SIM),并将其应用于输入特征,以增强特征的表示能力。

CGA 的原理图CGA 的流程如下所示:

Input Features (X) | +-------------------+ | | Channel Attention Spatial Attention | | +-------------------+ | Combined Attention Map (W) | +-------------------+ | | Weighted Features Input Features | | +-------------------+ | Output Features

在这个图中,输入特征首先通过通道注意力和空间注意力模块,生成相应的注意力权重。然后,这些权重被结合成一个综合的注意力图(W),并应用于输入特征,以生成最终的输出特征。

CGA 的优势

  • 通道特异性:CGA 生成的注意力图是通道特定的,能够更好地捕捉不同通道之间的关系。
  • 空间关注:通过空间注意力,CGA 能够有效地识别输入特征图中的重要区域,增强模型对关键特征的响应。
  • 处理非均匀性:CGA 同时考虑了图像级别和特征级别的非均匀性,从而提升了去雾等任务的性能。

核心代码

fromtorchimportnnfrom.cgaimportSpatialAttention,ChannelAttention,PixelAttentionclassCGAFusion(nn.Module):def__init__(self,dim,reduction=8):super(CGAFusion,self).__init__()self.sa=SpatialAttention()self.ca=ChannelAttention(dim,reduction)self.pa=PixelAttention(dim)self.conv=nn.Conv2d(dim,dim,1,bias=True)self.sigmoid=nn.Sigmoid()defforward(self,x,y):initial=x+y cattn=self.ca(initial)sattn=self.sa(initial)pattn1=sattn+cattn pattn2=self.sigmoid(self.pa(initial,pattn1))result=initial+pattn2*x+(1-pattn2)*y result=self.conv(result)returnresult

YOLO26引入代码

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

importtorchfromtorchimportnnfromeinopsimportrearrangeclassSpatialAttention(nn.Module):def__init__(self):super(SpatialAttention,self).__init__()self.sa=nn.Conv2d(2,1,7,padding=3,padding_mode='reflect',bias=True)defforward(self,x):x_avg=torch.mean(x,dim=1,keepdim=True)x_max,_=torch.max(x,dim=1,keepdim=True)x2=torch.concat([x_avg,x_max],dim=1)sattn=self.sa(x2)returnsattnclassChannelAttention(nn.Module):def__init__(self,dim,reduction=8):super(ChannelAttention,self).__init__()self.gap=nn.AdaptiveAvgPool2d(1)self.ca=nn.Sequential(nn.Conv2d(dim,dim//reduction,1,padding=0,bias=True),nn.ReLU(inplace=True),nn.Conv2d(dim//reduction,dim,1,padding=0,bias=True),)defforward(self,x):x_gap=self.gap(x)cattn=self.ca(x_gap)returncattnclassPixelAttention(nn.Module):def__init__(self,dim):super(PixelAttention,self).__init__()self.pa2=nn.Conv2d(2*dim,dim,7,padding=3,padding_mode='reflect',groups=dim,bias=True)self.sigmoid=nn.Sigmoid()defforward(self,x,pattn1):B,C,H,W=x.shape x=x.unsqueeze(dim=2)# B, C, 1, H, Wpattn1=pattn1.unsqueeze(dim=2)# B, C, 1, H, Wx2=torch.cat([x,pattn1],dim=2)# B, C, 2, H, Wx2=rearrange(x2,'b c t h w -> b (c t) h w')pattn2=self.pa2(x2)pattn2=self.sigmoid(pattn2)returnpattn2classCGAFusion(nn.Module):def__init__(self,dim,reduction=8):super(CGAFusion,self).__init__()self.sa=SpatialAttention()self.ca=ChannelAttention(dim,reduction)self.pa=PixelAttention(dim)self.conv=nn.Conv2d(dim,dim,1,bias=True)self.sigmoid=nn.Sigmoid()defforward(self,x):x_feat=x y_feat=x initial=x_feat+y_feat cattn=self.ca(initial)sattn=self.sa(initial)pattn1=sattn+cattn pattn2=self.sigmoid(self.pa(initial,pattn1))result=initial+pattn2*x_feat+(1-pattn2)*y_feat result=self.conv(result)returnresult

注册卷积

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

步骤1:

fromultralytics.nn.attention.CGAFusionimportCGAFusion

步骤2

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

elifmisCGAFusion:c2=ch[f[1]]args=[c2,*args]

配置yolo26-CGAFusion.yaml

ultralytics/cfg/models/11/YOLO26-CGAFusion.yaml

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license# Ultralytics YOLO26 object detection model with P3/8 - P5/32 outputs# Model docs: https://docs.ultralytics.com/models/yolo26# Task docs: https://docs.ultralytics.com/tasks/detect# Parametersnc:80# number of classesend2end:True# whether to use end-to-end modereg_max:1# DFL binsscales:# model compound scaling constants, i.e. 'model=yolo26n.yaml' will call yolo26.yaml with scale 'n'# [depth, width, max_channels]n:[0.50,0.25,1024]# summary: 260 layers, 2,572,280 parameters, 2,572,280 gradients, 6.1 GFLOPss:[0.50,0.50,1024]# summary: 260 layers, 10,009,784 parameters, 10,009,784 gradients, 22.8 GFLOPsm:[0.50,1.00,512]# summary: 280 layers, 21,896,248 parameters, 21,896,248 gradients, 75.4 GFLOPsl:[1.00,1.00,512]# summary: 392 layers, 26,299,704 parameters, 26,299,704 gradients, 93.8 GFLOPsx:[1.00,1.50,512]# summary: 392 layers, 58,993,368 parameters, 58,993,368 gradients, 209.5 GFLOPs# YOLO26n backbonebackbone:# [from, repeats, module, args]-[-1,1,Conv,[64,3,2]]# 0-P1/2-[-1,1,Conv,[128,3,2]]# 1-P2/4-[-1,2,C3k2,[256,False,0.25]]-[-1,1,Conv,[256,3,2]]# 3-P3/8-[-1,2,C3k2,[512,False,0.25]]-[-1,1,Conv,[512,3,2]]# 5-P4/16-[-1,2,C3k2,[512,True]]-[-1,1,Conv,[1024,3,2]]# 7-P5/32-[-1,2,C3k2,[1024,True]]-[-1,1,SPPF,[1024,5,3,True]]# 9-[-1,2,C2PSA,[1024]]# 10# YOLO26n headhead:-[-1,1,nn.Upsample,[None,2,"nearest"]]-[[-1,6],1,Concat,[1]]# cat backbone P4-[-1,2,C3k2,[512,True]]# 13-[-1,1,nn.Upsample,[None,2,"nearest"]]-[[-1,4],1,Concat,[1]]# cat backbone P3-[-1,2,C3k2,[256,True]]# 16 (P3/8-small)-[-1,1,CGAFusion,[]]#17-[-1,1,Conv,[256,3,2]]-[[-1,13],1,Concat,[1]]# cat head P4-[-1,2,C3k2,[512,True]]# 19 (P4/16-medium)-[-1,1,CGAFusion,[]]#21-[-1,1,Conv,[512,3,2]]-[[-1,10],1,Concat,[1]]# cat head P5-[-1,1,C3k2,[1024,True,0.5,True]]# 22 (P5/32-large)-[-1,1,CGAFusion,[]]#25-[[17,21,25],1,Detect,[nc]]# Detect(P3, P4, P5)

实验

脚本

importwarnings warnings.filterwarnings('ignore')fromultralyticsimportYOLOif__name__=='__main__':# 修改为自己的配置文件地址model=YOLO('./ultralytics/cfg/models/26/yolo26-CGAFusion.yaml')# 修改为自己的数据集地址model.train(data='./ultralytics/cfg/datasets/coco8.yaml',cache=False,imgsz=640,epochs=10,single_cls=False,# 是否是单类别检测batch=8,close_mosaic=10,workers=0,optimizer='MuSGD',# optimizer='SGD',amp=False,project='runs/train',name='yolo26-CGAFusion',)

结果

http://www.jsqmd.com/news/305049/

相关文章:

  • YOLO26改进 - 注意力机制 |融合HCF-Net维度感知选择性整合模块DASI 增强小目标显著性
  • 【脉脉】AI创作者崛起:掌握核心工具,在AMA互动中共同成长
  • 02~
  • 大规模语言模型在个性化职业规划中的应用
  • Kubernetes 集群运维:故障排查、资源调度与高可用配置
  • FHIR 资源查询实战指南:从 HTTP 接口到 Java 客户端的完整实现
  • Go进阶之理解方法本质
  • IntelliJ IDEA 全局搜索完全指南:从高效使用到快捷键失效排查
  • 费雪的研发投入分析:创新如何驱动企业长期增长
  • SMB挂载与iSCSI挂载飞牛存储:你该选择哪一种连接方式?
  • 重命名你的电脑,给它发个“工牌”吧!
  • DevOps是什么?
  • 例说FPGA:可直接用于工程项目的第一手经验【1.1】
  • [高质量代码分享] JavaScript 空值判断(工具)函数
  • 强烈安利专科生必用9款一键生成论文工具测评
  • 吐血推荐9个AI论文软件,专科生搞定毕业论文!
  • 影悦电影推荐系统的设计与实现开题报告
  • 小额消费贷款产品特征抽取与推荐分析平台的设计与实现开题报告
  • YOLO26改进 - 注意力机制 | 多扩张通道细化器MDCR 通过通道划分与异构扩张卷积提升小目标定位能力
  • YOLO26改进策略【Backbone/主干网络】| ICLR-2023 替换骨干网络为:RevCol 一种新型神经网络设计范式
  • 闲置京东超市卡变现认准京顺回收
  • 微服务架构设计大比拼:独立数据库 VS 集中式DAO,谁才是真香定律?
  • Span和mspan的关系在go中是怎么定义的
  • 提示工程架构师必看:智能法律助手中的提示工程实战指南
  • YOLO26最新创新改进系列:Involution新卷积网络算子融合于YOLO网络,从经典的图像滤波方法中汲取灵感,更大的空间范围中总结上下文信息,有效涨点!
  • YOLO26最新创新改进系列:融合简单但功能强大的主干网络-BoTNet模块,获得CNN+自然语言处理技术的优势,有效提升检测效果!
  • 星图 ai.csdn.net CSDN 的「大模型工坊」只能“一键微调”官方底座,不支持真正的预训练/RLHF,训练完可以私有化部署,但可控度、底座选择、数据安全都弱于公有云
  • CSS - code
  • YOLO26改进策略【Backbone/主干网络】| 替换骨干为PoolFormer,基于平均池化的Token混合器,通过聚合局部邻域特征实现信息交互
  • YOLO26改进策略【Backbone/主干网络】| CVPR 2024 替换骨干为InceptionNeXt,将大核深度卷积分解为四个并行分支,平衡速度与精度