[2017NIPS]Learning Efficient Object Detection Models with Knowledge Distillation 论文笔记

目录

      • Method
        • 1.结果蒸馏——分类
        • 2.结果蒸馏——回归
        • 3.特征蒸馏
      • 实验结果
      • 总结

Method

将知识蒸馏用在检测方向最大的问题就是前景和背景的类别不均衡问题。

感觉就是很常规的思路,蒸特征+蒸输出,具体是在Faster-RCNN上做。其中蒸特征是使用的FitNet的方法在backbone做,在RPN和分类回归网络(RCN)部分蒸输出,两个部分都同时做分类和回归蒸馏。分类是做了一个weighted交叉熵,回归是做了一个bounded回归损失(即如果学生回归的比老师好,那就没有损失),再加上GT的损失,构成一个整体。

整体损失如下。同时在RCN和RPN做回归和分类损失是因为Faster-RCNN同时在RCN和RPN都做了回归和分类操作:
[2017NIPS]Learning Efficient Object Detection Models with Knowledge Distillation 论文笔记_第1张图片

[2017NIPS]Learning Efficient Object Detection Models with Knowledge Distillation 论文笔记_第2张图片

1.结果蒸馏——分类

和经典的KD算法类似,在RCN和RPN做分类损失包括两个部分,一个部分是分类层的softmax输出与GT的hard label进行交叉熵损失,另一部分是teacher和student网络的soft label交叉熵损失,整体如下所示:
在这里插入图片描述

对于前背景类别严重不平衡的问题,作者认为检测任务中模型会倾向于将前背景分错,而非将不同类别的前景分错,因此在背景类别前设置了更大的惩罚权重w=1.5,而在其他所有前景损失前设置了更小的权重w=1.0,在检测这种困难任务中,温度参数T=1,即忽略这个参数。

在这里插入图片描述

2.结果蒸馏——回归

回归与分类不同,回归是一个连续的预测,而分类是离散的,作者认为如果不加以限制,可能teacher会给student错误的指导。因此,在回归方面设计了一个upper bound,即如果student回归结果比teacher还要好,且好过一个阈值后,则不再有回归蒸馏损失,

整体损失也包含两部分,一部分是student和GT的回归损失,为smooth L1 loss,另一部分为回归蒸馏损失,即一个含有margin m的upper bound的L2 loss。

在这里插入图片描述

在回归结果损失上,作者认为student是可能比teacher回归的好的,所以当student回归的比teacher好很多的话就不用计算损失。好多少才可以算好很多?作者是可以通过margin参数m来定义。此外,==当student比teacher学的更好的时候,是否还需要计算蒸馏损失?==作者的答案是否,这可能说明kd还是要选择性学习,去其(teacher)糟粕。

3.特征蒸馏

和FitNet的做法一样,直接对某一层backbone特征图计算一个L2损失或者L1损失,对于通道数不同的情况,用一个全连接层/1×1卷积层(看做特征蒸馏时的网络是FC还是Conv,文中称为adaptation layer)来让两者相同。
在这里插入图片描述在这里插入图片描述

实验结果

1.大模型蒸小模型的性能提高。以小模型作为student,大模型作为teacher,当teacher性能越好,student也会得到更多的性能提高。整体提高大约在0.2~4.7个点(数据集难度不同)。

[2017NIPS]Learning Efficient Object Detection Models with Knowledge Distillation 论文笔记_第3张图片

2.自己(大尺度输入)蒸馏自己(小尺度),但是图像的输入尺寸一个是另外一个的两倍。结果是蒸馏比不蒸馏高了3~4个点(最简单的PASCAL数据集),只比大尺度输入低了不到一个点

[2017NIPS]Learning Efficient Object Detection Models with Knowledge Distillation 论文笔记_第4张图片
3.消融实验。作者通过实验说明adaptation layer对特征学习是非常重要的,这可能是student和teacher的特征空间不一样导致的。

总结

第一篇将知识蒸馏用到检测的论文。对网络进行蒸特征和蒸结果(分类和回归),蒸特征采用的FitNet的做法对backbone进行学习,蒸分类时,考虑到背景数量远大于前景,且更容易把前背景搞混而非前景类别分错,因此将背景的损失惩罚增大。在回归时,设置了一个upper bound,即student比teacher回归的好一定程度时,不再计算回归蒸馏损失。

你可能感兴趣的:(知识蒸馏,目标检测,深度学习,目标检测)