本文将介绍卷积裁剪原理,以及3种卷积裁剪方式,分别为
- L1NormFilterPruner
- L2NormFilterPruner
- FPGMFilterPruner
L1NormFilterPruner和L2NormFilterPruner是范数裁剪法,FPGMFilterPruner是几何中心裁剪法。
目录
一、卷积裁剪原理
上图为卷积裁剪的示意图,输入维度(Channels, height, weight)是 ,输出维度是,卷积核维度是,上图中的kernel matrix中的小框代表[kernel_size,kernel_size]个参数。
假设要裁剪20%的输出通道,那么卷积核变为,那么输出变为。
注意:当的维度变化的时候,为了使的维度不变,那么对应的卷积和维度也要改变,由变为。
二、L1Norm裁剪
使用范数裁剪滤波器的想法很简单:如果滤波器的范数很小,那么它对应的特征图接近于0,在网络中的重要性就非常小。
L1Norm裁剪PaddleSlim实现传送门,L1Norm直接计算各滤波器的L1范数,根据范数大小来决定裁剪哪个滤波器,如下左图,第二个滤波器L1范数最小,所以裁剪第二个滤波器,同理裁剪右图的第4个滤波器。
三、L2Norm裁剪
L2Norm裁剪PaddleSlim实现传送门,L2Norm计算各滤波器的L2范数,根据范数大小来决定裁剪哪个滤波器,如下左图,第二个滤波器L2范数最小,所以裁剪第二个滤波器。
四、FPGM裁剪
论文:传送门
使用范数裁剪包含了2个隐含条件(1)范数标准差足够大;(2)最小的范数接近于0。
当滤波器的范数分布如下图所示时,使用范数裁剪就不合适。
对于左图:滤波器范数相近,具有相似的重要性,不好选择裁剪哪个。
对于右图:滤波器范数最小值远离0,对应的特征图就不为0,也不好选择裁剪哪个。
针对范数裁剪的问题,作者认为滤波器也是欧氏空间中的点,于是可以根据计算几何中位数(Geometric Median, GM)来得到这些滤波器的“中心”,也就是他们的共同性质。如果某个滤波器接近于这个GM,可以认为这个滤波器的信息跟其他滤波器重合,甚至是冗余的,于是可以去掉这个滤波器而不对网络产生大的影响。去掉它后,它的功能可以被其他滤波器代替,如下图所示。
首先给出滤波器距离计算公式,如下图:
下图为一个示例,第一个滤波器和其他滤波器的距离均值为0.369(这里仅计算了一个示例),将4个滤波器依次计算与其他滤波器的平均距离,平均距离最小的滤波器就是中位滤波器,将其裁剪掉(几何中心滤波器与其他滤波器性质重合)。
五、参考
PaddleSlim是一个专注于深度学习模型压缩的工具库,提供剪裁、量化、蒸馏、和模型结构搜索等模型压缩策略,帮助用户快速实现模型的小型化。