yolov5s模型剪枝详细过程(v6.0)

这篇具有很好参考价值的文章主要介绍了yolov5s模型剪枝详细过程(v6.0)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文参考github上大神的开源剪枝项目进行学习与分享,具体链接放在文后,希望与大家多多交流!

一、原模型训练

在官方源码上训练yolov5模型,支持v6.0分支的n/s/m/l模型,我这里使用的是v5s,得到后将项目clone到本机上

git clone https://github.com/midasklr/yolov5prune.git

cd进入文件夹后,新建runs文件夹,将训练好的模型放入runs/your_train/weights/xxx.pt,我的原模型map0.5:0.95为0.84左右,模型与data.yaml设置好后可以进行稀疏化训练了。

二、稀疏化训练

python train_sparity.py --st --sr 0.0002 --weights yolov5s.pt --data data/your_data.yaml --epochs 100 --imgsz 512 --adam ...

注意:1、若原模型训练时未使用adam,则这里也不要使用adam。2:data.yaml文件改成自己的数据集文件。3:这里sr参数为稀疏化系数,具体值为多少根据不同的数据集和模型,一般设置不一样,需要自己多试试,比如我的是单类别目标检测,设置为0.0002时几乎不变化(如下图)。

这里我们cd到runs文件夹路径,然后输入tensorboard实时监看训练过程,logdir也指向runs文件夹即可,然后打开网页输入你的ip,端口号一般为6006,比如192.168.xx.xx:6006就可以监看。

tensorboard --logdir=/home/user2/yinjiacheng/pytorch-ssd/pytorch-ssd/runs --host=0.0.0.0

这个直方图的纵轴代表训练次数(从上往下训练次数增加),横轴的峰值应随着训练次数不断逼近0轴,代表着大多数bn已经变得稀疏,而出现下图这个情况或者稀疏过慢(逼近0轴的过程缓慢)时,代表sr值应该适量增大。

yolov5剪枝,计算机视觉,pytorch,深度学习,人工智能,python,Powered by 金山文档

所以我调整了sr为0.02,但此时bn收敛过快,且mAP下降严重,如下图所示,表示sr值调的过大了,需要适当减少,直至直方图逼近0轴的同时,mAP与原模型相差不大。

yolov5剪枝,计算机视觉,pytorch,深度学习,人工智能,python,Powered by 金山文档
yolov5剪枝,计算机视觉,pytorch,深度学习,人工智能,python,Powered by 金山文档

然后我将sr值调整为0.01,此时的bn直方图与mAP0.5曲线如下图所示:

yolov5剪枝,计算机视觉,pytorch,深度学习,人工智能,python,Powered by 金山文档
yolov5剪枝,计算机视觉,pytorch,深度学习,人工智能,python,Powered by 金山文档

可以看出bn直方图往0轴逼近的速度不是太快也不是太慢(好像在说废话),而mAP虽然有掉点但还是可以接受,最后可以finetune回来一些,所以可以选择这一稀疏化模型进行下一步的剪枝。

三、剪枝

python prune.py --percent 0.5 --weights runs/train/exp/weights/last.pt --data data/your_data.yaml --cfg models/yolov5s.yaml

这里percent参数是剪枝比例,weights选择刚刚训练好的稀疏化模型,cfg选择你使用的yaml即可,剪枝完成后主文件夹下会出现pruned_model.pt文件,这就是剪枝后的模型,但会发现怎么模型大小下降的不多,因为它还是FP32精度的,而我们yolov5训练完成后的模型为FP16精度,所以其实大小还是下降挺多的(最后我微调后得到的是5.8M,而原模型为13.6M)。

四、微调

python finetune_pruned.py --weights pruned_model.pt --data data/your_data.yaml --epochs 150 --imgsz 320 --adam

这里还是一样,若前面没有使用adam则这里也不要用,imgsz调成自己的输出尺寸,200个epoch还是finetune回来不少的。

yolov5剪枝,计算机视觉,pytorch,深度学习,人工智能,python,Powered by 金山文档

最后我获得的模型为5.48M,参数量Param为2.74M,输入尺寸为320*320时FLOPs为2.17G,比原模型大小13.6M,FLOPs为3.9G明显减小。

五、detect

该项目中的detect.py和detectpruned.py代码有些问题,大家可以把微调后的pt模型放到官方项目中去detect,但有几点需要改。

  1. 现在我们是两个项目,一个是剪枝的yolov5_prune,一个是官方的yolov5,将yolov5_prune/model/pruned_common.py文件复制到官方yolov5/model/ 中去。

  1. 将pruned_common.py中第26行的

from utils.plots import Annotator, colors, save_one_box

save_one_box删掉,再在25行最后加上,因为在官方文件中save_one_box这个def是在utils下的general中定义的。

from utils.general import (LOGGER, check_requirements, check_suffix, check_version, colorstr, increment_path,make_divisible, non_max_suppression, scale_coords, xywh2xyxy, xyxy2xywh,save_one_box)
  1. 打开官方yolov5/utils/general.py,在第43行后,也就是声明第一个class前加上以下代码

def set_logging(name=None, verbose=True):
    # Sets level and returns logger
    for h in logging.root.handlers:
        logging.root.removeHandler(h)  # remove all handlers associated with the root logger object
    rank = int(os.getenv('RANK', -1))  # rank in world for Multi-GPU trainings
    logging.basicConfig(format="%(message)s", level=logging.INFO if (verbose and rank in (-1, 0)) else logging.WARNING)
    return logging.getLogger(name)


LOGGER = set_logging(__name__)  # define globally (used in train.py, val.py, detect.py, etc.)
  1. 最后根据设置运行detect.py即可,我在detect中加了将漏报和误报图片分别放在不同文件夹的功能,最后在5000张val集中分别多了几十张吧,还算可以接受。

python detect.py --weights runs/train/yolo5s_face_prune/weights/last.pt --conf 0.5 --img-size 320 --source data/your_data/images/val --save-txt

参考链接:midasklr/yolov5prune at v6.0 (github.com)文章来源地址https://www.toymoban.com/news/detail-778167.html

到了这里,关于yolov5s模型剪枝详细过程(v6.0)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从0开始做yolov5模型剪枝

    【整个流程中,在正常train,sparityTrain,prune,finetune遇到10多个的问题,包括AttributeError、ModuleNotFoundError、RuntimeError、SyntaxError、TypeError等问题的解决方法,详见内容】 为了将现有模型移植到ARM平台,同时保证模型准确率的基础上,减少模型的算力消耗和推理时间。 之前有做

    2024年02月11日
    浏览(52)
  • 【YOLOv7/YOLOv5系列算法改进NO.49】模型剪枝、蒸馏、压缩

    作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv7的如何改进进行详细的介绍,目的是为了给那些搞科研的同学需要创新点或者搞工程

    2024年02月08日
    浏览(37)
  • YOLOv5 - yolov5s.yaml 文件

    🍨 本文为[🔗365天深度学习训练营学习记录博客 🍦 参考文章:365天深度学习训练营 🍖 原作者:[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/) 🚀 文章来源:[K同学的学习圈子](https://www.yuque.com/mingtian-fkmxf/zxwb45) 基于深度学习的目标检测模型的结构:输入-主干-脖子

    2024年02月06日
    浏览(39)
  • Yolov5口罩佩戴实时检测项目(模型剪枝+opencv+python推理)

    如果只是想体验项目,请直接跳转到本文第2节,或者跳转到我的facemask_detect。 剪枝的代码可以查看我的github:yolov5-6.2-pruning 第1章是讲述如何得到第2章用到的onnx格式的模型文件(我的项目里直接提供了这个文件)。 第2章开始讲述如何使用cv2.dnn加载onnx文件并推理yolov5n模型

    2023年04月08日
    浏览(42)
  • yolov5s.pt下载

    提示:: 参考博客:https://blog.csdn.net/m0_60900621/article/details/127119398 GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch ONNX CoreML TFLite

    2024年02月11日
    浏览(52)
  • yolov5s.yaml 文件解读

    nc: 81 - 表示模型被训练来识别的类别数量为81。 depth_multiple: 0.33 - 模型深度的倍数。这个参数用于调整模型中层的深度。值为0.33意味着每个层的深度为原始设计深度的33%,通常用于减小模型大小和计算需求,但可能会牺牲精度。 width_multiple: 0.50 - 表示层通道的倍数。这个参数

    2024年01月21日
    浏览(39)
  • 手把手教你用Yolov5 (v6.2) 训练分类模型 基于《Kaggle猫狗大战》案例

    在8月17日晚上, YOLOv5 官方发布了 v6.2 版本, v6.2 版本支持分类模型训练、验证、预测和导出; v6.2 版本的推出使得训练分类器模型变得超级简单! 下一个版本 v6.3 计划于9月发布,将为 YOLOv5 带来官方实例分割支持,今年晚些时候将发布一个主要的 v7.0 版本,更新所有3个任务

    2024年01月18日
    浏览(54)
  • 第Y3周:yolov5s.yaml文件解读

    🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊|接辅导、项目定制 ✅本周任务: 将yolov5s网络模型中第4层的C3*2修改为C3*1,第6层的C3*3修改为C3*2。 简单介绍: YOLOv5配置了4种不同大小的网络模型,分别是 YOLOv5s 、 YOLOv5m 、 YOLOv5l 、 YOLOv5x ,其中 YO

    2024年02月08日
    浏览(39)
  • 一块RTX 3090加速训练YOLOv5s,时间减少11个小时,速度提升20%

    作者| BBuf 很高兴为大家带来One-YOLOv5的最新进展,在《一个更快的YOLOv5问世,附送全面中文解析教程》发布后收到了很多算法工程师朋友的关注,十分感谢。 不过,可能你也在思考一个问题:虽然OneFlow的兼容性做得很好,可以很方便地移植YOLOv5并使用OneFlow后端来进行训练,

    2024年02月05日
    浏览(59)
  • 利用yolov5完成目标检测详细过程

    我所使用的是yolov5-v6.1版本,下载地址: yolov5-6.1代码 解压完成后,在Anaconda Prompt中进入代码所在文件夹,执行以下代码: 它可以帮助我们安装所需要的依赖,并且不会重复安装 初次训练我是用的是官方提供的数据集:Pascal VOC Dataset,下载地址: Pascal VOC Dataset 解压后得到以

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包