阅读笔记——HRank: Filter Pruning using High-Rank Feature Map

目录

  • 概述
  • 方法
  • 实验和指标
  • 可能的问题

概述

这篇通道裁剪论文同样提到,对于权重裁剪在特定硬件上可以获得加速,但是通用性不够。相对的,通道裁剪就没有这样的问题。因此文章聚焦于通道裁剪达到模型压缩(降低参数量)和加速(减少计算 FLOPs)的效果。

同时文章将通道裁剪方法分为两类:

  • 一类是基于 CNN 网络内在性质做裁剪,这类裁剪方法不需要修改网络损失,在裁剪后,通过 finetune 恢复模型性能;
  • 另一类是自适应重要性排序方法,与前面方法不同的是,这类方法将裁剪方法集成到网络训练损失,然后联合优化一个自适应的裁剪决策。

如果下图所示,提出的方法属于第一类方法,不需要修改训练函数损失,更加直接方便。
阅读笔记——HRank: Filter Pruning using High-Rank Feature Map_第1张图片

方法

方法将特征图分为高秩部分和低秩部分,认为低秩部分包含更少的信息,可以进行裁剪。

因此首先需要计算特征图中各通道秩的情况。对于一个训练好的网络,输入一批图片,然后进行秩的计算。

论文首先证明了,如下图所示,不管输入图片数量多少,各层计算出的秩基本上保持稳定,使得可以在不用输入太多图片的情况下完成秩的估算。在实验中作者最终设置图片数量 g = 500 g=500 g=500
阅读笔记——HRank: Filter Pruning using High-Rank Feature Map_第2张图片
在计算出每个通道的秩之后,整个裁剪流程就相对简单了:

  1. 计算特征图平均秩;
  2. 对秩值按从高到低排序;
  3. 找到高秩值对应的特征通道,裁剪低秩值通道;
  4. 使用高秩值通道作为预训练权重,对裁剪后的模型进行 finetune 训练。

一些裁剪情况如下图所示,其中红线所指向的是发生了裁剪的卷积层:
阅读笔记——HRank: Filter Pruning using High-Rank Feature Map_第3张图片

实验和指标

方法在 Resnet、Densenet 模型的裁剪结果如下图所示。可以看到,相对于原始模型,裁剪后的模型可能精度会有提升,也可能会有降低。
阅读笔记——HRank: Filter Pruning using High-Rank Feature Map_第4张图片
阅读笔记——HRank: Filter Pruning using High-Rank Feature Map_第5张图片
另外作者还提出,在进行 finetune 时,可以冻结一部分高秩通道权重,但是权重的冻结还是影响了模型性能,如下图所示:
阅读笔记——HRank: Filter Pruning using High-Rank Feature Map_第6张图片
为了证明高秩通道确实包含更多的信息量,作者也做了一些实验。在裁剪的时候对高秩或者随机裁剪,相对于裁剪掉低秩通道,如下图所示,都造成了更多的性能损失:
阅读笔记——HRank: Filter Pruning using High-Rank Feature Map_第7张图片

可能的问题

除了方法的效果,可能还存在的一些问题就是:

  • 需要对每个层分别设置裁剪系数,但是关于系数的设置论文中似乎没有细讲;
  • 关于残差结构的裁剪细节也没有太细讲,需要去看代码实现。

你可能感兴趣的:(基础模型,深度学习,模型裁剪,剪枝,机器学习,深度学习)