前言本文介绍了多尺度初始化MSInit模块在YOLO11中的结合应用。MSInit模块采用多个不同核尺寸的轻量化深度卷积分支通过水平与垂直大核卷积、局部深度卷积和单位映射共同提取多尺度空间信息再利用通道投影、拼接、归一化与激活形成输出特征。我们将MSInit集成到YOLO11的C3k2结构中用它替换C3k2内部的重复特征提取单元在保持原有输入输出接口和特征图尺寸不变的同时增强骨干网络与检测头对不同尺度目标特征的建模能力。文章目录 YOLO11改进大全卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总专栏链接: YOLO11改进专栏介绍时空预测学习STPL旨在根据过去的观测预测未来帧在广泛的应用中都至关重要。与循环架构或混合架构相比纯卷积模型具有更高的效率和完全并行的优势但其固定感受野限制了对空间变化运动模式的自适应捕获能力。受生物学中的中心—周围组织结构和频率选择性信号处理启发我们提出PFGNet这是一种通过像素级频率引导门控动态调制感受野的全卷积框架。核心的外围频率门控PFG模块提取局部频谱线索并将多尺度大核外围响应与可学习的中心抑制进行自适应融合从而有效形成空间自适应带通滤波器。为保持高效性所有大核都被分解为可分离的一维卷积先进行1 × k 1 \times k1×k卷积再进行k × 1 k \times 1k×1卷积将逐通道计算成本从O ( k 2 ) O(k^2)O(k2)降低到O ( 2 k ) O(2k)O(2k)。PFGNet无需循环结构或注意力机制即可实现结构感知的时空建模。在Moving MNIST、TaxiBJ、Human3.6M和KTH数据集上的实验表明PFGNet以显著更少的参数量和FLOPs取得了最先进或接近最先进的预测性能。代码已公开于https://github.com/fhjdqaq/PFGNet。文章链接论文地址https://arxiv.org/pdf/2602.20537代码地址https://github.com/fhjdqaq/PFGNet/blob/9db02476d14bfc457558ebd7fd0b2d68f47dd6fa/openstl/modules/pfg_modules.py#L7基本原理1. 解决的关键问题MSInit面向固定卷积感受野难以同时覆盖细粒度局部信息与较大范围空间结构的问题。单一核尺寸只能在固定尺度上建模而多分支初始化能够并行建立不同大小的局部感受野为后续网络提供包含多尺度空间模式的初始表示。模块使用深度卷积和一维可分离大核组合控制计算量使扩大感受野不必直接采用高成本的二维大核卷积。2. 整体架构MSInit默认包含K 3 K3K3、K 5 K5K5和K 7 K7K7三条并行分支。每条分支先通过_RepDWLite进行逐通道空间建模再使用1 × 1 1 \times 11×1卷积将特征映射到分配给该分支的输出通道。各分支输出沿通道维拼接当输出通道无法被分支数整除时tail分支负责补齐剩余通道。拼接结果依次经过GroupNorm和GELU得到与设定输出通道一致的特征。在YOLO11中MSInit不直接改变主干拓扑而是通过C3k_MSInit和C3k2_MSInit包装到C3k2内部。C3k2_MSInit保留C3k2的CSP式分流与聚合接口仅替换内部重复单元因此可以在Backbone和Head中按原C3k2位置使用。3. 技术原理_RepDWLite由串联的1 × K 1 \times K1×K与K × 1 K \times 1K×1深度卷积、3 × 3 3 \times 33×3深度卷积分支和1 × 1 1 \times 11×1单位映射分支组成。条带卷积以较低成本扩大水平和垂直方向的感受野局部分支补充邻域细节单位映射分支保留输入信息三路结果相加后形成每个尺度分支的空间响应。MSInit进一步使用多个K KK值并行提取不同尺度信息通过1 × 1 1 \times 11×1卷积完成通道投影并进行通道拼接。模块默认stride1接入C3k2时保持空间分辨率不变parse_model()负责根据YOLO11宽度系数计算通道并将深度缩放后的重复次数传入C3k2_MSInit。核心代码classMSInit(nn.Module):def__init__(self,in_ch:int,out_ch:int,k_list(3,5,7),stride:int1,use_gn:boolTrue):super().__init__()# equal split for branchesself.branchesnn.ModuleList([nn.Sequential(_RepDWLite(in_ch,Kk,stridestride),nn.Conv2d(in_ch,out_ch//len(k_list),1,biasFalse))forkink_list])# handle remainder channelsgapout_ch-(out_ch//len(k_list))*len(k_list)self.tailnn.Identity()ifgap0elsenn.Sequential(_RepDWLite(in_ch,Kk_list[0],stridestride),nn.Conv2d(in_ch,gap,1,biasFalse))self.fusenn.Identity()self.normnn.GroupNorm(1,out_ch)ifuse_gnelsenn.Identity()self.actnn.GELU()defforward(self,x:torch.Tensor)-torch.Tensor:parts[b(x)forbinself.branches]ifnotisinstance(self.tail,nn.Identity):parts.append(self.tail(x))ytorch.cat(parts,dim1)returnself.act(self.norm(y))YOLO11引入代码在根目录下的ultralytics/nn/目录新建一个C3k2目录然后新建一个以C3k2_MSInit.py为文件名的py文件 把代码拷贝进去。importtorchimporttorch.nnasnnfromultralytics.nn.modules.blockimportC3k,C3k2class_RepDWLite(nn.Module):def__init__(self,dim:int,K:int,stride:int1)-None:super().__init__()self.dw_hnn.Conv2d(dim,dim,kernel_size(1,K),stride(1,stride),padding(0,K//2),groupsdim,biasFalse,)self.dw_vnn.Conv2d(dim,dim,kernel_size(K,1),stride(stride,1),padding(K//2,0),groupsdim,biasFalse,)self.dw_snn.Conv2d(dim,dim,kernel_size3,stridestride,padding1,groupsdim,biasFalse,)self.dw_inn.Conv2d(dim,dim,kernel_size1,stridestride,groupsdim,biasFalse,)nn.init.dirac_(self.dw_i.weight)defforward(self,x:torch.Tensor)-torch.Tensor:returnself.dw_v(self.dw_h(x))self.dw_s(x)self.dw_i(x)classMSInit(nn.Module):def__init__(self,in_ch:int,out_ch:int,k_list(3,5,7),stride:int1,use_gn:boolTrue,):super().__init__()self.branchesnn.ModuleList([nn.Sequential(_RepDWLite(in_ch,Kk,stridestride),nn.Conv2d(in_ch,out_ch//len(k_list),1,biasFalse),)forkink_list])gapout_ch-(out_ch//len(k_list))*len(k_list)self.tail(nn.Identity()ifgap0elsenn.Sequential(_RepDWLite(in_ch,Kk_list[0],stridestride),nn.Conv2d(in_ch,gap,1,biasFalse),))self.fusenn.Identity()self.normnn.GroupNorm(1,out_ch)ifuse_gnelsenn.Identity()self.actnn.GELU()defforward(self,x:torch.Tensor)-torch.Tensor:parts[branch(x)forbranchinself.branches]ifnotisinstance(self.tail,nn.Identity):parts.append(self.tail(x))ytorch.cat(parts,dim1)returnself.act(self.norm(y))classC3k_MSInit(C3k):def__init__(self,c1,c2,n1,shortcutFalse,g1,e0.5,k3):super().__init__(c1,c2,n,shortcut,g,e,k)c_int(c2*e)self.mnn.Sequential(*(MSInit(c_,c_)for_inrange(n)))classC3k2_MSInit(C3k2):def__init__(self,c1,c2,n1,c3kFalse,e0.5,g1,shortcutTrue):super().__init__(c1,c2,n,c3k,e,g,shortcut)self.mnn.ModuleList(C3k_MSInit(self.c,self.c,2,shortcut,g)ifc3kelseMSInit(self.c,self.c)for_inrange(n))注册在ultralytics/nn/tasks.py中进行如下操作步骤1:fromultralytics.nn.C3k2.C3k2_MSInitimportC3k2_MSInit步骤2修改def parse_model(d, ch, verboseTrue):ifmin{# ...已有模块...C3k2_MSInit}:ifmin{# ...已有重复模块...C3k2_MSInit,}:配置yolo11-C3k2_MSInit.yaml# Ultralytics YOLO , AGPL-3.0 license# YOLO11 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parametersnc:80# number of classesscales:# model compound scaling constants, i.e. modelyolo11n.yaml will call yolo11.yaml with scale n# [depth, width, max_channels]n:[0.50,0.25,1024]# summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPss:[0.50,0.50,1024]# summary: 319 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPsm:[0.50,1.00,512]# summary: 409 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPsl:[1.00,1.00,512]# summary: 631 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPsx:[1.00,1.50,512]# summary: 631 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs# YOLO11n 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_MSInit,[256,False,0.25]]-[-1,1,Conv,[256,3,2]]# 3-P3/8-[-1,2,C3k2_MSInit,[512,False,0.25]]-[-1,1,Conv,[512,3,2]]# 5-P4/16-[-1,2,C3k2_MSInit,[512,True]]-[-1,1,Conv,[1024,3,2]]# 7-P5/32-[-1,2,C3k2_MSInit,[1024,True]]-[-1,1,SPPF,[1024,5]]# 9-[-1,2,C2PSA,[1024]]# 10# YOLO11n headhead:-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,6],1,Concat,[1]]# cat backbone P4-[-1,2,C3k2_MSInit,[512,False]]# 13-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,4],1,Concat,[1]]# cat backbone P3-[-1,2,C3k2_MSInit,[256,False]]# 16 (P3/8-small)-[-1,1,Conv,[256,3,2]]-[[-1,13],1,Concat,[1]]# cat head P4-[-1,2,C3k2_MSInit,[512,False]]# 19 (P4/16-medium)-[-1,1,Conv,[512,3,2]]-[[-1,10],1,Concat,[1]]# cat head P5-[-1,2,C3k2_MSInit,[1024,True]]# 22 (P5/32-large)-[[16,19,22],1,Detect,[nc]]# Detect(P3, P4, P5)实验脚本importwarnings warnings.filterwarnings(ignore)fromultralyticsimportYOLOif__name____main__:modelYOLO(./ultralytics/cfg/models/11/yolo11-C3k2_MSInit.yaml)model.train(data./ultralytics/cfg/datasets/coco8.yaml,cacheFalse,imgsz640,epochs10,single_clsFalse,batch8,close_mosaic10,workers0,optimizerSGD,ampTrue,projectruns/train,nameC3k2_MSInit)结果
企业数字化 ERP 产品动态
相关推荐
3步找回wordpress管理面板忘记密码,附5大费用与注意事项 3步找回wordpress管理面板忘记密码,附5大费用与注意事项 刚接手一个北京客户的旧站,后台登录页死活进不去。客户急得直拍大腿,说域名和服务器都在自己手里,但就是登不进WordPress后台,数据全在里面,急得想把服务器直接拔了重做。… · 2026/9/27 1:50:48
5G NR时间提前量TA原理与工程调优实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 1:50:42
SSD1306 OLED驱动芯片详解:从显存原理到HAL库实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 1:50:42
识光CIOE亮相:SPAD-SoC三大产品线如何勾勒单光子感知的量产路径 在刚刚落幕的中国国际光电博览会(CIOE)上,苏州识光芯科技术有限公司(识光,Sophoton)携多款SPAD-SoC新品亮相。从单点、线阵到面阵,三条产品线并非孤立展示,而是呈现出一种清晰的技术逻辑:以全芯片化架构为底座,用不同形态的芯片去接住高度分化的产业需求。
统一技术… · 2026/9/27 2:34:03
3步搞定app开发人员网站被黑挂马怎么选安全方案 3步搞定app开发人员网站被黑挂马怎么选安全方案 半夜三点,手机突然弹出短信:“您的网站www.yourapp.com存在恶意代码”。你慌了神,点开后台,发现首页被替换成了博彩广告,SEO收录瞬间归零。这种 网站被黑挂马不知道怎么办… · 2026/9/27 2:34:03
国企干部民主评议场景,衡识人才测评等360评估系统适配 引文/摘要又到年终干部考核季。不少国企组织人事部门都在面对同一道题:民主评议怎么搞,才能既合规又高效,还能真正沉淀出有用的数据?传统纸票模式下,评议结果常常“评完就归档”,难以支撑干部选拔与梯队建设… · 2026/9/27 2:33:57
立创EDA安装全攻略:专业版与标准版选型及避坑指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 2:33:57
Vue 全局事件总线详解 一、什么是事件总线
1.1 定义
事件总线(Event Bus)本质上就是一个居中转发消息的"邮局":发送方不直接找接收方,而是把消息丢给总线,总线再帮转给所有订阅了这个消息的人。
在 Vue 里,它用来解决任意两个组件之间通信的问题,不限于父子,不限于兄弟,只要挂在同一条总线… · 2026/9/27 2:33:57
PADS Logic到OrCAD转换全流程:工具迁移、网表关联与高频问题排查 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 2:33:51
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01