# yolov5_prune
本项目基于[tanluren/yolov3-channel-and-layer-pruning](https://github.com/tanluren/yolov3-channel-and-layer-pruning)实现,将项目扩展到yolov5上。<br>
项目的基本流程是,使用[ultralytics/yolov5](https://github.com/ultralytics/yolov5)训练自己的数据集,在模型性能达到要求但速度未达到要求时,对模型进行剪枝。首先是稀疏化训练,稀疏化训练很重要,如果模型稀疏度不够,剪枝比例过大会导致剪枝后的模型map接近0。剪枝完成后对模型进行微调回复精度。<br>
本项目使用的yolov5为第六版本。<br>
yolov5第三版本参考[yolov5-v4-prune](https://github.com/ZJU-lishuang/yolov5_prune/tree/v4)<br>
yolov5第三版本参考[yolov5-v3-prune](https://github.com/ZJU-lishuang/yolov5_prune/tree/v3)<br>
yolov5第二版本参考[yolov5-v2-prune](https://github.com/ZJU-lishuang/yolov5_prune/tree/v2)<br>
PS:在开源数据集和自有数据集上模型均剪枝成功。
## 实例流程
数据集下载[dataset](http://www.robots.ox.ac.uk/~vgg/data/hands/downloads/hand_dataset.tar.gz)<br>
数据集转为可训练格式[converter](https://github.com/ZJU-lishuang/yolov5-v4/blob/main/data/converter.py)
### STEP1:基础训练
附件:[训练记录](https://drive.google.com/drive/folders/1ZdgYUk5B9-KsE8m-CyhFv0-jzURm2SCV?usp=sharing)<br>
### STEP2:稀疏训练
附件:[稀疏训练记录](https://drive.google.com/drive/folders/1-aUNG_spznsF-KJ9nsur4r7XtZds4rU0?usp=sharing)<br>
### STEP3:八倍通道剪枝
附件:[剪枝后模型](https://drive.google.com/drive/folders/1KJYsVlaB5_3QZB3r0nzJUKYW_oTHW4Pa?usp=sharing)<br>
### STEP4:微调finetune
附件:[微调训练记录](https://drive.google.com/drive/folders/1AsHG_w--NdSPCV4sPaPYpcOnMyOpNgHx?usp=sharing)<br>
### STEP4:微调finetune,使用蒸馏技术优化模型,效果优于单纯的微调模型
附件:[微调蒸馏训练记录](https://drive.google.com/drive/folders/1VDVHwhPReIN5WNLeb-8wnGmZbpe7pc_c?usp=sharing)<br>
## 剪枝步骤
#### STEP1:基础训练
**项目**[yolov5](https://github.com/ZJU-lishuang/yolov5-v6) <br>
示例代码 <br>
```
python train.py --img 640 --batch 16 --epochs 50 --weights weights/yolov5s_v6.pt --data data/coco_hand.yaml --cfg models/yolov5s.yaml --name s_hand
```
#### STEP2:稀疏训练
--prune 0 适用于通道剪枝策略一,--prune 1 适用于其他剪枝策略。<br>
**项目**[yolov5](https://github.com/ZJU-lishuang/yolov5-v6)<br>
示例代码<br>
```
python train_sparsity.py --img 640 --batch 16 --epochs 50 --data data/coco_hand.yaml --cfg models/yolov5s.yaml --weights runs/train/s_hand/weights/last.pt --name s_hand_sparsity -sr --scale 0.001 --prune 1
```
#### STEP3:通道剪枝策略一
不对shortcut直连的层进行剪枝,避免维度处理。<br>
```
python prune_yolov5s.py --cfg cfg/yolov5s.cfg --data data/oxfordhand.data --weights weights/yolov5s_prune0.pt --percent 0.8
```
#### STEP3:通道剪枝策略二
对shortcut层也进行了剪枝,剪枝采用每组shortcut中第一个卷积层的mask。<br>
```
python shortcut_prune_yolov5s.py --cfg cfg/yolov5s.cfg --data data/oxfordhand.data --weights weights/yolov5s_prune1.pt --percent 0.3
```
#### STEP3:通道剪枝策略三
先以全局阈值找出各卷积层的mask,然后对于每组shortcut,它将相连的各卷积层的剪枝mask取并集,用merge后的mask进行剪枝。<br>
```
python slim_prune_yolov5s.py --cfg cfg/yolov5s.cfg --data data/oxfordhand.data --weights weights/yolov5s_prune1.pt --global_percent 0.8 --layer_keep 0.01
```
#### STEP3:八倍通道剪枝
在硬件部署上发现,模型剪枝率相同时,通道数为8的倍数速度最快。(采坑:需要将硬件性能开启到最大)<br>
示例代码<br>
```
python slim_prune_yolov5s_8x.py --cfg cfg/yolov5s_v6_hand.cfg --data data/oxfordhand.data --weights weights/last_v6s.pt --global_percent 0.5 --layer_keep 0.01 --img_size 640
```
#### STEP4:微调finetune
**项目**[yolov5](https://github.com/ZJU-lishuang/yolov5-v6)<br>
示例代码<br>
```
python prune_finetune.py --img 640 --batch 16 --epochs 50 --data data/coco_hand.yaml --cfg ./cfg/prune_0.6_keep_0.01_8x_yolov5s_v6_hand.cfg --weights ./weights/prune_0.6_keep_0.01_8x_last_v6s.pt --name s_hand_finetune
```
#### STEP4:微调finetune,使用蒸馏技术优化模型
**项目**[yolov5](https://github.com/ZJU-lishuang/yolov5-v6)<br>
示例代码<br>
```
python prune_finetune.py --img 640 --batch 16 --epochs 50 --data data/coco_hand.yaml --cfg ./cfg/prune_0.6_keep_0.01_8x_yolov5s_v6_hand.cfg --weights ./weights/prune_0.6_keep_0.01_8x_last_v6s.pt --name s_hand_finetune_distill --distill
```
#### STEP5:剪枝后模型推理
**项目**[yolov5](https://github.com/ZJU-lishuang/yolov5-v6)<br>
示例代码<br>
```shell
python prune_detect.py --weights weights/last_s_hand_finetune.pt --img 640 --conf 0.7 --source inference/images
```
没有合适的资源?快使用搜索试试~ 我知道了~
yolov5 prune,支持yolov5 V2、V3、V4、V6版本
共47个文件
py:26个
sh:7个
data:3个
需积分: 5 1 下载量 57 浏览量
2024-08-24
15:19:47
上传
评论
收藏 226KB ZIP 举报
温馨提示
项目的基本流程是,使用ultralytics/yolov5训练自己的数据集,在模型性能达到要求但速度未达到要求时,对模型进行剪枝。首先是稀疏化训练,稀疏化训练很重要,如果模型稀疏度不够,剪枝比例过大会导致剪枝后的模型map接近0。剪枝完成后对模型进行微调回复精度。
资源推荐
资源详情
资源评论
收起资源包目录
yolov5_prune-6.zip (47个子文件)
yolov5_prune-6
prune_yolov5s.py 10KB
slim_prune_yolov5s_8x.py 13KB
test_yolov5s.py 15KB
data
coco.data 116B
valid.txt 49KB
oxfordhand.data 81B
get_coco_dataset_gdrive.sh 703B
coco_128img.data 122B
oxfordhand.names 4B
get_coco_dataset.sh 2KB
coco_128img.txt 12KB
valid.cache 204KB
coco.names 701B
train.txt 294KB
modelsori.py 23KB
LICENSE 11KB
slim_prune_yolov5s.py 12KB
utils
utils.py 39KB
__init__.py 5B
google_utils.py 2KB
parse_config.py 1KB
prune_utils.py 32KB
metrics.py 13KB
gcp.sh 7KB
autoanchor.py 7KB
model_transfer.py 21KB
general.py 33KB
downloads.py 6KB
plots.py 19KB
datasets.py 45KB
adabound.py 11KB
torch_utils.py 5KB
val.py 17KB
slim_prune_yolov5s.sh 170B
slim_prune_yolov5s_8x.sh 173B
prune_yolov5s.sh 142B
tk1_time.xls 22KB
shortcut_prune_yolov5s.sh 149B
models
__init__.py 0B
common.py 20KB
experimental.py 4KB
yolo.py 14KB
.gitignore 4KB
cfg
yolov5s_v6_hand.cfg 8KB
test.py 14KB
README.md 5KB
shortcut_prune_yolov5s.py 13KB
共 47 条
- 1
资源评论
余十步
- 粉丝: 1679
- 资源: 172
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ks滑块加密算法与源代码
- 医护人员检测23-YOLOv8数据集合集.rar
- 1.电力系统短路故障引起电压暂降 2.不对称短路故障分析 包括:共两份自编word+相应matlab模型 1.短路故障的发生频次以及不同类型短路故障严重程度,本文选取三类典型的不对称短路展开研究
- C#连接sap NCO组件 X64版
- 开源基于51单片机的多功能智能闹钟设计,课设毕设借鉴参考
- 深度强化学习电气工程复现文章,适合小白学习 关键词:能量管理 深度学习 强化学习 深度强化学习 能源系统 优化调度 编程语言:python平台 主题:用于能源系统优化调度的深度强化学习算法的性能比较
- 泰州市2005-2024年近20年历史气象数据下载
- 盐城市2005-2024年近20年历史气象数据下载
- 连云港市2005-2024年近20年历史气象数据下载
- 南通市2005-2024年近20年历史气象数据下载
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功