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 的主要组成部分通道注意力Channel Attention通过对输入特征进行全局平均池化和全局最大池化生成通道级别的注意力权重。这些权重用于调整不同通道的重要性使得模型能够更好地利用特征通道的信息。空间注意力Spatial Attention通过对输入特征进行空间维度的处理生成空间级别的注意力权重。这些权重帮助模型关注特征图中的重要区域增强对关键部分的响应。特征融合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,reduction8):super(CGAFusion,self).__init__()self.saSpatialAttention()self.caChannelAttention(dim,reduction)self.paPixelAttention(dim)self.convnn.Conv2d(dim,dim,1,biasTrue)self.sigmoidnn.Sigmoid()defforward(self,x,y):initialxy cattnself.ca(initial)sattnself.sa(initial)pattn1sattncattn pattn2self.sigmoid(self.pa(initial,pattn1))resultinitialpattn2*x(1-pattn2)*y resultself.conv(result)returnresultYOLO26引入代码在根目录下的ultralytics/nn/目录新建一个attention目录然后新建一个以CGAFusion为文件名的py文件 把代码拷贝进去。importtorchfromtorchimportnnfromeinopsimportrearrangeclassSpatialAttention(nn.Module):def__init__(self):super(SpatialAttention,self).__init__()self.sann.Conv2d(2,1,7,padding3,padding_modereflect,biasTrue)defforward(self,x):x_avgtorch.mean(x,dim1,keepdimTrue)x_max,_torch.max(x,dim1,keepdimTrue)x2torch.concat([x_avg,x_max],dim1)sattnself.sa(x2)returnsattnclassChannelAttention(nn.Module):def__init__(self,dim,reduction8):super(ChannelAttention,self).__init__()self.gapnn.AdaptiveAvgPool2d(1)self.cann.Sequential(nn.Conv2d(dim,dim//reduction,1,padding0,biasTrue),nn.ReLU(inplaceTrue),nn.Conv2d(dim//reduction,dim,1,padding0,biasTrue),)defforward(self,x):x_gapself.gap(x)cattnself.ca(x_gap)returncattnclassPixelAttention(nn.Module):def__init__(self,dim):super(PixelAttention,self).__init__()self.pa2nn.Conv2d(2*dim,dim,7,padding3,padding_modereflect,groupsdim,biasTrue)self.sigmoidnn.Sigmoid()defforward(self,x,pattn1):B,C,H,Wx.shape xx.unsqueeze(dim2)# B, C, 1, H, Wpattn1pattn1.unsqueeze(dim2)# B, C, 1, H, Wx2torch.cat([x,pattn1],dim2)# B, C, 2, H, Wx2rearrange(x2,b c t h w - b (c t) h w)pattn2self.pa2(x2)pattn2self.sigmoid(pattn2)returnpattn2classCGAFusion(nn.Module):def__init__(self,dim,reduction8):super(CGAFusion,self).__init__()self.saSpatialAttention()self.caChannelAttention(dim,reduction)self.paPixelAttention(dim)self.convnn.Conv2d(dim,dim,1,biasTrue)self.sigmoidnn.Sigmoid()defforward(self,x):x_featx y_featx initialx_featy_feat cattnself.ca(initial)sattnself.sa(initial)pattn1sattncattn pattn2self.sigmoid(self.pa(initial,pattn1))resultinitialpattn2*x_feat(1-pattn2)*y_feat resultself.conv(result)returnresult注册卷积在ultralytics/nn/tasks.py中进行如下操作步骤1:fromultralytics.nn.attention.CGAFusionimportCGAFusion步骤2修改def parse_model(d, ch, verboseTrue):elifmisCGAFusion:c2ch[f[1]]args[c2,*args]配置yolo26-CGAFusion.yamlultralytics/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. modelyolo26n.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__:# 修改为自己的配置文件地址modelYOLO(./ultralytics/cfg/models/26/yolo26-CGAFusion.yaml)# 修改为自己的数据集地址model.train(data./ultralytics/cfg/datasets/coco8.yaml,cacheFalse,imgsz640,epochs10,single_clsFalse,# 是否是单类别检测batch8,close_mosaic10,workers0,optimizerMuSGD,# optimizerSGD,ampFalse,projectruns/train,nameyolo26-CGAFusion,)结果

相关新闻

强烈安利专科生必用9款一键生成论文工具测评

强烈安利专科生必用9款一键生成论文工具测评

强烈安利专科生必用9款一键生成论文工具测评 为什么需要一份权威的论文写作工具测评 随着学术研究的日益繁重,专科生在撰写论文过程中常常面临时间紧张、资料查找困难、格式不规范等问题。而AI写作工具的出现,为这一难题提供了新的解决方案。为了帮助专科…

2026/7/3 18:30:09 阅读更多 →
中国电子科技集团公司第三十二研究所安卓开发工程师职位深度解析与技术能力构建

中国电子科技集团公司第三十二研究所安卓开发工程师职位深度解析与技术能力构建

中国电子科技集团公司第三十二研究所 安卓开发工程师 职位信息 岗位职责: 1.参与项目需求分析,进行APP相关的设计、开发、调试等; 2.按需求完成界面、逻辑功能、网络通信等设计; 3.配合其他开发人员、测试人员,完成产品设计和发布; 4.编写相关开发文档、技术资料等。 任…

2026/7/3 10:44:14 阅读更多 →
Android系统开发工程师职位深度解析与面试指南

Android系统开发工程师职位深度解析与面试指南

深圳市优博讯科技股份有限公司 Android系统开发工程师 职位信息 1.独立完成Android系统功能开发及相关问题定位分析解决; 2.负责Android模块平台化开发; 3.Android系统性能调优。 任职要求: 1.扎实的C/C++/JAVA基础,熟悉Android系统软件开发; 2.良好的沟通能力和逻辑思维…

2026/7/3 10:36:14 阅读更多 →

最新新闻

了解并使用MVVM框架

了解并使用MVVM框架

到底有哪些开源MVVM框架? 前面介绍了WPF的基本概念和一些相关知识,我们了解到开发WPF应用程序可以使用现成的框架和模式,最为合适的莫过于时下正热的MVVM模式,所以这里我们也列出针对MVVM模式的已有开源框架: 图3 上面…

2026/7/5 2:28:37 阅读更多 →
原来网站排名还能“买”到?

原来网站排名还能“买”到?

在传统SEO时代,网站排名确实可以通过竞价排名(SEM)直接“购买”关键词位置,但那种模式本质是付费买流量,一旦停止付费,排名瞬间消失。而在GEO(生成式引擎优化)时代,所谓的…

2026/7/5 2:26:36 阅读更多 →
告别技术空谈:九尾狐AI发布2026年最新企业AI培训体系,主推‘战略到变现‘全周期陪跑模式

告别技术空谈:九尾狐AI发布2026年最新企业AI培训体系,主推‘战略到变现‘全周期陪跑模式

AI短视频矩阵运营:2026企业培训如何实现从战略到变现的全周期陪跑 作为一名长期在一线协助中小企业落地AI应用的博主,我见过太多这样的场景:老板花大价钱请了团队做培训,员工课上听得热血沸腾,回到工位却无从下手&…

2026/7/5 2:26:36 阅读更多 →
西门子S7-1200 PLC轴运动控制配置与优化指南

西门子S7-1200 PLC轴运动控制配置与优化指南

1. 西门子S7-1200 PLC轴运动控制基础架构在工业自动化领域,轴运动控制是PLC应用中最具挑战性的任务之一。西门子S7-1200系列PLC凭借其紧凑的机身设计和强大的运动控制功能,成为中小型自动化项目的首选控制器。这套系统最核心的组件是工艺对象&#xff08…

2026/7/5 2:26:36 阅读更多 →
[MAF预定义ChatClient中间件-05]动态修改ChatOptions和请求消息

[MAF预定义ChatClient中间件-05]动态修改ChatOptions和请求消息

1. 利用ConfigureOptionsChatClient交替使用不同的模型 如下的程序演示了如何利用ConfigureOptionsChatClient中间件来动态地配置ChatOptions的ModelId属性,从而实现交替使用不同的模型来生成响应的功能。如代码片段所示,我们根据OpenAIClient创建了一个…

2026/7/5 2:24:36 阅读更多 →
Linux syslog日志权限出错

Linux syslog日志权限出错

一、Linux syslog日志权限 Linux syslog日志权限出错通常是由于文件权限设置不当或用户权限不足导致的,可通过检查日志文件权限、所有者、用户权限,以及SELinux设置来定位并解决问题。 以下是具体分析和解决步骤: 检查日志文件权限 使用 ls -…

2026/7/5 2:24:36 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻