深度学习模型压缩-卷积裁剪

本文将介绍卷积裁剪原理,以及3种卷积裁剪方式,分别为

  • L1NormFilterPruner
  • L2NormFilterPruner
  • FPGMFilterPruner

L1NormFilterPruner和L2NormFilterPruner是范数裁剪法,FPGMFilterPruner是几何中心裁剪法。

目录

一、卷积裁剪原理

二、L1Norm裁剪

 三、L2Norm裁剪

 四、FPGM裁剪

五、参考 


一、卷积裁剪原理

深度学习模型压缩-卷积裁剪_第1张图片

上图为卷积裁剪的示意图,输入维度(Channels, height, weight)是X_{i}=[n_{i}, h_{i}, w_{i}] ,输出维度是X_{i+1}=[n_{i+1},h_{i+1},w_{i+1}],卷积核维度是Filter_{i,i+1}=[n_{i},n_{i+1},kernel\_size,kernel\_size],上图中的kernel matrix中的小框代表[kernel_size,kernel_size]个参数。

假设要裁剪20%的输出通道,那么卷积核变为Filter_{i,i+1}=[n_{i},0.8*n_{i+1},kernel\_size,kernel\_size],那么输出变为X_{i+1}=[0.8*n_{i+1},h_{i+1},w_{i+1}]

注意:X_{i+1}的维度变化的时候,为了使X_{i+2}的维度不变,那么对应的卷积和维度也要改变,由Filter_{i+1,i+2}=[n_{i+1},n_{i+2},kernel\_size,kernel\_size]变为Filter_{i+1,i+2}=[0.8*n_{i+1},n_{i+2},kernel\_size,kernel\_size]

二、L1Norm裁剪

使用范数裁剪滤波器的想法很简单:如果滤波器的范数很小,那么它对应的特征图接近于0,在网络中的重要性就非常小。

L1Norm裁剪PaddleSlim实现传送门,L1Norm直接计算各滤波器的L1范数,根据范数大小来决定裁剪哪个滤波器,如下左图,第二个滤波器L1范数最小,所以裁剪第二个滤波器,同理裁剪右图的第4个滤波器。

深度学习模型压缩-卷积裁剪_第2张图片

 三、L2Norm裁剪

L2Norm裁剪PaddleSlim实现传送门,L2Norm计算各滤波器的L2范数,根据范数大小来决定裁剪哪个滤波器,如下左图,第二个滤波器L2范数最小,所以裁剪第二个滤波器。

L2=\sqrt{\sum_{i=0}^{n}|w_{i}|^{2}}

深度学习模型压缩-卷积裁剪_第3张图片

 四、FPGM裁剪

论文:传送门

作者知乎回答

PaddleSlim实现传送门

使用范数裁剪包含了2个隐含条件(1)范数标准差足够大;(2)最小的范数接近于0。

当滤波器的范数分布如下图所示时,使用范数裁剪就不合适。

对于左图:滤波器范数相近,具有相似的重要性,不好选择裁剪哪个。

对于右图:滤波器范数最小值远离0,对应的特征图就不为0,也不好选择裁剪哪个。

深度学习模型压缩-卷积裁剪_第4张图片

 针对范数裁剪的问题,作者认为滤波器也是欧氏空间中的点,于是可以根据计算几何中位数(Geometric Median, GM)来得到这些滤波器的“中心”,也就是他们的共同性质。如果某个滤波器接近于这个GM,可以认为这个滤波器的信息跟其他滤波器重合,甚至是冗余的,于是可以去掉这个滤波器而不对网络产生大的影响。去掉它后,它的功能可以被其他滤波器代替,如下图所示。

深度学习模型压缩-卷积裁剪_第5张图片

首先给出滤波器距离计算公式,如下图:

深度学习模型压缩-卷积裁剪_第6张图片

下图为一个示例,第一个滤波器和其他滤波器的距离均值为0.369(这里仅计算了一个示例),将4个滤波器依次计算与其他滤波器的平均距离,平均距离最小的滤波器就是中位滤波器,将其裁剪掉(几何中心滤波器与其他滤波器性质重合)。

深度学习模型压缩-卷积裁剪_第7张图片

五、参考 

PaddleSlim是一个专注于深度学习模型压缩的工具库,提供剪裁、量化、蒸馏、和模型结构搜索等模型压缩策略,帮助用户快速实现模型的小型化。

你可能感兴趣的:(深度学习,模型压缩,神经网络,cnn,剪枝)