结构化剪枝 之 L1 剪卷积核 笔记

发布时间 2023-09-22 17:45:22作者: cold_moon

论文:https://arxiv.org/pdf/1608.08710.pdf

摘要

CNN 在各种应用中的成功伴随着计算和参数存储成本的显著增加。最近减少这些开销的努力包括在不损害原始精度的情况下修剪和压缩各个层的权重。然而,基于大小的权值修剪减少了完全连接层的大量参数,并且由于修剪后的网络中的不规则稀疏性,可能无法充分降低卷积层中的计算成本。我们提出了一种cnn的加速方法,我们从cnn中修剪那些被认为对输出精度影响很小的滤波器。通过去除网络中的整个过滤器及其连接的特征映射,大大降低了计算成本。与修剪权重相反,这种方法不会产生稀疏的连接模式。因此,它不需要稀疏卷积库的支持,可以使用现有的高效BLAS库进行密集矩阵乘法。我们表明,即使是简单的过滤器修剪技术也可以在CIFAR10上将VGG-16的推理成本降低高达34%,将ResNet-110的推理成本降低高达38%,同时通过重新训练网络恢复接近原始精度。

剪枝过程:

  1. 对于每个卷积核,假设有 m 个卷积核,每个卷积核的维度为 n*k*k ,n 为上一层特征图的通道数,k 为卷积核的大小,把 n 个 k*k 个数分别求绝对值,然后加起来。所以每个卷积核都得到一个 正数。

  2. 对这 m 个卷积核的值进行排序

  3. 删除,假设删除 a 个卷积核:

    • 最小的 a 个卷积核
    • 通过这些删除的 a 个卷积核得到的 a个 特征图也需要删除
    • 下一层的卷积核的 对应的那些通道
  4. 创建新的卷积核,当前层的卷积核和下一层的卷积核,里面的值是由 原来的 copy 过来的。

  5. 微调新的模型

基于卷积核的权值去修建 weight 的缺点:

  • 阈值不好卡,不知道剪了多少
  • 稀疏的卷积核很难加速