【YOLOv5改进系列(10)】高效涨点----将CAM(上下文增强模块)添加到Neck特征融合模块当中

本文介绍了在YOLOv5的Neck部分添加Context-awareModule(CAM)以优化大目标检测的效果。实验表明,在PANet的特定阶段使用concat连接方式的CAM减少参数量,但可能影响训练速度。
摘要由CSDN通过智能技术生成

在这里插入图片描述



在这里插入图片描述

👀🎉📜系列文章目录

【YOLOv5改进系列(1)】高效涨点----使用EIoU、Alpha-IoU、SIoU、Focal-EIOU替换CIou
【YOLOv5改进系列(2)】高效涨点----Wise-IoU详细解读及使用Wise-IoU(WIOU)替换CIOU
【YOLOv5改进系列(3)】高效涨点----Optimal Transport Assignment:OTA最优传输方法
【YOLOv5改进系列(4)】高效涨点----添加可变形卷积DCNv2
【YOLOv5改进系列(5)】高效涨点----添加密集小目标检测NWD方法
【YOLOv5改进系列(6)】高效涨点----使用DAMO-YOLO中的Efficient RepGFPN模块替换yolov5中的Neck部分
【YOLOv5改进系列(7)】高效涨点----使用yolov8中的C2F模块替换yolov5中的C3模块
【YOLOv5改进系列(8)】高效涨点----添加yolov7中Aux head 辅助训练头
【YOLOv5改进系列(9)】高效涨点----使用CAM(上下文增强模块)替换掉yolov5中的SPPF模块

🚀🚀🚀前言

🚀在yolov5改进系列[9]里面我是已经将CAM模块替换掉了backbone最后一层的SPPF模块,经过实验可以得出,在我自己的钢轨表面疵点数据集上使用adaptive连接方式涨点效果最优map@0.5提升了7个百分点。后来发现在Neck特征融合部分也能添加CAM模块这里就在PANet的stage=1/32concat特征融合之前添加CAM模块进行处理


一、1️⃣ 添加位置

在下面蓝色框部分添加CAM模块,用于检测大目标物体。如果有兴趣的也可以试一试分别添加到PANet的stage为16、8这两个部位。
在这里插入图片描述

二、2️⃣修改代码内容

📌其实就是在yolov5s_CAM.yaml文件中的head部分,最后一个stage上添加了CAM模块并指定连接方式,添加内容如下:
在这里插入图片描述
也可以将下面代码复制到yolov5s_CAM.yaml

### yolov5 cam yaml
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [10, 1, CAM, ['concat']],
   [[-2, -1], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 24], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

三、3️⃣参数量变化

🔥下面第一幅图是将CAM替换掉SPPF模块的运行参数量,GFLOPs的为22.0,第二图是与第一幅图有着相同连接方式的CAM模块,但是第二幅图的CAM是添加到了PANet最后一个stage的concat之前,参数量GFLOPs为17.8,会发现参数量少了许多,但是在训练过程中我明显发现第二种CAM添加方式,导致了模型训练的速度变慢了不少,训练速度增加了一倍不止。

在这里插入图片描述
在这里插入图片描述

四、4️⃣实验结果

这里我不放太多实验了,只选取两个实验,分别是替换SPPF模块和在PANet最后一个stage的concat之前添加CAM模块。这两处的CAM模块都是使用concat连接方式进行连接。

4.1 🎓 替换掉SPPF实验结果

➤训练结果:F1置信度分数为0.73、map@0.5=0.821;
在这里插入图片描述

4.2 ✨在Neck部分添加CAM

➤训练结果:F1置信度分数为0.73、map@0.5=0.766;这里添加到Neck部分效果并不太好,如果在PANet的三个stage部分都添加可能会涨点,但是需要你直接去实验。
在这里插入图片描述


在这里插入图片描述

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

慕溪同学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值