剪枝与重参:课程总结

课程总结

前言

手写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 网络进行重参
  • conv3x3+bn、conv1x1+bn、bn => conv3x3

个人总结

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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱听歌的周童鞋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值