Hrank模型剪枝

HRank: Filter Pruning using High-Rank Feature Map

概述

这篇文章非常简单,直接使用每层的 f e a t u r e feature feature 结果去判断 f i l t e r − k e r n e l filter-kernel filterkernel 的重要程度:

上图展示了网络每一层的特征重要程度分布情况,如何确定重要性?
o j i ( I , : , : ) = ∑ i = 1 r σ i u i v i T = ∑ i = 1 r ′ σ i u i v i T + ∑ i = r ′ + 1 r σ i u i v i T \begin{aligned}\mathbf{o}_{j}^{i}(I,:,:) &=\sum_{i=1}^{r} \sigma_{i} \mathbf{u}_{i} \mathbf{v}_{i}^{T} \\&=\sum_{i=1}^{r^{\prime}} \sigma_{i} \mathbf{u}_{i} \mathbf{v}_{i}^{T}+\sum_{i=r^{\prime}+1}^{r} \sigma_{i} \mathbf{u}_{i} \mathbf{v}_{i}^{T}\end{aligned} oji(I,:,:)=i=1rσiuiviT=i=1rσiuiviT+i=r+1rσiuiviT
看到上述公式就明白了,就是很简单的对 f e a t u r e − m a p feature-map featuremap 进行特征分解,特征值排序获得 R a n k Rank Rank 信息。

代码中直接使用矩阵的秩代替特征值(未懂特征值约等于矩阵的秩操作

#get feature map of certain layer via hook
def get_feature_hook(self, input, output):
    global feature_result
    global entropy
    global total
    a = output.shape[0]
    b = output.shape[1]
    c = torch.tensor([torch.matrix_rank(output[i,j,:,:]).item() for i in range(a) for j in range(b)])

    c = c.view(a, -1).float()
    c = c.sum(0)
    feature_result = feature_result * total + c
    total = total + a
    feature_result = feature_result / total

代码中对于每层的剪枝率都有设置,比如下图中的GoogleLeNet,为什么每层的剪枝率都不同,这比率如何设置?

论文跑的结果效果可以,但是如果论文【18】也对不同的层设置不同的剪枝率,效果会不会不同?此论文如果设置全局剪枝率,而不是单独设置,会不会降低精度?

总结

  • 模型剪枝真的太虚了,论文作者已经证明结构剪枝在不同层设置相同比例没有任何意思,但是还有很多人用 L e a r n i n g E f f i c i e n t C o n v o l u t i o n a l N e t w o r k s t h r o u g h N e t w o r k S l i m m i n g Learning Efficient Convolutional Networks through Network Slimming LearningEfficientConvolutionalNetworksthroughNetworkSlimming 这篇早期论文。如果仅仅为了设置一个比例,和手动设置比例没有任何区别。
  • 此论文不同的层设置不同比例,这点论文没有任何说明!试想一下,使用BN在不同层设置不同剪枝比例,多调试几个参数,相比也能得到这个性能。当出现一个新模型(GhostNet)如何去剪枝呢?为啥没人去剪枝ShuffleNetV2,是因为压缩到极限了?
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值