2021.10.30 复现TPH-YOLOv5
2021.10.31 完成替换backbone为Ghostnet
2021.11.02 完成替换backbone为Shufflenetv2
2021.11.05 完成替换backbone为Mobilenetv3Small
环境安装
pip install -r requirements.txt
Visdrone DataSet (1-5 size is 608,6-8 size is 640)
Model | mAP | mAP@50 | Parameters(M) | GFLOPs | FPS@CPU |
---|---|---|---|---|---|
YOLOv5n | 13 | 26.2 | 1.78 | 4.2 | |
YOLOv5s | 18.4 | 34 | 7.05 | 15.9 | |
YOLOv5m | 21.6 | 37.8 | 20.91 | 48.2 | |
YOLOv5l | 23.2 | 39.7 | 46.19 | 108.1 | |
YOLOv5x | 24.3 | 40.8 | 86.28 | 204.4 | |
YOLOv5xP2 | 30.00 | 49.29 | 90.96 | 314.2 | |
YOLOv5xP2 CBAM | 30.13 | 49.40 | 91.31 | 315.1 | |
YOLOv5xP2 CBAM TPH | 86.08 | 238.9 |
训练脚本实例:
nohup python train.py --data VisDrone.yaml --weights yolov5n.pt --cfg models/yolov5n.yaml --epochs 300 --batch-size 8 --img 608 --nosave --device 0,1 --sync-bn >> yolov5n.txt &
消融实验如下:
Model | mAP | mAP@50 | Parameters(M) | GFLOPs | FPS@CPU |
---|---|---|---|---|---|
YOLOv5x | 24.3 | 40.8 | 86.28 | 204.4 | |
YOLOv5xP2 | 30.1 | 49.3 | 90.96 | 314.2 | |
YOLOv5xP2 CBAM | 30.13 | 49.40 | 91.31 | 315.1 | |
YOLOv5x-TPH | 96.76 | 345.0 |
组件:P2检测头、CBAM、Transformer Block
结构图如下:
注意:
1、避免TransBlock导致显存爆炸,MultiAttentionHead中将注意力头的数量减少至4,并且FFN中的两个全连接层从linear(c1, 4*c1)改为linear(c1, c1),去掉GELU函数
2、TransBlock的数量会根据YOLO规模的不同而改变,标准结构作用于YOLOv5m
3、当YOLOv5x为主体与标准结构的区别是:(1)首先去掉14和19的CBAM模块(2)降低与P2关联的通道数(128)(3)在输出头之前会添加SPP模块,注意SPP的kernel随着P的像素减小而减小(4)在CBAM之后进行输出(5)只保留backbone以及最后一层输出的TransBlock(6)采用BiFPN作为neck
Model | mAP | mAP@50 | Parameters(M) | GFLOPs | FPS@CPU | TrainCost(h) | Memory Cost(G) |
---|---|---|---|---|---|---|---|
YOLOv5s | 18.4 | 34 | 7.05 | 15.9 | |||
YOLOv5l-Ghostnet | 18.4 | 33.8 | 24.27 | 42.4 | 27.44 | 4.97 | |
YOLOv5l-Shufflenet | 16.48 | 31.1 | 21.27 | 40.5 | 10.98 | 2.41 | |
YOLOv5l-Mobilenetv3Small | 16.55 | 31.2 | 20.38 | 38.4 | 10.19 | 5.3 |
(1)为保持一致性,下采样的DW的kernel_size均等于3
(2)neck部分与head部分沿用YOLOv5l原结构
(1)Focus Layer不利于芯片部署,频繁的slice操作会让缓存占用严重
(2)避免多次使用C3 Leyer以及高通道的C3 Layer(违背G1与G3准则)
(1)尊重原文结构,精确使用hard-Swish以及SE层
(2)neck部分与head部分沿用YOLOv5l原结构
- Multibackbone: Mobilenetv3-small
- Multibackbone: Shufflenetv2
- Multibackbone: Ghostnet
- Multibackbone: EfficientNet-Lite
- Multibackbone: TPH-YOLOv5
- Pruning: Network slimming
- Quantization: 4bit QAT
- Knowledge Distillation