剪枝与重参:课程总结

news2024/12/29 11:24:02

目录

  • 课程总结
    • 前言
    • 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 的稀疏方案并进行手写复现

  • 方案

      1. 训练网络
      1. 2:4 稀疏剪枝,稀疏矩阵被压缩,存储非零的数据值和对应非零元素的索引信息
      1. 重复原始的训练流程
      • 超参数与 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 网络进行重参
    concatenation
    • V:a conv for average pooling
    • VI:a conv for multi-scale convolutions

RepVGG

  • 对原始 VGG 网络进行重参
  • conv3x3+bn、conv1x1+bn、bn => conv3x3

个人总结

本次剪枝与重参课程让我对模型剪枝和模型重参数有了一个基本认识,简单来说,模型剪枝就是剪去网络中那些不重要的权重参数,而模型重参数就是将网络中的并行多分支结构在推理阶段合并为单分支结构,二者的目的都是为了减少模型的参数量,提高网络的推理速度。在学习完本次课程后,用上实践的就是YOLOv8的剪枝(毕竟是老师提供的现成方案😂),并将剪枝后的模型部署到嵌入式设备上,可以进一步提高其推理速度,对于计算能力有限的嵌入式还是十分有效的。对于剪枝和重参的一些代码实现并没有去深究,也就是照着抄了一遍,同时对原理掌握还是不够清晰,后续花时间补吧(大概率也不会去补了🤣)。

总的来说,本次课程的学习收获还是比较大的,起码对模型剪枝和模型重参的概念还是有的,同时也用上了YOLOv8的剪枝,感谢苏老师和Rocky老师!!!🤞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/483151.html

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

相关文章

设计模式之代理模式(静态代理动态代理)

目录 1、什么是代理模式 2、代理模式的结构 3、代理模式的实现 3.1 静态代理和动态代理概念 3.2 静态代理 3.3 动态搭理 3.3.1 代码实现 3.3.2 Proxy类讲解 4、动态代理VS静态代理 5、代理模式优缺点 1、什么是代理模式 由于某些原因需要给某对象提供一个代理以控制对…

【开发工具】 Adobe 2022 最详细的安装方法 就是这么简单 绿色 安全方便

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

vulnhub靶场之Black-Widow-final

1.信息收集 探测存活主机,发现192.168.239.177存活 对目标主机192.168.239.177进行端口扫描,发现存活22、80、111、2049、3128等端口 在浏览器中访问http://192.168.239.177,并查看源码,未发现有用的信息 对http://192.168.23…

【openGauss实战11】性能报告WDR深度解读

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

c++题库练习

19. 以下叙述中正确的是() A 使用typedef说明新类型名时,其格式是: typedef 新类型名 原类型名; B 在程序中,允许用typedef来说明一种新的类型名 C 使用typedef 说明新类型名时,后面不能加分号 D 在使用typ…

three.js学习 06 - 结合GSAP(补间动画)设置各种动画效果(运动效果与双击暂停动画等效果)

1. GSAP简介 GSAP👍🏼是前端业内非常有名的一个动效库,有大量的优秀的网站都在使用它。它不仅能在原生JS的环境下使用,也能配合各种当前流行的框架进行使用。 通过使用它,非常多原本实现起来很有难度的交互动画效果&a…

计算机必读基础书籍

计算机必读数据 一:故事背景1.1 前言1.2 提示 二:计算机组成2.1 是什么2.2 有什么2.2.1 计算机系统概述2.2.2 数据信息的表示2.2.3 运算方法与运算器2.2.4 存储系统2.2.5 指令系统2.2.6 中央处理器2.2.7 指令流水线2.2.8 总线系统2.2.9 输入输出 2.3 思维…

[MAY DAY]五一综合训练 之——最值问题

文章目录 > **## * 要赋值 !!!!!!! *** %#¥#%#*&!!!!要赋值一、双指针求最大连续和双指针算法分析: 注意&#xff…

Java学习笔记-03

目录 类与对象 类class 对象 修饰符private this关键字 构造函数 继承 权限修饰符 包package 状态修饰符final 类与对象 类 类是对现实生活中一类事物的抽象,里面包含了这类事物共有的属性(名词)和行为(动词)例如人类,人就是一个大类&#xff…

大规模MIMO系统中基于CSI的卷积神经网络定位

来源:投稿 作者:小灰灰 编辑:学姐 论文标题:CSI-based Positioning in Massive MIMO systems using Convolutional Neural Networks 摘要 研究了使用大规模MIMO(MaMIMO)系统的信道状态信息(CS…

mysql 基础操作命令集

目录 目录 数据库操作 查看库命令 使用某个库(可以不用分号 ;) 查看库下所有的表 显示一个表下的所有字段和类型 查看一个表的建表语句 查看表的内容 创建新数据库 创建新表,设定表的字段 插入一行数据 某字段更改数据…

OSI七层模型及各层功能概述

1.OSI的基本概念及原则 OSI是Open System Interconnect的缩写,意为开放式系统互联。其各个层次的划分遵循下列原则: (1)同一层中的各网络节点都有相同的层次结构,具有同样的功能。(2)同一节点…

运营商大数据是什么,是如何实现精准获客的

近年来,运营商大数据在市场之上发展迅速,各行各业的公司都在利用运营商大数据获取更加精准有效的企业信息和客户资源。例如,当企业在进行精准营销的过程之中,可以根据线索和条件快速获得更准确的客户名单,而不像传统的…

定时任务方案实现与对比

定时任务分类 定时任务分为分布式定时任务和单机定时任务两个大的方向,他们的适用场景不同。 单机定时任务在单台计算机上运行,其执行结果和单台机器上的数据有关,如对本地机器的缓存做核对、清理日志等。它的 优点 是简单易用,无…

玩着3dmax把Python学了-01

3ds Max 2022以前的版本要借助Python的api来实现Python编程达到编辑绘图脚本的功能,但是好消息来了,3ds Max 2022 起,MaxPlus 不再作为 3ds Max 的 Python API 包含在内。而是3ds Max 将 Python 3.7 的标准版本包涵其中了,位于 [3…

MySQL监控告警及可视化:Zabbix+Percona PMP实现(Part II)

MySQL监控告警及可视化:ZabbixPercona PMP实现(Part II) PMP插件安装PMP监控脚本配置Web界面导入PMP模板 服务器清单如下: 服务器IP配置OS版本服务器角色172.16.175.x4c8gCentOS 7.7MySQL Server172.16.175.y4c8gCentOS 7.7Zabbi…

Python——基于YOLOV8的车牌识别(源码+教程)

目录 一、前言 二 、完成效果 三、 项目包 四、运行项目 (教程) 一、前言 YOLOv8LPRNet车牌定位与识别https://www.bilibili.com/video/BV1vk4y1E7MZ/ 最近做了有一个车牌识别的小需求,今天完成了,在此记录和分享 首先&#x…

NECCS|全国大学生英语竞赛C类|听力|短篇新闻|听写填空|16:40~17:10+17:30~18:10

目录 一、听写填空 1. 题型 2. 技巧 (1)利用间隙 浏览全文 积极预测 (2)边听边记 (3)注重检查 二、短篇新闻 1. 试题解读 2. 解题技巧 (1)预测要点,有的放矢 …

【五一创作】机械臂速成小指南(二十四):逆运动学的雅可比方法

👨‍🏫🥰🥳需要机械臂相关资源的同学可以在评论区中留言哦🤖😽🦄 指南目录📖: 🎉🎉机械臂速成小指南(零点五)&#xff…

Redis消息队列

消息队列(Message Queue),字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色: 消息队列:存储和管理消息,也被称为消息代理(Message Broker) 生产者:发送消…