YOLO26改进 - 特征融合 | MSAA多尺度注意力聚合模块, 多尺度卷积融合与双通道注意力机制

发布时间:2026/10/14 16:35:55

YOLO26改进 - 特征融合 | MSAA多尺度注意力聚合模块, 多尺度卷积融合与双通道注意力机制 前言本文介绍了将多尺度注意力聚合MSAA模块与YOLO26结合的方法。MSAA是CM - UNet中用于优化编码器特征、强化跳跃连接的核心模块能解决遥感图像物体尺度差异大、多尺度特征融合弱的问题。它采用空间与通道双分支并行处理先对输入的相邻三层特征进行拼接再分别进行空间与通道注意力处理最后融合输出精炼后的特征。我们将MSAA集成进YOLO26在模型的检测头部分使用该模块。实验证明结合MSAA的YOLO26可有效捕获多尺度全局上下文信息在物体检测任务中表现良好。文章目录 YOLO26改进大全卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总专栏链接: 最新YOLO26改进专栏文章目录前言介绍摘要文章链接基本原理一、核心作用二、输入与前置处理三、完整技术原理双分支并行1. 空间注意力分支抓位置、轮廓、大小2. 通道注意力分支抓重要特征维度3. 最终融合核心代码YOLO26引入代码注册步骤1:步骤2配置yolo26-MSAA.yaml实验脚本结果介绍摘要摘要——针对遥感图像语义分割任务中图像尺寸大、目标形态多样的问题现有基于卷积神经网络CNN与Transformer的方法在捕获长程依赖关系时效果欠佳或存在计算复杂度高的局限。本文提出CM-UNet模型该模型采用基于CNN的编码器提取图像局部特征结合基于Mamba的解码器聚合整合全局信息可高效实现遥感图像语义分割。具体而言模型引入CSMamba模块构建核心分割解码器该模块以通道注意力与空间注意力作为基础Mamba模块的门控激活条件强化特征交互与全局-局部信息融合。此外为进一步优化CNN编码器输出特征采用多尺度注意力聚合MSAA模块融合不同尺度特征。通过融合CSMamba模块与MSAA模块CM-UNet可有效捕获大尺度遥感图像的长程依赖关系与多尺度全局上下文信息。在三个基准数据集上的实验结果表明所提CM-UNet模型在多项性能指标上优于现有方法。代码开源地址https://github.com/XiaoBuL/CM-UNet。文章链接论文地址论文地址代码地址代码地址基本原理MSAA Multi-Scale Attention Aggregation是 CM-UNet 里用来优化编码器特征、强化跳跃连接的核心模块专门解决遥感图像物体尺度差异大、多尺度特征融合弱的问题。一、核心作用替换 UNet 原始简单跳跃连接不直接拼接而是先精炼再融合同时做空间注意力 通道注意力 多尺度卷积融合让解码器拿到更干净、更聚焦、多尺度更丰富的编码器特征二、输入与前置处理输入ResNet 编码器相邻三层特征F₁、F₂、F₃先做拼接F^iConcat(Fi,Fi−1,Fi1)得到融合特征 F^∈RC1×H×W送入 MSAA 精炼三、完整技术原理双分支并行MSAA 内部是空间分支 通道分支并行处理最后融合输出。1. 空间注意力分支抓位置、轮廓、大小通道降维1×1 卷积把通道从 C₁ 降到 C₂C₁/α多尺度卷积融合同时用 3×3、5×5、7×7 卷积提取不同大小目标特征直接相加得到多尺度空间信息空间聚合均值池化 最大池化 → 7×7 卷积空间权重Sigmoid 激活生成空间注意力图加权与原特征逐元素相乘强化重要区域建筑、道路2. 通道注意力分支抓重要特征维度全局平均池化把空间维度压成 1×1得到 C₁×1×1通道建模1×1 卷积 → ReLU → 1×1 卷积通道权重生成通道注意力图扩展到原图尺寸加权与空间精炼后的特征结合3. 最终融合空间注意力结果 通道注意力结果 → 输出精炼后的多尺度增强特征核心代码classFusionConv(nn.Module):def__init__(self,in_channels,out_channels,factor4.0):super(FusionConv,self).__init__()dimint(out_channels//factor)self.downnn.Conv2d(in_channels,dim,kernel_size1,stride1)self.conv_3x3nn.Conv2d(dim,dim,kernel_size3,stride1,padding1)self.conv_5x5nn.Conv2d(dim,dim,kernel_size5,stride1,padding2)self.conv_7x7nn.Conv2d(dim,dim,kernel_size7,stride1,padding3)self.spatial_attentionSpatialAttentionModule()self.channel_attentionChannelAttentionModule(dim)self.upnn.Conv2d(dim,out_channels,kernel_size1,stride1)self.down_2nn.Conv2d(in_channels,dim,kernel_size1,stride1)defforward(self,x1,x2,x4):x_fusedtorch.cat([x1,x2,x4],dim1)x_fusedself.down(x_fused)x_fused_cx_fused*self.channel_attention(x_fused)x_3x3self.conv_3x3(x_fused)x_5x5self.conv_5x5(x_fused)x_7x7self.conv_7x7(x_fused)x_fused_sx_3x3x_5x5x_7x7 x_fused_sx_fused_s*self.spatial_attention(x_fused_s)x_outself.up(x_fused_sx_fused_c)returnx_outclassMSAA(nn.Module):def__init__(self,in_channels,out_channels):super(MSAA,self).__init__()self.fusion_convFusionConv(in_channels,out_channels)defforward(self,x1,x2,x4,lastFalse):# # x2 是从低到高x4是从高到低的设计x2传递语义信息x4传递边缘问题特征补充# x_1_2_fusion self.fusion_1x2(x1, x2)# x_1_4_fusion self.fusion_1x4(x1, x4)# x_fused x_1_2_fusion x_1_4_fusionx_fusedself.fusion_conv(x1,x2,x4)returnx_fusedYOLO26引入代码在根目录下的ultralytics/nn/目录新建一个featureFusion目录然后新建一个以MSAA为文件名的py文件 把代码拷贝进去。importtorchimporttorch.nnasnn# https://arxiv.org/pdf/2405.10530# https://github.com/XiaoBuL/CM-UNetclassChannelAttentionModule(nn.Module):def__init__(self,in_channels,reduction4):super(ChannelAttentionModule,self).__init__()self.avg_poolnn.AdaptiveAvgPool2d(1)self.max_poolnn.AdaptiveMaxPool2d(1)self.fcnn.Sequential(nn.Conv2d(in_channels,in_channels//reduction,1,biasFalse),nn.ReLU(inplaceTrue),nn.Conv2d(in_channels//reduction,in_channels,1,biasFalse))self.sigmoidnn.Sigmoid()defforward(self,x):avg_outself.fc(self.avg_pool(x))max_outself.fc(self.max_pool(x))outavg_outmax_outreturnself.sigmoid(out)classSpatialAttentionModule(nn.Module):def__init__(self,kernel_size7):super(SpatialAttentionModule,self).__init__()self.conv1nn.Conv2d(2,1,kernel_size,paddingkernel_size//2,biasFalse)self.sigmoidnn.Sigmoid()defforward(self,x):avg_outtorch.mean(x,dim1,keepdimTrue)max_out,_torch.max(x,dim1,keepdimTrue)xtorch.cat([avg_out,max_out],dim1)xself.conv1(x)returnself.sigmoid(x)classFusionConv(nn.Module):def__init__(self,in_channels,out_channels,factor4.0):super(FusionConv,self).__init__()dimint(out_channels//factor)self.downnn.Conv2d(in_channels,dim,kernel_size1,stride1)self.conv_3x3nn.Conv2d(dim,dim,kernel_size3,stride1,padding1)self.conv_5x5nn.Conv2d(dim,dim,kernel_size5,stride1,padding2)self.conv_7x7nn.Conv2d(dim,dim,kernel_size7,stride1,padding3)self.spatial_attentionSpatialAttentionModule()self.channel_attentionChannelAttentionModule(dim)self.upnn.Conv2d(dim,out_channels,kernel_size1,stride1)self.down_2nn.Conv2d(in_channels,dim,kernel_size1,stride1)defforward(self,x):x_fusedtorch.cat(x,dim1)ifisinstance(x,list)elsex x_fusedself.down(x_fused)x_fused_cx_fused*self.channel_attention(x_fused)x_3x3self.conv_3x3(x_fused)x_5x5self.conv_5x5(x_fused)x_7x7self.conv_7x7(x_fused)x_fused_sx_3x3x_5x5x_7x7 x_fused_sx_fused_s*self.spatial_attention(x_fused_s)x_outself.up(x_fused_sx_fused_c)returnx_outclassMSAA(nn.Module):def__init__(self,in_channels,out_channels):super(MSAA,self).__init__()self.fusion_convFusionConv(in_channels,out_channels)defforward(self,x):x_fusedself.fusion_conv(x)returnx_fused注册在ultralytics/nn/tasks.py中进行如下操作步骤1:fromultralytics.nn.featureFusion.MSAAimportMSAA步骤2修改def parse_model(d, ch, verboseTrue):elifmisMSAA:c2make_divisible(min(args[0],max_channels)*width,8)ifargselsech[f[0]]args[sum(ch[index]forindexinf),c2,*args[1:]]配置yolo26-MSAA.yaml./ultralytics/cfg/models/26/yolo26-MSAA.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:-[-1,1,Conv,[64,3,2]]-[-1,1,Conv,[128,3,2]]-[-1,2,C3k2,[256,False,0.25]]-[-1,1,Conv,[256,3,2]]-[-1,2,C3k2,[512,False,0.25]]-[-1,1,Conv,[512,3,2]]-[-1,2,C3k2,[512,True]]-[-1,1,Conv,[1024,3,2]]-[-1,2,C3k2,[1024,True]]-[-1,1,SPPF,[1024,5,3,True]]-[-1,2,C2PSA,[1024]]head:-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,6],1,MSAA,[512]]-[-1,2,C3k2,[512,True]]-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,4],1,MSAA,[256]]-[-1,2,C3k2,[256,True]]-[-1,1,Conv,[256,3,2]]-[[-1,13],1,MSAA,[512]]-[-1,2,C3k2,[512,True]]-[-1,1,Conv,[512,3,2]]-[[-1,10],1,MSAA,[1024]]-[-1,1,C3k2,[1024,True,0.5,True]]-[[16,19,22],1,Detect,[nc]]实验脚本importwarnings warnings.filterwarnings(ignore)fromultralyticsimportYOLOif__name____main__:# 修改为自己的配置文件地址modelYOLO(./ultralytics/cfg/models/26/yolo26-MSAA.yaml)# 修改为自己的数据集地址model.train(data./ultralytics/cfg/datasets/coco8.yaml,cacheFalse,imgsz640,epochs10,single_clsFalse,# 是否是单类别检测batch8,close_mosaic10,workers0,optimizerMuSGD,# optimizerSGD,ampFalse,projectruns/train,nameMSAA,)结果
延伸阅读

更多相关文章

2026/10/14 16:30:48

基于jQuery UI的虚拟键盘实现:布局、焦点与避坑指南

简介:VirtualKeyboard是一款基于jQuery UI的虚拟键盘插件,面向需要优化网页表单输入体验的Web开发者。它模拟真实键盘提供字母、数字、符号等布局,支持jQuery UI多主题切换,并针对触摸屏操作做了专门优化;在密码输入等…

2026/10/14 16:30:48

AxMath的详细安装教程~~~!!!

很多小伙伴还是喜欢AxMath进行公式编辑,所以在这篇分享中,为大家带来Word中如何安装AxMath。首先,我在百度网盘中存了一份AxMath安装资源。如需自取:百度网盘链接:https://pan.baidu.com/s/1GQhMsHdsQoMszy7stukrOA?p…

2026/10/14 17:51:24

AGV调度与路径规划:从排队论到整数规划的MathorCup实战解析

简介:这是一份围绕2022年MathorCup高校数学建模挑战赛C题自动泊车问题整理的赛题解析与建模思路资料,适合参加数学建模竞赛的本科生、研究生,以及对泊车路径规划感兴趣的算法学习者。内容严格按题目四个子问题展开:先根据阿克曼转…

2026/10/14 17:51:24

PWM驱动蜂鸣器与ADC调节LED亮度:Cortex-M定时器外设实战

上次把这块板子的工程模板和 GPIO 点灯部分过了一遍,这次继续往下推进,把 PWM 和 ADC 这两个外设放在一起玩。标题里这对组合听起来有点绕——PWM 驱动无源蜂鸣器、ADC 调整 LED 亮度,其实拆开看非常直白:一个负责输出波形&#x…

2026/10/14 17:51:24

SAP生产预留全解析:RESB、MB1A发料、COGI排错与MD04追溯

简介:SAP生产预留操作指引是面向SAP实施顾问、生产计划员及仓库管理人员的实用手册,以预留功能为主线,系统讲解预留背景、预留编码OMC2、缺省值、工厂级预留参数配置、预留可用性检查,以及MB21手动创建、MB23按预留编号查询、MB25…

2026/10/14 17:51:24

医院信息系统数据结构手册:HIS表设计、数据关联与运维排查指南

简介:天健医院信息系统数据结构手册是天健医疗HIS系统的数据库表结构说明文档,面向需要了解HIS底层数据结构的开发、实施与运维工程师,帮助读者快速掌握各业务模块的表设计逻辑,满足数据查询、二次开发与系统对接等场景需求。资源…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/14 17:41:07

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/14 2:32:55

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/14 0:00:33

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:33

macOS/iOS高精度计时:mach_absolute_time原理与实战

1. 项目概述:为什么mach_absolute_time是 macOS/iOS 时间测量的“黄金标准”在 macOS 和 iOS 开发中,我见过太多人用CFAbsoluteTimeGetCurrent()或NSDate.timeIntervalSinceReferenceDate做性能打点,结果在高精度场景下被系统时钟跳变、NTP 同…

2026/10/14 0:00:33

SCORM课件演示与测试全解析:从API通信到自动化验证

简介:这是一套遵循SCORM标准的交互式课件演示与测试资源,面向E-Learning课程开发者、LMS平台测试人员及在线教学从业者,用于验证课件在不同学习管理系统中的识别、传递与跟踪能力。压缩包共28个文件,约12.07MB,以swf动…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑