• 知识蒸馏1:基础原理讲解及yolov5项目实战介绍


    1. 网络压缩技术介绍

    在这里插入图片描述
    网络压缩方法主要4种:1.Network pruning (网络剪枝) 2.Sparse representation稀疏表示 3.Bits precision 可以利用低比特的表示,甚至二值化的表示 4. Konwledge distillation 知识蒸馏

    2. 知识蒸馏介绍

    知识蒸馏最早的一篇论文:Distilling the Knowledge in a Netrual Network, 论文在2015年由深度学习领域的大牛Geffrey Hinton 和Google Jeff Dean等人提出。
    在这里插入图片描述
    知识蒸馏类似于迁移学习,可以看成是一种知识的迁移。
    在这里插入图片描述
    由教师网络模型(Teacher mode)将知识迁移给学生(Student model)模型,通俗的讲就是用教师网络指导学生网络的学习。
    在这里插入图片描述
    知识蒸馏(Knowledge distillation) 是提升网络性能的方法,通过一个教师网络指导学生网络的学习,教师网络是一个较大的模型,学生网络是一个较小的模型,通过教师网络学习到的知识迁移到学生网络上。训练学生网络的时候可以得到教师网络蒸馏到的 soft label知识,同时学生网络也可以从ground truth来进行预测学习。

    学生网络通过教师网络的网络训练得到的soft label和ground truth进行联合学习,蒸馏的关键是:教师网络训练得到一个soft label

    1. 1 soft label

    在这里插入图片描述
    以手写数字为例,教师网络对数字1的预测标签为"1":0.7,"7":2,"9":0.1,这里1的预测概率最大为0.7是正确的分类,但是标签"7","9"的预测概率也能提供一些信息,就是说7,9和预测标签1还是有某种预测的相似度的。如果把这个信息也教会学生网络,学生网络就可以了解到这种类别之间的相似度,可以看作为学习到了教师网络中隐藏的知识,对于学生网络的分类是有帮助的。

    1. 2 Softmax的升温(T)操作

    蒸馏的时候一般都需要进行升温操作,以分类网络为例,需要改进softmax,除以T
    在这里插入图片描述
    左边是正常的softmax计算,右边引入一个超参T来计算softmax,即把 y i y_i yi都除以T再进行softmax计算。结果会有什么不同呢?

    假设左边的y1,y2,y3的分类结果,分别是100,10,1,没有进行升温操作,带入softmax之后 y 1 ′ y_1^{'} y1接近1 y 2 ′ y_2^{'} y2 y 3 ′ y_3^{'} y3都接近于0。经过升温操作之后, y 1 ′ = 0.56 , y 2 ′ = 0.23 , y 3 ′ = 0.21 y_1^{'}=0.56 ,y_2^{'}=0.23,y_3^{'}=0.21 y1=0.56,y2=0.23,y3=0.21。此时 y 1 ′ , y 2 ′ , y 3 ′ y_1^{'},y_2^{'},y_3^{'} y1,y2,y3之间的差异就没有那么大了,也就是说能够把类别之间隐藏的关系给暴露出来,所以做蒸馏操作一般都需要除以T来进行升温操作。

    如图所示,对首先数1识别进一步说明:
    在这里插入图片描述

    • 手写数字17比较相似,在没有升温T之前,预测标签17经过softmax输出的概率分别为0.990.011和7之间的差异是比较大的,网络没有学习到1与7比较相似这种隐藏信息。
    • 假设施加升温T=5的话,得到的最终概率为0.620.28,相当于把预测值进行了软化,这种预测值称为softened predictions

    1. 3 知识蒸馏的损失计算

    在这里插入图片描述
    在分类网络中知识蒸馏的Loss计算

    • 上部分教师网络,它进行预测的时候,softmax要进行升温,升温后的预测结果我们称为软标签(soft label)
    • 学生网络一个分支softmax的时候也进行升温,在预测的时候得到软预测(soft predictions),然后对soft labelsoft predictions计算损失函数,称为distillation loss,让学生网络的预测结果接近教师网络;
    • 学生网络的另一个分支,在softmax的时候不进行升温T=1,此时预测的结果叫做hard prediction 。然后和hard label也就是ground truth直接计算损失,称为student loss
    • 总的损失结合了distillation loss 和 student loss,并通过系数 a a a加权,来平衡这两种Loss ,比如与教师网络通过MSE损失,学生网络与ground truth通过 cross entropy损失,Loss的公式可表示如下:
      在这里插入图片描述

    1. 4 目标检测中的知识蒸馏的损失

    在这里插入图片描述
    对目标检测知识蒸馏稍微复杂点,目标检测既有物体分类又有物体边界框的预测,学生网络可以从教师网络中进行物体分类的学习,也可以进行边界框的学习,同时也可以从ground truth进行学习。

    在论文Object scaled Distllation介绍了知识蒸馏相关的内容。
    在这里插入图片描述
    训练的损失函数由3部分构成
    在这里插入图片描述
    三种损失分别为: f b b C o m b f_{bb}^{Comb} fbbComb 边界框的损失, f c l C o m b f_{cl}^{Comb} fclComb 分类的损失, f o b j C o m b f_{obj}^{Comb} fobjComb 目标置信度的损失。在目标检测的知识蒸馏中,每种损失都包括:Detection lossDistillation loss,Detection loss是学生网络和ground truth之间的损失;Distillation loss是学生网络和教师网络之间的损失。

    • 对于 f o b j C o m b f_{obj}^{Comb} fobjComb 的损失的计算如下,包含两部分:Detection loss 和Distillation loss
      在这里插入图片描述
    • 对于 f c l C o m b f_{cl}^{Comb} fclComb 分类损失,考虑了object scaled ,在蒸馏损失部分引入了 o i T o_i^{T} oiT加权因子, o i T o_i^{T} oiT为0~1之间的值,object scaled越接近1表示越可能是目标,越接近0表示越可能是背景,如果是目标比较低,乘以一个比较小的值,对模型的训练是有帮助的。
      在这里插入图片描述
    • 对于 f c l C o m b f_{cl}^{Comb} fclComb 分类损失,同样也考虑了object scaled ,在蒸馏损失部分引入了 o i T o_i^{T} oiT加权因子
      在这里插入图片描述

    2 项目实战:Yolov5 目标检测之知识蒸馏实战

    在这里插入图片描述
    我们使用Yolov5m较大的网络作为教师网络,指导学生网络YOLOv5s的学习,对

    Yolov5知识蒸馏的效果

    在这里插入图片描述
    蒸馏之后,学生网络YOLOv5s的Precision由蒸馏前的0.891变为蒸馏后的0.924,效果提升了3个点。 mAP0.5 由蒸馏前的0.898,变为蒸馏后的0.935将近提升了4个点。

    这种知识蒸馏方法,通过训练过程做一些工作,就能达到预测性能提升,几乎不需要任何代价就能提升网络的性能。

    后续博客安排

    后续博客将会针对Yolov5 目标检测之知识蒸馏实战进行详细讲解,项目内容包括:

    • 环境的安装
    • Yolov5项目的准备
    • 准备自己的训练数据集
    • 训练学生网络(YOLOv5s)
    • 训练教师网络(YoLOv5m)
    • 知识蒸馏训练
  • 相关阅读:
    IPsec协议
    Spring MVC更多家族成员--国际化视图与LocalResolver---10
    [linux]信号处理:信号编码、基本API、自定义函数和集合操作的详解
    【Python算法】(一)递归:美术馆艺术大盗问题
    阿里云Linux中安装MySQL,并使用navicat连接以及报错解决
    jmeter JDBC Request参数化
    @Controller VS @RestController 对比解析
    Dajngo01_Django框架基础与环境搭建
    UE5、CesiumForUnreal实现加载GeoJson绘制单面(Polygon)功能(StaticMesh方式)
    测试C#分词工具jieba.NET(续1:提取关键词及并行分词)
  • 原文地址:https://blog.csdn.net/weixin_38346042/article/details/126065848