近年来,深度神经网络在计算机视觉、自然语言处理等领域被验证是一种极其有效地解决问题的方法。通过构建合适的神经网络,加以训练,最终网络模型的性能指标基本上都会超过传统算法。
在数据量足够大的情况下,通过合理构建网络模型的方式增加其参数量,可以显著改善模型性能,但是这又带来了模型复杂度急剧提升的问题。大模型在实际场景中使用的成本较高。
深度神经网络一般有较多的参数冗余,目前有几种主要的方法对模型进行压缩,减小其参数量。如裁剪、量化、知识蒸馏等,其中知识蒸馏是指使用教师模型(teacher model)去指导学生模型(student model)学习特定任务,保证小模型在参数量不变的情况下,得到比较大的性能提升,甚至获得与大模型相似的精度指标。PaddleClas融合已有的蒸馏方法,提供了一种简单的半监督标签知识蒸馏方案(SSLD,Simple Semi-supervised Label Distillation),基于ImageNet1k分类数据集,在ResNet_vd以及MobileNet系列上的精度均有超过3%的绝对精度提升,具体指标如下图所示。

一、SSLD 蒸馏策略
1、简介

SSLD的流程图
首先,我们从ImageNet22k中挖掘出了近400万张图片,同时与ImageNet-1k训练集整合在一起,得到了一个新的包含500万张图片的数据集。然后,我们将学生模型与教师模型组合成一个新的网络,该网络分别输出学生模型和教师模型的预测分布,与此同时,固定教师模型整个网络的梯度,而学生模型可以做正常的反向传播。最后,我们将两个模型的logits经过softmax激活函数转换为soft label,并将二者的soft label做JS散度作为损失函数,用于蒸馏模型训练。下面以MobileNetV3(该模型直接训练,精度为75.3%)的知识蒸馏为例,介绍该方案的核心关键点(baseline为79.12%的ResNet50_vd模型蒸馏MobileNetV3,训练集为ImageNet1k训练集,loss为cross entropy loss,迭代轮数为120epoch,精度指标为75.6%)。
- 教师模型的选择。在进行知识蒸馏时,如果教师模型与学生模型的结构差异太大,蒸馏得到的结果反而不会有太大收益。相同结构下,精度更高的教师模型对结果也有很大影响。相比于79.12%的ResNet50_vd教师模型,使用82.4%的ResNet50_vd教师模型可以带来0.4%的绝对精度收益( 75.6%->76.0%)。
- 改进loss计算方法。分类loss计算最常用的方法就是cross entropy loss,我们经过实验发现,在使用soft label进行训练时,相对于cross entropy loss,KL div loss对模型性能提升几乎无帮助,但是使用具有对称特性的JS div loss时,在多个蒸馏任务上相比cross entropy loss均有0.2%左右的收益( 76.0%->76.2%),SSLD中也基于JS div loss展开实验。
- 更多的迭代轮数。蒸馏的baseline实验只迭代了120个epoch。实验发现,迭代轮数越多,蒸馏效果越好,最终我们迭代了360epoch,精度指标可以达到77.1%( 76.2%->77.1%)。
- 无需数据集的真值标签,很容易扩展训练集。SSLD的loss在计算过程中,仅涉及到教师和学生模型对于相同图片的处理结果(经过softmax激活函数处理之后的soft label),因此即使图片数据不包含真值标签,也可以用来进行训练并提升模型性能。该蒸馏方案的无标签蒸馏策略也大大提升了学生模型的性能上限( 77.1%->78.5%)。
- ImageNet1k蒸馏finetune。我们仅使用ImageNet1k数据,使用蒸馏方法对上述模型进行finetune,最终仍然可以获得0.4%的性能提升( 78.5%->78.9%)。
2、数据选择
SSLD蒸馏方案的一大特色就是无需使用图像的真值标签,因此可以任意扩展数据集的大小,考虑到计算资源的限制,我们在这里仅基于ImageNet22k数据集对蒸馏任务的训练集进行扩充。在SSLD蒸馏任务中,我们使用了 Top-k per class的数据采样方案。具体步骤如下。
- 训练集去重。我们首先基于SIFT特征相似度匹配的方式对ImageNet22k数据集与ImageNet1k验证集进行去重,防止添加的ImageNet22k训练集中包含ImageNet1k验证集图像,最终去除了4511张相似图片。部分过滤的相似图片如下所示。

- 大数据集soft label获取,对于去重后的ImageNet22k数据集,我们使用 ResNeXt101_32x16d_wsl模型进行预测,得到每张图片的soft label。
- Top-k数据选择,ImageNet1k数据共有1000类,对于每一类,找出属于该类并且得分最高的k张图片,最终得到一个数据量不超过 1000*k的数据集(某些类上得到的图片数量可能少于k张)。
- 将该数据集与ImageNet1k的训练集融合组成最终蒸馏模型所使用的数据集,数据量为500万。
二、实验
- PaddleClas的蒸馏策略为 大数据集训练+ImageNet1k蒸馏finetune的策略。选择合适的教师模型,首先在挑选得到的500万数据集上进行训练,然后在ImageNet1k训练集上进行finetune,最终得到蒸馏后的学生模型。
注:本文资料来源:https://paddleclas.readthedocs.io/zh_CN/latest/index.html,仅供学习参考。