# 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 下载量 32 浏览量
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
资源评论
余十步
- 粉丝: 1677
- 资源: 172
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 纯css3发光霓虹灯文字闪烁特效代码.zip
- 用VBS制作自己的进度条
- 电脑说话VBS什么电脑都能用
- 利用HTML+CSS+JS的国漫分享网站(响应式)
- 练习springboot1 项目 模拟高并发秒杀,实现基本的登录、查看商品列表、秒杀、下单等功能,简单实现了系统缓存、降级和限流
- 一个社区论坛项目,技术栈:spring boot + thymeleaf+Redis 实现的功能:发帖,关注,点赞,私信,系统通知,日活统计.zip
- 会员管理系统.zip-会员管理系统.zip
- 解压软件 ZArchiver.apk
- 《系统分析和设计》课程作业-面向中国各大城市的医院预约挂号系统.zip
- SM4学习备份,有用的
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功