YOLO26改进 - 特征融合 | EFC增强层间特征相关性,通过多尺度特征交互减少冗余信息丢失即插即用

前言

本文介绍了基于增强层间特征相关性(EFC)的轻量级融合策略及其在 YOLO26中的结合。检测无人机图像小物体具有挑战性,传统多尺度特征融合方法存在不足。EFC 模块通过引入分组的特征聚焦单元(GFF)增强特征关联性,利用多级特征重构模块(MFR)进行特征重构,减少冗余特征生成,且具有通用性和适应性。我们将 EFC 模块集成进 YOLO26,替换部分特征融合策略。该方法即插即用,有望提升 YOLO26在小物体检测任务中的性能。

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

专栏链接: YOLO26改进专栏

文章目录

  • 前言
  • 介绍
    • 摘要
  • 文章链接
  • 基本原理
  • 核心代码
  • YOLO26引入代码
  • tasks注册
    • 步骤1:
    • 步骤2
    • 配置yolo26-EFC.yaml
  • 实验
    • 脚本
    • 结果

介绍

摘要

鉴于无人机图像存在低分辨率以及背景混合的情况,检测其中的小物体颇具挑战性,这会造成特征信息有限。多尺度特征融合能够通过获取不同尺度上的信息来增强检测能力,然而传统方法存在一定缺陷。简单的连接或加法运算无法充分发挥多尺度融合的优势,致使特征之间的相关性不足。这一缺陷对小物体的检测造成了阻碍,尤其是在复杂背景和人口稠密地区。为解决该问题并有效利用有限的计算资源,本文提出一种基于增强层间特征相关性(EFC)的轻量级融合策略,用以替代传统特征金字塔网络(FPN)中的特征融合策略。特征金字塔中不同图层的语义表达存在不一致性。在EFC策略里,分组的特征聚焦单元(GFF)通过聚焦不同特征的上下文信息来增强各层的特征相关性。多级特征重构模块(MFR)对金字塔中各层的强弱信息进行有效的重构和变换,减少冗余的特征融合,从而保留更多的小目标信息。值得一提的是,所提出的方法具有即插即用的特性,能够广泛应用于各种基础网络。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

EFC (Enhanced Inter-layer Feature Correlation) 模块是一种轻量级的特征融合策略,旨在提升小物体检测的性能,尤其是在复杂的背景中。以下是对 EFC 模块各组成部分的详细介绍:

  1. 特征关联增强

​ EFC 模块通过引入Grouped Feature Focusing Unit (GFF)来强化不同层之间的特征关联性。GFF 通过关注特征的空间上下文信息,聚合邻近层的特征,使得特征之间的语义表示更加一致和丰富。这种对上下文信息的聚焦有助于解决小物体特征的不确定性问题,使模型能够更好地定位小物体。

  1. 特征重构

​ EFC 中的Multi-Level Feature Reconstruction Module (MFR)关键在于有效利用各层的特征,而不是仅依赖于简单的卷积操作。MFR 模块能够分离强弱特征信息,通过对特征进行重构,来最大程度地保留对于小物体检测至关重要的细节信息,降低语义偏差。这使得模型在不同层次的特征融合中,能够更精确地理解小物体的空间位置和语义内容。

  1. 冗余特征的减少

​ EFC 特别设计时考虑到了减少冗余特征生成的方法。传统的特征融合常常使用大型卷积核,导致冗余信息的产生,而 EFC 通过采用小型卷积或者轻量级卷积设计,降低了计算复杂度,并在不损失信息的前提下,使得输出特征更加精炼和有用。

  1. 通用性和适应性

​ EFC 模块设计为“插件式”,可以广泛应用于多种特征金字塔网络(FPN)框架,提供了更灵活的检测模型适应能力。这种普遍适用性使得 EFC 可以与不同基础网络结合,进一步提升各种目标检测任务中的表现。

通过上述原理,EFC 模块能够有效应对小物体检测中的挑战,尤其是在多尺度和复杂背景下,增强了特征表达能力,最终实现了更高的检测精度和效率

核心代码

importtorch.nnasnnimporttorch.nn.functionalasFfrommmcv.cnnimportConvModulefrommmcv.runnerimportBaseModule,auto_fp16from..builderimportNECKSclassEFC(BaseModule):def__init__(self,c1,c2):super().__init__()self.conv1=nn.Conv2d(c1,c2,kernel_size=1,stride=1)self.conv2=nn.Conv2d(c2,c2,kernel_size=1,stride=1)self.conv4=nn.Conv2d(c2,c2,kernel_size=1,stride=1)self.bn=nn.BatchNorm2d(c2)self.sigomid=nn.Sigmoid()self.group_num=16self.eps=1e-10self.gamma=nn.Parameter(torch.randn(c2,1,1))self.beta=nn.Parameter(torch.zeros(c2,1,1))self.gate_genator=nn.Sequential(nn.AdaptiveAvgPool2d((1,1)),nn.Conv2d(c2,c2,1,1),nn.ReLU(True),nn.Softmax(dim=1),)self.dwconv=nn.Conv2d(c2,c2,kernel_size=3,stride=1,padding=1,groups=c2)self.conv3=nn.Conv2d(c2,c2,kernel_size=1,stride=1)self.Apt=nn.AdaptiveAvgPool2d(1)self.one=c2 self.two=c2 self.conv4_gobal=nn.Conv2d(c2,1,kernel_size=1,stride=1)forgroup_idinrange(0,4):self.interact=nn.Conv2d(c2//4,c2//4,1,1,)defforward(self,x):x1,x2=x global_conv1=self.conv1(x1)bn_x=self.bn(global_conv1)weight_1=self.sigomid(bn_x)global_conv2=self.conv2(x2)bn_x2=self.bn(global_conv2)weight_2=self.sigomid(bn_x2)X_GOBAL=global_conv1+global_conv2 x_conv4=self.conv4_gobal(X_GOBAL)X_4_sigmoid=self.sigomid(x_conv4)X_=X_4_sigmoid*X_GOBAL X_=X_.chunk(4,dim=1)out=[]forgroup_idinrange(0,4):out_1=self.interact(X_[group_id])N,C,H,W=out_1.size()x_1_map=out_1.reshape(N,1,-1)mean_1=x_1_map.mean(dim=2,keepdim=True)x_1_av=x_1_map/mean_1 x_2_2=F.softmax(x_1_av,dim=-1)x1=x_2_2.reshape(N,C,H,W)x1=X_[group_id]*x1 out.append(x1)out=torch.cat([out[0],out[1],out[2],out[3]],dim=1)N,C,H,W=out.size()x_add_1=out.reshape(N,self.group_num,-1)N,C,H,W=X_GOBAL.size()x_shape_1=X_GOBAL.reshape(N,self.group_num,-1)mean_1=x_shape_1.mean(dim=2,keepdim=True)std_1=x_shape_1.std(dim=2,keepdim=True)x_guiyi=(x_add_1-mean_1)/(std_1+self.eps)x_guiyi_1=x_guiyi.reshape(N,C,H,W)x_gui=(x_guiyi_1*self.gamma+self.beta)weight_x3=self.Apt(X_GOBAL)reweights=self.sigomid(weight_x3)x_up_1=reweights>=weight_1 x_low_1=reweights<weight_1 x_up_2=reweights>=weight_2 x_low_2=reweights<weight_2 x_up=x_up_1*X_GOBAL+x_up_2*X_GOBAL x_low=x_low_1*X_GOBAL+x_low_2*X_GOBAL x11_up_dwc=self.dwconv(x_low)x11_up_dwc=self.conv3(x11_up_dwc)x_so=self.gate_genator(x_low)x11_up_dwc=x11_up_dwc*x_so x22_low_pw=self.conv4(x_up)xL=x11_up_dwc+x22_low_pw xL=xL+x_guireturnxL

YOLO26引入代码

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

importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassEFC(nn.Module):def__init__(self,c1,c2):super().__init__()self.conv1=nn.Conv2d(c1,c2,kernel_size=1,stride=1)self.conv2=nn.Conv2d(c2,c2,kernel_size=1,stride=1)self.conv4=nn.Conv2d(c2,c2,kernel_size=1,stride=1)self.bn=nn.BatchNorm2d(c2)self.sigomid=nn.Sigmoid()self.group_num=16self.eps=1e-10self.gamma=nn.Parameter(torch.randn(c2,1,1))self.beta=nn.Parameter(torch.zeros(c2,1,1))self.gate_genator=nn.Sequential(nn.AdaptiveAvgPool2d((1,1)),nn.Conv2d(c2,c2,1,1),nn.ReLU(True),nn.Softmax(dim=1),)self.dwconv=nn.Conv2d(c2,c2,kernel_size=3,stride=1,padding=1,groups=c2)self.conv3=nn.Conv2d(c2,c2,kernel_size=1,stride=1)self.Apt=nn.AdaptiveAvgPool2d(1)self.one=c2 self.two=c2 self.conv4_gobal=nn.Conv2d(c2,1,kernel_size=1,stride=1)forgroup_idinrange(0,4):self.interact=nn.Conv2d(c2//4,c2//4,1,1,)defforward(self,x):x1,x2=x global_conv1=self.conv1(x1)bn_x=self.bn(global_conv1)weight_1=self.sigomid(bn_x)global_conv2=self.conv2(x2)bn_x2=self.bn(global_conv2)weight_2=self.sigomid(bn_x2)X_GOBAL=global_conv1+global_conv2 x_conv4=self.conv4_gobal(X_GOBAL)X_4_sigmoid=self.sigomid(x_conv4)X_=X_4_sigmoid*X_GOBAL X_=X_.chunk(4,dim=1)out=[]forgroup_idinrange(0,4):out_1=self.interact(X_[group_id])N,C,H,W=out_1.size()x_1_map=out_1.reshape(N,1,-1)mean_1=x_1_map.mean(dim=2,keepdim=True)x_1_av=x_1_map/mean_1 x_2_2=F.softmax(x_1_av,dim=1)x1=x_2_2.reshape(N,C,H,W)x1=X_[group_id]*x1 out.append(x1)out=torch.cat([out[0],out[1],out[2],out[3]],dim=1)N,C,H,W=out.size()x_add_1=out.reshape(N,self.group_num,-1)N,C,H,W=X_GOBAL.size()x_shape_1=X_GOBAL.reshape(N,self.group_num,-1)mean_1=x_shape_1.mean(dim=2,keepdim=True)std_1=x_shape_1.std(dim=2,keepdim=True)x_guiyi=(x_add_1-mean_1)/(std_1+self.eps)x_guiyi_1=x_guiyi.reshape(N,C,H,W)x_gui=(x_guiyi_1*self.gamma+self.beta)weight_x3=self.Apt(X_GOBAL)reweights=self.sigomid(weight_x3)x_up_1=reweights>=weight_1 x_low_1=reweights<weight_1 x_up_2=reweights>=weight_2 x_low_2=reweights<weight_2 x_up=x_up_1*X_GOBAL+x_up_2*X_GOBAL x_low=x_low_1*X_GOBAL+x_low_2*X_GOBAL x11_up_dwc=self.dwconv(x_low)x11_up_dwc=self.conv3(x11_up_dwc)x_so=self.gate_genator(x_low)x11_up_dwc=x11_up_dwc*x_so x22_low_pw=self.conv4(x_up)xL=x11_up_dwc+x22_low_pw xL=xL+x_guireturnxL

tasks注册

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

步骤1:

fromultralytics.nn.featureFusion.EFCimportEFC

步骤2

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

elifmisEFC:c1,c2=ch[f[0]],args[0]c2=make_divisible(min(c2,max_channels)*width,8)args=[c1,c2]

配置yolo26-EFC.yaml

ultralytics/cfg/models/26/yolo26-EFC.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,EFC,[512]]# cat backbone P4-[-1,2,C3k2,[512,True]]# 13-[-1,1,nn.Upsample,[None,2,"nearest"]]-[[-1,4],1,EFC,[512]]# cat backbone P3-[-1,2,C3k2,[256,True]]# 16 (P3/8-small)-[-1,1,Conv,[256,3,2]]-[[-1,13],1,EFC,[512]]# cat head P4-[-1,2,C3k2,[512,True]]# 19 (P4/16-medium)-[-1,1,Conv,[512,3,2]]-[[-1,10],1,EFC,[1024]]# 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-EFC.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-EFC',)

结果

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

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

相关文章

YOLO26改进 - 特征融合 | 融合Hyper-YOLO混合聚合网络MANet(Mixed Aggregation Network)通过多路径设计实现高效特征学习与模型适应性提升

前言 本文介绍了新型目标检测方法 Hyper - YOLO 及其在 YOLO26中的结合。传统 YOLO 模型颈部设计有局限&#xff0c;为此提出超图计算驱动的语义收集与扩散框架&#xff08;HGCSCS&#xff09;&#xff0c;将视觉特征图转化到语义空间并构建高阶信息传播机制。Hyper - YOLO 在…

汉字阅读开挂了?汉英阅读速度实测对比,效率差出40%+!

汉字阅读开挂了&#xff1f;汉英阅读速度实测对比&#xff0c;效率差出40%&#xff01; 一、 引言&#xff1a;刷文时你没发现的秘密 —— 汉字阅读比英语快多少&#xff1f; 1.1 生活场景切入&#xff1a;为什么读中文资讯 “一目十行”&#xff0c;读英文原文却 “磕磕绊绊…

缓存三剑客困难

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2026年 印刷厂家推荐排行榜:化妆瓶、亚克力、咖啡杯、金属、PC满板、电子产品、汽车零件、遥控面板、医疗器材、罐体印刷,专业定制与高精度工艺之选

2026年印刷厂家推荐排行榜:专业定制与高精度工艺之选 在当今制造业精细化、个性化需求日益增长的背景下,特种印刷技术已成为提升产品附加值、实现品牌差异化竞争的关键环节。无论是化妆品包装的奢华质感、电子产品的…

AI工程师必看!X-Distill技术详解:让机器人仅需10条数据就能学会复杂操作,建议收藏学习!

X-Distill是一种创新的跨架构知识蒸馏技术&#xff0c;解决了机器人视觉中的"数据悖论"问题。该方法通过两步法&#xff1a;先在ImageNet上将大型ViT的视觉知识蒸馏到小型CNN中&#xff0c;再在机器人任务上微调&#xff0c;使仅需10条演示数据的模型就能学习书写、抓…

AI驱动的动态调度:从理论到实践,程序员必备的智能制造核心技能(建议收藏)

制造业正从大批量生产转向多品种小批量生产&#xff0c;不确定性成为常态。传统"以计划为中心"的生产方式难以应对变化&#xff0c;AI驱动的动态调度成为关键解决方案。通过实时感知、策略演化和闭环自调节&#xff0c;动态调度使制造系统从"静态匹配"转向…

NeurIPS 2025多模态表征学习新突破:4篇论文详解

本文介绍了2025年NeurIPS会议上的4篇多模态表征学习论文&#xff0c;分别探讨了有限数据场景下的多模态对齐(STRUCTURE)、模态错位的理论价值、特征因果分解(FCD)方法以及通过视觉嵌入蒸馏(VisPer-LM)提升MLLM视觉感知能力。这些创新方法为解决多模态学习中的数据稀缺、噪声干扰…

亲测BSHM人像抠图镜像,效果惊艳真实体验分享

亲测BSHM人像抠图镜像&#xff0c;效果惊艳真实体验分享 最近在做一批电商商品图的背景替换&#xff0c;需要把真人模特从各种复杂场景中干净利落地抠出来。试过好几款开源模型——MODNet跑得快但头发边缘毛躁&#xff0c;U2-Net细节好却慢得像在等咖啡凉透&#xff0c;Robust…

大模型部署难题破解:并行计算架构详解与实战

本文解析了大模型部署中的并行计算架构&#xff0c;包括模型并行&#xff08;按层或张量拆分&#xff09;、流水线并行和数据并行&#xff0c;以及三者结合的混合并行策略。这些技术解决了大模型显存不足和计算效率问题&#xff0c;使AI产品经理能从"只会用模型"上升…

程序员学习大模型必看:腾讯云智商业产品面试经验,AI商业化思维与未来趋势深度解析(建议收藏)

本文详细记录腾讯云智商业产品三轮面试经验&#xff0c;重点考察商业化思维和AI产品理解。作者分享对AI现状看法&#xff1a;存在泡沫、开源与闭源模型能力接近、小模型专业化趋势&#xff0c;以及AI医疗等未来发展方向。面试中探讨了产品运营与策划区别、AI2B商业模式&#xf…

LangChain、LangFlow、LangGraph:大模型应用开发框架全解析

本文详细解析了LangChain生态中的三大框架&#xff1a;LangChain作为LLM应用的基础框架&#xff0c;提供系统化组织能力&#xff1b;LangFlow是基于LangChain的可视化低代码工具&#xff0c;降低使用门槛&#xff1b;LangGraph则为复杂Agent提供状态机控制。三者定位不同&#…

大模型微调学习路线:从0到1掌握AI落地核心技能,附四阶段详细规划

本文详细介绍了大模型微调的四阶段学习路线&#xff1a;第一阶段(20天)掌握AI环境配置和基础编程&#xff1b;第二阶段(1个月)学习大模型项目框架和数据处理&#xff1b;第三阶段(2个月)通过论文阅读和复现培养创新能力&#xff1b;第四阶段(1个月)深入前沿技术优化与创新。大模…

2026年 环境老化试验箱厂家推荐排行榜,氙灯/紫外线/湿度/复合循环/盐水喷雾/臭氧/热老化试验箱专业品牌深度解析

2026年环境老化试验箱厂家推荐排行榜:氙灯/紫外线/湿度/复合循环/盐水喷雾/臭氧/热老化试验箱专业品牌深度解析 在材料科学、汽车制造、航空航天、电子电器及涂料化工等众多工业领域,产品的长期可靠性与耐久性是衡量…

救命神器8个AI论文写作软件,自考学生搞定毕业论文不求人!

救命神器8个AI论文写作软件&#xff0c;自考学生搞定毕业论文不求人&#xff01; 自考路上的得力助手&#xff1a;AI论文写作工具如何改变你的学习方式 在当今信息爆炸的时代&#xff0c;自考学生面对毕业论文的压力愈发明显。传统的写作方式不仅耗时费力&#xff0c;还容易因缺…

2026年冷藏车箱厂家推荐排行榜:4米2/3米2/6米8/7米7/9米6冷链运输车箱,精选耐用保温与合规高效品牌

2026年冷藏车箱厂家推荐排行榜:4米2/3米2/6米8/7米7/9米6冷链运输车箱,精选耐用保温与合规高效品牌 随着全球生鲜电商、医药冷链及预制菜产业的蓬勃发展,冷链物流已成为现代供应链体系的核心支柱。作为冷链运输的“…

2026年印刷设备厂家实力推荐榜:单色移印机/全自动平面丝印机/多色移印机/曲面丝印机/标准烫金机/化妆品瓶子印刷机,精选高效智能印刷解决方案

2026年印刷设备厂家实力推荐榜:单色移印机/全自动平面丝印机/多色移印机/曲面丝印机/标准烫金机/化妆品瓶子印刷机,精选高效智能印刷解决方案 在全球制造业智能化、柔性化转型的浪潮下,印刷设备作为产品表面装饰、信…

web3生态分层

现在的WEB3生态,已经不是一个简单的比特币网络了,它演化成了一个庞大复杂的数字国家。我们可以用分层的方式来拆解它,就像理解一个城市的:地基、公路、水电煤、商业区。基础设施层 L0→L3 L0 底层传输层 它的主要作…

基于springboot+vue的农产品销售管理系统(源码+论文+部署+安装)

感兴趣的可以先收藏起来&#xff0c;还有在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望可以帮到大家。一、程序背景随着农业生产规模化、市场化推进及信息技术迅猛发展&#xff0c;农产品销售逐渐突破地域限制…

2026年不锈钢工程厂家实力推荐榜:别墅、会所、酒店、商业空间等高端定制,匠心工艺与创新设计深度解析

2026年不锈钢工程厂家实力推荐榜:别墅、会所、酒店、商业空间等高端定制,匠心工艺与创新设计深度解析 随着现代建筑与室内设计美学的不断演进,不锈钢材料凭借其卓越的物理性能、丰富的表面处理工艺以及独特的现代感…

Opencode CLI 配置 MiniMax M2 (Nvidia API) 指南

Opencode CLI 配置 MiniMax M2 (Nvidia API) 指南 本文档详细介绍如何在 opencode CLI 中配置和使用 Nvidia 托管的 MiniMax M2 大模型。 1. 申请 NVIDIA API Key 要使用 MiniMax M2 模型,您首先需要从 NVIDIA NIM 平…