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)准备数据集和修改配置
①准备数据集
②修改配置文件