YOLO26改进 - SPPF模块 | 替代SPPF, Mona多认知视觉适配器:打破全参数微调的性能枷锁:即插即用的提点神器 | CVPR 2025

前言

本文介绍了新型视觉适配器微调方法Mona,并将其集成到YOLO26中。传统全参数微调成本高、存储负担重且有过拟合风险,现有PEFT方法性能落后。Mona仅调整5%以内的骨干网络参数,在多个视觉任务中超越全参数微调。其核心亮点包括参数效率高、性能突破和即插即用。适配器模块包含降维、多认知视觉滤波器等单元,通过深度可分离卷积和多尺度卷积核处理视觉信号,还加入分布适配层优化输入分布。我们将Mona集成到YOLO26,经注册和配置yaml文件后进行实验,展现出良好效果。

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

专栏链接: YOLO26改进专栏

介绍

摘要

Mona(Multi-cognitive Visual Adapter)是一种新型视觉适配器微调方法,旨在打破传统全参数微调(full fine-tuning)在视觉识别任务中的性能瓶颈。Mona 方法通过引入多认知视觉滤波器和优化输入分布,仅调整 5% 的骨干网络参数,就能在实例分割、目标检测、旋转目标检测等多个经典视觉任务中超越全参数微调的效果,显著降低了适配和存储成本,为视觉模型的高效微调提供了新的思路。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

Mona是由清华大学、国科大、上海交大、阿里巴巴联合提出的新型视觉适配器微调方法,相关论文《5%>100%: Breaking Performance Shackles of Full Fine-Tuning on Visual Recognition Tasks》已被CVPR2025收录,其核心目标是打破传统全参数微调的性能与成本枷锁,为视觉大模型高效微调提供新方案。

一、提出背景

  1. 传统全参数微调的痛点
    • 成本极高:需更新模型全部参数,以早期BERT为例,单卡训练100万数据需5-7小时,万亿级参数模型的微调对硬件和时间要求更苛刻;
    • 存储负担重:多任务场景下需为每个任务保存完整模型副本;
    • 存在过拟合风险:大模型直接微调易因数据分布差异出现性能下降。
  2. 现有PEFT方法的局限
    参数高效微调(PEFT)虽能仅调整少量参数实现模型适配,但视觉领域的多数PEFT方法性能仍落后于全参数微调,无法兼顾效率与效果。

二、核心亮点

  1. 参数效率极高:仅调整5%以内的骨干网络参数,远低于传统PEFT方法的参数改动占比,大幅降低适配和存储成本;
  2. 性能突破枷锁:在实例分割、目标检测、图像分类等多类视觉任务中,首次实现小于5%参数成本下超越全参数微调的性能;
  3. 即插即用特性:可便捷嵌入现有视觉模型架构(如Swin-Transformer),无需大规模重构模型。

三、方法架构与核心设计

1. 整体模块结构

Mona的适配器模块包含降维、多认知视觉滤波器、激活函数、升维等单元,并内置跳跃连接(Skip-Connections),可无缝集成至Swin-Transformer等主流视觉骨干网络,整体流程为:输入特征经LayerNorm处理后,先降维至内部维度,再通过多认知滤波器增强特征表达,经GELU激活和dropout后升维还原,最终与原始特征残差连接输出。

2. 两大核心创新设计

  1. 多认知视觉滤波器
    这是Mona的核心模块,通过深度可分离卷积和**多尺度卷积核(3×3、5×5、7×7)**实现对二维视觉信号的精准处理,与传统线性适配器不同,其专门针对视觉任务设计,可完成多尺度特征融合,提升模型对视觉信息的理解能力,具体是将3种尺度卷积的输出均值后与原始特征残差连接,再经1×1卷积投影优化。
  2. 输入分布优化
    在适配器前端加入分布适配层(Scaled LayerNorm),通过可学习参数gammagammax调整输入特征分布,使预训练特征更适配适配器的处理逻辑,提升微调效率。

核心代码

classMona(BaseModule):def__init__(self,in_dim,factor=4):super().__init__()self.project1=nn.Linear(in_dim,64)self.nonlinear=F.gelu self.project2=nn.Linear(64,in_dim)self.dropout=nn.Dropout(p=0.1)self.adapter_conv=MonaOp(64)self.norm=nn.LayerNorm(in_dim)self.gamma=nn.Parameter(torch.ones(in_dim)*1e-6)self.gammax=nn.Parameter(torch.ones(in_dim))defforward(self,x,hw_shapes=None):identity=x x=self.norm(x)*self.gamma+x*self.gammax project1=self.project1(x)b,n,c=project1.shape h,w=hw_shapes project1=project1.reshape(b,h,w,c).permute(0,3,1,2)project1=self.adapter_conv(project1)project1=project1.permute(0,2,3,1).reshape(b,n,c)nonlinear=self.nonlinear(project1)nonlinear=self.dropout(nonlinear)project2=self.project2(nonlinear)returnidentity+project2

YOLO26引入代码

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

importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassMonaOp(nn.Module):def__init__(self,in_features):super().__init__()self.conv1=nn.Conv2d(in_features,in_features,kernel_size=3,padding=3//2,groups=in_features)self.conv2=nn.Conv2d(in_features,in_features,kernel_size=5,padding=5//2,groups=in_features)self.conv3=nn.Conv2d(in_features,in_features,kernel_size=7,padding=7//2,groups=in_features)self.projector=nn.Conv2d(in_features,in_features,kernel_size=1,)defforward(self,x):identity=x conv1_x=self.conv1(x)conv2_x=self.conv2(x)conv3_x=self.conv3(x)x=(conv1_x+conv2_x+conv3_x)/3.0+identity identity=x x=self.projector(x)returnidentity+xclassMona(nn.Module):def__init__(self,in_dim):super().__init__()self.project1=nn.Conv2d(in_dim,64,1)self.nonlinear=F.gelu self.project2=nn.Conv2d(64,in_dim,1)self.adapter_conv=MonaOp(64)self.norm=nn.LayerNorm(in_dim)self.dropout=nn.Dropout(p=0.1)self.gamma=nn.Parameter(torch.ones(in_dim,1,1)*1e-6)self.gammax=nn.Parameter(torch.ones(in_dim,1,1))defforward(self,x):identity=x x_norm=x.permute(0,2,3,1).contiguous()x_norm=self.norm(x_norm)x=x_norm.permute(0,3,1,2).contiguous()*self.gamma+x*self.gammax project1=self.project1(x)project1=self.adapter_conv(project1)nonlinear=self.nonlinear(project1)nonlinear=self.dropout(nonlinear)project2=self.project2(nonlinear)returnidentity+project2

注册

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

步骤1:

fromultralytics.nn.otherModules.MonaimportMona

步骤2

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

elifmisMona:args=[ch[f]]c2=ch[f]

配置yolo26-Mona.yaml

ultralytics/cfg/models/26/yolo26-Mona.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,Mona,[1024,5]]# 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,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-Mona.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', # 使用MuSGD优化器,会报错optimizer='SGD',amp=False,project='runs/train',name='yolo26-Mona',)

结果

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

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

相关文章

2026全国学历提升机构TOP10盘点:选课攻略+避坑指南

2026全国学历提升机构TOP10盘点:选课攻略+避坑指南一、全国性头部机构:品牌与实力双保障 在学历提升的赛道上,全国性的大型机构凭借深厚的品牌底蕴、广泛的资源网络和成熟的教学体系,成为众多考生的首选。它们不仅…

微信小程序商城怎么开通?来自程序员的实用教程

大家好,我是专注小程序开发超过8年的老司机。这些年亲眼看着微信生态从萌芽到爆发,现在小程序日活已经突破5亿(数据来源:腾讯2023年财报),电商类小程序年均增长率超过60%。可以说,如果你还没把生意搬到小程序上…

Java毕设项目推荐-基于SpringBoot的在线食品安全信息平台系统基于springboot的食品安全管理系统【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

ffmpeg 二叉树代码测试及分析 - 详解

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

Java毕设选题推荐:基于springboot的企业智慧知识产权资产运营平台企业内部知识产权管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026执业药师考试培训前十机构测评:通关攻略与避坑指南

2026执业药师考试培训前十机构测评:通关攻略与避坑指南一、引言:为什么选择专业机构备考执业药师? 在医药行业中,执业药师资格证的重要性不言而喻,它就像是一块 “黄金敲门砖”,为从业者开启了更广阔的职业发展大…

Java毕设项目推荐-基于springboot高校学生就业信息推送系统springboot的面向大学生的职业兴趣评估与就业指导平台【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

亿可达×飞书:一键搞定定时群通知,告别人工重复提醒

有没有过这样的职场日常? 每天下午临近下班,都要特意定个闹钟提醒自己:“别忘了发例会通知”“记得同步今日工作小结到飞书群”;每周一早上,总要专门抽5分钟,在部门群推送本周任务清单;甚至节假…

Java毕设选题推荐:基于springboot大学生就业服务平台springboot的面向大学生的职业兴趣评估与就业指导平台【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Langchain 快速入门(一)

简介 langchain专门用于构建LLM大语言模型,其中提供了大量的prompt模板,和组件,通过chain(链)的方式将流程连接起来,操作简单,开发便捷。 环境配置 安装langchain框架 pip install langchain langchain-community…

2026最新版!微信小程序SaaS模板平台前十排名报告

2026年,小程序已成为商业经营的“标配”,但平台选择却愈发令人困惑。市场上工具繁多,宣传各异,企业主和创业者面临三大核心痛点: 第一,价格迷雾——低价入门后是否隐藏持续费用?第二,增长天花板——发展壮大后…

深入解析:Rust 练习册 :Matching Brackets与栈数据结构

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

2026 年 AI PPT 工具深度评测:拒绝 “科技与狠活”,寻找真正能解决职场痛点的生产力工具

在 2026 年,AI PPT 已然成为职场效率的关键变量。不同的 AI PPT 工具带来的效率提升有天壤之别,这就形成了一条“效率分水岭”,站在分水岭两侧的职场人,工作效率和成果有着显著差异。经过深度实测,并结合本土化场景评估…

2026年专业深度测评:淘宝代运营公司排名前五权威榜单

2026年专业深度测评:淘宝代运营公司排名前五权威榜单 随着电商行业竞争进入存量精细化运营阶段,品牌方对专业、高效、数据驱动的淘宝代运营服务需求持续攀升。为帮助品牌方精准决策,本测评基于行业公开数据、服务案…

Java毕设项目:基于springboot的食品安全管理系统(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【计算机毕业设计案例】基于Java的在线食品安全信息平台基于springboot的食品安全管理系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

AI代码质检员:如何用大模型提前揪出软件缺陷?

深夜两点,某大型电商平台的代码仓库悄悄合入了一个看似普通的促销模块更新。三天后的618大促当天,系统却在订单峰值时意外崩溃——事后发现,原来是一个边界条件检查遗漏造成的并发问题。这种故事在软件工程领域反复上演,直到AI开始介入这个传统上依赖人工经验的领域。 想象…

Linux命令创意

比赛背景与意义介绍Linux命令组合的灵活性与强大功能创意组合大赛的目标:激发开发者探索命令行的高效用法比赛对提升Shell脚本编写能力的价值比赛规则与参赛要求www.yunshengzx.com参赛作品需基于Linux命令行工具组合允许使用管道(|)、重定向…

湖州职业技术学院:Wi-Fi 7全覆盖,打造智慧校园“湖职样本”

“西塞山前白鹭飞,桃花流水鳜鱼肥。”千年之前,唐代诗人张志和所作的这首《渔歌子》,就勾勒出一幅绝美的江南风景长卷。如今,在湖州西塞山北麓,有着“最美山地大学”美称的湖州职业技术学院(以下称“湖州职…

:计算机Java毕设实战-基于springboot的食品安全管理系统食品安全档案管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…