一、背景
工作当中用到的模型不少,也遇到过对实时性要求比较高的场景,尽管对模型量化之后部署到边缘设备上,借助 NPU 实现推理加速的方式基本满足需求,但 Rockchip 官方支持量化的模型相对还是较少,如果使用模型库之外的模型可能就需要自己写量化过程,实现起来比较困难,一定程度上限制了模型选择。模型剪枝作为一种模型加速的方法,使用范围也很广泛,而且能够跟微调过程结合进行多次迭代优化,优化过程更加可控友好。最近有时间来学习一下模型剪枝,本文主要记录一下学习的几篇剪枝论文。这里介绍的几种剪枝方法都属于结构化剪枝,根据不同的评价标准确定不重要的卷积层,对这些不重要的卷积层剪枝。
二、L1-Norm based Filter Pruner
Paper: Pruning Filters for Efficient ConvNets
1. 核心思想
对网络中耦合层之间的 filters 计算重要性分数,对分数前 小的 filters 进行剪枝,这些 filters 对应输出的特征图也会被移除,同时,以该特征图作为输入的下一层中对应位置的 filters 也会被相应剪枝。反映到网络结构上就是每个卷积层的输入输出通道被剪枝。
,
分别表示第
个卷积层的输入和输出特征图组,
由
个 3D filters
与
卷积生成,而每一个
又是由
个2D 卷积核
(这个就是通常所说的卷积核)组成的,所有
个
拼在一块,就是一个 4D 核矩阵(kernel matrix)
。
的第
个特征图
由
中的第
个 3D filter
与
卷积生成。
2. 基本剪枝策略
首先剪枝的基本单位是 ,重要性分数
就是
的 L1 范数
,
的大小代表输出特征图的重要程度,我们剪掉的就是本层这些得分低的
及其对应生成的特征图,以及下一层对应的 filter(上图中第二个 kernel matrix 的蓝色部分)。
- 对每一个 filter,计算其权重绝对值
;
- 根据
对 filters 排序;
- 剪掉前
个 filters 及其对应的特征图,下一个卷积层中与剪掉的特征图对应的 filter 一并剪掉;
- 生成新的第
层和
层的 kernel matrix,把余下的权重复制到新模型中。

最低0.47元/天 解锁文章
1569

被折叠的 条评论
为什么被折叠?



