当前位置: 首页 > news >正文

YOLOv8模型剪枝笔记(DepGraph和Network Slimming网络瘦身)

文章目录

    • 一、DepGraph剪枝
      • (1)项目准备
        • 1)剪枝基础知识
        • 2)DepGraph剪枝论文解读1
        • 2)DepGraph剪枝论文解读2
        • 3)YOLO目标检测系列发展史
        • 4)YOLO网络架构
      • (2)项目实战(YOLOv8应用DepGraph剪枝+finetune)
        • 1)安装软件环境(基础环境、Pytorch、YOLOv8)
        • 2)准备数据集和修改配置
        • 3)训练数据集、测试训练的网络测试和性能评估
        • 4)DepGraph剪枝训练YOLOv8
        • 5)剪枝训练后网络测试和性能评估
      • (3)代码解析
        • 1)Torch Pruning工具包介绍
        • 2)yolov8_pruning脚本代码解析
    • 二、Network Slimming剪枝
      • (1)项目准备
        • 1)Network Slimming剪枝原理
        • 2)YOLO目标检测系列发展史
        • 3)YOLOv8网络架构
      • (2)项目实战
        • 1)安装基础环境、安装Pytorch、安装YOLOv8
        • 2)准备数据集、修改配置文件、训练数据集
        • 3)测试训练处的网络和性能统计
        • 4)稀疏化训练
        • 5)网络剪枝
        • 6)剪枝后微调
      • (3)代码解析
        • 1)修改代码文件解析
        • 2)新增代码文件解析

一、DepGraph剪枝

(1)项目准备

  • 基础知识背景
    ①稀疏:在模型剪枝(Model Pruning)中,稀疏表示(Sparsity)是指通过某种方式使模型的参数或结构中出现大量的零值(或接近零的值),从而让模型的表示变得 “稀疏”
    ②为什么要剪枝而不是去训练小网络:因为彩票事件效应,去小网络是很难学习成功的
    彩票效应:大模型有很多小网络,如果有一个子网络训练成功则可以看做大模型训练成功
    在这里插入图片描述
    在这里插入图片描述
    把模型随机初始化后训练,剪枝后如果再次随机初始化权重是很难训练成功的,但是如果用原先第一次随机初始化的权重训练的话就成功,这就说明中奖了
1)剪枝基础知识

之前我有写过博客
CUDA与TensorRT学习四:模型部署基础知识、模型部署的几大误区、模型量化、模型剪枝、层融合

①剪枝分类
在这里插入图片描述
②粗粒度剪枝和细粒度剪枝对比
粗粒度
在这里插入图片描述

在这里插入图片描述
细粒度剪枝在这里插入图片描述

在这里插入图片描述
③基础知识
1)神经网络通常都是过度参数化,权重数很多都是多余的
2)剪枝颗粒度
(1)权重剪枝
权重剪枝,剪枝之后就变成非规则,缺点是难以实现,难以加速
在这里插入图片描述
(2)神经元剪枝
在这里插入图片描述

  • 补充
    还有不同颗粒度剪枝
    在这里插入图片描述
    )element wise包括了权重和神经元剪枝,可能会导致非结构化剪枝,得不到GPU加速
    )其他四个是结构化剪枝,能得到GPU加速是研究重点

在这里插入图片描述
channel:通道剪枝
filter:滤波器剪枝
shape:若干个高度和宽度的神经元剪枝
depth:某个深度方向的神经元都剪枝掉

2)DepGraph剪枝论文解读1

①论文截图
在这里插入图片描述

②网络架构中可按照不同层数分配在各个组中,按组来剪枝(同一组有依赖关系
在这里插入图片描述
如图所示 CNNS、Transformer、RNNs、 GNNs都可以剪枝。在图中如果剪枝了CNNs的Con v2,那就必须删除同组中的{ Conv1、BN1、 BN2} ,从而引入了依赖图,明确依赖图来自动化剪枝

算法核心:利用相邻层的局部依赖关系,递归地推导出需要的分组矩阵G
在这里插入图片描述
如下图,a是非结构化剪枝仅仅关注了权重的重要性,b学习结构稀疏层,但是w比w‘耦合权重更多是不稀疏的,也不考虑剪枝掉,唯有c组是学习组的一致结构稀疏,表示的是要剪枝掉的组里面w和w’都是稀疏的

在这里插入图片描述

④相关工具:基于DepGraph算法,作者开发Pytorch结构化剪枝框架Torch-Pruning,与torch.nn.utils.prune最大的差别在于:它会物理地移除参数,同时自动裁剪其他依赖层,而后者只能把参数置为0
④DepGraph剪枝+fine效果展示:
在这里插入图片描述
可以看到横轴往右随着剪枝越多,计算量MACs越低,pruned mAP掉点越跳跃,而fine-tune后的模型精度基本变化不大

1)MACs
MACs(Multiply - Accumulate Operations,乘累加操作次数 )代表计算量。它用于衡量模型在推理过程中执行乘法和累加操作的总数,是评估模型计算复杂度的重要指标
2)pruned mAP
表示剪枝后的模型精度
3)recovered mAP
剪枝后的模型微调后的精度
2)DepGraph剪枝论文解读2

(1)问题点-现有的剪枝存在问题:算法实现和网络结构强绑定,需要为不同模型分别开发专用且复杂的剪枝程序
在这里插入图片描述

(2)解决方法-依赖图:自动方式去分组
在这里插入图片描述

(3)原理解析:利用相邻层的局部关系递归式分组

在这里插入图片描述
在这里插入图片描述

3)YOLO目标检测系列发展史
4)YOLO网络架构

(2)项目实战(YOLOv8应用DepGraph剪枝+finetune)

1)安装软件环境(基础环境、Pytorch、YOLOv8)

①准备基础环境
②安装PyTorch
③克隆和安装YOLOv8

2)准备数据集和修改配置

①准备数据集
②修改配置文件

3)训练数据集、测试训练的网络测试和性能评估
4)DepGraph剪枝训练YOLOv8
5)剪枝训练后网络测试和性能评估

(3)代码解析

1)Torch Pruning工具包介绍
2)yolov8_pruning脚本代码解析

二、Network Slimming剪枝

(1)项目准备

1)Network Slimming剪枝原理
2)YOLO目标检测系列发展史
3)YOLOv8网络架构

(2)项目实战

1)安装基础环境、安装Pytorch、安装YOLOv8
2)准备数据集、修改配置文件、训练数据集
3)测试训练处的网络和性能统计
4)稀疏化训练
5)网络剪枝
6)剪枝后微调

(3)代码解析

1)修改代码文件解析
2)新增代码文件解析

相关文章:

  • C++(29):结构体
  • SpringBoot Day_03|数据校验|异常处理|日志级别|定时器
  • 位运算及其算法
  • 并发编程 之 可见性、原子性、volatile、synchronized、Java内存模型的深入剖析
  • Google机器学习实践指南(梯度下降篇)
  • 裸机任务调度框架、DMA、空闲中断
  • Linux安装SRILM
  • HCIP(广域网)
  • 养生指南:五维守护身心健康
  • Spring Boot 注解 @ConditionalOnMissingBean是什么
  • 【Bluedroid】蓝牙 HID Host connect全流程源码解析
  • 通过云服务器实现异地组网 部署WireGuard
  • LeetCode Hot100 (双指针)
  • F5《2025年应用战略现状》报告:AI 落地加速,企业战略从讨论迈向行动
  • 【风控】模型算法区分度指标KS
  • 【C++进阶篇】红黑树的实现(赋源码)
  • 【软件使用】RSS(Really Simple Syndication)
  • 养生指南:五维提升健康品质
  • 重拾童年,用 CodeBuddy 做自己的快乐创作者
  • S7-1500PLC通过工艺对象实现V90总线伺服定位控制(105报文)
  • 网站建设规划/网站优化的关键词
  • 公司申请网站建设申请理由/德芙巧克力软文推广
  • 弓长岭网站建设/培训机构网站
  • 做网站可以用.cn域名吗/网站 推广
  • 温州网站建设联系电话/百度pc网页版入口
  • 把手机做网站服务器/网络营销策划ppt