Github项目推荐 | YOLOv3模型压缩
简介
项目仓库包括具有一些轻量级主干(ShuffleNetV2,GhostNet),一些计算机视觉注意机制(SE Block, CBAM Block, ECA Block),针对GhostNet的剪枝、量化和提炼的YOLOv3。
项目地址
//github.com/HaloTrouvaille/YOLO-Multi-Backbones-Attention
重要更新记录
2020.06.01
1)最佳的轻量级模型-HuaWei GhostNet被添加为YOLOv3骨干! 它比ShuffleNetV2更好。 visdrone数据集的结果如下。
2)添加Dorefa量化方法以进行任意位量化! visdrone数据集的结果如下。
3)删除了ShuffleNet和注意力机制。
2020.06.24
1)根据NetworkSlimming添加修剪。
2)修剪后添加提炼以获得更高的mAP。
3)为GhostNet添加Imagenet预训练模型。
Model |
Params |
FPS |
mAP |
GhostNet+YOLOv3 |
23.49M |
62.5 |
35.1 |
Pruned Model+Distillation |
5.81M |
76.9 |
34.3 |
Pruned Model+INT8 |
5.81M |
75.1 |
34 |
注意:单GPU的使用效果更佳。
如果需要以前的注意力模型或有任何疑问,可以到项目中联系作者。
运行环境
-
python 3.7
-
pytorch >= 1.1.0
-
opencv-python
数据集
-
Oxfordhand datasets (1 class, including human’s hand)
//pan.baidu.com/s/1ZYKXMEvNef41MdG1NgWYiQ (extract code: 00rw)
-
Visdrone Remote datasets (10 classes, including pedestrian, car, bus, etc)
//pan.baidu.com/s/1JzJ6APRym8K64taZgcDZfQ (extract code: xyil)
-
Bdd100K datasets (10 classes, including motor, train, traffic light, etc)
//pan.baidu.com/s/1dBrKEdy92Mxqg-JiyrVjkQ (extract code: lm4p)
-
Dior datasets (20 classes, including airplane, airport, bridge, etc)
//pan.baidu.com/s/1Fc-zJtHy-6iIewvsKWPDnA (extract code: k2js)
使用
1)下载数据集,将其放置在数据(data)目录中
2)使用以下命令训练模型(通过更改cfg文件来更改模型结构)
python3 train.py --data data/visdrone.data --batch-size 16 --cfg cfg/ghostnet-yolov3-visdrone.cfg --img-size 640
3)使用训练有素的模型检测对象(将图片或视频放置在示例目录中)
python3 detect.py --cfg cfg/ghostnet-yolov3-visdrone.cfg --weights weights/best.pt --data data/visdrone.data
4)结果
剪枝和量化
剪枝
首先,执行稀疏训练。
python3 train.py --data data/visdrone.data --batch-size 4 --cfg cfg/ghost-yolov3-visdrone.cfg --img-size 640 --epochs 300 --device 3 -sr --s 0.0001
然后在normal_prune.py中更改cfg和权重,再使用以下命令
python normal_prune.py
获取pruned.cfg和相应的权重文件后,可以通过以下命令微调修剪的模型
python3 train.py --data data/visdrone.data --batch-size 4 --cfg pruned.cfg --img-size 640 --epochs 300 --device 3 --weights weights/xxx.weighs
量化
如果要量化某些卷积层,可以在cfg文件中将[convolutional]更改为[quan_convolutional]。 然后使用以下命令
python3 train.py --data data/visdrone.data --batch-size 16 --cfg cfg/ghostnet-yolov3-visdrone.cfg --img-size 640
更改YOLOv3主干的实验结果
ShuffleNetV2+双标度检测(YOLO检测器)
使用Oxfordhand数据集
Model | Params | Model Size | mAP |
ShuffleNetV2 1x | 3.57M | 13.89MB | 51.2 |
ShuffleNetV2 1.5x | 5.07M | 19.55MB | 56.4 |
YOLOv3-tiny | 8.67M | 33.1MB | 60.3 |
使用Visdrone数据集(不完整的训练)
Model | Params | Model Size | mAP |
ShuffleNetV2 1x | 3.59M | 13.99MB | 10.2 |
ShuffleNetV2 1.5x | 5.09M | 19.63MB | 11 |
YOLOv3-tiny | 8.69M | 33.9MB | 3.3 |
注意机制的实验结果
基于YOLOv3-tiny
SE Block paper : //arxiv.org/abs/1709.01507
CBAM Block paper : //arxiv.org/abs/1807.06521
ECA Block paper : //arxiv.org/abs/1910.03151
Model | Params | mAP |
YOLOv3-tiny | 8.67M | 60.3 |
YOLOv3-tiny + SE | 8.933M | 62.3 |
YOLOv3-tiny + CBAM | 8.81M | 62.7 |
YOLOv3-tiny + ECA | 8.67M | 62.6 |
TODO
√ ShuffleNetV2主干
√ 华为GhostNet骨干网
√ ImageNet预训练
√ COCO数据集培训
□ 其他检测策略
□ 其他剪枝策略