轻量化尝试——剪枝

0 写在前面

yolo系列最近出了好多版本(YOLOv6和YOLOv7)的模型,趋势都是向轻量化靠近,可以看出轻量化是近期研究的一个重点和热点。

1 Summary of yolov5`s lightweight experiment

1.1 Ablation Experiment

Metrics:

1.2 Step

  • environment:pip install ==3.20.1
  • Step1:row trainning->best.pt
  • Step2:Adjust BN sparse value and compare to row model
  • Step3: put the Step2 result(last.pt) into prune.py (Attention: prune rate)
  • Attention:fp32、fp16
  • Finetune

2 Pruning Theory

2.1 神经网络压缩

  • 量化
  • 分解
  • 蒸馏
  • 剪枝

2.2 神经网络成本

参数数量和Flops

2.3 Prune

非结构剪枝
置零: 在参数张量中用零替换他们的权重值
缺点: 大多数框架和硬件无法加速稀疏矩阵
结构化剪枝
去除卷积滤波器和内核行。
过滤器修剪允许使用可利用但足够精细的细粒度。移除这样的结构——

  1. 导致稀疏层实例化为更薄的层
  2. 清除其他过滤器输出的feature map

缺点: 改变层的输入和输出维度会导致一些差异

Prune 标准

修剪绝对值(幅度)最小的权重

  • 根据过滤器范数对过滤器进行排序
  • 不需要计算这些参数的组合范数下,在需要修剪的每组图层后为每个feature map插入一个可学习的乘法参数。

Prune 方法:

  1. 训练、修剪和微调
    训练网络
    通过将修剪结构和标准所针对的所有参数设置为零来修剪
    用最低的学习率训练网络几个额外时期,从性能损失中恢复

  2. 初始化时修剪

  3. 稀疏训练

你可能感兴趣的:(剪枝,机器学习,人工智能)