【模型剪枝1】结构化剪枝论文学习笔记

一、背景

        工作当中用到的模型不少,也遇到过对实时性要求比较高的场景,尽管对模型量化之后部署到边缘设备上,借助 NPU 实现推理加速的方式基本满足需求,但 Rockchip 官方支持量化的模型相对还是较少,如果使用模型库之外的模型可能就需要自己写量化过程,实现起来比较困难,一定程度上限制了模型选择。模型剪枝作为一种模型加速的方法,使用范围也很广泛,而且能够跟微调过程结合进行多次迭代优化,优化过程更加可控友好。最近有时间来学习一下模型剪枝,本文主要记录一下学习的几篇剪枝论文。这里介绍的几种剪枝方法都属于结构化剪枝,根据不同的评价标准确定不重要的卷积层,对这些不重要的卷积层剪枝。

二、L1-Norm based Filter Pruner

Paper: Pruning Filters for Efficient ConvNets

1. 核心思想

        对网络中耦合层之间的 filters 计算重要性分数,对分数前 m 小的 filters 进行剪枝,这些 filters 对应输出的特征图也会被移除,同时,以该特征图作为输入的下一层中对应位置的 filters 也会被相应剪枝。反映到网络结构上就是每个卷积层的输入输出通道被剪枝。

示意图

\mathbf{x}_i\in \mathbb{R}^{n_i\times h_i\times w_i}, \mathbf{x}_{i+1}\in \mathbb{R}^{n_{i+1}\times h_{i+1}\times w_{i+1}} 分别表示第 i 个卷积层的输入和输出特征图组,\mathbf{x}_{i+1} 由 n_{i+1} 个 3D filters \mathcal{F}_{i,j}\in \mathbb{R}^{n_i\times k\times k} 与 \mathbf{x}_i 卷积生成,而每一个 \mathcal{F}_{i,j} 又是由 n_i 个2D 卷积核 \mathcal{K}\in \mathbb{R}^{k\times k} (这个就是通常所说的卷积核)组成的,所有 n_i\times n_{i+1} 个 \mathcal{K} 拼在一块,就是一个 4D 核矩阵(kernel matrix)\mathcal{F}_i\in \mathbb{R}^{n_i\times n_{i+1}\times k\times k}\mathbf{x}_{i+1} 的第 j 个特征图 \mathbf{x}_{i+1,j} 由 \mathcal{F}_i 中的第 j 个 3D filter \mathcal{F}_{i,j} 与 \mathbf{x}_i 卷积生成。

2. 基本剪枝策略

        首先剪枝的基本单位是 \mathcal{F}_{i,j},重要性分数 s_j 就是 \mathcal{F}_{i,j} 的 L1 范数 \left \| \mathcal{F}_{i,j}\right \|_1s_j 的大小代表输出特征图的重要程度,我们剪掉的就是本层这些得分低的 \mathcal{F}_{i,j} 及其对应生成的特征图,以及下一层对应的 filter(上图中第二个 kernel matrix 的蓝色部分)。

  1. 对每一个 filter,计算其权重绝对值 s_j=\sum_{l=1}^{n_i}\sum_{}^{}\left | \mathcal{K}_l \right |
  2. 根据 s_j 对 filters 排序;
  3. 剪掉前 m 个 filters 及其对应的特征图,下一个卷积层中与剪掉的特征图对应的 filter 一并剪掉;
  4. 生成新的第 i 层和 i+1 层的 kernel matrix,把余下的权重复制到新模型中。

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值