当前位置: 首页 > 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)新增代码文件解析

相关文章:

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

文章目录 一、DepGraph剪枝(1)项目准备1)剪枝基础知识2)DepGraph剪枝论文解读12)DepGraph剪枝论文解读23)YOLO目标检测系列发展史4)YOLO网络架构 (2)项目实战&#xff08…...

App Builder技术选型指南:从AI编程到小程序容器,外卖App开发实战

在2025年快速迭代的技术生态中,开发者构建App的路径愈发多样化。本文以开发一个同城外卖App为例,对比当前主流的AI编程工具(如Cursor、GitHub Copilot、Trae)与小程序容器技术(如FinClip)的优劣势、难易度及…...

TDengine 高可用——三副本

概述 TDengine 的三副本方案采用 RAFT 算法来实现数据的一致性,包括元数据和时序数据。一个虚拟节点组(VGroup)构成了一个 RAFT 组;VGroup 中的虚拟节点(Vnode),便是该 RAFT 组的成员节点&…...

el-table高度自适应、数据查询后高度展示错误问题

在很多场景中我们需要实现表格的高度自适应&#xff0c;即不同屏幕大小下需要使用不同的高度来设置表格&#xff0c;那么我们应该如何实现呢&#xff1f; 1.el-table实现高度自适应 通过以下代码可以实现表格根据屏幕进行自适应 设置表格的高度 <el-table ref"tableD…...

【蓝桥杯真题精讲】第 16 届 Python A 组(省赛)

文章目录 T1 偏蓝 (5/5)T2 IPv6 (0/5)T3 2025 图形 (10/10)T4 最大数字 (10/10)T5 倒水 (15/15)T6 拼好数 (0/15)T7 登山 (20/20)T8 原料采购 (20/20) 更好的阅读体验 高速访问&#xff1a;https://wiki.dwj601.cn/ds-and-algo/lan-qiao-cup/16th-python-a/永久链接&#xff1…...

Java接口设计:ECharts热力图的绘制

引言 热力图是一种强大的数据可视化工具&#xff0c;通过颜色的深浅变化来直观展示数据密度和分布情况。在现代Web应用中&#xff0c;ECharts作为一款流行的开源数据可视化库&#xff0c;提供了丰富的图表类型&#xff0c;其中热力图因其直观的视觉效果而被广泛使用。本教程将…...

深入理解 MongoDB 的 _id 和 ObjectId:从原理到实践

在 MongoDB 的世界中&#xff0c;_id 字段和 ObjectId 是每个开发者都必须理解的核心概念。作为 MongoDB 文档的唯一标识符&#xff0c;它们不仅影响着数据库的设计&#xff0c;也直接关系到应用的性能和扩展性。本文将全面剖析 _id 和 ObjectId 的工作原理、实际应用场景以及最…...

C++内存复制

C内存复制 方法1 g_savedPoints.resize(pResult->contourData.contourPointCount);//方法1std::copy(pResult->contourData.pointArray, pResult->contourData.pointArray pResult->contourData.contourPointCount, g_savedPoints.begin());方法2 g_savedPoints.r…...

【notepad++如何设置成中文界面呢?】

“Notepad”是一款非常强大的文本编辑软件&#xff0c;将其界面设置成中文的方法如下&#xff1a; 一、工具&#xff0f;原料&#xff1a; 华为 Matebook 15、Windows 10、Notepad 8.4.6。 二 、具体步骤&#xff1a; 1、找到任意一个文本文件&#xff0c;比如 txt 格式的文…...

当AI遇上科研:北大“科学导航”重塑学术探索全流程

在人工智能技术迅猛发展的当下&#xff0c;一场悄然发生的变革&#xff0c;正在改变我们“做科研”的方式。近日&#xff0c;北京大学科学智能研究院联合深势科技&#xff0c;正式上线一款面向科研人员的一体化AI平台——Science Navigator&#xff08;科学导航&#xff09;。这…...

大模型在闭合性胫骨平台骨折诊疗全流程中的应用研究报告

目录 一、引言 1.1 研究背景与目的 1.2 国内外研究现状 1.3 研究方法与创新点 二、大模型预测原理及数据基础 2.1 大模型概述 2.2 数据收集与处理 2.3 模型训练与优化 三、术前预测与方案制定 3.1 骨折类型及损伤程度预测 3.2 手术时机评估 3.3 手术方案制定 3.4 …...

PHP学习笔记(八)

目录 返回值 return的使用 多值返回的替代方案 可变函数 内部&#xff08;内置&#xff09;函数 匿名函数 静态匿名函数 返回值 值通过可选参数的返回语句返回 return的使用 函数不能返回多个值&#xff0c;但可以通过返回一个数组来得到类似的效果 函数返回一个引用&am…...

C#中WSDL文件引用问题

工作中碰到一个单点登录的需求&#xff0c;因为这个需求同事别的系统已经做过&#xff0c;我这边只需要把代码迁移过来即可&#xff0c;但是迁移过程中发现引用WSDL文件后&#xff0c;方法报错的问题&#xff0c;各种排查代码之后未解决&#xff0c;最终发现是WSDL文件引用的问…...

Ubuntu 22.04上升级Node.js版本

在Ubuntu 22.04上升级Node.js版本有几种方法&#xff0c;推荐使用NVM&#xff08;Node Version Manager&#xff09;&#xff0c;因为它可以让你轻松管理多个Node.js版本。 方法1: 使用NVM&#xff08;推荐&#xff09; 1. 安装NVM # 下载并安装NVM curl -o- https://raw.gi…...

养生新策:五维开启健康生活

一、饮食&#xff1a;天然食材&#xff0c;科学配比 以 “原型食物” 为主&#xff0c;减少加工食品摄入。早餐用鹰嘴豆泥涂抹全麦面包&#xff0c;搭配水煮蛋和一小把蓝莓&#xff0c;兼顾蛋白质与抗氧化物质&#xff1b;午餐选择藜麦饭&#xff0c;配上香煎鸡胸肉和蒜蓉空心…...

生成对抗网络(GAN)原理

生成对抗网络&#xff08;GAN&#xff09;原理 介绍示例代码一、GAN 的基本结构1. 生成器&#xff08;Generator&#xff0c;记作 G&#xff09;2. 判别器&#xff08;Discriminator&#xff0c;记作 D&#xff09; 二、对抗过程&#xff08;博弈思想&#xff09;三、训练过程四…...

【SpringBoot实战指南】使用 Spring Cache

文章目录 一、Spring Cache简介核心特点&#xff1a; 二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案1&#xff1a;通过 yml 配置文件方案2&#xff1a;自定义 Bean 三、 缓存注解使用示例1.Cacheable - 数据查询缓存2.CachePut - 更新数据并缓存3.CacheEvict - 删除缓…...

centos8 配置网桥,并禁止kvm默认网桥

环境背景&#xff1a; 我使用vmware部署了一台kvm服务器&#xff0c;网络模式是nat。我想要kvm创建的虚拟机可以访问公网&#xff1b;所以kvm默认的地址不行&#xff0c;我必须使用nat地址才可以&#xff1b; 实现方式&#xff1a; 创建一个网桥&#xff0c;将本地的网络接口…...

C++:list容器,deque容器

list容器&#xff1a;双向链表容器&#xff0c;底层是双向链表。 简单使用如下&#xff1a; #include<iostream> #include<list> using namespace std;int main() {list<int> lst;lst.push_back(1);lst.push_back(2);lst.push_back(3);lst.push_front(4);l…...

【Node.js】全栈开发实践

个人主页&#xff1a;Guiat 归属专栏&#xff1a;node.js 文章目录 1. Node.js 全栈开发概述1.1 全栈开发的优势1.2 Node.js 全栈开发技术栈 2. 开发环境搭建2.1 Node.js 和 npm 安装2.2 开发工具安装2.3 版本控制设置2.4 项目初始化流程 3. 后端开发 (Node.js)3.1 Express 框架…...

自定义类型-联合体

概念 联合体是一种特殊的数据类型&#xff0c;允许在相同的内存位置存储不同的数据类型 联合体的所有成员共享同一块内存空间&#xff0c;大小由最大的成员决定 用于在同一块内存单元内存放不同类型的变量 语法结构 结构与结构体类似&#xff0c; union 共用体名 {成员列…...

Qt项目开发中所遇

讲述下面代码所表示的含义&#xff1a; QWidget widget_19 new QWidget(); QVBoxLayout *touchAreaLayout new QVBoxLayout(widget_19);QWidget *buttonArea new QWidget(widget_19); 1、新建一个名为widget_19的QWidget&#xff0c;将给其应用垂直管路布局。 2、新建一个…...

ubuntu sh安装包的安装方式

ubuntu sh安装包的安装方式以Miniconda2为例 https://repo.anaconda.com/miniconda/ 如果需要python2.7版本可下载以下版本 Miniconda2-latest-Linux-x86_64.sh 打开终端输入安装命令 sudo sh Miniconda2-latest-Linux-x86_64.sh 然后按提示安装&#xff0c;注意安装位置 …...

Redis语法大全

一、String&#xff08;字符串&#xff09; 特点&#xff1a;单键值存储&#xff0c;值可为字符串、数字&#xff0c;支持原子操作。 常用命令 SET 语法&#xff1a;SET key value [EX seconds] [PX milliseconds] [NX|XX]说明&#xff1a;设置键值对&#xff0c;可指定过期时…...

OpenAI宣布:核心API支持MCP,助力智能体开发

今天凌晨&#xff0c;OpenAI全资收购io的消息成为头条。同时&#xff0c;OpenAI还宣布其核心API——Responses API支持MCP服务。过去&#xff0c;开发智能体需通过函数调用与外部服务交互&#xff0c;过程复杂且延迟高。而今&#xff0c;Responses API支持MCP后&#xff0c;开发…...

我的爬虫夜未眠:一场与IP限流的攻防战

深夜的办公室里&#xff0c;键盘声此起彼伏&#xff0c;屏幕的蓝光映在程序员的脸上。我揉了揉酸胀的眼睛&#xff0c;第8次刷新日志页面——依旧是刺眼的“429 Too Many Requests”&#xff08;请求过多&#xff09;。这是本月第三次因为IP被目标网站封禁而被迫中断爬虫任务了…...

git:The following paths are ignored by one of your

遇到错误&#xff1a; The following paths are ignored by one of your .gitignore files: www hint: Use -f if you really want to add them. 说明&#xff1a;Git 拒绝添加 www/html/index.php&#xff0c;因为你的 .gitignore 中忽略了整个 www/ 目录&#xff08;即 ww…...

算法--js--组合总和

题&#xff1a;给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复…...

微服务中的 AKF 拆分原则:构建可扩展系统的核心方法论

在数字化浪潮的推动下&#xff0c;互联网应用规模呈指数级增长&#xff0c;传统单体架构逐渐暴露出难以扩展、维护成本高等问题&#xff0c;微服务架构应运而生并成为企业应对复杂业务场景的主流选择。然而&#xff0c;随着业务的不断扩张和用户量的持续增加&#xff0c;如何确…...

vue element-plus 集成多语言

main.js中 // 引入i18n import i18n from /i18n/index 使用i18 app.use(i18n) 在App.vue中 <template><el-config-provider :locale"locale" namespace"el" size"small"><router-view /></el-config-provider> </tem…...