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數據集培訓

□ 其他檢測策略

□ 其他剪枝策略