一种基于特征图稀疏化的卷积神经网络剪枝方法转让专利

申请号 : CN202010066747.2

文献号 : CN110874631B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 卓成闫心刚

申请人 : 浙江大学

摘要 :

本发明公开了一种基于特征图稀疏化的卷积神经网络剪枝方法,涉及如何压缩卷积神经网络减少其参数量和计算量以便于实际部署;在训练过程中,通过在损失函数中增加对激活层之后的特征图L1或L2正则化,使相应的特征图通道具有不同的稀疏度,在一定剪枝率下根据特征图通道的稀疏度剪去相应通道对应的卷积核,微调剪枝后网络获得新的准确度,根据剪枝前后的准确度变化调节剪枝率,经过多次迭代,寻找近最优剪枝率,在满足准确度不下降的条件下,实现最大程度的剪枝。该方法大大减少了卷积神经网络的参数量和计算量。

权利要求 :

1.一种基于特征图稀疏化的卷积神经网络剪枝方法,其特征在于,该方法应用于农作物病害分类,具体包括以下步骤:

1)采集农作物叶子图片作为训练数据集;

2)通过步骤1)的训练数据集对卷积神经网络中的特征图进行稀疏化训练;

在训练过程中对卷积神经网络中的损失函数加入特征图的稀疏项:其中,第一项为模型预测所产生的损失,x为网络的输入,为农作物叶子图片数据,W为网络的权重,f(x,W)为网络的输出,y为样本标签,第二项为所有激活层之后特征图的损失项,λ为控制卷积神经网络预测所产生损失与稀疏项损失比例关系的稀疏因子,l为激活层索引,L为激活层数,c为第l层激活层后特征图的通道索引,Cl为第l层激活层后的特征图的通道数,Hl,c、Wl,c分别为第l层激活层后特征图的第c个通道的高度和宽度,mi,j为相应特征图的第(i,j)个数值;g()为L1、L2正则化或其他正则项;

L1正则化公式为:

g(mi,j)=||mi,j||1

L2正则化公式为:

g(mi,j)=||mi,j||2

通过遍历整个训练数据集计算特征图通道的均值,作为特征图的稀疏度,不同的输入样本,计算所得的特征图的稀疏度不同,同时保存特征图的稀疏度,加入特征图通道选择层,对卷积神经网络训练并使其收敛后,保存验证集最高准确度以及相应的网络权重;

3)网络剪枝;

3.1)设定初始剪枝率,并设定剪枝率上限为1,剪枝率下限为0;

3.2)将验证集准确度最高的网络权重作为卷积神经网络的权重,按照如下规则进行剪枝:将特征图各通道的稀疏度按照从小到大的顺序排序,即sortmin→max{特征图稀疏度},然后对各通道特征图稀疏度按照剪枝率将前n个通道对应到通道选择层的非可学习参数mask值置为0,剩余通道对应的通道选择层的非可学习参数mask值置为1;

对剪枝后的网络进行再训练,直到网络收敛,获得剪枝后的验证集最高准确度;

3.3)比较剪枝前后验证集的最高准确度,若剪枝后的验证集最高准确度大于等于剪枝前的验证集最高准确度,则将当前的剪枝率作为新的剪枝率下限,并提高剪枝率,否则将当前的剪枝率作为新的剪枝率上限,并降低剪枝率,重复步骤3.2)和步骤3.3),直到剪枝率上限与下限的差值小于一定的阈值,则满足终止条件进入步骤4);

4)保存剪枝后的网络:去除通道选择层,并拷贝权重数据到新的网络中,该新的网络即为剪枝后的卷积神经网络;

5)将现场采集的农作物叶子的图片输入到剪枝后的网络中,输出为农作物病害的类别。

2.根据权利要求1所述的一种基于特征图稀疏化的卷积神经网络剪枝方法,其特征在于,步骤2)中,通道选择层的构建如下:设经过某层后的特征图有C个通道,定义通道选择层C个非可学习参数mask=[m1,m2,m3,...,mC],m1,m2,m3,...mC分别特征图中C个通道所对应的系数,其取值为0或1;0表示该通道不能传递到后面的计算中,1表示该通道可以传递到后面的计算中。

3.根据权利要求1所述的一种基于特征图稀疏化的卷积神经网络剪枝方法,其特征在于,步骤2)中,计算特征图通道的均值具体如下:在每个训练epoch开始的时候,为各激活层之后特征图的每个通道定义相应的均值变量ch_avg,初始值均为0;该训练epoch的第1个batch计算时,求取ch_avg:其中,batch_size为批尺寸,H和W分别为特征图的高度和宽度,mi,j,k为第i个样本相应通道的第(j,k)个数值;

对于从第2开始之后的batch,按照上面的公式计算出通道均值记为new_ch_avg;同时按照下面的方式更新ch_avg:ch_avg←(momentum×ch_avg+(1-momentum)×new_ch_avg)momentum为动量参数,取值在0.9-0.99之间;“←”的含义为将“←”右边的值赋给左边。

4.根据权利要求1所述的一种基于特征图稀疏化的卷积神经网络剪枝方法,其特征在于,步骤3.3)中,终止条件定义如下:将剪去的通道数与网络总通道数的比值定义为剪枝率,表示为pruned_ratio;剪枝率上限表示为upper_ratio,剪枝率下限表示为lower_ratio;终止条件设置为upper_ratio-lower_ratio<η,η的取值涉及到寻找近最优剪枝率的迭代次数,取值在0.005-0.2之间。

5.根据权利要求4所述的一种基于特征图稀疏化的卷积神经网络剪枝方法,其特征在于,步骤3.3)中,提高或降低剪枝率的方式如下:pruned_ratio为此次迭代的剪枝率;

按照如下方式提高剪枝率:

lower_ratio←pruned_ratio

按照如下方式降低剪枝率:

upper_ratio←pruned_ratio

“←”的含义为将“←”右边的值赋给左边。

说明书 :

一种基于特征图稀疏化的卷积神经网络剪枝方法

技术领域

[0001] 本发明涉及深度学习领域中卷积神经网络压缩技术,具体是一种基于特征图稀疏化的卷积神经网络剪枝方法。

背景技术

[0002] 卷积神经网络是一种常见的深度学习网络架构,在图像分类、目标检测、图像风格迁移等诸多问题上表现出色。同时,卷积神经网络的运作模式依然是黑箱,对于特定问题如何设置网络的层数和各层的通道数并没有扎实的理论基础,人为设置的网络层数和各层通道数大部分时候会造成网络参数的冗余,进而使得卷积神经网络的计算量大、占用内存过多,不利于网络的落地应用。所以,进行卷积神经网络的模型压缩是很有必要的。
[0003] 针对于卷积神经网络的模型压缩问题,前人提出了低秩分解、量化、知识蒸馏、剪枝等方法。
[0004] 非专利文献1(Jaderberg M,et.al.″Speeding up convolutional neural networks with low rank expansions.″Proc.arxiv,2014.)利用低秩分解的方法拆分卷积层的卷积运算,取得了4.5倍的加速效果,但是造成准确度下降1%。
[0005] 非专利文献2(Gupta S,et.al.″Deep learning with limited numerical precision.″Proc.International Conference on Machine Learning,2015.)利用16比特的定点数来训练卷积神经网络,同时实现了在MNIST数据集上准确度不下降,但文章并没有给出在更大数据集上的测试结果。
[0006] 非专利文献3(Zagoruyko S,et.al.″Paying more attention to attention:improving the performance ofconvolutional neural networks via attention transfer.″Proc.arxiv,2016.)采用特征学习的方式,使得一个小型卷积神经网络学习道一个大型神经网络的特征,进而实现压缩模型的目的,但是,小型卷积神经网络设置多少层数和各层通道数比较合适,仍然是一个尚未解决的问题。
[0007] 为了加快卷积神经网络的计算,降低网络计算对硬件设备的要求,从卷积神经网络特征图的稀疏化角度出发,设计了一种结构化剪枝方法。

发明内容

[0008] 本发明针对现有技术的不足,提供一种基于特征图稀疏化的卷积神经网络剪枝方法。
[0009] VGG、ResNet等常见的卷积神经网络都是按照卷积层、批归一化层、非线性激活层的顺序重复叠加构成的。将每组卷积层、批归一化层、非线性激活层构成的单元作为作为卷积神经网络的特征提取单元,这些特征提取单元按照卷积神经网络的深度方向顺序排列。一组特征提取单元的输出特征图作为下一组特征提取单元的输入特征图。
[0010] 本发明解决技术问题所采用的技术方案如下:一种基于特征图稀疏化的卷积神经网络剪枝方法,该方法包括以下步骤:
[0011] 1)对卷积神经网络中的特征图进行稀疏化训练;
[0012] 在训练过程中对卷积神经网络中的损失函数加入特征图的稀疏项,所述特征图的稀疏项如下:
[0013]
[0014] 其中,λ为控制卷积神经网络预测所产生损失与稀疏项损失比例关系的稀疏因子,l为激活层索引,L为激活层数,c为第l层激活层后特征图的通道索引,Cl为第l层激活层后的特征图的通道数,Hl,c、Wl,c分别为第l层激活层后特征图的第c个通道的高度和宽度,mi,j为相应特征图的第(i,j)个数值,g()为L1、L2正则化或其他正则项。
[0015] L1正则化公式为:
[0016] g(mi,j)=||mi,j||1
[0017] L2正则化公式为:
[0018] g(mi,j)=||mi,j||2
[0019] 通过遍历整个训练数据集计算特征图通道的均值,作为特征图的稀疏度,不同的输入样本,计算所得的特征图的稀疏度不同,同时保存特征图的稀疏度,加入特征图通道选择层,对卷积神经网络训练并使其收敛后,保存验证集最高准确度以及相应的网络权重。
[0020] 2)网络剪枝。
[0021] 2.1)设定初始剪枝率,并设定剪枝率上限为1,剪枝率下限为0。
[0022] 2.2)将验证集准确度最高的网络权重作为卷积神经网络的权重,按照如下规则进行剪枝:
[0023] 将特征图各通道的稀疏度按照从小到大的顺序排序,即sortmin→max{特征图稀疏度},然后对各通道特征图稀疏度按照剪枝率将前n个通道对应到通道选择层的非可学习参数mask值置为0,剩余通道对应的通道选择层的非可学习参数mask值置为1。
[0024] 对剪枝后的网络进行再训练,直到网络收敛,获得剪枝后的验证集最高准确度。
[0025] 2.3)比较剪枝前后验证集的最高准确度,若剪枝后的验证集最高准确度大于等于剪枝前的验证集最高准确度,则将当前的剪枝率作为新的剪枝率下限,并提高剪枝率,否则将当前的剪枝率作为新的剪枝率上限,并降低剪枝率,重复步骤2.2)和步骤2.3),直到剪枝率上限与下限的差值小于一定的阈值,则满足终止条件进入步骤3);
[0026] 3)保存剪枝后的网络:去除通道选择层,并拷贝权重数据到新的网络中,该新的网络即为剪枝后的卷积神经网络。
[0027] 进一步地,所述步骤1)中,通道选择层的构建如下:设经过某层后的特征图有C个通道,定义通道选择层C个非可学习参数mask=[m1,m2,m3,…,mC],m1,m2,m3,…mc分别特征图中C个通道所对应的系数,其取值为0或1。0表示该通道不能传递到后面的计算中,1表示该通道可以传递到后面的计算中。
[0028] 进一步地,所述步骤1)中,计算特征图通道的均值具体如下:
[0029] 在每个训练epoch开始的时候,为各激活层之后特征图的每个通道定义相应的均值变量ch_avg,初始值均为0。该训练epoch的第1个batch计算时,求取ch_avg:
[0030]
[0031] 其中,batch_size为批尺寸,H和W分别为特征图的高度和宽度,mi,j,k为第i个样本相应通道的第(j,k)个数值。
[0032] 对于从第2开始之后的batch,按照上面的公式计算出通道均值记为new_ch_avg。同时按照下面的方式更新ch_avg:
[0033] ch_avg←(momentum×ch_avg+(1-momentum)×new_ch_avg)
[0034] momentum为动量参数,取值在0.9-0.99之间,“←”的含义为将“←”右边的值赋给左边。
[0035] 进一步地,所述步骤2.3)中,终止条件定义如下:
[0036] 将剪去的通道数与网络总通道数的比值定义为剪枝率,表示为pruned_ratio。剪枝率上限表示为upper_ratio,剪枝率下限表示为lower_ratio。终止条件设置为upper_ratio-lower_ratio<η,η的取值涉及到寻找近最优剪枝率的迭代次数,一般取值在0.005-0.2。
[0037] 进一步地,所述步骤2.3)中,提高或降低剪枝率的方式如下:
[0038] pruned_ratio为此次迭代的剪枝率。
[0039] 按照如下方式提高剪枝率:
[0040] lower_ratio←pruned_ratio
[0041]
[0042] 按照如下方式降低剪枝率:
[0043] upper_ratio←pruned_ratio
[0044]
[0045] “←”的含义为将“←”右边的值赋给左边。
[0046] 进一步地,该方法应用于农作物病害分类,采集农作物叶子图片作为数据集,并对卷积神经网络中的特征图进行稀疏化训练和网络剪枝,得到剪枝后的卷积神经网络,将现场采集的农作物叶子的图片输入到剪枝后的网络中,输出为农作物病害的类别。
[0047] 本发明的有益效果是:提供了一种基于特征图稀疏化的卷积神经网络剪枝方法。通过在损失函数中增加对激活层之后的特征图L1或L2正则化,使相应的特征图通道具有不同的稀疏度,后根据特征图通道的稀疏度剪去相应通道对应的卷积核,经过多次迭代,寻找近最优剪枝率,在满足准确度不下降的条件下,实现最大程度的剪枝。通过该剪枝方法压缩的卷积神经网络具有硬件友好的特点,能够在多种硬件平台上部署。

附图说明

[0048] 图1是本发明方法流程图;
[0049] 图2是本发明的通道选择层示意图;
[0050] 图3是本发明的卷积层权重拷贝图。

具体实施方式

[0051] 以下结合附图对本发明具体实施方式作进一步详细说明。
[0052] 选择农作物(番茄)病害分类作为任务,病害包括番茄白粉病、早疫病、斑点病等等16种类,数据集为农作物(番茄)叶子图片集。卷积神经网络采用卷积层+批归一化层+ReLu激活层组成的特征提取单元叠加、最后线性层输出类别的结构形式,特征提取单元表示为C,池化层表示为M,线性层表示为L,16层的网络结构表示为[C(64),C(64),M,C(128),C(128),C(128),M,C(256),C(256),C(256),M,C(512),C(512),C(512),M,L],其中括号中的数字表示通道数。
[0053] 如图1所示,按照本发明方法流程图,本发明的具体实施步骤为:对上述卷积神经网络中的各个特征提取单元输出的特征图进行稀疏化训练;
[0054] 1.1)在卷积神经网络的损失函数中加入对所有激活层之后特征图的稀疏项:
[0055]
[0056] 上式中,第一项为模型预测所产生的损失,x为网络的输入,为番茄叶子图片数据,W为网络的权重,f(x,W)为网络的输出,y为样本标签,本示例中,样本标签为0-16之间的整数。
[0057] 第二项为所有激活层之后特征图的稀疏项,λ为控制两项比例关系的稀疏因子,其取值优选为0.0001-0.0005之间,l为激活层索引,取值范围为1-10,L为激活层数,为10,c为第l层激活层后特征图的通道索引,Cl为第l层激活层后的特征图的通道数,Hl,c、Wl,c分别为第l层激活层后特征图的第c个通道的高度和宽度,mi,j为相应特征图的第(i,j)个数值,g()为L1或者L2正则化。
[0058] L1正则化公式为:
[0059] g(mi,j)=||mi,j||1
[0060] L2正则化公式为:
[0061] g(mi,j)=||mi,j||2
[0062] 1.2)在激活层之后增加通道选择层。设某一激活层后的特征图有C个通道,定义通道选择层C个非可学习参数mask=[m1,m2,m3,…,mC],m1,m2,m3,…mC分别特征图中C个通道所对应的系数,其取值为0或1。0表示该通道不能传递到后面的计算中,1表示该通道可以传递到后面的计算中。如图2所示,为C=5,mask=[1,0,0,1,1]的情况,对应值为1的通道,可以通过通道选择层。初始状态下,C个非可学习参数均取值为1。
[0063] 1.3)在训练过程中,为激活层后特征图每个通道计算均值,作为该通道重要性的凭据。不同的输入样本,计算所得的特征图不同。特征图通道均值遍历整个训练数据集得到。
[0064] 在每个训练epoch开始的时候,为各激活层之后特征图的每个通道定义相应的均值变量ch_avg,初始值均为0。该训练epoch的第1个batch计算时,求取ch_avg:
[0065]
[0066] 其中,batch_size为批尺寸,本示例中取值为64,H和W分别为特征图的高度和宽度,mi,j,k为第i个样本相应通道的第(j,k)个数值。对于从第2开始之后的batch,按照上面的公式计算出通道均值记为new_ch_avg。同时按照下面的方式更新ch_avg:
[0067] ch_avg←(momentum×ch_avg+(1-momentum)×new_ch_avg)
[0068] momentum为动量参数,取值在0.9-0.99之间,“←”的含义为将“←”右边的值赋给左边。
[0069] 1.4)特征图稀疏化训练若干个epoch之后,网络收敛,记录下的验证集的最高准确度initial_acc。本示例中训练160个epoch,网络即可收敛,此时验证集的最高准确度为88.03%。
[0070] 2)网络剪枝。
[0071] 2.1)卷积神经网络加载训练时验证集准确度最高的网络权重。将特征图各通道的ch_avg按照从小到大的顺序排序。
[0072] 将剪去的通道数与网络总通道数的比值定义为剪枝率,表示为pruned_ratio。剪去的通道数目为pruned_channels=pruned_ratio×网络总通道数。剪枝率上限upper_ratio为1,剪枝率下限lower_ratio为0。初始剪枝率为0.5。已经排好序的各通道特征图均值,即sortmin→max{ch_avg},其中前pruned_channels数目个通道对应到通道选择层的mask值置为0,剩余通道对应的通道选择层的mask值置为1。
[0073] 2.2)改变通道选择层的mask值之后,微调网络,即继续训练一定的epoch数,取值60。网络收敛后,记录剪枝后网络在验证集上的最高准确度pruned_acc。
[0074] 2.3)判断是否满足终止条件,终止条件设置为upper_ratio-lower_ratio<η,η的取值涉及到寻找近最优剪枝率的迭代次数,一般取值在0.005-0.02。如果满足终止条件,判断pruned_acc+ε是否大于initial_acc,若是,则令lower_ratio等于pruned_ratio,同时保存此时的网络权重;若否,不做处理。然后进行步骤3)。如果不满足终止条件,进行步骤2.4)。
[0075] 2.4)比较剪枝后的最高准确度pruned_acc与剪枝前的最高准确度initial_acc,设置剪枝后最大允许准确度损失为ε。如果pruned_acc+ε>initial_acc,说明在此剪枝率下可以保持网络准确度,可以提高剪枝率,同时保存此时的网络权重;如果pruned_acc+ε<initial_acc,说明在此剪枝率下准确度下降,需降低剪枝度。
[0076] 按照如下方式提高剪枝率:
[0077] lower_ratio←pruned_ratio
[0078]
[0079] 按照如下方式降低剪枝率:
[0080] upper_ratio←pruned_ratio
[0081]
[0082] 按照新的lower_ratio、pruned_ratio、upper_ratio重新进行步骤2.1)到步骤2.4),直到满足步骤2.3)的终止条件为止,“←”的含义为将“←”右边的值赋给左边。
[0083] 3)保存剪枝后的网络
[0084] 按照如下方式去除通道选择层,并拷贝权重数据到新的网络中。
[0085] 3.1)对每个通道选择层进行求和,得到数组cfg=[c1,c2,c3…cn-1,cn]。保持网络结构不变的基础上,根据cfg重新定义网络各层的通道数目。
[0086] 3.2)拷贝卷积层、批归一化层、线性层等层的权重拷贝到新的网络中。
[0087] 对于卷积层的权重,如图3所示,上一个特征提取单元后的通道选择层的mask值为[1,0,1],下一个特征提取单元后的通道选择层的mask值为[1,0],新的网络相对应的卷积层输入通道数即为2,输出通道数即为1,需要拷贝的权重即对应图3中的卷积核灰色部分。
[0088] 对于批归一化层,拷贝通道选择层的mask值中为1的通道权重数据到新网络中,该新网络为剪枝后的卷积神经网络。
[0089] 将采集的农作物(番茄)叶子图片输入到剪枝后的卷积神经网络中,输出为农作物(番茄)病害的类别。
[0090] 在本实施例中,剪枝前网络的参数量为20.04M,计算量为12.59GFlops,用本方法求得的最优剪枝率为56.25%,剪枝后网络的参数量为4.54M,计算量为3.02GFlops。减少了77.35%的参数量,前向计算速度提高4x以上。
[0091] 上述实施例用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要求的保护范围内,对本发明作出的任何修改和改变,都落入本发明的保护范围。