一、本文介绍
本文记录的是利用多样分支块DBB
模块优化YOLOv11
的目标检测网络模型。DBB
采用多分支拓扑结构,包含多尺度卷积、顺序卷积、平均池化等操作。这些不同的操作具有不同的感受野和复杂度,能够像Inception架构一样丰富特征空间。。本文将深入分析DBB模块
的特点,结合YOLOv11
,==使模型能够学习到更全面、更具代表性的特征。==
专栏目录:YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
专栏地址:YOLOv11改进专栏——以发表论文的角度,快速准确的找到有效涨点的创新点!
二、Diverse Branch Block介绍
Diverse Branch Block: Building a Convolution as an Inception-like Unit
以下是对DBB模块
的详细介绍:
2.1 出发点
- 提升性能同时控制推理成本:卷积神经网络(ConvNet)的性能提升一直是研究热点,但传统方法如新颖的架构设计虽能提升性能却可能增加推理成本,而实际应用需平衡性能和推理成本(如延迟、内存占用和参数数量)。因此,寻求在不增加推理成本的前提下提升性能的方法是
DBB模块
设计的出发点之一。 - 结合多分支结构优势:Inception模型等多分支架构证明了多样连接、不同感受野和多分支组合可丰富特征空间并提升性能,但复杂结构可能不利于推理。
DBB模块
旨在借鉴多分支拓扑结构的优势,同时解决其推理慢的问题。
2.2 原理
- 训练与推理结构分离:通过在训练时复杂化模型结构(采用多分支等结构),训练后将其转换回原始推理结构,实现训练时提升性能,推理时保持成本不变。
- 结构重参数化:
DBB模块
基于结构重参数化的思想,即利用从一个结构转换而来的参数对另一个结构进行参数化。具体而言,在训练过程中使用复杂的多分支结构(包含不同尺度和复杂度的分支操作),训练完成后将其等价转换为单个卷积层进行部署。
2.3 结构
2.3.1多分支拓扑
采用包含多尺度卷积、顺序的$1×1 - K×K$卷积、平均池化和分支相加的多分支拓扑结构。例如,一个具有代表性的DBB实例可能包含$1×1$、$1×1 - K×K$、$1×1 - AVG$等分支来增强原始的$K×K$卷积层。
2.3.2 六种转换方式
- Transform I(conv - BN转换):将卷积层和与之配套的批量归一化(BN)层融合为一个卷积层,通过对原始卷积 - BN序列的参数进行转换来构建新的卷积核和偏置。
- Transform II(分支相加转换):利用卷积的可加性,将具有相同配置的两个或多个卷积层输出相加的操作转换为一个卷积层。
- Transform III(顺序卷积转换):可以将一系列的$1×1$卷积 - BN - $K×K$卷积 - BN操作合并为一个单一的$K×K$卷积。
- Transform IV(深度拼接转换):用于处理深度拼接的分支情况,将具有相同配置的分支通过拼接操作转换为一个卷积层。
- Transform V(平均池化转换):将平均池化操作转换为一个具有特定卷积核的卷积层。
- Transform VI(多尺度卷积转换):考虑到不同尺度的卷积核之间的等价关系,通过零填充等方式将如$1×1$、$1×K$和$K×1$等卷积转换为$K×K$卷积。
2.4 优势
- 性能提升
- 丰富特征空间:多样的分支结构(不同尺度和复杂度的路径)能够丰富特征空间,类似于Inception架构,从而提升模型性能。例如在ImageNet数据集上,使用
DBB模块
可使模型的top - 1准确率提升高达1.9%。 - 更好的连接组合:实验表明,结合不同表示能力的分支(如$1×1$卷积和$3×3$卷积)比使用相同能力的分支(如两个$3×3$卷积)效果更好。
- 丰富特征空间:多样的分支结构(不同尺度和复杂度的路径)能够丰富特征空间,类似于Inception架构,从而提升模型性能。例如在ImageNet数据集上,使用
- 通用性和易用性
- 作为通用构建块:
DBB
是一个通用的构建块,可以应用于各种ConvNet架构,作为常规卷积层的替代品插入到现有架构中,无需对整体架构进行大幅修改。 - 转换为单卷积无成本:用户可以使用六种转换方式将
DBB模块
在训练后等价转换为单个卷积层进行部署,不会产生额外的推理时间成本。
- 作为通用构建块:
- 训练效率:实验结果显示,增加训练时的参数数量(通过DBB的复杂结构)并不会显著降低训练速度,这使得在有充足训练资源的情况下,可以通过使用
DBB
来训练更强大的ConvNets,以获取更好的性能。
论文:https://arxiv.org/pdf/2103.13425
源码:https://github.com/DingXiaoH/DiverseBranchBlock
三、实现代码及YOLOv11修改步骤
模块完整介绍、个人总结、实现代码、模块改进、二次创新以及各模型添加步骤参考如下地址: