知识蒸馏基础篇(经典论文)

我们一般希望部署到应用中的模型使用较少的计算资源(存储空间、计算单元等),产生较低的时延,因此需要进行模型压缩和加速。常用的四个技术是设计高效小型网络、剪枝、量化和蒸馏。

1.基础理论

2014年Hinton等人发表的《Distilling the Knowledge in a Neural Network》首次提出了蒸馏学习的概念。蒸馏学习即教师模型(大参数,深网络)蒸馏出一个学生模型(小参数,浅网络),使学生模型具有接近教师模型的效果,以达到模型压缩的目的。
softmax函数,计算分类网络中输入属于第i类的概率:

在这里插入图片描述

提出广义的softmax,引入温度因子T来生成软目标:

在这里插入图片描述

定义蒸馏损失以匹配教师模型和学生模型之间的 logits ,即:

在这里插入图片描述

为什么要用软目标?
 首先,效果较好的教师模型产生的softmax分类结果是接近于hard label的,其信息熵很低,对于一个小的模型(参数少,浅)来说,以这样的结果作为标签的话是很难训练出来的。而加入温度后使得学生模型要学习的标签变软,soft labels其他类别位置也有数值,更平坦,信息熵更大,更便于小型网络学习

2.经典论文

  • 前者工作:Bucilua等人的工作Niculescu-Mizil A. Model Compression ACM ICKDD 2006

    使用复杂的集成系统(SVMs, bagged trees, boosted trees等10种基学习器)去预测通过MUNGE生成的伪数据,获取伪标签,然后用这些带有伪标签的伪数据和原始训练数据去训练快速、小型网络,达到“压缩”目的

  • Li等人的工作Learning Small-Size DNN with Output-Distribution-Based Criteria InterSpeech 2014 [paper] 类似于T=1

  • (NIPS 2014) 开山之作:Hinton等人Distilling the Knowledge in a Neural Network 提出T的概念

  • Ba和Caruana的工作Do Deep Nets Really Need to be Deep,logits替换概率值

  • (ICLR 2015)《FitNets: Hints for Thin Deep Nets》FitNets Romero等人的工作[6]不仅利用教师网络的最后输出logits,还利用它的中间隐层参数值(intermediate representations),提出hint-based training,训练学生网络,获得又深又细的FitNets。

知识蒸馏基础篇(经典论文)_第1张图片

  • (ICLR 2017) Paying More Attention to Attention Zagoruyko和Komodakis提出用注意力去做知识迁移
    思路:
    1.思路一:对卷积网络隐藏层输出的特征图——feature map(特征 & 知识)进行迁移(Attention transfer),让学生网络的feature map与教师网络的feature map尽可能相似
    2.思路二:Loss对输入X求导,得到梯度更大的像素点,表明”更重要”,需要pay more attention
    3.该特征迁移的方法也可以与soft-target的方式结合

  • (NIPS 2017) Learning Efficient Object Detection Models Chen等人

    使用KD和hint learning两种方法,将教师Faster R-CNN的知识迁移到学生Faster R-CNN上,针对物体检测,作者将原始KD的交叉熵损失改为类别加权交叉熵损失解决分类中的不平衡问题;针对检测框回归,作者使用教师回归损失作为学生回归损失的upper bound;针对backbone的中间表示,作者使用hint learning做特征适应。(这篇文章为物体检测和知识蒸馏的结合提供了实践经验)

  • (CVPR 2017)《A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning》学生网络学习教师网络层与层之间的关系(特征关系)

  • NIPS 2018《KDGAN: Knowledge Distillation with Generative Adversarial Networks》

知识蒸馏基础篇(经典论文)_第2张图片

  • NaGAN(红框):

知识蒸馏基础篇(经典论文)_第3张图片

  • KDGAN:

知识蒸馏基础篇(经典论文)_第4张图片

  • (ICCV 2019) A Comprehensive Overhaul of Feature Distillation Heo同样选取student和teacher网络结构的某个位置然后对特征进行变换,最后拉进他们的距离,有在检测任务中进行实验

  • (arXiv 2019) Architecture-aware Knowledge Distillation (AKD)

    指出给定教师网络,有最好的学生网络,即不仅对教师网络的权重进行蒸馏,而且对教师网络的结构进行蒸馏从而得到学生网络。(Rethinking the Value of Network Pruning这篇文章也指出剪枝得到的网络可以从头开始训练,取得不错的性能,表明搜索/剪枝得到的网络结构是挺重要的。

  • (IEEE ACCESS) GAN-KD for one-stage object-detection

    将教师网络生成的特征层作为真实样本,学生网络生成的特征层做为假样本,并对两者做生成对抗训练,以提高学生网络在一步目标检测中的表现。

知识蒸馏基础篇(经典论文)_第5张图片

3.yolov3进行知识蒸馏

https://www.icode9.com/content-4-951098.html

直接在Yolo算法中引入distillation loss会有一些问题,因为目前的network distillation算法主要是针对RCNN系列的object detection算法(或者叫two stage系列)。

对于two stage的object detection算法而言,其最后送给检测网络的ROI数量是很少的(默认是128个),而且大部分都是包含object的bbox,因此针对这些bbox引入distillation loss不会有太大问题。但是对于Yolo这类one stage算法而言,假设feature map大小是1313,每个grid cell预测5个bbox,那么一共就会生成1313*5=845个bbox,而且大部分都是背景(background)。如果将大量的背景区域传递给student network,就会导致网络不断去回归这些背景区域的坐标以及对这些背景区域做分类,这样训练起来模型很难收敛。

2018年paper《Object detection at 200 Frames Per Second》 YOLOv3论文

网络结构改进、引入network distillation、引入FM-NMS ttps://blog.csdn.net/u014380165/article/details/80467007

这篇文章中提出了针对该问题的解决方案,即针对YOLOv3中分类、回归、objectness三个不同的head适配不同的蒸馏损失函数,并对分类和回归的损失函数用objectness分值进行抑制,以解决前景背景类别不均衡问题。
 因此,作者利用Yolo网络输出的objectness对distillation loss做一定限定,换句话说,只有teacher network的输出objectness较高的bbox才会对student network的最终损失函数产生贡献,这就是objectness scaled distillation。

objectness loss:

在这里插入图片描述

classification loss:

在这里插入图片描述

regression loss:

在这里插入图片描述

final
在这里插入图片描述

FM-NMS:

FM-NMS算法的假设是假如几个相邻的grid cell所预测bbox的类别一样,那么这些bbox极有可能预测的是同一个object。基于这样的假设或者说是观察到的现象,FM-NMS算法的做法是:每次取3*3个相邻的grid cell,对这9个grid cell中预测类别相同的bbox的得分(objectness value)进行排序,最后只选择得分最高的那个bbox传给后续的student network

你可能感兴趣的:(深度学习,算法,计算机视觉,深度学习)