/YOLOv5-ShuffleNetv2

YOLOv5的轻量化改进(蜂巢检测项目)

Primary LanguagePython

在蜂巢检测(私人)数据集上进行YOLOv5轻量化改进

这个项目主要改进点来源于ppogg/YOLOv5-Lite,用的里面的Lite-e模型,非常厉害的轻量化模型,感谢大佬的开源工作。

本项目适合用在一类/几类,且数据并不复杂度的数据集上

对YOLOv5原理不了解的,可以看下我的YOLOv5源码注释:HuKai97/yolov5-5.x-annotations.和我写的YOLOv5源码讲解:【YOLOV5-5.x 源码讲解】整体项目文件导航.

一、改进依据(ShuffleNetV2 轻量化模型设计的四条准则):

G1. 卷积层的输入特征channel和输出特征channel要尽量相等;
G2. 尽量不要使用组卷积,或者组卷积g尽量小;
G3. 网络分支要尽量少,避免并行结构;
G4. Element-Wise的操作要尽量少,如:ReLU、ADD、逐点卷积等;

二、改进点:

  1. backbone的Focus替换为一个3x3Conv(c=32),因为v5-6.0就替换为了一个6x6Conv,这里为了进一步降低参数量,替换为3x3Conv;
  2. backbone所有Conv和C3替换为Shuffle Block;
  3. 砍掉SPP和后面的一个C3结构,SPP并行操作太多了(G3)
  4. head所有层输入输出channel=96(G1)
  5. head所有C3改为DWConv
  6. PAN的两个Concat改为ADD(channel太大,计算量太大,虽然违反了G4,但是计算量更小)

三、CSDN源码关键部分讲解

  1. 【YOLOV5-5.x 源码讲解】整体项目文件导航
  2. 【项目二、蜂巢检测项目】一、串讲各类经典的卷积网络:InceptionV1-V4、ResNetV1-V2、MobileNetV1-V3、ShuffleNetV1-V2、ResNeXt、Xception】
  3. 【项目二、蜂巢检测项目】二、模型改进:YOLOv5s-ShuffleNetV2

四、代码使用

同YOLOv5

五、训练效果

模型 YOLOv5s YOLOv5s-ShuffleNetV2
shape 320x320 320x320
参数量 6.75M 0.69M
FLOPs 2.05G 0.32G
权重文件大小 13.6M 1.6M
mAP@0.5 0.967 0.955
mAP@0.5~0.95 0.885 0.84

(左图yolov5s,右图yolov5s-shufflenetv2)

Reference

ultralytics/yolov5
ppogg/YOLOv5-Lite.