【魔改YOLOv5-6.x(下)】:YOLOv5s+Ghostconv+BiFPN+CA

【魔改YOLOv5-6.x(下)】:YOLOv5s+Ghostconv+BiFPN+CA,第1张

文章目录
    • 实验说明
      • 训练设置
      • 测试设置
      • 模型选择
      • 模型文件(参考)
    • 实验记录(部分)

实验说明

【魔改YOLOv5-6.x(上)】:结合轻量化网络Shufflenetv2、Mobilenetv3和Ghostnet

【魔改YOLOv5-6.x(中)】:加入ACON激活函数、CBAM和CA注意力机制、加权双向特征金字塔BiFPN

本文使用的YOLOv5版本为v6.1,对YOLOv5-6.x网络结构还不熟悉的同学,可以移步至:【YOLOv5-6.x】网络模型&源码解析
 

训练设置
$ python -m torch.distributed.launch --nproc_per_node 2 train.py --weights  --cfg yolov5s.yaml --data data/VOC2007.yaml -- hyp data/hyps/hyp.scratch-high.yaml --epochs 300 --device 0,1
  • 实验环境为2个GTX 1080 Ti
  • 数据集为VOC2007
  • 超参数为hyp.scratch-high.yaml
  • 训练300个epoch
  • 其他参数均为源码中默认设置的数值

 

测试设置
$ python val.py --weights yolov5s.pt --data VOC2007.yaml --img 832 --augment --half --iou 0.6
$ python val.py --weights yolov5s.pt --data VOC2007.yaml --img 640 --task speed --batch 1
  • 使用第一行代码进行map测试(TTA测试方法)
  • 使用第二行代码进行speed测试

 

模型选择

根据实验效果,最终作出如下选择:

  • 使用Ghostconv模块,替换Backbone和Neck中的Conv模块
  • Backbone最后(SPPF之前)添加CA注意力机制
  • Neck部分中添加一条BiFPN

 

模型文件(参考)

yolov5s-Ghostconv-BiFPN-CA.yaml

# Parameters
nc: 20  # 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, GhostConv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, GhostConv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, GhostConv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, GhostConv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, CABlock, [1024, 32]],  # 9 CA <-- Coordinate Attention [out_channel, reduction]
   [-1, 1, SPPF, [1024, 5]],  # 10
  ]

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

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

   [-1, 1, GhostConv, [256, 3, 2]],
   [[-1, 15, 6], 1, Concat, [1]],  # cat head P4 <--- BiFPN change
   [-1, 3, C3, [512, False]],  # 21 (P4/16-medium)

   [-1, 1, GhostConv, [512, 3, 2]],
   [[-1, 11], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 24 (P5/32-large)

   [[18, 21, 24], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

 

实验记录(部分)

这里分享一下部分较为完整的实验记录,其他实验记录因为只测试了map,看到效果并不是很好,就没有继续测试其他的指标,因此也就没有放上来。


序号ModelmAP_50mAP_0.5:0.95Speed b1 (ms)params(M)FLOPs(G)
0yolov5s-baseline72.645.95.87.0716.0
1yolov5s-BiFPN72.6(+0.0)45.8(-0.1)5.97.1416.2
2yolov5s-CA73.2(+0.6)46.3(+0.4)6.37.1016.0
3yolov5s-BiFPN-CA72.4(-0.2)45.3(-0.6)6.47.1716.2
4yolov5s-Ghostconv-CA73.7(+1.1)47.9(+2.0)7.85.8813.7
5yolov5s-Ghostconv-BiFPN-CA74.1(+1.5)48.7(+2.8)7.85.9513.9

 
目前还没有尝试更多的改进方法,欢迎大家前来交流,分享改进YOLOv5的方法~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/570950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存