卷积神经网络压缩参数加速(一)---网络剪枝

卷积神经网络的加速主要包括两类,硬件加速和软件加速,本篇将总结一下软件加速中网络剪枝所使用的方法。

软件加速可以分为压缩结构和压缩参数两种,压缩结构就是将模型结构简化,设计结构更小、参数更小的网络后,从头开始训练,之前博文中提到的MobileNet及ShuffleNet系列网络就是模型压缩的一种。

压缩参数是在已训练完模型的基础上,对参数进行筛选、转换已达到更少参数和更小结构的结果,包括网络剪枝、低秩估计、参数量化和模型蒸馏等。前面有博文提到了旷视科技在2017年提出的通道裁剪剪枝的一篇论文。

网络剪枝

在常用的深度学习框架中,通常将多维张量转换为矩阵乘法来实现卷积操作,而网络剪枝就是基于矩阵乘法来做的。

Tensorflow中的张量转换为矩阵[N,H,W,C]分别代表batch size,输入特征图高度,输入特征图宽度,通道数。

设输入特征图为4*4大小,卷积核大小为3*3,通道数为2,步长为1:

通道1:

卷积神经网络压缩参数加速(一)---网络剪枝_第1张图片

通道2:

卷积神经网络压缩参数加速(一)---网络剪枝_第2张图片

Tensorflow中先将张量转换为矩阵,将卷积运算转换为(H_{out}*W_{out})*(K_{H}*K_{W}*C_{in})(K_{H}*K_{W}*C_{in})*C_{out}的矩阵乘法。[N, H, W, C]中,首先优先顺序为[C, W, H, N]。

因此,输入特征图转换的矩阵根据第一步卷积操作:

卷积神经网络压缩参数加速(一)---网络剪枝_第3张图片卷积神经网络压缩参数加速(一)---网络剪枝_第4张图片

可以转换为:

batch中每一个样本都是连接在这个矩阵下面的。

下图从左到右分别为输入矩阵,卷积核矩阵和输出矩阵,蓝色的行与蓝色的列生成蓝色的单元。

卷积神经网络压缩参数加速(一)---网络剪枝_第5张图片

以上卷积操作转矩阵乘法是网络剪枝的基础,我们可以看到,参数剪枝,是有规律可寻的。

1. filter level and channel level pruning

删除一个卷积核,等于删除第二个矩阵的一列,也就删除了第三个矩阵的一列,即输出通道数减少,相应的下层中的卷积核的通道数也减少了。

相反的,删除卷积核中的通道,相对应的输入特征图的通道就不会再对结果产生影响,同时生成输入该特征图通道的卷积核也可以删除。

2. group level

(1)对卷积核宽高进行裁剪,例如3*3的卷积核裁剪为2*3的卷积核,等同于同时删除卷积核的若干行和特征图的若干行。

(2)对卷积核中某些固定位置进行删减。

3. 稀疏矩阵

将无用参数设置为0,使矩阵稀疏,达到压缩加速的效果。

 

低秩估计:卷积神经网络压缩参数加速(二)---低秩估计

你可能感兴趣的:(深度学习,计算机视觉)