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

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)新增代码文件解析
http://www.lryc.cn/news/2383670.html

相关文章:

  • App Builder技术选型指南:从AI编程到小程序容器,外卖App开发实战
  • TDengine 高可用——三副本
  • el-table高度自适应、数据查询后高度展示错误问题
  • 【蓝桥杯真题精讲】第 16 届 Python A 组(省赛)
  • Java接口设计:ECharts热力图的绘制
  • 深入理解 MongoDB 的 _id 和 ObjectId:从原理到实践
  • C++内存复制
  • 【notepad++如何设置成中文界面呢?】
  • 当AI遇上科研:北大“科学导航”重塑学术探索全流程
  • 大模型在闭合性胫骨平台骨折诊疗全流程中的应用研究报告
  • PHP学习笔记(八)
  • C#中WSDL文件引用问题
  • Ubuntu 22.04上升级Node.js版本
  • 养生新策:五维开启健康生活
  • 生成对抗网络(GAN)原理
  • 【SpringBoot实战指南】使用 Spring Cache
  • centos8 配置网桥,并禁止kvm默认网桥
  • C++:list容器,deque容器
  • 【Node.js】全栈开发实践
  • 自定义类型-联合体
  • Qt项目开发中所遇
  • ubuntu sh安装包的安装方式
  • Redis语法大全
  • OpenAI宣布:核心API支持MCP,助力智能体开发
  • 我的爬虫夜未眠:一场与IP限流的攻防战
  • git:The following paths are ignored by one of your
  • 算法--js--组合总和
  • 微服务中的 AKF 拆分原则:构建可扩展系统的核心方法论
  • vue element-plus 集成多语言
  • 如何测试JWT的安全性:全面防御JSON Web Token的安全漏洞