2026/3/26 0:58:56
网站建设
项目流程
做网站被骗首付款怎么报案,电子商务网页设计模板,金融企业网站制作,加速乐wordpress插件前言
本文介绍了内容引导注意力#xff08;CGA#xff09;机制#xff0c;它结合通道注意力和空间注意力#xff0c;为每个通道生成特定的空间重要性图#xff0c;以更好地关注输入特征中的有用信息。CGA的通道注意力通过全局池化生成通道权重#xff0c;空间注意力处理…前言本文介绍了内容引导注意力CGA机制它结合通道注意力和空间注意力为每个通道生成特定的空间重要性图以更好地关注输入特征中的有用信息。CGA的通道注意力通过全局池化生成通道权重空间注意力处理空间维度生成空间权重二者结合生成最终注意力图。其优势在于通道特异性、空间关注和处理非均匀性。我们将基于CGA的CGAFusion模块引入YOLOv8在指定目录添加代码文件在ultralytics/nn/tasks.py中注册并给出配置文件和实验脚本实验给出了相关结果。文章目录 YOLOv8改进大全卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总专栏链接: YOLOv8改进专栏文章目录前言介绍摘要文章链接基本原理CGA 的主要组成部分CGA 的原理图CGA 的流程如下所示CGA 的优势核心代码引入代码注册步骤1:步骤2配置yolov8-CGAFusion.yaml实验脚本结果介绍摘要摘要——单幅图像去雾是一个具有挑战性的病态问题其目的是从观察到的雾霾图像中估计出无雾图像。一些现有的基于深度学习的方法致力于通过增加卷积的深度或宽度来提高模型的性能。然而卷积神经网络CNN结构的学习能力仍未得到充分探索。本文提出了一种细节增强注意力模块DEAB该模块由细节增强卷积DEConv和内容引导注意力CGA组成旨在提升特征学习从而改善去雾性能。具体来说DEConv将先验信息集成到常规卷积层中以增强表示能力和泛化能力。然后使用重新参数化技术DEConv被等效地转换为标准卷积且没有额外的参数和计算开销。通过为每个通道分配独特的空间重要性图SIMCGA可以更有效地关注特征中编码的有用信息。此外本文提出了一种基于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)returnresult引入代码在根目录下的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,data):x,ydata initialxy cattnself.ca(initial)sattnself.sa(initial)pattn1sattncattn pattn2self.sigmoid(self.pa(initial,pattn1))resultinitialpattn2*x(1-pattn2)*y resultself.conv(result)returnresult注册在ultralytics/nn/tasks.py中进行如下操作步骤1:fromultralytics.nn.attention.CGAFusionimportCGAFusion步骤2修改def parse_model(d, ch, verboseTrue):elifmin{CGAFusion}:c2ch[f[1]]args[c2,*args]配置yolov8-CGAFusion.yamlultralytics/cfg/models/v8/yolov8-CGAFusion.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. modelyolov8n.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,Conv,[256,3,2]]-[[-1,12],1,Concat,[1]]# cat head P4-[-1,3,C2f,[512]]# 18 (P4/16-medium)-[-1,1,Conv,[512,3,2]]-[[-1,9],1,Concat,[1]]# cat head P5-[-1,3,C2f,[1024]]# 21 (P5/32-large)-[[4,15],1,CGAFusion,[]]# 22 (P3/8-small)-[[6,18],1,CGAFusion,[]]# 23 (P4/16-medium)-[[9,21],1,CGAFusion,[]]# 24 (P5/32-large)-[[22,23,24],1,Detect,[nc]]# Detect(P3, P4, P5)实验脚本importosfromultralyticsimportYOLO yamlultralytics/cfg/models/v8/yolov8-CGAFusion.yamlmodelYOLO(yaml)model.info()if__name____main__:resultsmodel.train(datacoco128.yaml,nameCGAFusion,epochs10,ampFalse,workers8,batch1,devicecpu)结果