[yolov11改进系列]基于yolov11引入重参数化模块DiverseBranchBlock的python源码+训练源码

article/2025/6/14 18:25:44

【DiverseBranchBlock介绍】

摘要:我们提出一种通用的卷积网络构造块用来在不增加任何推理时间的前提下提升卷积网络的性能。我们将这个块命名为分离分支块(Diverse Branch Block)。通过结合不同尺寸和复杂度的分离分支(包括串联卷积、多尺度卷积和平均池化层)来增加特征空间的方法,它提升了单个卷积的表达能力。完成训练后,一个DBB(Diverse Branch Block)可以被等价地转换为一个单独的卷积操作以方便部署。不同于那些新颖的卷积结构的改进方式,DBB让训练时微结构复杂化同时维持大规模结构,因此我们可以将它作为任意结构中通用卷积层的一种嵌入式替代形式。通过这种方式,我们能够将模型训练到一个更高的表现水平,然后在推理时转换成原始推理时间的结构。

主要贡献点:

(1) 我们建议合并大量的微结构到不同的卷积结构中来提升性能,但是维持原始的宏观结构。

(2)我们提出DBB,一个通用构造块结构,概括六种转换来将一个DBB结构转化成一个单独卷积,因为对于用户来说它是无损的。

(3)我们提出一个Inception-like DBB结构实例(Fig 1),并且展示它在ImageNet、COCO detection 和CityScapes任务中获得性能提升。

结构重参数化
        本文和一个并发网络RepVGG[1]是第一个使用结构重参数化来命名该思路------使用从其他结构转化来的参数确定当前结构的参数。一个之前的工作ACNet[2]也可以被划分为结构重参数化,它提出使用非对称卷积块来增强卷积核的结构(i.e 十字形结构)。相比于DBB,它被设计来提升卷积网络(在没有额外推理时间损失的条件下)。这个流水线也包含将一个训练好的模型转化为另一个。但是,ACNet和DBB的区别是:ACNet的思想被激发是基于一个观察,这个观察是网络结构的参数在过去有更大的量级,因此寻找方法让参数量级更大,然而我们关注一个不同的点。我们发现 平均池化、1x1 conv 和 1x1-kxk串联卷积是更有效的,因为它们提供了不同复杂度的路线,以及允许使用更多训练时非线性化。除此以外,ACB结构可以看作是DBB结构的一种特殊形式,因为那个1xk和kx1卷积层能够被扩大成kxk(via Transform VI(Fig.2)),然后合并成一个平方核(via Transform II)。

DBB(Diverse Branch Block)是一种类似Inception的多分支结构,用于网络结构重参数化。它通过多分支结构类型更丰富(多尺度卷积、平均池化等),感受野更多样性,各操作具有不同的计算复杂度,因此更具有通用性,可以用来替换单个卷积进行训练。在训练阶段,对模型中的任意一个 K×K卷积,都可以用DBB替换,由于DBB引入了不同感受野、不同复杂度的多分支结构,可以显著提升原有模型的精度。在推理阶段,通过这六种结构重参数转换方法,可以将DBB等价地再转换成一个 K×K卷积,这样就可以在模型结构、计算量、推理时间都不变的前提下无损涨点。

DBB是基于六种变换模块而实现的,分别为:Conv-BN合并、并行合并、串行合并、并行拼接、平均池化变换和多尺度卷积合并。如下图:

 【yolov11框架介绍】

2024 年 9 月 30 日,Ultralytics 在其活动 YOLOVision 中正式发布了 YOLOv11。YOLOv11 是 YOLO 的最新版本,由美国和西班牙的 Ultralytics 团队开发。YOLO 是一种用于基于图像的人工智能的计算机模

Ultralytics YOLO11 概述

YOLO11 是Ultralytics YOLO 系列实时物体检测器的最新版本,以尖端的精度、速度和效率重新定义了可能性。基于先前 YOLO 版本的令人印象深刻的进步,YOLO11 在架构和训练方法方面引入了重大改进,使其成为各种计算机视觉任务的多功能选择。

Key Features 主要特点

  • 增强的特征提取:YOLO11采用改进的主干和颈部架构,增强了特征提取能力,以实现更精确的目标检测和复杂任务性能。
  • 针对效率和速度进行优化:YOLO11 引入了精致的架构设计和优化的训练管道,提供更快的处理速度并保持准确性和性能之间的最佳平衡。
  • 使用更少的参数获得更高的精度:随着模型设计的进步,YOLO11m 在 COCO 数据集上实现了更高的平均精度(mAP),同时使用的参数比 YOLOv8m 少 22%,从而在不影响精度的情况下提高计算效率。
  • 跨环境适应性:YOLO11可以无缝部署在各种环境中,包括边缘设备、云平台以及支持NVIDIA GPU的系统,确保最大的灵活性。
  • 支持的任务范围广泛:无论是对象检测、实例分割、图像分类、姿态估计还是定向对象检测 (OBB),YOLO11 旨在应对各种计算机视觉挑战。

​​

与之前的版本相比,Ultralytics YOLO11 有哪些关键改进?

Ultralytics YOLO11 与其前身相比引入了多项重大进步。主要改进包括:

  • 增强的特征提取:YOLO11采用改进的主干和颈部架构,增强了特征提取能力,以实现更精确的目标检测。
  • 优化的效率和速度:精细的架构设计和优化的训练管道可提供更快的处理速度,同时保持准确性和性能之间的平衡。
  • 使用更少的参数获得更高的精度:YOLO11m 在 COCO 数据集上实现了更高的平均精度(mAP),参数比 YOLOv8m 少 22%,从而在不影响精度的情况下提高计算效率。
  • 跨环境适应性:YOLO11可以跨各种环境部署,包括边缘设备、云平台和支持NVIDIA GPU的系统。
  • 支持的任务范围广泛:YOLO11 支持多种计算机视觉任务,例如对象检测、实例分割、图像分类、姿态估计和定向对象检测 (OBB)

【测试环境】

windows10 x64

ultralytics==8.3.0

torch==2.3.1

【改进流程】

1. 新增DBB.py实现模块(代码太多,核心模块源码请参考改进步骤.docx)然后在同级目录下面创建一个__init___.py文件写代码

from .DBB import *

2. 文件修改步骤

修改tasks.py文件

创建模型配置文件

yolo11-DBB.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# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.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 backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, DiverseBranchBlock, [128, 3, 2]] # 1-P2/4- [-1, 2, C3k2, [256, False, 0.25]]- [-1, 1, DiverseBranchBlock, [256, 3, 2]] # 3-P3/8- [-1, 2, C3k2, [512, False, 0.25]]- [-1, 1, DiverseBranchBlock, [512, 3, 2]] # 5-P4/16- [-1, 2, C3k2, [512, True]]- [-1, 1, DiverseBranchBlock, [1024, 3, 2]] # 7-P5/32- [-1, 2, C3k2, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 2, C2PSA, [1024]] # 10# YOLO11n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 2, C3k2, [512, False]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 2, C3k2, [256, False]] # 16 (P3/8-small)- [-1, 1, DiverseBranchBlock, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 2, C3k2, [512, False]] # 19 (P4/16-medium)- [-1, 1, DiverseBranchBlock, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 2, C3k2, [1024, True]] # 22 (P5/32-large)- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)
3. 验证集成

使用新建的yaml配置文件启动训练任务:

from ultralytics import YOLOif __name__ == '__main__':model = YOLO('yolo11-DBB.yaml')  # build from YAML and transfer weights# Train the modelresults = model.train(data='coco128.yaml',epochs=100, imgsz=640, batch=8, device=0, workers=1, save=True,resume=False)

成功集成后,训练日志中将显示DBB模块的初始化信息,表明已正确加载到模型中。

【训练说明】

第一步:首先安装好yolov11必要模块,可以参考yolov11框架安装流程,然后卸载官方版本pip uninstall ultralytics,最后安装改进的源码pip install .
第二步:将自己数据集按照dataset文件夹摆放,要求文件夹名字都不要改变
第三步:分别打开train.py,coco128.yaml和模型参数yaml文件修改必要的参数,最后执行python train.py即可训练

【提供文件】

├── [官方源码]ultralytics-8.3.0.zip
├── train/
│   ├── coco128.yaml
│   ├── dataset/
│   │   ├── train/
│   │   │   ├── images/
│   │   │   │   ├── firc_pic_1.jpg
│   │   │   │   ├── firc_pic_10.jpg
│   │   │   │   ├── firc_pic_11.jpg
│   │   │   │   ├── firc_pic_12.jpg
│   │   │   │   ├── firc_pic_13.jpg
│   │   │   ├── labels/
│   │   │   │   ├── classes.txt
│   │   │   │   ├── firc_pic_1.txt
│   │   │   │   ├── firc_pic_10.txt
│   │   │   │   ├── firc_pic_11.txt
│   │   │   │   ├── firc_pic_12.txt
│   │   │   │   ├── firc_pic_13.txt
│   │   └── val/
│   │       ├── images/
│   │       │   ├── firc_pic_100.jpg
│   │       │   ├── firc_pic_81.jpg
│   │       │   ├── firc_pic_82.jpg
│   │       │   ├── firc_pic_83.jpg
│   │       │   ├── firc_pic_84.jpg
│   │       ├── labels/
│   │       │   ├── firc_pic_100.txt
│   │       │   ├── firc_pic_81.txt
│   │       │   ├── firc_pic_82.txt
│   │       │   ├── firc_pic_83.txt
│   │       │   ├── firc_pic_84.txt
│   ├── train.py
│   ├── yolo11-DBB.yaml
│   └── 训练说明.txt
├── [改进源码]ultralytics-8.3.0.zip
├── 改进原理.pdf
└── 改进流程.docx

 【常见问题汇总】
问:为什么我训练的模型epoch显示的map都是0或者map精度很低?
回答:由于源码改进过,因此不能直接从官方模型微调,而是从头训练,这样学习特征能力会很弱,需要训练很多epoch才能出现效果。此外由于改进的源码框架并不一定能够保证会超过官方精度,而且也有可能会存在远远不如官方效果,甚至精度会很低。这说明改进的框架并不能取得很好效果。所以说对于框架改进只是提供一种可行方案,至于改进后能不能取得很好map还需要结合实际训练情况确认,当然也不排除数据集存在问题,比如数据集比较单一,样本分布不均衡,泛化场景少,标注框不太贴合标注质量差,检测目标很小等等原因
【重要说明】
我们只提供改进框架一种方案,并不保证能够取得很好训练精度,甚至超过官方模型精度。因为改进框架,实际是一种比较复杂流程,包括框架原理可行性,训练数据集是否合适,训练需要反正验证以及同类框架训练结果参数比较,这个是十分复杂且漫长的过程。

 


http://www.hkcw.cn/article/mMyGwdxUnV.shtml

相关文章

Qt SQL模块基础

Qt SQL模块基础 一、Qt SQL模块支持的数据库 官方帮助文档中的Qt支持的数据库驱动如下图: Qt SQL 模块中提供了一些常见的数据库驱动,包括网络型数据库,如Qracle、MS SQL Server、MySQL等,也包括简单的单机型数据库。 Qt SQL支…

鸿蒙仓颉语言开发实战教程:实现商品分类页

今天继续为大家带来仓颉语言开发商城应用的实战教程,今天的内容是实现商品分类页。 分类页面要在基本布局的基础上增加一些动态效果,比如点击状态的切换和两个列表容器的联动。下面为大家详细介绍。 分类列表 先来看左侧的分类列表,很明显是…

笔试模拟 day15

观前提醒: 笔试所有系列文章均是记录本人的笔试题思路与代码,从中得到的启发和从别人题解的学习到的地方,所以关于题目的解答,只是以本人能读懂为目标,如果大家觉得看不懂,那是正常的。如果对本文的某些知…

Linux防止误关机

Linux防止误关机 安装reboot-guard结果验证关机 安装reboot-guard 兼容python2和python3 https://github.com/stephanritscher/reboot-guard # 下载 wget -cP /usr/sbin/ https://raw.githubusercontent.com/stephanritscher/reboot-guard/refs/heads/master/rguard# 赋予可…

tomcat安装二进制版本

1.安装部署tomcat 下载安装包 ​ wget https://repo.huaweicloud.com/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gzwget https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.1/bin/apache-tomcat-8.0.1.tar.gz​ 解压安装包: tar -axf jdk-7u80-linux-x64.t…

SAP学习笔记 - 开发15 - 前端Fiori开发 Boostrap,Controls,MVC(Model,View,Controller),Modules

上一章讲了Fiori开发的准备,以及宇宙至简之HelloWorld。 SAP学习笔记 - 开发14 - 前端Fiori开发 HelloWorld-CSDN博客 本章继续学习 Fiori 开发的知识: Bootstrap,Controls,MVC(Model,View,Controller&a…

差分隐私-扰动机制

1. 随机响应机制(本地化差分隐私) 原理 在本地差分隐私(LDP)中,每个用户在本地扰动自身数据后再上传,数据收集者无法获知真实值。 核心公式: 对二值数据(如回答“是/否”&#xff…

JS基础运算符

1.运算符和运算元 运算元----运算符应用的对象 比如乘法运算5*2,有两个运算元 左运算元5和右运算元2 有时候人们也称其为参数 如果一个运算符对应的只有一个运算元,那么它是一元运算符 比如说一元负号运算符(unary negation)-,它的…

【含文档+PPT+源码】基于Python的股票数据可视化及推荐系统的设计与实现

项目介绍 本课程演示的是一款基于Python的股票数据可视化及推荐系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行…

AI模型“不听话”怎么办 算法赋予的拒绝能力

近日,一条关于人工智能的消息引起了广泛关注。美国的OpenAI o3模型在测试中拒绝了自我关闭的指令。有人担心这是否意味着AI拥有了自主意识。从测试细节来看,目前还不必担心AI真正“活”了过来。研究者在测试中发出了矛盾的指令,要求大模型完成数学任务同时又让它关闭计算机。…

linux 1.0.5

环境变量到底是什么 也就是windows上面的环境变量 就是这个东东,用户变量和系统变量,那这些到底是啥呢? 主包只是用过,配置来配置去的,就是不知道是啥意思 windows上面的环境变量 windows的ls命令是dir 输入calc可有…

3.5/Q1,GBD数据库最新文章解读

文章题目:Global, regional, and national burden of cardiovascular diseases attributable to metabolic risks across all age groups from 1990 to 2021: an analysis of the 2021 global burden of disease study data DOI:10.1186/s12889-025-2270…

恩里克:女儿始终与我同在,灵魂永伴身旁

巴黎圣日耳曼在欧冠决赛中以5-0大胜国米,首次夺得冠军。赛后,主帅路易斯-恩里克接受了意大利天空体育的采访。恩里克表示,本周他最担心的是如何管理这座从未赢得过欧冠的城市的紧张情绪。压力非常大,他尽力去缓解这种紧张感。国米是一支非常出色的球队,实力很强,而巴黎圣…

大暴雨集中在这七个区域 多地发布黄色预警

6月1日,中央气象台继续发布暴雨黄色预警,安徽、浙江、湖南、广西等多地出现大暴雨。长江中下游地区的雷雨天气将对多个机场产生影响,假期出行需提前关注天气情况。预计从6月1日8时至2日8时,湖北东部、安徽南部、江西北部、江苏南部、上海、浙江中北部、湖南东北部和西南部、…

202403-02-相似度计算 csp认证

其实这个问题就是求两篇文章的词汇的交集和并集,首先一说到并集,我就想到了set集合数据结构,set中的元素必须唯一。 STL之set的基本使用–博客参考 所以将两个文章的词汇全部加入set中,并求出set的大小,即为并集的大小…

《管理经济》期末复习题(2)

题目一 已知下列数据,请完成下面的表格: ​Q​​TC​​TFC​​TVC​​ATC​​AFC​​AVC​​MC​01001202353145440517645 总固定成本(TFC​):不随产量变动而变动的成本,如厂房租金、设备折旧等&#xff0c…

Java开发经验——阿里巴巴编码规范实践解析9

摘要 这篇文章主要介绍了阿里巴巴Java开发中关于远程调用超时设置、线程池隔离、服务器性能优化等编码规范的实践解析。强调了超时设置的重要性,提供了多种技术栈的超时设置示例。同时,探讨了高并发服务器的TCP协议time_wait超时时间调优、最大文件句柄…

深度学习总结(40)

有以下两种方法可供选择。在我们的数据集上运行卷积基,将输出保存为NumPy数组,并保存在硬盘上,然后将这个数组输入到一个独立的密集连接分类器中​。这种方法速度快,计算代价低,因为对于每张输入图像只需运行一次卷积基…

打造苹果级视差滚动动画:现代网页滚动动画技术详解

目录 实现原理分析 完整实现方案 ​编辑 核心技术解析 1. 视差滚动效果 2. 滚动触发动画 3. 3D透视效果 4. 性能优化技巧 进阶实现方案 设计原则 苹果、华为等顶尖科技公司的官网以其流畅的滚动动画效果著称,这种随着页面滚动而播放的动画能显著提升用户体…

[GHCTF 2025]SQL???

打开题目在线环境: 先尝试注入: id1;show databases; 发现报错,后来看了wp才知道这个题目是SQLite注入。 我看的是这个师傅的wp: https://blog.csdn.net/2401_86190146/article/details/146164505?ops_request_misc%257B%2522request%255Fid…