YOLO26改进-上采样 | EUCB高效上卷积块,实现特征图尺度匹配和高效上采样

前言

本文介绍了一种在YOLO26目标检测模型中引入高效解码器模块EMCAD的创新方法,以提升模型在资源受限场景下的性能与效率。EMCAD由多个模块构成,其中核心的EUCB(高效上卷积块)通过上采样、深度可分离卷积、激活归一化和通道调整等操作,兼顾了特征质量与计算成本。实验结果显示,该模块在显著减少参数与FLOPs的同时仍具备优异性能。文章还提供了完整的YOLO26模型集成流程、配置和训练实战。

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

专栏链接: YOLO26改进专栏

文章目录

  • 前言
  • 介绍
    • 摘要
  • 文章链接
  • 基本原理
      • 一、EUCB 的核心功能
      • 二、EUCB 的结构与工作流程
      • 三、EUCB 的核心优势
  • 核心代码
  • YOLO26引入代码
  • 注册
    • 步骤1:
    • 步骤2
  • 配置yolo26-EUCB.yaml
  • 实验
    • 脚本
    • 结果

介绍

摘要

在医学图像分割中,设计一种兼具高效性与高性能的解码机制尤为关键,尤其是在计算资源受限的场景下。针对传统解码器计算成本高的问题,本文提出了一种新型高效多尺度卷积注意力解码器——EMCAD,旨在在保证模型精度的同时显著降低计算开销。EMCAD通过引入多尺度深度卷积块,显著增强特征表达能力,并结合通道注意力、空间注意力与大核门控注意力机制,有效捕捉复杂空间关系并聚焦关键区域。借助分组卷积与深度卷积的高效结构,EMCAD在搭配标准编码器时仅需1.91M参数和0.381G FLOPs,具备良好的扩展性和部署友好性。
在6类医学图像分割任务的12个公开数据集上,EMCAD实现了当前先进水平(SOTA)的性能,同时参数量减少79.4%,FLOPs降低80.3%。此外,其对不同编码器的良好适配性和任务通用性进一步验证了其在医学图像分析领域的应用潜力。
项目开源地址:https://github.com/SLDGroup/EMCAD

文章链接

论文地址:论文地址

代码地址:代码地址


基本原理

在本文提出的 EMCAD(Efficient Multi-scale Convolutional Attention Decoder)中,EUCB(Efficient Up-Convolution Block,高效上卷积块)是解码器实现特征图尺度对齐与高效上采样的核心组件,旨在在提升特征分辨率的同时最大程度降低计算开销。


一、EUCB 的核心功能

EUCB 主要负责逐步放大当前阶段的特征图,以实现与跳跃连接(Skip Connection)中高分辨率特征图的尺寸匹配,从而促进不同尺度特征的有效融合。

  • 在医学图像分割任务中,编码器通常输出多个尺度的特征图(如 1/4、1/8、1/16 等),解码器需通过上采样将其逐层还原。
  • EUCB 正是为此设计,兼顾特征质量与计算效率,规避了传统上卷积结构高计算量的问题。

二、EUCB 的结构与工作流程

EUCB 由四个关键步骤组成,其整体流程可概括为:上采样 → 特征增强 → 通道调整

  1. 上采样(UpSampling)
    使用缩放因子为 2 的上采样操作(如双线性插值)将低分辨率特征图放大一倍,实现初步尺度对齐。

  2. 特征增强(Depth-wise Convolution)
    引入 3×3 深度可分离卷积替代传统卷积,显著降低参数量与 FLOPs,同时增强局部空间细节表达能力。

  3. 归一化与激活(BN + ReLU)
    应用批归一化和 ReLU 激活函数,提高训练稳定性和模型非线性表达能力。

  4. 通道调整(1×1 卷积)
    通过 1×1 卷积调整通道维度,确保后续特征融合时维度一致。


三、EUCB 的核心优势

  1. 高效计算
    借助深度可分离卷积,EUCB 显著降低计算成本,在保持特征增强能力的同时大幅减少参数与 FLOPs,适用于嵌入式与边缘设备部署。

  2. 特征质量保障
    上采样后结合局部增强与归一化激活,有效弥补特征模糊问题,保持语义与空间信息完整。

  3. 结构通用性强
    EUCB 模块结构简洁,适配性强,能够灵活集成至多种 U-Net 变体与编码器架构,支持不同输入分辨率的医学图像分割任务。

核心代码

classEUCB(nn.Module):def__init__(self,in_channels,out_channels,kernel_size=3,stride=1,activation='relu'):super(EUCB,self).__init__()self.in_channels=in_channels self.out_channels=out_channels self.up_dwc=nn.Sequential(nn.Upsample(scale_factor=2),nn.Conv2d(self.in_channels,self.in_channels,kernel_size=kernel_size,stride=stride,padding=kernel_size//2,groups=self.in_channels,bias=False),nn.BatchNorm2d(self.in_channels),act_layer(activation,inplace=True))self.pwc=nn.Sequential(nn.Conv2d(self.in_channels,self.out_channels,kernel_size=1,stride=1,padding=0,bias=True))self.init_weights('normal')definit_weights(self,scheme=''):named_apply(partial(_init_weights,scheme=scheme),self)defforward(self,x):x=self.up_dwc(x)x=channel_shuffle(x,self.in_channels)x=self.pwc(x)returnx

YOLO26引入代码

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

importtorchimporttorch.nnasnndefautopad(k,p=None,d=1):# kernel, padding, dilation"""Pad to 'same' shape outputs."""ifd>1:k=d*(k-1)+1ifisinstance(k,int)else[d*(x-1)+1forxink]# actual kernel-sizeifpisNone:p=k//2ifisinstance(k,int)else[x//2forxink]# auto-padreturnpclassConv(nn.Module):"""Standard convolution with args(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation)."""default_act=nn.SiLU()# default activationdef__init__(self,c1,c2,k=1,s=1,p=None,g=1,d=1,act=True):"""Initialize Conv layer with given arguments including activation."""super().__init__()self.conv=nn.Conv2d(c1,c2,k,s,autopad(k,p,d),groups=g,dilation=d,bias=False)self.bn=nn.BatchNorm2d(c2)self.act=self.default_actifactisTrueelseactifisinstance(act,nn.Module)elsenn.Identity()defforward(self,x):"""Apply convolution, batch normalization and activation to input tensor."""returnself.act(self.bn(self.conv(x)))defforward_fuse(self,x):"""Perform transposed convolution of 2D data."""returnself.act(self.conv(x))# Efficient up-convolution block (EUCB)classEUCB(nn.Module):def__init__(self,in_channels,kernel_size=3,stride=1):super(EUCB,self).__init__()self.in_channels=in_channels self.out_channels=in_channels self.up_dwc=nn.Sequential(nn.Upsample(scale_factor=2),Conv(self.in_channels,self.in_channels,kernel_size,g=self.in_channels,s=stride))self.pwc=nn.Sequential(nn.Conv2d(self.in_channels,self.out_channels,kernel_size=1,stride=1,padding=0,bias=True))defforward(self,x):x=self.up_dwc(x)x=self.channel_shuffle(x,self.in_channels)x=self.pwc(x)returnxdefchannel_shuffle(self,x,groups):batchsize,num_channels,height,width=x.data.size()channels_per_group=num_channels//groups x=x.view(batchsize,groups,channels_per_group,height,width)x=torch.transpose(x,1,2).contiguous()x=x.view(batchsize,-1,height,width)returnx

注册

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

步骤1:

fromultralytics.nn.sample.EUCBimportEUCB

步骤2

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

elifmisEUCB:c2=ch[f]args=[c2,*args]

配置yolo26-EUCB.yaml

ultralytics/cfg/models/26/yolo26-EUCB.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,EUCB,[]]-[[-1,6],1,Concat,[1]]# cat backbone P4-[-1,2,C3k2,[512,True]]# 13-[-1,1,EUCB,[]]-[[-1,4],1,Concat,[1]]# cat backbone P3-[-1,2,C3k2,[256,True]]# 16 (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,Conv,[512,3,2]]-[[-1,10],1,Concat,[1]]# cat head P5-[-1,1,C3k2,[1024,True,0.5,True]]# 22 (P5/32-large)-[[16,19,22],1,Detect,[nc]]# Detect(P3, P4, P5)

实验

脚本

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

结果

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

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

相关文章

YOLO26改进 - 下采样 | 轻量化突破:ADown 下采样让 YOLO26 参量减、精度升

前言 本文介绍了一种轻量级的特征下采样模块 ADown,它结合平均池化与最大池化策略,实现更有效的信息保留与压缩。在传统卷积网络中,特征下采样常造成信息损失,而 ADown 通过双通道并行结构优化了下采样效果,提升了模型…

得物月付分期购怎么购物变现

得物月付额度仅限在得物 APP 内用于消费支付,不支持提现、转账或线下消费,其核心使用范围和限制如下: 核心使用范围 平台全品类商品:覆盖球鞋潮鞋、潮牌服饰、运动装备、美妆护肤、数码 3C、奢品箱包、配饰等得物平…

Flutter for OpenHarmony核心组件学习: MaterialApp、Scaffold 两大基础组件以及有无状态组件

Flutter for OpenHarmony核心组件学习: MaterialApp、Scaffold 两大基础组件以及有无状态组件 作者:爱吃大芒果 个人主页 爱吃大芒果 本文所属专栏Flutter 更多专栏 Ascend C 算子开发教程(进阶) 鸿蒙集成 OpenAgents openJiuwen 从0到1自…

机械革命 AMD H255 CPU 无法从AMD官网下载显卡驱动的解决办法

很奇怪 我手里俩机械革命 H255 都这毛病,WIN10 WIN11都一样 下载最新的驱动12,1月的都这样 安装了随机驱动,然后从 https://www.amd.com/zh-cn.html 下驱动就报182错误 提示没有可支持的硬件 难道我买的是假AMD? 我又继续实验&…

被裁后半月面试8家公司无果,凭借这份Java面试指南成功入职阿里

前言上个月班上的好好的突然被通知"毕业了",现在工作也确实不好找。之前近一个月面了很多大大小小的公司降薪太严重都没考虑去,最后没办法本来都打算随便去一家了却偶然得到一个阿里的面试机会,足足面了七面(我太难了&a…

猎杀时刻,阿里高工总结spring全栈笔记,疯狂狩猎大厂offer!

前言 我们做这行的对于Spring的学习,可以说是一直未停止。前段时间Spring5.0发布,多了很多新功能,这些新功能改变了我们使用该框架的方式。但是很多铁汁对于Spring 5.0的新增功能并不是很了解,更别说利用这些新功能使用Spring MV…

第一天!

今天开始了第一天,学校期间听了javaweb但实际上根本写不出来,准备直接重听了

关于得物月付额度怎么提现,看完秒懂

在潮流消费成为日常的当下,想要入手心仪的球鞋、潮牌、数码好物,却不想被一次性支付的压力打乱消费计划?得物平台推出的得物月付,以专属信用额度为核心,打造“先享后付”的便捷消费体验,适配年轻人的消费节奏,让…

[Linux]Kubuntu下mpv播放器安装与最佳配置(无mpv4补帧)

下载 sudo add-apt-repository ppa:mpv-team/mpv sudo apt update sudo apt install mpv配置 下载神经网络模型FSRCNNX和用户着色器 mkdir -p ~/.config/mpv/shaders cd ~/.config/mpv/shaders wget https://github.co…

SQL数据类型转换:CAST详解及实践

前言 在 SQL 数据处理中,数据类型转换是常见需求,尤其在跨系统数据交互时。在SQL的世界里,数据类型转换是一个基础且关键的操作,它贯穿于数据库开发、管理与数据分析的各个环节,深刻理解它们对于编写高效、稳定的SQL代…

KingbaseES 解锁时序数据:国产数据库在物联网时代的突围之路

引言 刚接触时序数据领域时,我深感困惑。作为技术人员都明白,数据库选型不当会导致巨大的修正代价。近年来,随着工业互联网和物联网的蓬勃发展,各类传感器和监测设备不断产生海量数据,传统数据库已明显捉襟见肘。破局 …

破局时序数据困局:KingbaseES从医疗到交通的国产化实践启示录

引言 本文将深度剖析KingbaseES在时序数据处理中的技术突破与实战。通过时序引擎架构解析、百万级设备接入的实战细节、索引优化踩坑实录、性能调优的量化方法论的实战应用及国产化替代的深层思考。 一、为什么是KingbaseES? 初次接触金仓时序数据库时&#xff0c…

智能农业决策优化:提示工程架构师的AI技术分享

智能农业决策优化:提示工程架构师的AI技术分享 关键词:智能农业、决策优化、提示工程、AI技术、农业大数据、机器学习模型、农业自动化 摘要:本文深入探讨智能农业决策优化中提示工程架构师所运用的AI技术。首先阐述智能农业的领域背景与发展…

得物月付消费购物额度怎么变现

得物月付额度:解锁潮流消费新方式,先享后付更轻松 在潮流消费成为日常的当下,想要入手心仪的球鞋、潮牌、数码好物,却不想被一次性支付的压力打乱消费计划?得物平台推出的得物月付,以专属信用额度为核心,打造“…

LoRA 微调参数调优流程

目录一、准备阶段:评估任务 & 数据二、训练观察阶段:小规模试验三、超参调优阶段四、迭代优化策略五、生产级经验总结 明白了,你问的是 LoRA 微调在生产落地时的参数调优流程,不仅仅是 rank 和 target modules…

串口屏丨串口屏厂家丨液晶屏厂家丨继电保护仪显示屏选型避坑指南:如何解决强电磁干扰、数据跳变与户外严苛工况适配难题?

继电保护仪作为电力系统安全稳定运行的“哨兵”,是变电站、电力运维、电力设备生产等领域不可或缺的核心检测设备,主要用于模拟电力系统故障、校验继电保护装置的动作特性、定值精度与响应速度,其检测结果直接决定电…

被低估的Excel艺术大师:用REPT函数一键生成条形图与星级评分

谁说Excel图表只能通过插入菜单完成?一段简单的字符重复,就能创造出直观又灵活的数据可视化效果。 在日常数据分析中,我们经常需要快速对比数值大小或直观展示评分等级。传统方法可能是插入正式图表或编写复杂的条件格式,但有一种…

深入理解Linux套接字(Socket)编程:从原理到实践

深入理解Linux套接字Socket编程:从原理到实践1. 套接字基础概念1.1 什么是套接字?1.2 套接字类型对比2. Linux套接字编程核心2.1 套接字创建与配置2.2 关键数据结构2.3 字节序转换3. 高级套接字特性3.1 I/O多路复用3.2 套接字选项4. 实战案例&#xff1a…

如何强制ANY CPU的.net程序按32位或64位模式运行?

强制指定运行位数的方法,,有没有执行某个exe让他按指定模式加载的方式?比如regasm.exe就有32位、64位模式已完成思考你想知道是否能像regasm.exe区分 32/64 位模式那样,在执行 EXE 时直接指定其运行位数(而非编译 / 修…

ollama本地安装与大模型与DeepSeek模型调用

Ollama 本地部署 Deepseek R1 模型 概念 Ollama是在Github上的一个开源项目,其项目定位是:一个本地运行大模型的集成框架;目前主要针对主流的LLaMA架构的开源大模型设计,通过将模型权重、配置文件和必要数据封装进由Modelfile定义…