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

news2025/5/23 6:01:10

文章目录

    • 一、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.coloradmin.cn/o/2383670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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…

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

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

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

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

【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;。这…

PHP学习笔记(八)

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

C#中WSDL文件引用问题

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

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

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

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

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

【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 框架…

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;注意安装位置 …

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

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

微服务中的 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…

如何测试JWT的安全性:全面防御JSON Web Token的安全漏洞

在当今的Web应用安全领域&#xff0c;JSON Web Token(JWT)已成为身份认证的主流方案&#xff0c;但OWASP统计显示&#xff0c;错误配置的JWT导致的安全事件占比高达42%。本文将系统性地介绍JWT安全测试的方法论&#xff0c;通过真实案例剖析典型漏洞&#xff0c;帮助我们构建全…

车载网关策略 --- 车载网关重置前的请求转发机制

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

EtpBot:安卓自动化脚本开发神器

EtpBot 是什么&#xff1f; EtpBot是一款专为安卓设备设计的自动化脚本开发工具&#xff0c;支持用户通过编写脚本实现自动化操作。该模块提供了丰富的API接口&#xff0c;涵盖点击、滑动、输入、截图等常见操作&#xff0c;帮助开发者快速构建自动化任务。ETPBot支持多设备并行…

连锁企业管理系统对门店运营的促进作用

连锁企业管理系统通过整合数字化工具与流程优化&#xff0c;能从多维度提升门店运营效率与竞争力&#xff0c;以下是其对门店运营的具体促进作用&#xff1a; 一、数据化管理&#xff1a;精准决策与运营监控 实时数据同步与分析 系统可整合各门店销售数据、库存信息、客流统计…