文章目录
- 1.摘要和背景
- 1.1 摘要
- 1.2 背景
- 2.方法和贡献
- 2.1 方法
- 2.1.1 训练过程
- 2.1.2 loss介绍
- 2.2 贡献
- 3.实验和结果
- 3.1 实验
- 3.2 结果
- 4.总结和展望
- 4.1 总结
- 4.2 展望
主要贡献:基于网络蒸馏方法,提出了一种提升裁剪后模型的精度的方法!将训练时间大大缩短!
推荐指数:4颗星(5颗星满)
本系列是在阅读深度神经网络模型小型化方面论文时的笔记!内容大部分从论文中摘取,也会有部分自己理解,有错误的地方还望大家批评指出!
论文链接:Be Your Own Teacher: Improve the Performance of Convolutional Neural
Networks via Self Distillation
代码链接:github代码
1.摘要和背景
1.1 摘要
原文摘要:
Convolutional neural networks have been widely deployed in various application scenarios. In order to extend the applications’ boundaries to some accuracy-crucial domains,researchers have been investigating approaches to boost accuracy through either deeper or wider network structures, which brings with them the exponential increment of the computational and storage cost, delaying the responding time.
卷积网络被用于很多地方,其中很多人为了提高卷积网络的精度,对模型的深度和宽度进行增加,但是虽然模型的精度有所增加,但是模型的大小和模型的flops急剧增加,这是得不偿失的。
In this paper, we propose a general training framework named self distillation, which notably enhances the performance (accuracy) of convolutional neural networks through shrinking the size of the network rather than aggrandizing it. Different from traditional knowledge distillation - a knowledge transformation methodology among networks, which forces student neural networks to approximate the softmax layer outputs of pre-trained teacher neural networks, the proposed self distillation framework distills knowledge within network itself. The networks are firstly divided into several sections. Then the knowledge in the deeper portion of the networks is squeezed into the shallow ones. Experiments further prove the generalization of the proposed self distillation framework: enhancement of accuracy at average level is 2.65%, varying from 0.61% in ResNeXt as minimum to 4.07% in VGG19 as maximum. In addition, it can also provide flexibility of depth-wise scalable inference on resource-limited edge devices. Our codes will be released on github soon.
在本文中,提出了一种通用的训练框架,使用该框架,模型可以在不增加深度和宽度的基础上,提高模型的精度。提出的自蒸馏框架是一种网络间的知识转换方法,它要求学生神经网络近似于预先训练好的教师神经网络的softmax层的输出。该方法主要步骤为:1)将原始网络按照网络结构的特点分成几个浅层的网络;2)对分出来的浅层的网络分别使用网络蒸馏的方法(与传统的蒸馏方法还不一样,具体请看下面)。最后得出的结果发现使用提出的框架对网络进行训练比fine_turn效果好!
1.2 背景
- 卷积网络由已经在图像分类,目标检测和语义分割方面取得了非常好的结果;一般提升网络精度的方法是度网络的深度和宽度增加,但是常常得到的结果是增加的精度与增加的计算量是不对等的,所以该方法有弊端。
- 为了能够让网络在计算资源受限的平台上运行,则需要优化的目标是在满足资源限制的基础上,尽可能的降低裁剪后模型的精度;常用的方法包括:1)轻量级的网络设计;2)网络剪枝;3)网络量化等;但是如何提高裁剪后模型的精度是模型后优化问题。
- 知识蒸馏是网络模型压缩中常用的方法,但是传统的知识蒸馏方法需要先预先训练一个大的强的老师网络,然后在指导不同结构的学生网络进行训练,从而达到将大网络(老师网络)的知识压缩到小网络(学生网络)。其中,大网络的训练和小网络结构的寻找是非常耗时的。
- 本文提出一个方法,不需要训练老师网络也不需要寻找学生网络,老师网络和学生网络使用相同的结构,然后只需要一步就可以使用知识蒸馏的方法对网络精度进行提升。
2.方法和贡献
2.1 方法
上图是本文提出的自蒸馏训练框架图。从图中可以看出,论文首先将原始网络分成了4个浅层的网络,然后在每个浅层的网络的输出加上一个瓶颈卷积,全连接层和softmax层,并能够输出预测的类别的概率。网络的前传播过程主要分为4个,其中前面3个为浅层网络的前向通道,最后一个为老师网络的前向通道。网络中的loss也分为3类。下面将详细介绍。
2.1.1 训练过程
- 根据初始网络的深度和结构,将初始网络分为几个浅层网络。其中初始网络作为老师网络,浅层网络和深层网络作为学生网络(如果我们选择的学生网络的结构是和老师网络一样的,那么深层网络就是学生网络,否则浅层网络是学生网络。)
- 在每一个浅层网络的后面加上一个瓶颈层,全连接层和softmax层,构成一个学生分类器。其中使用瓶颈卷积的目的是减少每个浅层分类器之间的影响。
- 在训连教师网络的基础上,使用知识蒸馏方法对学生网络进行训练,最终训练好学生网络。
2.1.2 loss介绍
- loss Source1:Cross entropy loss from labels to not only the deepest classifier, but also all the shallow classifiers;衡量的是深层网络和浅层网络的输出与真实标签之间的差异。
- loss Source2:KL (Kullback-Leibler) divergence loss under teacher’s guidance;衡量的是老师网络和学生网络的分布差异性。
- loss Source3:L2 loss from hints;衡量的是学生网络和老师网络特征之间的差异性;
2.2 贡献
- 提出了自蒸馏的训练框架,使得模型在不增加大小,flops和时间的基础上,提高模型的精度。
- 自蒸馏提供了一个可在不同深度执行的单一神经网络,允许在资源有限的边缘设备上进行自适应的精度-效率权衡。即:我们可以在原始网络的基础上,根据资源的要求在进行网络的裁剪(分成很多浅层网络)。
- 在常用的5种卷积模型和2种数据集上进行了实验,发现使用本文所提出的的方法得到的结果都比自学习的方法要好。
3.实验和结果
3.1 实验
- 5个常用的模型:ResNet,WideResNet,Pyramid ResNet,ResNeXt,VGG
- 两个数据集:cifar100 和ImageNet
3.2 结果
- 不同模型在cifar100上,使用本文方法和不使用本文方法的结果对比:
1.从实验的结果可以看出,无论是哪种模型,使用本文方法训练后的模型精度都会比直接训练的模型精度高。
2.针对大部分模型,当网络截取0.75 的时候,得到模型的精度已经比基准模型要好了。
3.集成的结果比使用本文方法训练后全部网络效果要好。
- 不同模型在ImageNet上,使用本文方法和不使用本文方法的结果对比:
1.从实验的结果可以看出,实验结果和cifar100上的结果类似。
- 不同方法在cifar100和不同模型上的结果对比,其中baseline是不采用蒸馏方法得到的结果,其余的都采用了蒸馏的方法。
1.从表中的结果可以看出,使用蒸馏方法训练得到的模型精度比不使用蒸馏得到的要高。
2.本文所提方法得到的精度都要比其他蒸馏方法的结果要高。
- 本文方法与使用深度监督方法在cifar100和不同模型上的结果对比。
1.通过表中你的结果可以看出,无论哪种模型,本文所提出的的方法相比于只是用深度监督方法的结果要好。
- 本文方法在模型速度和精度方面的权衡结果。
1.初始网络的层数越深,则加速效果会更加明显!
2.从实验的结果来看,在几乎相同的裁剪率下,legr算法得到的模型的精度比本文提出的方法要高一些!
3.是否可以将网络拆分的更多,使得速度的增加粒度更细
4.总结和展望
4.1 总结
- 提出的自蒸馏训练框架能够大大的增加训练后模型的精度。
- 相比于传统的蒸馏方法,提出了一段式的蒸馏方法,将模型的训练时间缩短。
- 相比于其他改进的蒸馏方法,模型的精度得到提升
- 不仅可以提升模型的精度,还可以在一定精度的要求下,对模型的结构进行裁剪。
4.2 展望
- Automatic adjustment of newly introduced hyperparameters