YOLOv5改进 | Conv篇 | DiverseBranchBlock(DBB)多元分支模块(有效涨点)

本文详细介绍了如何在YOLOv5中应用Diverse Branch Block (DBB),这是一种增强卷积神经网络性能的技术。DBB通过训练时的复杂分支结构增加特征表达能力,而在推理时转换为单一卷积层,保持高效。文章涵盖了DBB的基本原理、多样化分支结构、训练与推理分离以及如何在YOLOv5中添加DBB的详细步骤,包括代码和yaml配置文件的修改。实验表明,DBB能有效提升YOLOv5的性能,推荐在残差连接、Neck部分和检测头前添加DBB模块。

 一、本文介绍

本文带来的改进机制是YOLOv5模型与多元分支模块(Diverse Branch Block)的结合,Diverse Branch Block (DBB) 是一种用于增强卷积神经网络性能的结构重新参数化技术。这种技术的核心在于结合多样化的分支,这些分支具有不同的尺度和复杂度,从而丰富特征空间。我将其放在了YOLOv5的不同位置上均有一定的涨点幅度,同时这个DBB模块的参数量并不会上涨太多,我添加三个该机制到模型中,GFLOPs上涨了0.04。

推荐指数:⭐⭐⭐⭐

打星原因:为什么打四颗星是因为我觉得这个机制的计算量会上涨,这是扣分点,其次涨幅效果也比较一般但是有涨点,当然可能是数据集的原因毕竟不同的数据集效果不同

专栏回顾:YOLOv5改进专栏——持续复现各种顶会内容——内含100+创新

训练结果对比图-> 

目录

 一、本文介绍

二、Diverse Branch Block原理

2.1 Diverse Branch Block的基本原理

2.2 多样化分支结构

 2.3 训练与推理分离

2.4 宏观架构不变

三、Diverse Branch Block的完整代码

四、手把手教你添加Diverse Branch Block机制

4.1 细节修改教程

4.1.1 修改一

​4.1.2 修改二

4.1.3 修改三 

4.1.4 修改四

4.2 DBB的yaml文件(仔细看这个否则会报错)

4.2.1 DBB的yaml文件一

4.2.2 DBB的yaml文件二

4.2.3 DBB的yaml文件三

4.3 DBB运行成功截图

4.4 推荐Diverse Branch Block可添加的位置 

五、本文总结 


二、Diverse Branch Block原理

论文地址:论文官方地址

代码地址:官方代码地址


### 集成ECA注意力机制 为了在YOLOv5中集成ECA(Enhanced Channel Attention) 注意力机制,需先理解该机制的工作原理。ECA通过自适应调整通道间的依赖关系来增强特征表达能力[^2]。 具体实现方法如下: ```python import torch.nn as nn class ECA(nn.Module): """Constructs a ECA module. Args: channel: Number of channels of the input feature map k_size: Adaptive selection of kernel size """ def __init__(channel, k_size=3): super(ECA, this).__init__() this.avg_pool = nn.AdaptiveAvgPool2d(1) this.conv = nn.Conv1d(1, 1, kernel_size=k_size, padding=(k_size - 1) // 2, bias=False) this.sigmoid = nn.Sigmoid() def forward(x): # Feature Descriptor on the global spatial information y = this.avg_pool(x) # Two different branches of ECA module y = this.conv(y.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1) # Multi-scale information fusion y = this.sigmoid(y) return x * y.expand_as(x) ``` 此代码定义了一个简单的ECA层,在实际应用时应将其嵌入到YOLOv5的各个阶段中去。 ### 更换主干网络为ShuffleNetV2 对于替换YOLOv5中的默认主干网至ShuffleNetV2的操作,则涉及到模型架构层面的重大改动。ShuffleNetV2因其高效的计算性能而被广泛应用于移动设备端的任务处理中[^1]。 以下是简化版的ShuffleNetV2结构导入方式: ```python from torchvision.models import shufflenet_v2_x0_5 def replace_backbone(model): backbone = shufflenet_v2_x0_5(pretrained=True) model.model[0] = backbone.features # Adjusting output dimensions to match with YOLOv5's neck part requirements in_channels = backbone.out_channels out_channels = ... # Define according to your needs or original settings model.model[1] = Conv(in_channels=in_channels, out_channels=out_channels, ...) return model ``` 这段脚本展示了如何利用预训练过的`shufflenet_v2_x0_5`作为新的骨干提取器,并相应调整后续组件以保持整个检测框架的一致性和兼容性。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Snu77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值