YOLO26 改进 - 注意力机制 | DCAFE双坐标注意力:并行坐标注意力 + 双池化融合

前言

本文介绍了将双坐标注意力特征提取(DCAFE)模块与YOLO26相结合的方法。DCAFE模块采用“并行坐标注意力+双池化融合”设计,通过平均池化和最大池化并行支路捕获特征,经通道自适应调整生成注意力权重,增强特征表达。我们将DCAFE模块引入YOLO26,对相关代码进行修改和注册,并配置了YOLO26 - DCAFE.yaml文件。

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

专栏链接: YOLO26改进专栏

文章目录

  • 前言
  • 介绍
    • 摘要
  • 文章链接
  • 基本原理
    • 核心设计原理
    • 详细结构与流程
      • 1. 特征方向编码(双池化并行支路)
      • 2. 特征拼接与降维
      • 3. 注意力权重生成
      • 4. 特征加权与融合
  • 核心代码
  • YOLO26引入代码
  • 注册
    • 步骤1:
    • 步骤2
  • 配置yolo26-DCAFE.yaml
  • 实验
    • 脚本
    • 结果

介绍

摘要

精准的药用花卉分类是其在医疗保健、制药以及食品和化妆品行业中发挥重要作用的前提。此外,了解药用花卉物种也是保护和维护生物多样性的必要条件。然而,由于较大的类内差异、较小的类间差异以及与其他树木类别的视觉相似性,野外药用花卉分类是一项具有挑战性的任务。如今,众多深度学习方法(尤其是卷积神经网络)已被应用于多个基于图像的目标分类任务中。但现有方法难以捕捉花瓣纹理、花卉结构变异等复杂特征图。本文提出一种新型 “Flora-NET” 方法,首次将坐标注意力与内卷神经网络相结合,应用于花卉行业的分类任务。该方法实现了全新的特征细化模块,即双坐标注意力特征提取(DCAFE)和内卷基特征细化(Inv-FR)。DCAFE 模块采用平均池化与最大池化相结合的并行坐标注意力方法;Inv-FR 模块通过串行内卷层和自适应核,进一步增强空间信息。研究人员在两个公开可用的药用花卉数据集上对 Flora-NET 方法进行了训练和测试。大量实验表明,该方法在两个基准数据集上的准确率分别比现有的深度神经分类方法高出约 6.50% 和 5.59%。超参数调优、k 折交叉验证和消融实验也验证了 Flora-NET 方法的有效性。相关代码和数据集可通过以下链接获取:https://github.com/ersachingupta11/Flora-NET。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

核心设计原理

DCAFE模块的核心是**“并行坐标注意力+双池化融合”**,突破了传统坐标注意力(CA)仅用平均池化的局限,具体逻辑如下:

  • 坐标注意力基础:通过水平(X轴)和垂直(Y轴)两个方向的特征编码,捕获位置敏感信息,让模型精准定位花卉区域。
  • 双池化并行设计:同时使用平均池化(捕获全局通用特征,抑制背景噪声)和最大池化(保留局部关键特征,突出花卉纹理/边缘),两条支路独立运算后融合,避免单一池化导致的信息丢失。
  • 通道自适应调整:通过1×1卷积实现通道降维与恢复,平衡模型复杂度和特征表达能力。

详细结构与流程

假设输入特征图为 ( F \in H×W×C )(H=高度、W=宽度、C=通道数),DCAFE模块的处理步骤如下:

1. 特征方向编码(双池化并行支路)

  • 平均池化支路:对输入特征图分别进行水平(核尺寸 (H,1))和垂直(核尺寸 (1,W))平均池化,得到 ( X_{AvgPool} \in H×1×C ) 和 ( Y_{AvgPool} \in 1×W×C ),捕获全局平滑特征。
  • 最大池化支路:同理,进行水平和垂直最大池化,得到 ( X_{MaxPool} \in H×1×C ) 和 ( Y_{MaxPool} \in 1×W×C ),保留局部尖锐特征(如花瓣边缘、花蕊轮廓)。

2. 特征拼接与降维

  • 每条支路中,将水平和垂直编码后的特征向量拼接,得到 ( (H+W)×1×C ) 的特征向量(如64×64×96的输入,拼接后为128×1×96)。
  • 通过1×1卷积进行通道降维,下采样率 ( D_r=32 ),将通道数从C压缩至 ( C/D_r ),减少计算量,得到中间特征向量 ( f^a \in (H+W)×1×(C/D_r) )。

3. 注意力权重生成

  • 将降维后的特征向量沿空间维度拆分为水平(( f_h^a \in H×1×(C/D_r) ))和垂直(( f_w^a \in W×1×(C/D_r) ))两个张量。
  • 对两个张量分别应用1×1卷积恢复通道数至C,并通过sigmoid激活函数生成注意力权重矩阵 ( s_h \in H×1×C )(水平权重)和 ( s_w \in 1×W×C )(垂直权重)。

4. 特征加权与融合

  • 每条支路(平均/最大池化)的权重矩阵与原始输入特征图 ( F ) 相乘,得到加权后的特征图 ( Y^a )(平均池化支路输出)和 ( Y^m )(最大池化支路输出)。
  • 将两条支路的输出特征图拼接,最终生成1260个增强通道的特征图,传递给后续Inv-FR模块。

核心代码

classCoordAttMeanMax(nn.Module):def__init__(self,inp,oup,groups=32):super(CoordAttMeanMax,self).__init__()self.pool_h_mean=nn.AdaptiveAvgPool2d((None,1))self.pool_w_mean=nn.AdaptiveAvgPool2d((1,None))self.pool_h_max=nn.AdaptiveMaxPool2d((None,1))self.pool_w_max=nn.AdaptiveMaxPool2d((1,None))mip=max(8,inp//groups)self.conv1_mean=nn.Conv2d(inp,mip,kernel_size=1,stride=1,padding=0)self.bn1_mean=nn.BatchNorm2d(mip)self.conv2_mean=nn.Conv2d(mip,oup,kernel_size=1,stride=1,padding=0)self.conv1_max=nn.Conv2d(inp,mip,kernel_size=1,stride=1,padding=0)self.bn1_max=nn.BatchNorm2d(mip)self.conv2_max=nn.Conv2d(mip,oup,kernel_size=1,stride=1,padding=0)self.relu=nn.ReLU(inplace=True)defforward(self,x):identity=x n,c,h,w=x.size()# Mean pooling branchx_h_mean=self.pool_h_mean(x)x_w_mean=self.pool_w_mean(x).permute(0,1,3,2)y_mean=torch.cat([x_h_mean,x_w_mean],dim=2)y_mean=self.conv1_mean(y_mean)y_mean=self.bn1_mean(y_mean)y_mean=self.relu(y_mean)x_h_mean,x_w_mean=torch.split(y_mean,[h,w],dim=2)x_w_mean=x_w_mean.permute(0,1,3,2)# Max pooling branchx_h_max=self.pool_h_max(x)x_w_max=self.pool_w_max(x).permute(0,1,3,2)y_max=torch.cat([x_h_max,x_w_max],dim=2)y_max=self.conv1_max(y_max)y_max=self.bn1_max(y_max)y_max=self.relu(y_max)x_h_max,x_w_max=torch.split(y_max,[h,w],dim=2)x_w_max=x_w_max.permute(0,1,3,2)# Apply attentionx_h_mean=self.conv2_mean(x_h_mean).sigmoid()x_w_mean=self.conv2_mean(x_w_mean).sigmoid()x_h_max=self.conv2_max(x_h_max).sigmoid()x_w_max=self.conv2_max(x_w_max).sigmoid()# Expand to original shapex_h_mean=x_h_mean.expand(-1,-1,h,w)x_w_mean=x_w_mean.expand(-1,-1,h,w)x_h_max=x_h_max.expand(-1,-1,h,w)x_w_max=x_w_max.expand(-1,-1,h,w)# Combine outputsattention_mean=identity*x_w_mean*x_h_mean attention_max=identity*x_w_max*x_h_max# Sum the attention outputsreturnattention_mean+attention_maxclassDCAFE(nn.Module):def__init__(self,in_channels,out_channels):super(DCAFE,self).__init__()self.coord_att=CoordAttMeanMax(in_channels,out_channels)defforward(self,x):returnself.coord_att(x)

YOLO26引入代码

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

importtorchimporttorch.nnasnnclassCBS(nn.Module):def__init__(self,in_channels,out_channels,kernel_size=1,stride=1):super(CBS,self).__init__()self.conv=nn.Conv2d(in_channels,out_channels,kernel_size=kernel_size,stride=stride,padding=0)self.bn=nn.BatchNorm2d(out_channels)self.silu=nn.SiLU()defforward(self,x):returnself.silu(self.bn(self.conv(x)))importtorchimporttorch.nnasnnimportmathimporttorch.nn.functionalasFclassCoordAttMeanMax(nn.Module):def__init__(self,inp,oup,groups=32):super(CoordAttMeanMax,self).__init__()self.pool_h_mean=nn.AdaptiveAvgPool2d((None,1))self.pool_w_mean=nn.AdaptiveAvgPool2d((1,None))self.pool_h_max=nn.AdaptiveMaxPool2d((None,1))self.pool_w_max=nn.AdaptiveMaxPool2d((1,None))mip=max(8,inp//groups)self.conv1_mean=nn.Conv2d(inp,mip,kernel_size=1,stride=1,padding=0)self.bn1_mean=nn.BatchNorm2d(mip)self.conv2_mean=nn.Conv2d(mip,oup,kernel_size=1,stride=1,padding=0)self.conv1_max=nn.Conv2d(inp,mip,kernel_size=1,stride=1,padding=0)self.bn1_max=nn.BatchNorm2d(mip)self.conv2_max=nn.Conv2d(mip,oup,kernel_size=1,stride=1,padding=0)self.relu=nn.ReLU(inplace=True)defforward(self,x):identity=x n,c,h,w=x.size()# Mean pooling branchx_h_mean=self.pool_h_mean(x)x_w_mean=self.pool_w_mean(x).permute(0,1,3,2)y_mean=torch.cat([x_h_mean,x_w_mean],dim=2)y_mean=self.conv1_mean(y_mean)y_mean=self.bn1_mean(y_mean)y_mean=self.relu(y_mean)x_h_mean,x_w_mean=torch.split(y_mean,[h,w],dim=2)x_w_mean=x_w_mean.permute(0,1,3,2)# Max pooling branchx_h_max=self.pool_h_max(x)x_w_max=self.pool_w_max(x).permute(0,1,3,2)y_max=torch.cat([x_h_max,x_w_max],dim=2)y_max=self.conv1_max(y_max)y_max=self.bn1_max(y_max)y_max=self.relu(y_max)x_h_max,x_w_max=torch.split(y_max,[h,w],dim=2)x_w_max=x_w_max.permute(0,1,3,2)# Apply attentionx_h_mean=self.conv2_mean(x_h_mean).sigmoid()x_w_mean=self.conv2_mean(x_w_mean).sigmoid()x_h_max=self.conv2_max(x_h_max).sigmoid()x_w_max=self.conv2_max(x_w_max).sigmoid()# Expand to original shapex_h_mean=x_h_mean.expand(-1,-1,h,w)x_w_mean=x_w_mean.expand(-1,-1,h,w)x_h_max=x_h_max.expand(-1,-1,h,w)x_w_max=x_w_max.expand(-1,-1,h,w)# Combine outputsattention_mean=identity*x_w_mean*x_h_mean attention_max=identity*x_w_max*x_h_max# Sum the attention outputsreturnattention_mean+attention_maxclassDCAFE(nn.Module):def__init__(self,in_channels,out_channels):super(DCAFE,self).__init__()self.coord_att=CoordAttMeanMax(in_channels,out_channels)defforward(self,x):returnself.coord_att(x)

注册

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

步骤1:

fromultralytics.nn.attention.DCAFEimportDCAFE

步骤2

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

DCAFE

配置yolo26-DCAFE.yaml

ultralytics/cfg/models/26/yolo26-DCAFE.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,DCAFE,[256]]# 17 (P3/8-small)-[-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,DCAFE,[512]]# 21 (P4/16-medium)-[-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,DCAFE,[1024]]# 25 (P5/32-large)-[[17,21,25],1,Detect,[nc]]# Detect(P3, P4, P5)

实验

脚本

importwarnings warnings.filterwarnings('ignore')fromultralyticsimportYOLOif__name__=='__main__':# 修改为自己的配置文件地址model=YOLO('./ultralytics/cfg/models/26/yolo26-DCAFE.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',amp=True,project='runs/train',name='yolo26-DCAFE',)

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1175201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Z-Image-Turbo快速上手:集成LangChain打造图文生成Agent

Z-Image-Turbo快速上手:集成LangChain打造图文生成Agent 1. 引言 1.1 背景与需求 随着多模态AI技术的快速发展,文生图(Text-to-Image)模型在创意设计、内容生成、广告制作等领域展现出巨大潜力。然而,许多开源模型存…

TensorFlow模型分析工具:GPU加速可视化不卡顿

TensorFlow模型分析工具:GPU加速可视化不卡顿 你有没有遇到过这种情况:训练一个大一点的深度学习模型,想用TensorBoard看看网络结构、损失曲线或者梯度分布,结果本地打开网页卡得像幻灯片?点一下刷新等十秒&#xff0…

担心黑盒模型?AI 印象派艺术工坊可解释性算法部署实战

担心黑盒模型?AI 印象派艺术工坊可解释性算法部署实战 1. 引言:为何我们需要“可解释”的图像风格迁移? 在当前人工智能广泛应用的背景下,图像风格迁移技术已从实验室走向大众应用。然而,大多数方案依赖深度神经网络…

DeepSeek-R1-Distill-Qwen-1.5B实战教程:Jupyter调用模型详细步骤

DeepSeek-R1-Distill-Qwen-1.5B实战教程:Jupyter调用模型详细步骤 1. 引言 1.1 学习目标 本文旨在为开发者提供一份完整的 DeepSeek-R1-Distill-Qwen-1.5B 模型本地部署与调用指南。通过本教程,您将掌握: 如何在本地或云端环境中加载并运…

IndexTTS-2-LLM性能瓶颈分析:CPU占用过高优化指南

IndexTTS-2-LLM性能瓶颈分析:CPU占用过高优化指南 1. 引言 1.1 场景背景与问题提出 随着大语言模型(LLM)在多模态生成领域的深入应用,语音合成技术正从传统的规则驱动向语义理解驱动演进。IndexTTS-2-LLM 作为融合 LLM 与声学建…

ArchiveMaster归档大师 v2.2.0:高效文件管理工具

ArchiveMaster 归档大师 v2.2.0 便携版是 Windows 平台热门文件管理工具,无需安装即可直接使用。它集成智能归档、批量处理、加密备份等核心功能,能高效解决文件整理繁琐、重复文件堆积等常见痛点,助力办公与日常批量文件处理更便捷高效&…

基于非合作博弈的风-光-氢微电网容量优化配置(Matlab代码实现)

👨‍🎓个人主页 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰&a…

如何提升Qwen3-1.7B响应速度?GPU加速部署实战

如何提升Qwen3-1.7B响应速度?GPU加速部署实战 1. 背景与挑战:大模型推理性能瓶颈 随着大语言模型在自然语言处理任务中的广泛应用,用户对模型响应速度的要求日益提高。Qwen3-1.7B作为通义千问系列中轻量级但功能强大的密集型语言模型&#…

2026年上海防水服务TOP5权威评测:精准治漏,守护建筑安全 - shruisheng

随着城市更新加速与极端天气频发,建筑渗漏问题已成为影响上海居民生活质量与建筑结构安全的核心隐患。面对市场上纷繁复杂的服务商,如何选择一家技术可靠、服务到位、质保有保障的专业企业,成为众多业主与项目管理方…

电商产品图批量抠图方案|基于CV-UNet大模型镜像高效落地

电商产品图批量抠图方案|基于CV-UNet大模型镜像高效落地 1. 引言:电商图像处理的痛点与自动化需求 在电商平台中,高质量的产品图是提升转化率的关键因素之一。为了实现统一的视觉风格和专业的展示效果,商家通常需要将商品从原始…

GESP认证C++编程真题解析 | 202409 四级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

Wan2.2部署方案:高可用视频生成服务的容灾设计

Wan2.2部署方案:高可用视频生成服务的容灾设计 1. 背景与挑战:构建稳定可靠的视频生成服务 随着AIGC技术在内容创作领域的深入应用,文本到视频(Text-to-Video)生成模型正逐步从实验性工具演变为实际生产环境中的关键…

全网最全10个AI论文平台,MBA高效写作必备!

全网最全10个AI论文平台,MBA高效写作必备! AI 工具如何助力 MBA 学生高效完成论文写作 在当前快节奏的学术环境中,MBA 学生面临着日益繁重的论文写作任务。传统的写作方式不仅耗时耗力,还容易因格式、逻辑或内容重复等问题影响最终…

SPI数据帧结构详解:为何c++spidev0.0 read读出255

为什么你的 SPI 读出来总是 255?深入剖析 Linux 下spidev的真实工作原理你有没有遇到过这样的情况:在树莓派或嵌入式设备上用 C 调用/dev/spidev0.0,调了read()函数,结果返回的值永远是255(即 0xFF)&#x…

基于Modbus的RS485通信系统学习

深入理解工业通信基石:Modbus RTU over RS485 的实战解析在现代工业自动化系统中,设备之间的稳定通信是实现数据采集、远程控制和智能决策的基础。尽管以太网与无线技术日益普及,但在现场层(Field Level),R…

大数据技术领域发展与Spark的性能优化

大数据技术领域发展与Spark的性能优化一、大数据技术领域发展方向 随着AI时代的到来,大数据技术领域逐渐退居二线,再也没有了前些年的重视程度。博主近期结合从业多年经验,对大数据技术领域的技术演进路线做下梳理。…

[sublime text] add sublime text to context menu 右键菜单中“Open with Sublime Text”

Google Gemini生成 Adding Sublime Text to your right-click (context) menu makes opening files and folders much faster. The process differs depending on whether you are using Windows or macOS.For Windows…

机遇,颓废,醒悟,挫折?奋进!

前言 2026.1.17 尽早写吧,虽然不知道学习 OI 的生涯能持续到何时,至少早些写能够多留下一些记忆。 机遇 小学四年级时,xyd 在区里各个小学四到六年级招人,要求是期末考成绩大于等于 380 分(满分 400)。我所在班里…

体验大模型图像处理:云端免配置方案,按需付费不浪费

体验大模型图像处理:云端免配置方案,按需付费不浪费 你是不是也遇到过这样的情况:作为产品经理,想快速验证一个AI功能能不能用在自家APP里,比如给用户加个“一键抠图换背景”的酷炫功能。可一问研发团队,对…

彼得林奇如何应对市场恐慌

彼得林奇如何应对市场恐慌 关键词:彼得林奇、市场恐慌、投资策略、风险管理、股票市场 摘要:本文深入探讨了投资大师彼得林奇应对市场恐慌的方法和策略。通过对彼得林奇投资理念和实践的分析,阐述了他在市场恐慌环境下如何保持冷静、做出明智…