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數據集培訓
□ 其他檢測策略
□ 其他剪枝策略