1.本发明属于深度神经网络模型压缩与加速领域,具体涉及一种基于滤波器权重综合评估的深度神经网络滤波器剪枝方法。
背景技术:
2.卷积神经网络在各种计算机视觉任务中获得了巨大的成功,比如图像分类、目标检测、语义分割等。但是,在卷积神经网络性能不断提升的同时,所带来的是参数量和计算成本的不断增加。卷积神经网络在算力和内存占用方面的高需求,使得将基于卷积神经网络的算法部署到资源受限的设备(例如移动设备或无人机)上仍然存在很大的挑战。为了解决这一问题,近年来研究者在模型压缩和加速方法方面做了很多努力,主要包括矩阵分解、参数量化、模型剪枝和知识蒸馏。其中,模型剪枝因其广阔的应用前景而在以往的研究中备受关注。
3.模型剪枝方法可以分为两大类:权重剪枝(weight pruning)和滤波器剪枝(filter pruning);权重剪枝方法一般通过直接剪掉滤波器中不重要的权重连接来对模型进行压缩,通常可以获得更高的压缩率。然而,由于权重剪枝后的模型结构是稀疏的,无法利用现有成熟的基础线性代数子程序(basic linear algebra subprograms,blas)库来获得额外性能收益,需要借助于特别设计的硬件才能获得实际加速。与之不同的是,滤波器剪枝方法通过直接剪掉选定的整个滤波器来压缩模型,这使得剪枝后的模型能够保持规则结构,更便捷地实现模型的加速,是一种更实用的模型压缩和加速方法。在进行滤波器剪枝时,为了最小化剪枝对于模型性能的影响,一般会根据滤波器的重要性从低到高选择待剪枝的滤波器。因此,滤波器剪枝的关键在于怎样评估滤波器的重要性。基于范数的方法和基于几何中值的方法是目前两种广泛使用的滤波器重要性评估方法,但它们存在一个共同的问题,即它们仅使用当前剪枝层的滤波器信息进行重要性的评估,这仅仅考虑了滤波器剪枝对于当前层的影响。事实上,当前层的滤波器剪枝会产生两个方面的影响:一是对于当前层的直接影响,滤波器的数量会减少;另一个则是对于下一层的间接影响,当前层滤波器的减少,导致输出特征图通道数减少,从而下一层中滤波器的通道数也需要相应减少。实验结果显示,当考虑滤波器剪枝的不同影响时,同一个滤波器的重要性可能完全不同。这表明,仅考虑滤波器剪枝的直接影响时,对于一个滤波器的重要性评估结果是片面的,这将会影响待剪枝滤波器的选择,进而影响剪枝后模型的性能。
技术实现要素:
4.本发明的目的是要解决现有滤波器剪枝方法中对于滤波器重要性的片面评估引起的待剪枝滤波器选择不合理,进而导致的剪枝后模型性能不高的问题,提出一种基于滤波器权重综合评估的深度神经网络滤波器剪枝方法。该方法通过综合评估滤波器剪枝对当前层滤波器的直接影响和对下一层滤波器的间接影响,实现对滤波器重要性的准确评估,在此基础上按照设定的剪切率对不重要滤波器进行剪枝,可以在保持模型性能的基础上实
现模型的明显压缩和加速。
5.本发明的思路是在对滤波器重要性进行评估时,综合考虑滤波器剪枝对于当前层的直接影响和对于下一层的间接影响,使得新的评估结果能够更准确的反映滤波器的重要性,在给定剪枝率的情况下,优化待剪枝滤波器的选择,保持剪枝后模型的性能与剪枝前相当。
6.本发明解决其技术问题所采取的技术方案是:一种基于滤波器权重综合评估的深度神经网络滤波器剪枝方法,假设存在一个l层的卷积神经网络预训练模型w,其使用的训练数据集为d。模型的第i层表示为其中表示取值为实数的四维矩阵(维数分别为ni、n
i-1
、ki和ki),ni和ki分别表示第i层的滤波器数量和卷积核大小。那么,模型第i层中的第j个滤波器可以表示成其中表示取值为实数的三维矩阵(维数分别为n
i-1
、ki和ki);该方法分为以下步骤:
7.s1考虑剪枝直接影响的滤波器重要性评估
8.对于第i层(1≤i≤l)来说,滤波器剪枝会造成滤波器数量的直接减少,剪枝时更倾向于剪掉本层中最不重要的滤波器,采用基于范数的方式来评估滤波器对于第i层的重要性:
[0009][0010]
其中,表示模型第i层中的第j个滤波器对于第i层的重要性,||
·
||1表示l1范数,min和max分别表示本层中范数值最小和最大的滤波器的索引;
[0011]
s2考虑剪枝间接影响的滤波器重要性评估
[0012]
对于第i+1层来说,滤波器剪枝造成的是滤波器通道数的减少,剪枝时更倾向于剪掉最不重要的通道所对应的滤波器。通过评估不同通道在第i+1层中重要性来表示对应滤波器对第i+1层的重要性,具体地描述如下:
[0013]
第i层中任一滤波器影响着第i+1层中所有滤波器的第j个通道,将这些通道提取出来,用其构建一个具有n
i+1
个通道的新滤波器其中,1≤i
′
≤l,“cat{
·
}”代表拼接操作,表示滤波器的第j个通道,其中表示取值为实数的二维矩阵(维数分别为k
i+1
和k
i+1
)。最终对于第i层可以得到一个新建滤波器集合通过计算这些新构建滤波器的范数值来表示其对应通道的重要性,滤波器的范数值越大,其对应的通道就越重要。
[0014]
那么,滤波器对于第i+1层的重要性可以表示为:
[0015][0016]
其中表示模型第i层中的第j个滤波器对于第i+1层的重要性,||
·
||1表示l1范数,min和max分别表示第i层中新构建的滤波器集合中范数值最小和最大的滤波器
的索引。
[0017]
s3计算重要性综合评估结果
[0018]
根据公式(1)得到的滤波器对于第i层的重要性评估结果以及公式(2)得到的滤波器对于第i+1层的重要性评估结果,可以计算得到滤波器最终的重要性评估结果,即
[0019][0020]
其中,表示模型第i层中的第j个滤波器的重要性综合评估结果。
[0021]
s4确定待剪枝滤波器
[0022]
设定第i层的预定义剪枝率为pi(0≤pi≤1),例如pi=0.5,根据公式(3)计算得到的重要性综合评估结果,从低到高选择ni×
pi个滤波器作为待剪枝滤波器。
[0023]
s5实施滤波器剪枝
[0024]
从i=1到i=l选定模型w中所有层的待剪枝滤波器之后,从w中删除选定的待剪枝滤波器及其在下一层中对应的滤波器通道,得到剪枝后的模型w'(he y,liu p,wang z,et al.filter pruning via geometric median for deep convolutional neural networks acceleration[c]//proceedings of the ieee/cvf conference on computer vision and pattern recognition.2019:4340-4349.)。
[0025]
s6对剪枝后的模型w'重新训练
[0026]
采用随机梯度下降法(stochastic gradient descent,sgd)(l
é
on bottou.large-scale machine learning with stochastic gradient descent[c]//proceedings of the 19th international conference on computational statistics.2010:177-186.),在训练数据集d上对剪枝后的模型w'进行重新训练,得到最终的模型w*。
[0027]
进一步地,s1中,也可以使用基于几何中值的方法来评估滤波器对于第i层的重要性:
[0028][0029]
其中min和max分别表示本层中g(
·
)值最小和最大的滤波器的索引。
[0030]
本发明具有以下有益效果:
[0031]
1.本发明提出了一种基于滤波器权重综合评估的深度神经网络滤波器剪枝方法,该方法可全面评价滤波器剪枝对当前层的直接影响和对下一层的间接影响、实现对滤波器重要性的准确评估;
[0032]
2.本发明提供的深度神经网络剪枝方法,可以在保持深度神经网络模型性能的前提下,实现深度网络模型的大幅压缩和加速,对深度神经网络模型在计算与存储资源受限设备上的轻量化部署与快速运行,具有重要的工程应用价值。
附图说明
[0033]
图1为滤波器剪枝的直接影响和间接影响示意图;
[0034]
图2为本发明中使用下一层中的滤波器通道构建新的滤波器的示意图;
[0035]
图3为本发明的滤波器剪枝流程图;
[0036]
图4为本发明在三种不同结构的模型上滤波器剪枝方案。
具体实施方式
[0037]
下面结合附图对本发明进行进一步的说明:
[0038]
图1为滤波器剪枝的直接影响和间接影响示意图。当前层的滤波器剪枝会产生两个方面的影响,一是对于当前层的直接影响,滤波器的数量会减少;另一个则是对于下一层的间接影响,当前层滤波器的减少,导致输出特征图通道数的减少,从而下一层中滤波器的通道数也需要相应减少。图1有助于理解本发明的思路。
[0039]
图2为发明中使用下一层中的滤波器通道构建新的滤波器的示意图。本发明中通过评估不同通道在下一层中重要性来表示对应滤波器对下一层的重要性。具体来说,将下一层中受其影响的滤波器通道提取出来,用其构成一个新的滤波器,通过计算新构建的滤波器的范数值来表示其对应通道的重要性。图2有助于理解本发明中使用的新滤波器的构建过程。
[0040]
图3为本发明的滤波器剪枝流程图,其中最关键的步骤在于:对于每一个卷积层,通过公式(3)计算层中每一个滤波器的重要性并进行排序,从低到高选择ni×
pi个滤波器作为待剪枝滤波器。
[0041]
本发明用三种不同结构的模型在cifar-10和ilsvrc-2012两个数据集上进行了实验,包括单分支结构的vggnet、残差网络resnet以及由inception模块构成的googlenet。图4为本发明在三种不同结构的模型上具体的滤波器剪枝方案,图中示例所用的剪枝率pi为0.5。
[0042]
实施实例1
[0043]
表1为vggnet-16在cifar-10上的实验结果。本实例中首先使用全局平均池化层取代原始vggnet中的全连接层,然后在cifar-10上从头训练得到预训练模型;剪枝之后,使用随机梯度下降法对剪枝后的模型进行160轮的训练来恢复模型精度,初始学习率设置为0.01,在第80和120个轮次时学习率分别乘以0.1,权重衰减系数设置为0.0001,动量设置为0.9。总的来说,本发明中的方法在精度下降和计算量下降两个方面都比其他方法表现的要好得多。具体来说,当本发明中的方法将vgg-16的计算量减少50.5%时和63.5%,准确率仅分别下降0.22%和0.47%,这证明了本发明中的方法在单分支网络上的有效性。
[0044]
表1.vgg-16在cifar-10上的实验结果
[0045][0046]
实施实例2
[0047]
表2.googlenet在cifar-10上的实验结果
[0048][0049]
表2为googlenet在cifar-10上的实验结果。本实例中首先需要对原始的googlenet网络的输出进行修改,使其能够匹配cifar-10数据集的类别数量,然后在cifar-10上从头训练得到预训练模型;剪枝之后,使用随机梯度下降法对剪枝后的模型进行300轮的训练来恢复模型精度,初始学习率设置为0.01,权重衰减系数设置为0.0001,动量设置为0.9,学习率在第100、150和255个轮次时分别乘以0.2。与其他方法相比,本发明中的方法在对googlenet进行压缩时可以保持更好的精度,这表明本发明中的方法可以有效地用于压缩带有inception模块的卷积神经网络。
[0050]
实施实例3
[0051]
表3为resnet-110在cifar-10上的实验结果。本实例中首先需要在cifar-10上从头训练得到预训练模型;然后使用随机梯度下降法对剪枝后的模型进行200轮的训练来恢复模型精度,初始学习率设置为0.01,权重衰减系数设置为0.0005,动量设置为0.9,学习率在第60、120和160个轮次时分别乘以0.1。从表中可以看到,本发明中的方法在减少61.6%的计算量的情况下,resnet-110的模型精度仅下降了0.10%,这再一次验证了本发明中方法在残差网络上的有效性。
[0052]
表3.resnet-110在cifar-10上的实验结果
[0053][0054]
实施实例4
[0055]
表4为resnet-50在ilsvrc-2012上的实验结果。本实例中使用pytorch官方提供模型作为预训练模型;然后使用随机梯度下降法对剪枝后的模型在lsvrc-2012上进行90轮的训练来恢复模型精度,初始学习率设置为0.01,权重衰减系数设置为0.0001,动量设置为0.9,学习率在第30和60个轮次时分别乘以0.1。虽然ilsvrc-2012数据集中数据量远大于cifar-10数据集,但从表4中可以看到,本发明中的方法在大规模数据集上仍然可以取得很好的效果。
[0056]
表4.resnet-50在ilsvrc-2012上的实验结果
[0057][0058]
综上所述,本发明在综合考虑滤波器剪枝的直接和间接影响情况下,能够对滤波器重要性进行更准确的评估,优化待剪枝滤波器的选择,有效提高剪枝后模型的精度,且可以适用于不同结构卷积神经网络模型的滤波器剪枝。
技术特征:
1.一种基于滤波器权重综合评估的深度神经网络滤波器剪枝方法,针对一个l层的卷积神经网络预训练模型w,其使用的训练数据集为d,模型的第i层表示为其中表示维数分别为n
i
、n
i-1
、k
i
和k
i
、取值为实数的四维矩阵,n
i
和k
i
分别表示第i层的滤波器数量和卷积核大小;那么,模型第i层中的第j个滤波器可以表示成其中表示维数分别为n
i-1
、k
i
和k
i
、取值为实数的三维矩阵;其特征在于,该方法分为以下步骤:s1考虑剪枝直接影响的滤波器重要性评估对于第i层来说,滤波器剪枝会造成滤波器数量的直接减少,剪枝时更倾向于剪掉本层中最不重要的滤波器,采用基于范数的方式来评估滤波器对于第i层的重要性,1≤i≤l:其中,表示模型第i层中的第j个滤波器对于第i层的重要性,||
·
||1表示l1范数,min和max分别表示本层中范数值最小和最大的滤波器的索引;s2考虑剪枝间接影响的滤波器重要性评估对于第i+1层来说,滤波器剪枝造成的是滤波器通道数的减少,剪枝时更倾向于剪掉最不重要的通道所对应的滤波器;通过评估不同通道在第i+1层中重要性来表示对应滤波器对第i+1层的重要性,具体如下:第i层中任一滤波器影响着第i+1层中所有滤波器的第j个通道,将这些通道提取出来,用其构建一个具有n
i+1
个通道的新滤波器其中,1≤i
′
≤l,“cat{
·
}”代表拼接操作,表示滤波器的第j个通道,其中1≤m≤n
i+1
,表示维数分别为k
i+1
和k
i+1
、取值为实数的二维矩阵;最终对于第i层可以得到一个新建滤波器集合通过计算这些新构建滤波器的范数值来表示其对应通道的重要性,滤波器的范数值越大,其对应的通道就越重要;滤波器对于第i+1层的重要性可以表示为:其中表示模型第i层中的第j个滤波器对于第i+1层的重要性,||
·
||1表示l1范数,min和max分别表示第i层中新构建的滤波器集合中范数值最小和最大的滤波器的索引;s3计算重要性综合评估结果根据公式(1)得到的滤波器对于第i层的重要性评估结果以及公式(2)得到的滤波器对于第i+1层的重要性评估结果,可以计算得到滤波器最终的重要性评估结果,即
其中,表示模型第i层中的第j个滤波器的重要性综合评估结果;s4确定待剪枝滤波器设定第i层的预定义剪枝率为p
i
,根据公式(3)计算得到的重要性综合评估结果,从低到高选择n
i
×
p
i
个滤波器作为待剪枝滤波器;s5实施滤波器剪枝从i=1到i=l选定模型w中所有层的待剪枝滤波器之后,从w中删除选定的待剪枝滤波器及其在下一层中对应的滤波器通道,得到剪枝后的模型w';s6对剪枝后的模型w'重新训练采用随机梯度下降法,在训练数据集d上对剪枝后的模型w'进行重新训练,得到最终的模型w*。2.一种根据权利要求1所述基于滤波器权重综合评估的深度神经网络滤波器剪枝方法,其特征在于:第i层的预定义剪枝率p
i
的取值范围为0≤p
i
≤1。3.一种根据权利要求2所述基于滤波器权重综合评估的深度神经网络滤波器剪枝方法,其特征在于:第i层的预定义剪枝率p
i
的取值为p
i
=0.5。4.一种根据权利要求1至3任一项所述基于滤波器权重综合评估的深度神经网络滤波器剪枝方法,其特征在于:s1中,也可以使用基于几何中值的方法来评估滤波器对于第i层的重要性:其中min和max分别表示本层中g(
·
)值最小和最大的滤波器的索引。
技术总结
本发明属于深度神经网络模型压缩与加速领域,具体涉及一种基于滤波器权重综合评估的深度神经网络滤波器剪枝方法,在对滤波器重要性进行评估时,综合考虑滤波器剪枝对于当前层的直接影响和对于下一层的间接影响,使得新的评估结果能够更准确的反映滤波器的重要性,在给定剪枝率的情况下,优化待剪枝滤波器的选择,保持剪枝后模型的性能与剪枝前相当。该方法可全面评价滤波器剪枝对当前层的直接影响和对下一层的间接影响、实现对滤波器重要性的准确评估;可以在保持深度神经网络模型性能的前提下,实现深度网络模型的大幅压缩和加速,对深度神经网络模型在计算与存储资源受限设备上的轻量化部署与快速运行,具有重要的工程应用价值。应用价值。应用价值。
技术研发人员:郑永斌 任强 朱迪 徐婉莹 白圣建 李兴玮 曹聚亮 孙鹏 杨东旭 吴欣宁
受保护的技术使用者:中国人民解放军国防科技大学
技术研发日:2021.12.14
技术公布日:2022/3/8