1. 概述
CNN网络经被在众多方面展现了其成功,但是随之而来的是巨大的计算量与参数存储空间。这篇论文中给出一种剪除卷积滤波器的方法(确实会影响精度),但是移除这些滤波器与其对应的feature map之后确实带来计算量的降低,而且并不会导致连接的稀疏,从而就并不需要支持稀疏的卷积库,可以使用现有的BLAS库。在实验中减少了VGG-16中34%和ResNet-110中38%的计算量,并且通过重新训练获得了与原网络近似的精度。
然而,单纯剪裁参数量并不是减少计算时间的必要条件(分类网络),因为分类网络诸如VGG-16中90%的参数是在全连接层,但是却只有1%不到的浮点运算。实际上卷积层也是能被压缩和加速的,但是需要稀疏的BLAS库,甚至特定的硬件。参数总量可以使用average pooling减少,卷积层的运算量可以通过在网络初始阶段下采样来减小,然而,网络越来越深,卷积层中的计算量占据了计算量的主要部分。
那么通过移除卷积中多余的滤波器也能够加速网络,这是一种naturally structured way。这样的方法实现重新训练,此外这里使用one-hot的键值重新练策略而不是layer-wise的方法,这样可以加速重新训练的时间。
2. Channel Pruning
2.1 单个layer的pruning
这里使用 n i n_i ni表示第 i i i个卷积层的输入通道数, ( h i , w i ) (h_i,w_i) (hi,wi)是输入feature map的宽高。当前卷积层将输入feature map(维度 x i ∈ R n i ∗ h i ∗ w i x_i \in R^{n_i*h_i*w_i} xi∈Rni∗hi∗wi)转换到feature map输出 x i + 1 x_{i+1}