剪枝与重参:课程总结
目录
- 课程总结
- 前言
- 1. 基础快速入门
- 2. 基于VGG的模型剪枝
- 3. 英伟达2-4剪枝方案
- 4. YOLOv8剪枝
- 5. ACNet、DBB、RepVGG重参
- 个人总结
课程总结
前言
手写AI推出的全新模型剪枝与重参课程。记录下个人学习笔记,仅供自己参考。
本次课程主要是课程总结,对之前学习的知识的一个复习。
课程大纲可看下面的思维导图
1. 基础快速入门
在这部分主要是对剪枝有个基本认识
非结构化剪枝
- 每个卷积核的所有权重都被看做一个整体,不按照某种固定结构裁剪,而是根据某些规则
- 细粒度剪枝
- 按比例裁剪卷积层的权重(求取threshold)
- 向量剪枝
- 将某些列和行上的参数设置为0
- 卷积核剪枝
- 计算每个 filter(即一份起司面包) 的 L2 范数,根据 L2 范数排序进行裁剪
结构化剪枝
- 考虑每个卷积核权重的内部结构核关系,不破化卷积层结构,对不同维度上的元素进行聚合
- 可分为 kernel-level、filter-level、channel-level
修剪标准
- 基于权重大小
- 根据卷积核的权重大小来决定哪些权重需要剪枝
- 基于梯度幅度
- 根据卷积核权重的梯度幅度来决定哪些权重需要剪枝
- 基于梯度核权重大小的混合标准
- 综合考虑权重大小和梯度幅度
修剪方法
- 训练后剪枝(常用)
- 训练 => 剪枝 => 微调
- paper
- 训练时剪枝
- 也称剪枝回溯,模型训练和剪枝交替进行
- paper
稀疏训练
训练过程给权重参数加上稀疏性约束(L1和L2正则化),让部分权重参数的值变为0,减少参数量
paper
2. 基于VGG的模型剪枝
这部分主要是实战,对 VGG 网络进行剪枝
- 对 BN 层的 γ \gamma γ 进行稀疏训练,得到 mask 对 Conv、BN、Linear 层进行剪枝
- paper
- 实现流程
- initial network
- Train with channel sparsity regularization
- Prunne channels with small scaling factors
- Fine-tune the pruned network
- Compact network
3. 英伟达2-4剪枝方案
在这部分主要了解 NVIDIA 的 2:4 pattern 的稀疏方案并进行手写复现
方案
- 训练网络
- 2:4 稀疏剪枝,稀疏矩阵被压缩,存储非零的数据值和对应非零元素的索引信息
- 重复原始的训练流程
- 超参数与 1 一致
- 权重初始化与 2 一致
- 保持 2 中的 0 pattern
4. YOLOv8剪枝
这部分主要是实战,对 YOLOv8 进行剪枝
- 流程
- Pretrain(非必要)
- Constrained Training
- Prune
- Finetune
- 约束训练的目的
- 使得模型更易于剪枝。在约束训练中,模型会学习到一些通道或者权重稀疏比较不重要的信息,而这些信息在剪枝过程中得到应用
- 只考虑 TopConv、BottomConv、Seq、Detect-FPN 的剪枝
5. ACNet、DBB、RepVGG重参
在这部分主要是对重参有个基本认识,以及对常见分支结构重参的实现
重参
- 网络的参数重新组织,网络训练时是并行多分支结构,网络推理时重参为单分支结构
ACNet
- 训练时 1x3+3x1+3x3 卷积,推理时 3x3 卷积
- Conv2d + BN 重参
- Conv2d的 kernel 都乘以 γ σ B 2 + ϵ \frac{\gamma}{\sqrt{\sigma_B^2 + \epsilon}} σB2+ϵ γ ,Conv2d 的 bias 都加上 − μ B σ B 2 + ϵ -\frac{\mu_B}{\sqrt{\sigma_B^2 + \epsilon}} −σB2+ϵ μB
- Conv1x3 + Conv3x1 + Conv3x3 重参
DBB
- 设计了一个类似 Inception 的模块
- 推理阶段存在 6 种变换
- I:a conv for conv-BN
- II:a conv for branch addition
- III:a conv for sequential convolutions
- IV:a conv for depth concatenation
- V:a conv for average pooling
- VI:a conv for multi-scale convolutions
RepVGG
- 对原始 VGG 网络进行重参
- conv3x3+bn、conv1x1+bn、bn => conv3x3
个人总结
本次剪枝与重参课程让我对模型剪枝和模型重参数有了一个基本认识,简单来说,模型剪枝就是剪去网络中那些不重要的权重参数,而模型重参数就是将网络中的并行多分支结构在推理阶段合并为单分支结构,二者的目的都是为了减少模型的参数量,提高网络的推理速度。在学习完本次课程后,用上实践的就是YOLOv8的剪枝(毕竟是老师提供的现成方案
剪枝与重参:课程总结相关推荐
- 剪枝与重参第二课:修剪方法和稀疏训练
目录 修剪方法和稀疏训练 前言 1.修剪方法 1.1 经典框架:训练-剪枝-微调 1.2 训练时剪枝(rewind) 1.3 removing剪枝 2.dropout and dropconnect ...
- 剪枝与重参第七课:YOLOv8剪枝
目录 YOLOv8剪枝 前言 1.Overview 2.Pretrain(option) 3.Constrained Training 4.Prune 4.1 检查BN层的bias 4.2 设置阈值和 ...
- 剪枝与重参第三课:常用剪枝工具
目录 常用剪枝工具 前言 1.torch.nn.utils.prune 1.1 API简单示例 1.2 拓展之钩子函数 2.pytorch pruning functions 3.custom pru ...
- YOLOv5-Lite:Repvgg重参化对YOLO工业落地的实验和思考
QQ交流群:993965802 本文版权属于GiantPandaCV,未经允许请勿转载 这一次的实验主要借鉴repvgg重参化的思想,将原有的3×3conv替换成Repvgg Block,为原有的YO ...
- RepVGG网络中重参化网络结构解读【附代码】
YOLOv7论文中会遇到一个词叫"重参化网络"或者"重参化卷积",YOLOV7则是用到了这种网络结构,里面参考的论文是"RepVGG: Making ...
- 大学计算机作业查重,清华大学课程作业查重
清华大学课程作业查重 清华大学是中国知名大学,今年提出了本科课程作业考核查重计划.以前,学生只需要检查毕业论文,但现在日常工作已经完成.作业组要测试和提交测试报告,大家都知道的论文需要检测和检查是可以 ...
- 大学计算机作业查重,大学生课程作业进行查重?别把“水论文”之过都抛给学生!...
让一个本科生写出高水平,不重复的论文,不现实,"水论文"这一现象不能全怪学生!(水论文即由学生或由他人代学生撰写的质量水平较低的论文.) 日前,教育部印发<关于狠抓新时代全国 ...
- CVPR 2022 | 超越RepVGG!浙大阿里提出OREPA:在线卷积重参数化
点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 转载自:集智书童 OREPA: Online Convolutional Re-parameterizati ...
- 清华开源ResRep:剪枝SOTA!用结构重参数化实现CNN无损压缩 | ICCV 2021
分享一篇我去年突发奇想做的剪枝paper,已被ICCV-2021接受. 效果是相当SOTA的:ImageNet top1-acc为76.15%的标准ResNet-50(torchvision标准模型) ...
- 课程论文会被查重吗?
在一个学期或者一门课程结束的时候,老师会提出本专业的一些课题,要求写论文.一些重点高校把课程论文当成一种锻炼,明确规定要写.目的是培养学生的研究能力,以便毕业后能写出更好的论文.大学课程论文会被查重吗 ...
最新文章
- 用SVN进行团队开发协作生命周期详解
- 下一个大计算平台? Amazon Echo 研发幕后全揭露
- asp.net的一个不错日期控件
- TSS描述符表的作用
- rabbitmq 连接报错 An unexpected connection driver error occured(亲测)
- oracle asm 配置失败,Oracle ASMLib安装与配置
- 初学者设计数据库_面向初学者的完整数据库设计课程
- 【问答集锦】减少专家依赖,自动化机器学习如何实现AI普惠?
- 系统运维安全管理办法_7.系统运维安全管理规定
- 在语雀中输入汉语拼音
- python: not found 问题的解决
- virtualbox网络配置
- 亲身经历,大龄程序员找工作,为什么这么难...
- 2022年最新个人免签易支付源码网站对接支付教程
- 腾讯云ubuntu安装桌面
- jspm汽车配件销售管理系统毕业设计(附源码、运行环境)
- Android天气预报 源代码,android天气预报源码(国家气象局的接口)
- 老毛桃一键还原软件超强发布
- 看繁华一世,三千浮生若水
- steam进不了社区错误代码-102
热门文章
- EL1008E: Property or field 'timestamp' cannot be found on object of type 'java.util.HashMap'
- LAMMPS—create_atoms详细命令解析
- DirectX12(D3D12)基础教程(十四)——使用WIC、Computer Shader显示GIF动画纹理(上)
- Linux初探 - 从概念层面认识操作系统
- Python字符串的常用方法+实例—— 调整排版
- openlldp-0.4alpha实现详解(七)——lldp_main,lldpneighbors模块
- qml自定义switch_树莓派Qt系列教程25:Dial和Switch
- 单进程+selenium模拟,爬取领导留言并整合成CSV文件
- 中国海洋大学2023夏《移动软件开发》第二次实验报告
- Git从安装到使用全面详细教程(附下载地址)