• 知识蒸馏2:目标检测中的知识蒸馏


    1. 目标检测知识蒸馏介绍

    1. Faster-RCNN 知识蒸馏

    1.1 原理介绍

    本博客介绍目标检测任务中知识蒸馏如何操作,首先介绍下相关的论文。
    第一篇:Learning Efficient Object Detection Models with Knowledge Distillation
    在这里插入图片描述
    这篇文章是针对Faster -RCNN进行知识蒸馏的方法,
    在这里插入图片描述

    • Faster RCNN是一个两阶段的目标检测算法,包括region proposal network(RPN) 和region classification network (RCN) ,这两阶段都用到了classifierbounding-box regressor,论文使用教师网络RPNRCN的输出作为蒸馏的目标,并应用了中间层的输出作为提示Hint
    • 图中,上半部分是教师网络,网络中间层的输出叫做Hint知道学生网络中间层输出的学习,中间层一般是feature map。我们希望student也学习到中简层特征的输出。让二者也有某种近视,这种层通过L2 Loss。
    • 对于检测部分Detection,包括classification和regression输出,对于这两部分的预测输出,通过教师网络的输出指导学生网络的学习,同时学生网络也可以从ground truth中的硬标签中进行学习。

    1.2 损失函数

    对于Faster RCNN中的RCN 和RPN部分都有分类损失和回归损失,然后通过RPN ,RCN,Hint的Loss三者加权求和
    在这里插入图片描述

    • 对于 L c l s L_{cls} Lcls 结合了 与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是平衡不同损失的超参。

    1.2.1 分类损失:类别不平衡

    在这里插入图片描述

    • 其中 P t P_t Pt为教师网络通过升温T后的预测输出, P s P_s Ps为学生网络通过升温T后的预测输出, x x x输入数据, y y y为标签数据,分类损失的构建如下:
      在这里插入图片描述
      L h a r d L_{hard} Lhard L s o f t L_{soft} Lsoft两者之间通过超参 u u u进行平衡.
    • L s o f t L_{soft} Lsoft中作者考虑了类别不平衡,在Faster RCNN这种两阶段的模型有大量的bcakground类别,而foreground类别相对很少。因此论文作者对bcakground施加了较大权重 w 0 = 1.5 w_{0}=1.5 w0=1.5,其他类别 w i = 1 w_{i}=1 wi=1

    1.2.2 回归损失

    • 对于回归损失作者利用了 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 ∣∣Rsy22+m>∣∣Rty22,就是说学生网络与ground truth的误差要比教师网络的误差打一个margin。这样设计损失的目的是鼓励学生网络在学习回归的时候接近或者比教师网络要好,但是一旦达到教师网络的性能之后,就不在要求学生网络再进一步学习。

    1.2.3 Hint Loss

    • Hint 是中间层特征的学习, Hint Loss是一个V和Z的L2 损失 ,V是学生网络中间层的特征输出,Z是教师网络中间层的特征输出。作者对L1 Loss和L2 Loss都进行了实验。
      在这里插入图片描述

    • 注意:教师网络和学生网络输出的维度并不一定相同,因此通过一个自适应层去调节网络的输出,比如1x1卷积

    2. YOLO 知识蒸馏

    论文:Object detection at 200 Frames Per Second,这篇论文研究对于YOLO目标检测知识蒸馏的方法
    在这里插入图片描述

    2. 1 介绍

    在这里插入图片描述

    • yolo是单阶段目标检测算法,上面是Tiny-YOLO作为教师网络,下面是Yolo作为教师网络,原理和上面的Faster RCNN知识蒸馏比较相似,但它没有中间层的学习

    2. 2 损失函数

    • 损失函数包括3部分: f o b j f_{obj} fobj 目标置信度得分, f o b j f_{obj} fobj分类以及 f b b f_{bb} fbb回归的损失函数。
      在这里插入图片描述
    • 对每部分的损失函数考虑了distillation loss ,同时考虑了object scaled,即蒸馏损失和hard 损失之间的加权。详见:知识蒸馏1:基础原理讲解及项目实战介绍
      在这里插入图片描述
  • 相关阅读:
    【Java 进阶篇】深入理解 SQL 分组查询
    pycocotools and mmpycocotools 循环报错
    数据库知识
    忘记密码,如何解除Excel的限制保护?
    Alibaba微服务实战
    Windows内核--HAL在抽象什么?(3.4)
    A股一年见两次2800 那么期货是怎么多空操作的?
    速览 NFT 期权赛道代表项目与发展前景
    tp6 + swagger 配置文档接口
    25、Flink 的table api与sql之函数(自定义函数示例)
  • 原文地址:https://blog.csdn.net/weixin_38346042/article/details/126069809