本博客介绍目标检测任务中知识蒸馏如何操作,首先介绍下相关的论文。
第一篇:Learning Efficient Object Detection Models with Knowledge Distillation

这篇文章是针对Faster -RCNN进行知识蒸馏的方法,

region proposal network(RPN) 和region classification network (RCN) ,这两阶段都用到了classifier和bounding-box regressor,论文使用教师网络RPN和RCN的输出作为蒸馏的目标,并应用了中间层的输出作为提示Hint对于Faster RCNN中的RCN 和RPN部分都有分类损失和回归损失,然后通过RPN ,RCN,Hint的Loss三者加权求和

ground truth之间的hard softmax loss 以及与soft label之间的蒸馏损失。
L
r
e
g
L_{reg}
Lreg 也结合了ground truth之间的smooth L1 loss和教师网络的bounded L2 regression loss的蒸馏损失。
L
h
i
n
t
L_{hint}
Lhint鼓励学生网络到教师网络的特征响应。 公式中的
r
r
r是平衡不同损失的超参。
T后的预测输出,
P
s
P_s
Ps为学生网络通过升温T后的预测输出,
x
x
x输入数据,
y
y
y为标签数据,分类损失的构建如下:
Faster RCNN这种两阶段的模型有大量的bcakground类别,而foreground类别相对很少。因此论文作者对bcakground施加了较大权重
w
0
=
1.5
w_{0}=1.5
w0=1.5,其他类别
w
i
=
1
w_{i}=1
wi=1对于回归损失作者利用了
L
1
L_1
L1和
L
b
L_b
Lb损失,使用的smooth L1 loss ,
L
1
L_1
L1是学生网络和真实标签之间的损失;
L
b
L_b
Lb是学生网络,教师网络,预测标签之间的损失。

对于
L
b
L_b
Lb损失,主要是个L2 Loss, 但这里考虑了一个条件
∣
∣
R
s
−
y
∣
∣
2
2
+
m
>
∣
∣
R
t
−
y
∣
∣
2
2
||R_s-y||_2^2+m >||R_t-y||_2^2
∣∣Rs−y∣∣22+m>∣∣Rt−y∣∣22,就是说学生网络与ground truth的误差要比教师网络的误差打一个margin。这样设计损失的目的是鼓励学生网络在学习回归的时候接近或者比教师网络要好,但是一旦达到教师网络的性能之后,就不在要求学生网络再进一步学习。
Hint 是中间层特征的学习, Hint Loss是一个V和Z的L2 损失 ,V是学生网络中间层的特征输出,Z是教师网络中间层的特征输出。作者对L1 Loss和L2 Loss都进行了实验。

注意:教师网络和学生网络输出的维度并不一定相同,因此通过一个自适应层去调节网络的输出,比如1x1卷积
论文:Object detection at 200 Frames Per Second,这篇论文研究对于YOLO目标检测知识蒸馏的方法


Tiny-YOLO作为教师网络,下面是Yolo作为教师网络,原理和上面的Faster RCNN知识蒸馏比较相似,但它没有中间层的学习。
distillation loss ,同时考虑了object scaled,即蒸馏损失和hard 损失之间的加权。详见:知识蒸馏1:基础原理讲解及项目实战介绍