基于滤波器裁剪的卷积神经网络加速算法
Convolutional neural network acceleration algorithm based on filters pruning
通讯作者:
收稿日期: 2018-12-5
Received: 2018-12-5
作者简介 About authors
李浩(1993—),男,硕士生,从事计算机视觉研究.orcid.org/0000-0001-6731-1856.E-mail:
针对卷积神经网络(CNN)模型的压缩和加速问题,提出基于滤波器裁剪的新型卷积神经网络模型加速算法. 通过计算卷积层中滤波器的标准差值衡量该滤波器的重要程度,裁剪对神经网络准确率影响较小的滤波器及对应的特征图,可以有效地降低计算成本. 与裁剪权重不同,该算法不会导致网络稀疏连接,不需要应用特殊的稀疏矩阵计算库. 基于CIFAR-10数据集的实验结果表明,该滤波器裁剪算法能够对VGG-16和ResNet-110模型加速30%以上,通过微调继承的预训练参数可以使结果接近或达到原始模型的精度.
关键词:
A new model acceleration algorithm of convolutional neural network (CNN) was proposed based on filters pruning in order to promote the compression and acceleration of the CNN model. The computational cost could be effectively reduced by calculating the standard deviation of filters in the convolutional layer to measure its importance and pruning filters with less influence on the accuracy of the neural network and its corresponding feature map. The algorithm did not cause the network to be sparsely connected unlike the method of pruning weight value, so there was no need of the support of special sparse convolution libraries. The experimental results based on the CIFAR-10 dataset show that the filters pruning algorithm can accelerate the VGG-16 and ResNet-110 models by more than 30%. Results can be close to or reach the accuracy of the original model by fine-tuning the inherited pre-training parameters.
Keywords:
本文引用格式
李浩, 赵文杰, 韩波.
LI Hao, ZHAO Wen-jie, HAN Bo.
多种深度学习模型已经证明存在着大量的参数冗余[4],带有冗余参数的模型不仅浪费存储空间和计算资源,而且容易导致过拟合问题.近年来,研究者在网络模型压缩方面作了大量的工作[5-7],Han等[8]基于AlexNet[1]和VGGNet[9]实现了基于权重裁剪的算法,通过重新训练弥补准确率损失,该算法主要裁减全连接层的参数,而神经网络的计算消耗主要来自卷积层,所以该算法不能明显提升模型的计算效率. 为了降低卷积层的计算消耗,Iandola等[10]实现了利用稀疏矩阵计算库和特殊硬件[11]压缩卷积层的算法. Denil等[4]实现了将权重矩阵分解为2个较小矩阵低秩乘积的算法,用来近似卷积计算,提升网络性能. 此外,基于卷积的快速傅里叶变换[12]、参数量化[8]、参数二值化[13]等方法相继被提出. 基于核的稀疏化方法也引起了很多研究者的兴趣,Wen等[14]提出结构稀疏化算法,能够学习模型的稀疏结构实现模型加速,稀疏的结构性可以有效地在硬件上部署加速. 最近,基于通道裁剪的方法表现出了较好的性能.Li等[15]实现了基于L1范数的冗余滤波器裁剪算法,通过微调(fine-tune)恢复模型精度. Mittal等[16]验证了随机通道裁剪可以与各种更复杂的裁剪标准相媲美,展示了网络模型的可塑性. Zhu等[17]通过实验表明,训练小密度模型不能达到与具有相同内存占用的大稀疏裁剪模型相同的精度,说明模型裁剪算法的研究具有一定的实用意义.
基于滤波器裁剪的模型压缩算法通常裁剪权重绝对值和最小的滤波器,而网络模型中有很多权重值较大但无特征提取作用的冗余滤波器. 本文提出基于滤波器裁剪的新型网络模型加速算法,使用标准差值作为滤波器重要程度的衡量标准,裁剪标准差值较小的滤波器实现对模型加速. 本文通过分析网络各层滤波器的裁剪对模型精度的影响程度,即分析滤波器的敏感度,根据敏感度调整各网络层的裁剪占比,分别通过微调和随机初值训练恢复裁剪后模型的精度. 本文算法通过直接裁剪卷积滤波器的方式,在实现上更容易,并且不需要特殊的稀疏矩阵计算库和硬件支持,在不增加额外开销的情况下降低计算成本.
1. 模型裁剪
通过VGG和ResNet[18]模型描述滤波器裁剪算法,这2种网络最具代表性,在很多任务中都有广泛应用,不限于目标分类和目标检测,尤其是ResNet的提出,对网络层数的加深具有重要的意义.
1.1. 裁剪滤波器和特征图
图1给出裁剪滤波器的细节,
图 1
图 1 裁剪滤波器致使其对应特征图和下一层滤波器的移除
Fig.1 Pruning filters results in removal of their corresponding feature maps and related kernels in next layer
根据卷积运算流程可得,单个卷积层的浮点操作运算量为
1.2. 裁剪ResNet网络
对于简单的卷积神经网络,如VGG或者AlexNet,可以较容易地裁减任意滤波器,但对于复杂网络,如ResNet,因为网络结构的特殊性,滤波器的裁剪受限于具体的网络层连接. 如图2所示,通过投影映射(projection mapping)实现对残差块(residual block)的滤波器裁剪[15]. 其中裁剪的关键是每个残差块第2个卷积层的输出特征图与恒等特征图之间通道一致性的保持. 在裁剪残差块第2个卷积层的过程中,要同时裁减掉相应的投影特征图. 因为恒等映射比残差块更重要,残差块的裁剪由快捷层(shortcut layer)决定,残差块第2个卷积层特征图的裁剪需要与快捷层的裁剪所选择的滤波器索引一致.
图 2
1.3. 裁剪后的模型重新获得精度
在模型裁剪后,需要通过训练将模型的准确率提升到接近甚至达到原模型的准确率. 策略1是逐层裁剪和重训练的迭代方式,在裁剪下一层之前微调当前模型,调整参数弥补准确率损失. 该策略的最终结果较好,但迭代过程需要花费较长时间. 策略2是整个网络作一次裁剪,再对模型微调使之恢复精度,该方式所需的时间较少,可能需要重复多次才能获得较优的结果. 策略3是对整个网络作一次裁剪,采用随机初值训练的方式恢复模型精度.
2. 裁剪标准与算法
2.1. 裁剪标准
图 3
图 4
图 4 ImageNet数据集上预训练模型VGG-16的卷积层可视化特征图
Fig.4 Visualization feature maps of convolutional layer of pre-training model VGG-16 on ImageNet dataset
若对原图进行均值卷积操作,则对图像添加了噪声,使其模糊化,其直方图等间距灰度缺失表明图像缺失了相应细节的像素值(见图3(d)).
均值卷积核为
CNN中存在很多权重值相近的近似均值卷积核的滤波器,对ImageNet数据集上预训练模型VGG-16的第1个卷积层的滤波器基于标准差值进行排序,最小和最大的5个滤波器所映射的特征图及其直方图分别如图4(a)、(b)所示. 从特征图及直方图可以看出,标准差值较大的滤波器可以提取更底层的纹理边缘信息;标准差值较小的滤波器更多的是对上一层输入特征图的简单滤波,甚至添加了很多噪声,没有起到特征提取的作用. 此外,图5(b)表明,裁剪少量标准差值较小的滤波器对模型的性能影响不大. 图中,p为滤波器裁剪百分比,y为模型准确率. 本文认为卷积网络中标准差值较小的滤波器为冗余滤波器,对整个模型的作用可以忽略.
图 5
图 5 CIFAR-10数据集上的预训练模型VGG-16的裁剪
Fig.5 Pruning of pre-training model VGG-16 on CIFAR-10 dataset
2.2. 裁剪算法
本文的方法是裁剪预训练模型中重要程度较小的滤波器,使准确率损失最小化. 通过计算卷积层中滤波器的标准差值
裁剪第
1)对于卷积层的每一个滤波器
2)对
3)裁剪标准差值较小的
4)第
独立地裁剪每一层滤波器,依次评估裁剪后的模型在验证集上的准确率,滤波器的敏感度与准确率损失呈正相关. 若准确率下降较多,则说明该层对裁剪的敏感度较大. 本文没有采用根据阈值大小裁剪网络的方式对模型进行裁剪,因为若某一层滤波器的标准差值均小于阈值,则该层所有滤波器均会被裁减而对模型产生结构性的破坏,并且该方法很难确定最终的阈值选取. 本文根据卷积层中滤波器的敏感程度,经验性地设置该层的裁剪占比,分层裁剪而不会裁减掉一个完整的卷积层. 根据
Han等[6]的工作是基于逐层权重裁剪和重训练的方式,通过逐层迭代弥补精度损失. 对于深层网络,逐层裁剪和重训练的迭代方式非常消耗时间. 本文算法通过单层裁剪分析网络的整体稳健性作为网络裁剪的基础,通过单次的裁剪和重训练恢复模型精度,提高了模型压缩流程的效率. 本文根据网络层的裁剪敏感度设置该层的裁剪占比,对于VGG-16等深层网络,根据网络中特征图的尺寸大小将网络分为若干阶段,同阶段特征图尺寸相同. 实验结果表明,同阶段卷积层的敏感度几乎一样,为了避免引入其他超参数,对于同阶段的所有卷积层采用相同的裁剪占比,简化裁剪流程.
3. 实验结果
采用pytorch实现模型压缩算法,为了获得用于分析和微调的网络权重,使用python和pytorch接口拷贝裁剪后模型的权重. 采用VGG和ResNet 2种网络模型测试算法. 用CIFAR-10数据集测试VGG-16和ResNet-56/110,用ImageNet数据集测试ResNet-34. 模型裁剪时,将卷积层及对应的Batch Normalization层同时移除,再将原模型中保留的网络层参数拷贝到新模型中. 通过随机初始化参数训练每个模型,得到各个网络的基准准确率. 在微调模型时,对于CIFAR-10数据集,用常数学习率0.001迭代50次,对于ImageNet数据集用同样的学习率迭代25次.
3.1. 裁剪CIFAR-10数据集上的预训练模型VGG-16
图5(b)表明,带有512个特征图的卷积层在没有影响模型整体性能时至少可以裁减掉其中40%的滤波器,滤波器较多的卷积层的冗余滤波器一般较多. 此外,CIFAR-10数据集的输入图片尺寸较小,模型的最后几个卷积层所学习到的特征信息较少,故模型最后几层的裁剪对整个模型的性能影响不大. 从图5(b)可以看出,网络浅层部分只有第一层的裁剪鲁棒性较好,而深层部分除了最后一层外,其他层对裁剪都表现出了较好的鲁棒性. 对于较敏感的层无需进行裁剪,对鲁棒性较好的层可以增大裁剪占比. 根据图5(b)的卷积层敏感度折线裁剪预训练模型VGG-16,结果如表1所示,浮点操作计算量可以减少43%. 表中,Fb为裁剪前FLOPs,Fa为裁剪后FLOPs,ΔF为裁剪量FLOPs. 从表2可见,裁减之后的模型通过重训练,几乎都可以接近原模型的精度. 表中,Fw为总的FLOPs,M为参数量,ΔM为参数裁剪量.
表 1 裁剪CIFAR-10数据集上的预训练模型VGG-16
Tab.1
卷积层 | Fb/106 | Fa/106 | ΔF/% |
conv 1_1 | 1.8 | 0.9 | 50 |
conv 1_2 | 38 | 19 | 50 |
conv 2_1 | 19 | 14.25 | 25 |
conv 2_2 | 38 | 28.5 | 25 |
conv 3_1 | 19 | 14.25 | 25 |
conv 3_2 | 38 | 28.5 | 25 |
conv 3_3 | 38 | 38 | 0 |
conv 4_1 | 19 | 9.5 | 50 |
conv 4_2 | 38 | 9.5 | 75 |
conv 4_3 | 38 | 9.5 | 75 |
conv 5_1 | 9.4 | 2.35 | 75 |
conv 5_2 | 9.4 | 2.35 | 75 |
conv 5_3 | 9.4 | 2.35 | 75 |
FC6 | 0.26 | 0.13 | 50 |
FC7 | 5.1×10−3 | 5.1×10−3 | 0 |
总量 | 315 | 179 | 43.2 |
表 2 裁剪、重训练多个模型及其结果
Tab.2
模型 | y/% | Fw/106 | ΔF/% | M/106 | ΔM/% |
VGG-16 | 93.33 | 313 | − | 15 | − |
VGG-16-A | 93.47 | 179 | 43.2 | 5.4 | 64 |
ResNet-56 | 93.11 | 127 | − | 0.85 | − |
ResNet- 56-A | 93.07 | 112 | 11.8 | 0.77 | 9.4 |
ResNet- 56-B | 93.03 | 92.3 | 27.3 | 0.72 | 15.3 |
ResNet-110 | 93.62 | 256 | − | 1.73 | − |
ResNet-110-A | 93.67 | 213 | 16.8 | 1.68 | 2.9 |
ResNet-110-B | 93.48 | 155 | 39.5 | 1.14 | 34.1 |
ResNet-34 | 73.29 | 3 640 | − | 21.6 | − |
ResNet- 34-A | 72.61 | 3 080 | 15.5 | 19.9 | 7.9 |
ResNet- 34-B | 72.31 | 2 760 | 24.2 | 19.3 | 10.6 |
3.2. 裁剪CIFAR-10数据集上的预训练模型RESNET-56/110
对于CIFAR-10数据集的预训练模型,根据特征图尺寸的大小,可以将ResNet网络分为3个阶段. 如图6所示,网络模型中多个卷积层对于裁剪都表现出较好的鲁棒性,对于ResNet-110,裁剪其中的一些单层,其结果甚至比原模型准确率更高.
图 6
图 6 ResNet-56/110模型各卷积层的裁剪敏感度
Fig.6 Pruning sensitivity of each convolution layer of ResNet-56/110 model
图6表明,随着裁剪占比的增大,模型ResNet-56的20、38和54层,模型ResNet-110的36、38和74层对准确率的影响明显,敏感度较大. 通过分析发现,敏感层一般位于残差块的首尾两端特征层数量发生突变的地方,敏感层对于整个模型非常重要,裁剪过程中设置较小裁剪占比或者完整保留.
3.3. 裁剪ILSVRC2012数据集的预训练模型RESNET-34
图 7
图 7 ResNet-34模型各卷积层的裁剪敏感度
Fig.7 Pruning sensitivity of each convolution layer of ResNet-34 model
3.4. 对比实验
将提出的标准差方法与其他优秀的裁剪算法进行比较,可得如下结论.
1)Average Percentage of Zeros(APoZ)[21]:通过裁减多数激活为0值的滤波器来降低模型大小和运算量.
2)基于L1范数的裁剪算法[15]:裁剪网络层中权重L1范数较小的滤波器来获得模型的性能提升.
3)Random Pruning[16]:对于每一个卷积层,随机裁剪一定量的滤波器来对模型进行压缩和加速.
4)Mean Activation[22]:通过裁减平均激活值较低的滤波器来提升网络性能.
表 3 不同裁剪方法的准确率对比
Tab.3
% | |||||||||||
裁剪算法 | 微调 | 随机初值训练 | 多次迭代训练 | ||||||||
m=20 | m=40 | m=60 | m=20 | m=40 | m=60 | m=20 | m=40 | m=60 | |||
标准差 | 72.37 | 64.85 | 53.36 | 72.41 | 64.93 | 53.31 | 72.65 | 65.16 | 54.45 | ||
APoZ | 71.14 | 62.82 | 52.63 | 71.11 | 63.12 | 52.67 | 71.39 | 63.31 | 53.44 | ||
L1范数 | 72.28 | 64.77 | 53.35 | 72.33 | 64.76 | 53.39 | 72.47 | 64.81 | 53.56 | ||
Random | 71.45 | 63.34 | 51.92 | 71.49 | 63.40 | 52.01 | 71.67 | 63.82 | 52.76 | ||
Mean Activation | 71.62 | 63.42 | 51.39 | 71.61 | 63.59 | 51.41 | 71.83 | 63.71 | 52.13 |
4. 结 语
本文采用标准差值衡量滤波器的重要程度,根据卷积层对裁剪的敏感程度经验性地设置每层裁剪占比压缩模型,以降低计算成本和存储资源. 在没有明显准确率损失的情况下,在数据集CIFAR-10上,VGG-16模型和ResNet模型的浮点操作运算量可以减少30%以上. 分别通过微调、随机初值训练和多次迭代训练裁剪后的模型发现,多次迭代训练的方式结果最好,但是时间花费较多. 在多数情况下,随机初值训练的方式比微调模型结果更好.
本文根据裁剪敏感度设置裁剪占比的方法是次优的,接下来的工作是进一步理解神经网络原理细节,找出卷积层最优裁剪占比算法,使得模型效果达到最优.
参考文献
Framewise phoneme classification with bidirectional LSTM and other neural network architectures
[J].
EIE: efficient inference engine on compressed deep neural network
[J].DOI:10.1145/3007787.3001163 [本文引用: 1]
/
〈 |
|
〉 |
