system: [SYSTEM]

user: 4. 实验与分析 本文在mnist和cifar10数据集上对lenet5，vgg，resnet32和resnet56进行实验来验证GreedyPruner的有效性。在这一章节里，首先详细描述了实验中SuperNet的参数设置；然后，将本文得到的结果与SOTA方法进行了比较；最后，探索了平衡因子对较优网络结构的影响。 4.1. 实验设置 本文的实验资源是NVIDIA Tesla P40 GPU，使用pytorch来实现GreedyPruner。为了保证剪枝后的网络具有泛化性，作者对mnist和cifar10的训练集进行重新划分，取原本训练集的90%作为新的训练集，剩余10%作为验证集。使用验证集对SuperNet采样得到的路径进行性能评估。 对于SuperNet的预训练，本文设置batchsize为256，初始学习率为0.1，学习率衰减率为0.1，动量大小为0.9不设置衰减。在mnist数据集上，预训练共迭代300轮，每50个回合学习率衰减一次，150回合后学习率大小保持不变。在cifar10数据集上，预训练共迭代1000轮，每迭代50个回合学习率衰减一次，600回合后学习率大小保持不变。 在SuperNet的二次训练过程中，主要通过精度队列和压缩池对好路径进行保存。本文设置精度队列大小为300，压缩池大小为150， ϵ 随着训练的进行呈线性衰减，衰减到0.2时保持不变。每轮训练时，共选取30条路径进行评估，取评估值较高的前10条路径当作好路径，加入精度队列。压缩池20轮迭代训练一次。在后面的实验中，我们默认选择平衡因子为0.5，关于不同的平衡因子对剪枝后模型的影响，我们将在4.3节详细讨论。 4.2. 实验结果 本文首先使用GreedyPruner在mnist数据集上对LeNet5进行剪枝，结果如表1所示。GreedyPruner在LeNet5上可以在精度损失仅为0.80%的情况下，移除82.39%的卷积核通道数、63.98%的参数量和92.67%的计算量。 为了更全面地分析GreedyPruner的有效性，本文在cifar10数据集上，使用GreedyPruner对三个广泛使用的网络(VGG16、ResNet34和ResNet56)进行了网络剪枝，修剪结果已在表1中展示。 Table 1 Pruning results using GreedyPruner on LeNet5， VGG16， ResNet34 and ResNet5 模型 TOP-1准确率/+微调 通道数/通道数剪枝率 计算量/计算量剪枝率 参数量/参数量剪枝率 原始LeNet5 99.20% 142 61706 150，110 GreedyPruner-0.5 97.25%/98.40% 25/82.39% 4526/92.67% 54，068/63.98% 原始VGG16 93.56% 4224 317.44 M 15.25 M GreedyPruner-0.5 88.90%/92.33% 1378/67.38% 71.68 M/77.42% 1.46 M/90.13% 原始ResNet34 94.10% 8512 1187.84 M 21.28 M GreedyPruner-0.5 93.79%/94.26% 5651/33.61% 491.52 M/68.10% 6.15 M/73.85% 原始ResNet56 94.40% 26，560 1341.44 M 23.52 M GreedyPruner-0.5 91.83%/93.60% 21，300/19.80% 471.04 M/64.89% 6.15 M/73.85% 表1. GreedyPruner在LeNet5、VGG16、ResNet34和ResNet56上的剪枝结果 Table 2 Comparison result of GreedyPruner and SOTA method on VGG1 方法 TOP-1准确率/+微调 计算量/计算量剪枝率 参数量/参数量剪枝率 原始VGG16 93.56% 0 0 传统的手工剪枝 L1 [ 3 ] 93.40% 35.11% 64.59% Sliming [ 4 ] 93.66% 50.94% 84.92% 基于AutoML的自动剪枝 ABCpruner-80% [ 15 ] 93.08% 73.91% 89.04% GAL-0.1 [ 12 ] 90.78%/93.42% 45.85% 82.49% GreedyPruner-0.5 88.90%/92.33% 77.42% 90.13% 表2. GreedyPruner与SOTA方法在VGG16上的比较结果 使用本文提出的算法对原始的VGG16网络(13个卷积层，3个全连接层)进行剪枝，剪枝后的网络相比于原网络减少了67.38%的卷积核通道，77.42%的计算量和90.13%的参数量，但是在测试集上的Top-1精度仍可以达到88.90%。相比于参数量和计算量的大幅降低，我们认为4.5%的精度损失是可以接受的。为了弥补剪枝后网络结构的精度损失，对修剪后的网络进行权值微调。通过微调可以将精度提高到92.33%，相比于原始VGG只降低了1.23%。同时，本文也对GreedyPruner在VGG16上每一层的剪枝率进行了分析，结果如图3所示。图3显示，GreedyPruner对VGG16的前几层保留了较多的通道和参数量，从Conv8开始参数量修剪率明显提高。这是因为VGG16的前几层主要用于特征提取，保留较多的通道和参数有助于压缩后的模型维持高准确率，而网络的后几层在设计时本身就包含大量的冗余通道，删除这些冗余不仅可以有效地防止过拟合，同时还能加快网络训练。 图3. GreedyPruner在VGG16上每一层的剪枝率 Table 3 Comparison result of GreedyPruner and SOTA method on ResNet5 方法 TOP-1准确率/+微调 计算量/计算量剪枝率 参数量/参数量剪枝率 原始ResNet56 94.40% 0 0 传统的手工剪枝 L1 94.20% 27.56% 14.12% ThiNet50 [ 5 ] 93.56% 66.11% 73.62% 基于AutoML的自动剪枝 ABCpruner-70% 93.55% 56.61% 57.14% MetaPruning-0.5 [ 13 ] 93.08% 56.72% 60.28% GAL-0.5 92.92%/93.10% 48.52% 44.76% GreedyPruner-0.5 91.83%/93.60% 64.89% 73.85% 表3. GreedyPruner与SOTA方法在ResNet56上的比较结果 将GreedyPruner的剪枝结果与其他方法相比，比较结果如表2所示。在VGG16上，GreedyPruner相比于传统的剪枝算法L1和sliming，可以获得更高的计算量剪枝率和参数量剪枝率。例如，L1可以修剪35.11%计算量和64.59%参数量，但是GreedyPruner在精度只降低1.23%的情况下，将计算量修剪率从35.11%提高到77.42%，将参数量修剪率从64.59%提高到90.13%。这是因为GreedyPruner可以自动寻找最优的网络结构，将人类专家与网络剪枝任务解耦合，降低了主观经验对压缩结果的干预。即使与最近的自动剪枝算法GAL相比，GreedyPruner在精度降低只有1.09%的情况下，将计算量剪枝率提高了31.57%，参数压缩率提高了7.64%，修剪后的模型可以更好地应用在移动端和嵌入式端。 对于短接网络，本文使用GreedyPruner修剪了ResNet34和ResNet56这两种不同深度的网络结构。表1展示了对这两种网络结构的修剪结果。对于ResNet34，GreedyPruner可以移除33.61%的通道、68.10%的计算量和79.89的参数量。剪枝后的ResNet34在不进行微调的情况下可以达到93.79%的Top-1精度，微调后精度相比于原始的ResNet34提高了0.16%。但是，将GreedyPruner应用在ResNet56上，性能便有所降低。相比于ResNet34，ResNet56的计算量剪枝率降低3.21%，参数量剪枝率降低6.04%并且Top-1精度降低1.77%。这是因为ResNet56有更深的网络结构和更多的参数量，判断冗余结构的难度大大增加。表3展式了GreedyPruner和其他算法在ResNet56上的比较结果。与传统的剪枝算法L1和ThiNet50相比，GreedyPruner可以达到更高的计算量和参数量修剪率。与自动剪枝算法相比，GreedyPruner可以获得更高的计算量和参数量修剪率，在权值微调后，Top-1精度也会高于以往的自动剪枝算法。 通过上述分析可以得到，GreedyPruner可以自动修剪网络模型，并且在精度损失很少的情况下达到更高的FLOPs和参数修剪率。相比于以往提出的算法，GreedyPruner更具竞争力。 4.3 比例因子 μ 对压缩结果的影响 本文在cifar10上对VGG16进行修剪来探讨比例因子 μ 对网络剪枝结果的影响。修剪结果如图4所示。从图中可以明显的看出，随着 μ 的增大，模型的参数和计算量剪枝率降低，但模型在测试集上的TOP-1精度增高。这是容易理解的，随着 μ 的增加，越来越多的卷积核通道被保留。同时，剪枝率的降低会使模型更充分的提取图像特征，导致精度升高。为了在精度和压缩率上做出平衡，本文所有的实验都将 μ 设置为50%。 图4. 平衡因子 μ 对修剪结果影响