YOLOv5改进点
- 2022.10.30 复现TPH-YOLOv5
- 2022.10.31 完成替换backbone为Ghostnet
- 2022.11.02 完成替换backbone为Shufflenetv2
- 2022.11.05 完成替换backbone为Mobilenetv3Small
- 2022.11.10 完成EagleEye对YOLOv5系列剪枝支持
- 2022.11.14 完成MQBench对YOLOv5系列量化支持
- 2022.11.16 完成替换backbone为EfficientNetLite-0
- 2022.11.26 完成替换backbone为PP-LCNet-1x
- 2022.12.12 完成SwinTrans-YOLOv5(C3STR)
- 2022.12.15 完成Slimming对YOLOv5系列剪枝支持
Requirements
pip install -r requirements.txt
Multi-Backbone Substitution for YOLOs
1、Base Model
Train on Visdrone DataSet (Input size is 608)
No. | Model | mAP | mAP@50 | Parameters(M) | GFLOPs |
1 | YOLOv5n | 13.0 | 26.20 | 1.78 | 4.2 |
2 | YOLOv5s | 18.4 | 34.00 | 7.05 | 15.9 |
3 | YOLOv5m | 21.6 | 37.80 | 20.91 | 48.2 |
4 | YOLOv5l | 23.2 | 39.70 | 46.19 | 108.1 |
5 | YOLOv5x | 24.3 | 40.80 | 86.28 | 204.4 |
2、高精度模型
A、TPH-YOLOv5
Train on Visdrone DataSet (6-7 size is 640,8 size is 1536)
No. | Model | mAP | mAP@50 | Parameters(M) | GFLOPs |
6 | YOLOv5xP2 | 30.0 | 49.29 | 90.96 | 314.2 |
7 | YOLOv5xP2 CBAM | 30.1 | 49.40 | 91.31 | 315.1 |
8 | YOLOv5x-TPH | 40.7 | 63.00 | 112.97 | 270.8 |
用法:
nohup python train.py --data VisDrone.yaml --weights yolov5n.pt --cfg models/yolov5n.yaml --epochs 300 --batch-size 8 --img 608 --device 0,1 --sync-bn >> yolov5n.txt &
组成部分:
P2 Head、CBAM、TPH、BiFPN、SPP
1、TransBlock的数量会根据YOLO规模的不同而改变,标准结构作用于YOLOv5m
2、当YOLOv5x为主体与标准结构的区别是:(1)首先去掉14和19的CBAM模块(2)降低与P2关联的通道数(128)(3)在输出头之前会添加SPP模块,注意SPP的kernel随着P的像素减小而减小(4)在CBAM之后进行输出(5)只保留backbone以及最后一层输出的TransBlock(6)采用BiFPN作为neck
3、更改不同Loss分支的权重:如下图,当训练集的分类与置信度损失还在下降时,验证集的分类与置信度损失开始反弹,说明出现了过拟合,需要降低这两个任务的权重
消融实验如下:
box | cls | obj | acc |
0.05 | 0.5 | 1.0 | 37.90 |
0.05 | 0.3 | 0.7 | 38.00 |
0.05 | 0.2 | 0.4 | 37.5 |
B、SwinTrans-YOLOv5
pip install timm
Usage:
python train.py --data VisDrone.yaml --weights yolov5x.pt --cfg models/accModels/yolov5xP2CBAM-Swin-BiFPN-SPP.yaml --hyp data/hyps/hyp.visdrone.yaml --epochs 60 --batch-size 4 --img 1536 --nohalf
(1)Window size由7替换为检测任务常用分辨率的公约数8
(2)create_mask封装为函数,由在init函数执行变为在forward函数执行
(3)若分辨率小于window size或不是其公倍数时,在其右侧和底部Padding
debug:在计算完之后需要反padding回去,否则与cv2支路的img_size无法对齐
(4)forward函数前后对输入输出reshape
(5)验证C3STR时,需要手动关闭默认模型在half精度下验证(–nohalf)
3、Slighter Model
Train on Visdrone DataSet (1 size is 608,2-6 size is 640)
A、GhostNet-YOLOv5
(1)为保持一致性,下采样的DW的kernel_size均等于3
(2)neck部分与head部分沿用YOLOv5l原结构
(3)中间通道人为设定(expand)
B、ShuffleNetV2-YOLOv5
(1)Focus Layer不利于芯片部署,频繁的slice操作会让缓存占用严重
(2)避免多次使用C3 Leyer以及高通道的C3 Layer(违背G1与G3准则)
(3)中间通道不变
改进的yolov5目标检测-yolov5替换骨干网络-yolo剪枝(TensorRT及NCNN部署)-2