深度学习模型(yolov5)压缩


前言

当我们利用深度学习训练出我们的模型之后,下一步会做什么呢?无疑是去测试我们的模型,精度达到标准既可发布上线,那发布之后我们会发现的问题是->推理时间慢,那我们该怎么做呢?以下几个思路可供借鉴,这里以yolov5为例:

  • 更改网络为轻量级,如YOLOv5s、YOLOv5n
  • 通过技术手段进行模型加速,如tensorrt,openvino等
  • 资金雄厚的情况下,可以考虑使用更高算力的卡
  • 模型压缩
    接下来,就给大家介绍下发现的一个用于模型压缩的工具–>PaddleSlim

一、环境搭建

该说不说,paddle的环境还是比较难搞的,感觉兼容性做的不是很好,为了让大家避开我踩过的坑,这里我建议直接去官网下最新的版本,但是一定要看你你安装的是GPU还是CPU,命令如下:

pip install paddlepaddle-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install paddleslim -i https://pypi.tuna.tsinghua.edu.cn/simple

版本对照表如下,仅供参考:
在这里插入图片描述
最省事的还是docker安装paddle,会直接避开很多坑
安装完成后,验证是否安装成功:

  • 验证paddl
import paddle
paddle.utils.run_check()

若出现在这里插入图片描述
则证明安装成功

  • 验证paddleslim
import paddleslim

一般情况下,导入没问题的话,基本就没有问题

二、代码拉取

拉取paddleslim的源码,链接如下:PaddleSlim

三、数据集准备

  • 数据格式的话大体采用COCO格式,如下:
    在这里插入图片描述
    当然,如果我们也可以使用自己的数据集,但前提是数据摆放要和上边一致,然后修改paddleslim/example/auto_compression/pytorch_yolo_series/configs/yolov5s_qat_dis.yaml里的数据集路径即可,如:

在这里插入图片描述
-无标注图片,直接传入脱氨文件夹,不支持评估模型MAP(官方文档中所说)
如果我们懒的去改数据格式或者去标注新数据,那就直接在yolov5s_qat_dis.yaml里修改image_path参数,如:
在这里插入图片描述
这里设置了之后就不用去管下边那个coco路径的设置了

四、模型准备

这里我们需要提前准备好要转换的pt模型,并提前转换为onnx或paddle的格式。需要注意的是:如果你项目的推理框架打算用paddle的话,那两种方案都可以,如果不打算用paddle的话,建议用onnx,压缩时会自动进行模型转换。我的推理框架用的是paddle,所以我就直接使用了提前住哪换好的paddle格式的模型。

  • 转换onnx的话,可以在YOLOv5中利用exoport.py脚本进行住哪换,如:
python export.py --weights yolov5s.pt --include onnx
  • 转换为paddle格式的话,可以参考我的另一篇博客:onnx2paddle,然后子啊yolov5s_qat_dis.yaml中指定模型路径,如下:
    在这里插入图片描述
    其次,由于我们不在需要onnx2paddle或者paddle2onnx这个过程,所以需要将onnx_format改为False,如下:
    在这里插入图片描述

五、开始压缩

命令如下,这里只展示单卡训练的:

cd example/auto_compression/pytorch_yolo_series
CUDA_VISIBLE_DEVICES=0 python run.py --config_path=./configs/yolov5s_qat_dis.yaml --save_dir="./output"

详细训练参考链接如下:训练

六、结果对比

1、体积对比:

压缩前:
在这里插入图片描述
压缩后:
在这里插入图片描述
这里模型参数没减少的原因可以参考这个链接这里

2、推理速度(3080Ti下未开trt)

压缩前:
在这里插入图片描述

压缩后:
在这里插入图片描述

七、错误解决

在整个过程中,可能会遇到如下错误:
在这里插入图片描述
原因可能就是版本问题,这个问题折磨我好久,所以一定要注意版本。参考的解决连接如下:bug解决
验证这个问题是否解决最快的方式就是直接import paddleslim,如果没出这个错就说明解决了


总结

以上就是本篇的全部内容,欢迎大家指正问题。

  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Yolov7是一个用于目标检测深度学习模型,可以用于检测图像或视频中的多个对象。模型压缩是指减小模型的大小和计算复杂度,以便在计算资源有限的设备上部署和运行。 对Yolov7模型进行压缩有多种方法,以下是一些常见的方式: 1. 知识蒸馏(Knowledge Distillation):使用一个较大且准确的模型(教师模型)生成训练数据,然后使用一个较小的模型(学生模型)来学习这些数据。通过蒸馏教师模型的知识到学生模型中,可以获得相对较小的模型并保持较高的性能。 2. 参数剪枝(Pruning):剪枝是指通过删除冗余的参数来减小模型的大小。可以通过剪枝策略选择不重要的权重或通道,并将其从模型中删除,从而减少模型的尺寸。剪枝后,可以对剩余的参数进行微调以保持性能。 3. 量化(Quantization):量化是指降低模型中参数的位数以减少模型的存储空间和计算需求。常见的方法是将浮点数参数转换为固定位数的整数参数。例如,将32位浮点数量化为8位整数可以将模型的大小减少为原来的四分之一。 4. 分组卷积(Group Convolution):将卷积操作中的输入通道分成多个组,并在每个组内进行卷积操作。这种方法可以减小模型的计算复杂度和参数数量,从而减小模型的大小。 这些方法可以单独或结合使用,根据具体情况选择适合的压缩方法。但需要注意的是,压缩模型可能会损失一些性能,因此需要在压缩和性能之间进行权衡。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值