典型常见的知识蒸馏方法总结一

来源:https://github.com/HobbitLong/RepDistiller收录的方法

NeurIPS2015: Distilling the Knowledge in a Neural Network

在这里插入图片描述

知识蒸馏开山之作,从logits中蒸馏知识,KL散度损失

ICLR2015:FitNets: Hints for Thin Deep Nets

A hint is defined as the output of a teacher’s hidden layer responsible for guiding the student’s learning process,

we choose a hidden layer of the student, the guided layer, to learn from the teacher’s hint layer

Similarly, we choose the guided layer to be the middle layer of the student network

在这里插入图片描述
与输出的logits概率分布不同,hints最小化教师与学生之间的特征距离,采用L2距离。
在这里插入图片描述

ICLR2017:Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer

在这里插入图片描述

propose attention as a mechanism of transferring knowledge from one network to another 提出将注意力机制作为知识蒸馏的一种方式
propose the use of both activation-based and gradient-based spatial attention maps 提出同时使用基于激活和基于梯度的空间注意力图
show experimentally that our approach provides significant improvements across a variety of datasets and deep network architectures, including both residual and non-residual networks 实验展示了好的效果
show that activation-based attention transfer gives better improvements than full activation transfer, and can be combined with knowledge distillation 基于激活的注意力转移方式优于完全激活的转移
基于激活的注意力图

论文中定义了三种spatial attention的计算方式
在这里插入图片描述

在这里插入图片描述

并给出L1或者L2标准化之后的attention蒸馏损失,还强调it is worth emphasizing that normalization of attention maps is important for the success of the student training

基于梯度的注意力图

在这里插入图片描述

ICCV 2019:Similarity-Preserving Knowledge Distillation

在本文中,我们提出了一种新形式的知识蒸馏损失,其灵感源于这样一个观察结果:语义相似的输入往往会在经过训练的网络中引发相似的激活模式。
保持相似性的知识蒸馏会引导学生网络的训练,使得在教师网络中能产生相似(不相似)激活情况的输入对,在学生网络中也能产生相似(不相似)的激活情况。与以往的蒸馏方法不同,学生网络不需要去模仿教师网络的表示空间,而是要在其自身的表示空间中保持成对的相似性。

在这里插入图片描述
在这里插入图片描述

本文提出了余弦自相似性表示矩阵,和Frobenius 范数来作为蒸馏损失

ICCV 2019:Correlation Congruence for Knowledge Distillation

1. propose a new framework named correlation congruence for knowledge distillation (CCKD), which transfers not only the instance-level information but also the correlation between instances.

在这里插入图片描述

2. a generalized kernel method based on Taylor series expansion is proposed to better capture the correlation between instances.

在这里插入图片描述

CVPR 2019:Variational Information Distillation for Knowledge Transfer

提出了variational information distillation,借助于最大化教师学生之间的互信息

mutual information between two networks based on the variational information maximization

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CVPR 2019:Relational Knowledge Distillation

在这里插入图片描述

RKD aims at transferring structural knowledge using mutual relations of data examples

定义了两种relation,一种是基于距离的2个样本之间的relation,另一种是三个样本之间的余弦角度relation

Distance-wise

在这里插入图片描述
在这里插入图片描述

Angle-wise Distillation

在这里插入图片描述

ECCV 2018:Learning Deep Representations with Probabilistic Knowledge Transfer

在这里插入图片描述

本文提出一个 基于概率的知识转移 (probabilistic knowledge transfer) 的方法。通过概率分布来建模数据的关系,然后通过最大化互信息,将teacher的概率分布知识传递给学生。

使用Teacher的数据之间的条件概率分布,作为知识的载体,传递给Student。

核心思想就是,建模 Teacher和Student的输出之间分布。通过Kernel Density Estimation可以将两个样本i与j之间的概率表示为
在这里插入图片描述

考虑到概率和为1,可以构造成:
在这里插入图片描述
在这里插入图片描述
利用KL散度来最小化教师与学生模型之间概率分布的差异
在这里插入图片描述

可以参考知乎

AAAI 2019:Knowledge Transfer via Distillation of Activation Boundaries Formed by Hidden Neurons

在介绍方法之前,本文首先定义了两种feature-based的知识蒸馏方法。

第一种是在学生神经网络学习对输入图像进行分类的过程中传递神经元响应,在这种情况下,交叉熵损失和传递损失会结合起来,形成一个单一的综合损失,用于整个训练过程。

第二种方法是在用标签训练学生之前,通过传递教师神经元响应来初始化学生网络。在基于蒸馏损失完成网络初始化后,再依据交叉熵损失对学生网络进行分类训练。

本文讨论第二种feature-based的知识蒸馏方法,即将这种知识蒸馏用于学生网络的初始化学习或者预训练。

所提出的知识传递方法的概念。所提方法聚焦于神经元的激活情况,而非神经元响应的幅度。这种聚焦能够实现对激活边界更精准的传递。
所提出的知识传递方法的概念。所提方法聚焦于神经元的激活情况,而非神经元响应的幅度。这种聚焦能够实现对激活边界更精准的传递。

普通的特征激活蒸馏损失函数

在这里插入图片描述

论文所提出的基于激活边界的蒸馏损失函数

用 max(0,1)来取代ReLU,用L1来取代L2

在这里插入图片描述
但是max(0,1)不连续可微,因此公式(3)中的损失函数不可导,所以不能作为可微分的损失函数

激活传递损失适用于激活边界的传递。然而,由于max(0,1)是一个离散函数,激活传递损失无法通过梯度下降法来最小化。因此,我们提出了一种可通过梯度下降法最小化的替代损失。
最小化激活传递损失与学习一个二元分类器类似。教师神经元的激活情况对应着类别标签。如果教师神经元处于激活状态,那么学生神经元的响应应该大于 0;如果教师神经元处于未激活状态,那么学生神经元的响应应该小于 0。受这种相似性的启发,该替代损失的设计与支持向量机(SVM)(科尔特斯(Cortes)和瓦普尼克(Vapnik)1995 年)中使用的合页损失the hinge loss(罗萨斯科(Rosasco)等人 2004 年)类似。
在这里插入图片描述
将所提出的损失应用于H*W的特征图蒸馏,损失函数可以定义为H和W维度的累加
在这里插入图片描述

NeurIPS 2018:Paraphrasing Complex Network: Network Compression via Factor Transfer

在本文中,我们提出了一种新颖的知识迁移方法,该方法运用卷积操作对教师的知识进行释义,并将其转化以便学生网络使用。这一过程通过两个卷积模块来实现,它们分别被称作 “释义器” 和 “转换器”。“释义器” 通过无监督的方式进行训练,以提取 “教师因子”,“教师因子” 被定义为教师网络的释义信息。位于学生网络的 “转换器” 会提取 “学生因子”,并通过模仿 “教师因子” 来帮助实现对其的转化。
我们观察到,采用我们所提出的因子迁移方法训练的学生网络,其性能优于采用传统知识迁移方法训练的学生网络。
在这里插入图片描述在这里插入图片描述

常言道,如果一个人完全理解某样事物,那么他 / 她应该能够自行对其作出解释。相应地,如果学生网络能够通过训练来复制所提取的信息,这就意味着该学生网络很好地掌握了相关知识。
在本节中,我们将释义器中间层的输出定义为教师网络的 “教师因子”,而对于学生网络,我们利用由若干卷积层构成的转换器来生成 “学生因子”,并训练这些 “学生因子” 去复制 “教师因子”,如图 1 所示。借助这些模块,我们的知识迁移过程主要包含以下两个步骤:

第一步,通过重建损失对释义器进行训练。然后,利用释义器从教师网络中提取 “教师因子”。

在这里插入图片描述
x是教师网络的特征,P是paraphraser的函数,类似于auto-encoder的自监督重建损失。

第二步,将这些 “教师因子” 迁移转化为 “学生因子”,以便学生网络从中学习。

第二步,教师网络和教师的paraphraser权重冻结,利用FT蒸馏损失和交叉熵损失来训练学生网络
在这里插入图片描述
在这里插入图片描述

蒸馏损失为 将教师网络paraphraser输出的特征和学生网络translator输出的特征进行L2归一化之后,最小化他们之间的L1距离损失

CVPR 2017: A gift from knowledge distillation: Fast optimization, network minimization and transfer learning

我们引入了一种新颖的知识迁移技术,在该技术中,来自预训练深度神经网络(DNN)的知识会被提炼出来并迁移至另一个深度神经网络。由于深度神经网络是通过依次经过多个层将输入空间映射到输出空间的,我们将待迁移的提炼知识依据层间的 “流” 来进行定义,这种 “流” 是通过计算来自两层的特征之间的内积来得出的
当我们将学生深度神经网络与和其规模相同但未经教师网络训练的原始网络进行对比时,所提出的将提炼知识作为两层之间的 “流” 进行迁移的方法呈现出三个重要现象:(1)学习了提炼知识的学生深度神经网络的优化速度比原始模型快得多;(2)学生深度神经网络的性能优于原始深度神经网络;(3)学生深度神经网络能够从针对不同任务训练的教师深度神经网络那里学习提炼知识,而且其性能优于从头开始训练的原始深度神经网络。

通过内积计算两个特征层的FSP矩阵

在这里插入图片描述

第一步,计算两个特征F1和F2之间的FSP矩阵G

在这里插入图片描述

第二步,对教师和学生网络的FSP矩阵进行蒸馏损失计算,损失为均方L2损失

在这里插入图片描述

蒸馏整体架构,多个特征阶段的FSP损失传递

在这里插入图片描述

训练过程,分为两个阶段,第一阶段通过蒸馏损失只优化教师与学生之间的FSP矩阵进行预训练,第二阶段通过标签优化学生的任务损失

在这里插入图片描述

arXiv 2017:Like what you like: Knowledge distill via neuron selectivity transfer

In this paper, we propose a novel knowledge transfer method by treating it as a distribution matching problem. 在本文中,我们提出了一种新颖的知识迁移方法,将其视为一个分布匹配问题来处理。具体而言,我们对教师网络和学生网络之间神经元选择性模式的分布进行匹配。为实现这一目标,我们通过最小化这些分布之间的最大均值差异(MMD)度量设计了一种新的知识迁移(KT)损失函数。将其与原始损失函数相结合,我们的方法能够显著提升学生网络的性能。

我们在多个数据集上验证了该方法的有效性,并进一步将其与其他知识迁移方法相结合,以探索最佳可能的结果。最后但同样重要的是,我们针对诸如目标检测等其他任务对模型进行微调。所得结果同样令人鼓舞,这证实了所学特征的可迁移性。

在这里插入图片描述

学生网络不仅依据真实标签进行训练,而且还会模仿教师网络中间层激活情况的分布。图中的每个圆点或三角形都代表其相应的滤波器激活图。
最大均值差异MMD损失的介绍

在这里插入图片描述

Minimizing the MMD loss is equivalent to transferring neuron selectivity knowledge from teacher to student

在这里插入图片描述
在这里插入图片描述

Linear 形式:

在这里插入图片描述

Polynomial形式

在这里插入图片描述

本文核心思想,就是让学生的中间特征与教师的中间特征之间的分布尽可能接近,采用MMD损失对将两者进行匹配,可视化结果为:

在这里插入图片描述
在这里插入图片描述

CVPR 2018: Deep mutual learning

Large scale distributed neural network training through online distillation

Training shallow and thin networks for acceleration via knowledge distillation with conditional adversarial networks

Improving knowledge distillation with supporting adversarial samples

Knowledge distillation with adversarial samples supporting decision boundary

<think>好的,用户想了解YOLO模型的知识蒸馏方法或实现。首先,我需要回忆知识蒸馏的基本概念,它通常是指将大型教师模型的知识迁移到小型学生模型上,以提高学生模型的效率和性能。YOLO作为目标检测模型,知识蒸馏的应用可能有其特定的挑战,比如如何处理检测任务中的定位和分类双重任务。 接下来,我应该查找YOLO知识蒸馏的相关资料。记得在参考引用中有个关于目标检测的概述,可能提到了单阶段方法,比如YOLO[^1]。此外,用户提供的引用[2]可能包含实践代码或教程,但内容看起来比较宽泛,可能需要更多的具体信息。 需要确定YOLO知识蒸馏的具体技术。常见知识蒸馏方法包括特征模仿、响应蒸馏以及注意力转移等。在目标检测中,可能不仅需要处理分类输出,还要处理边界框回归。例如,教师模型和学生模型在特征图上的对齐可能很重要,尤其是不同尺度的特征图。 实现方面,YOLOv5或YOLOv8可能有相关的开源项目或代码示例。用户可能需要具体的实现步骤,比如如何定义损失函数,如何结合教师和学生的输出。例如,在YOLOv5中,可以在模型训练时加载教师模型的权重,并在损失函数中加入蒸馏损失项,如KL散度或MSE损失。 还需要考虑蒸馏策略,比如是否在特征层、预测层或两者同时进行蒸馏。比如,方法提出在neck部分进行特征模仿,或者在head部分进行响应蒸馏。同时,可能需要调整损失权重,平衡原始检测损失和蒸馏损失。 另外,数据增强在蒸馏中的作用也很重要,弱增强和强增强的组合使用可能影响蒸馏效果。例如,教师模型在强增强数据上训练,学生模型在弱增强数据上学习教师的输出,这样可以提升泛化能力。 可能遇到的问题包括教师模型和学生模型的结构差异,如何处理不同尺度的特征图,以及如何有效传递定位知识。例如,使用自适应层来匹配教师和学生特征图的尺寸,或者设计针对边界框回归的蒸馏损失函数。 最后,需要总结常见的实现技巧,如损失函数设计、特征对齐方法、训练策略等,并给出具体的代码示例或参考资源。可能还需要提到些优化技巧,如温度参数调整、逐步蒸馏等。</think>### YOLO知识蒸馏方法及实现 知识蒸馏(Knowledge Distillation)在YOLO系列中的应用主要通过**特征模仿**、**响应蒸馏**和**注意力转移**三种形式实现,核心目标是让轻量级学生模型(Student)模仿高性能教师模型(Teacher)的输出特征或中间特征。以下是具体方法和技术实现: --- #### 、核心蒸馏方法 1. **特征模仿(Feature Mimicking)** - **操作方式**:对齐教师模型和学生模型的特征图,例如在YOLOv5中通过设计自适应层(Adaptation Layer)匹配不同尺度的特征图尺寸 - **损失函数**: $$L_{feat} = \sum_{l} \lambda_l \cdot MSE(F_{T}^{(l)}, F_{S}^{(l)})$$ 其中$F_{T}^{(l)}$和$F_{S}^{(l)}$分别表示教师和学生模型第$l$层的特征图,$\lambda_l$为权重系数 2. **响应蒸馏(Response Distillation)** - **分类分支**:使用KL散度对齐分类得分: $$L_{cls} = KL(\sigma(\frac{p_T}{\tau}), \sigma(\frac{p_S}{\tau}))$$ 其中$\tau$为温度参数,$\sigma$为Softmax函数 - **回归分支**:通过L1/L2损失对齐边界框坐标预测: $$L_{reg} = \sum_{i} ||b_{T}^{(i)} - b_{S}^{(i)}||_2$$ 3. **注意力蒸馏(Attention Distillation)** - 提取教师模型的特征图注意力权重(如Grad-CAM),强制学生模型学习相似的注意力分布[^2] --- #### 二、实现步骤(以YOLOv5为例) ```python # 伪代码示例 import torch from models.yolo import Model # 加载教师模型和学生模型 teacher = Model("yolov5x.yaml").load("yolov5x.pt") student = Model("yolov5s.yaml") # 定义蒸馏损失函数 def distillation_loss(t_output, s_output, tau=3.0): # 分类损失 t_cls = torch.softmax(t_output[0]/tau, dim=-1) s_cls = torch.log_softmax(s_output[0]/tau, dim=-1) loss_cls = F.kl_div(s_cls, t_cls, reduction='batchmean') # 回归损失 loss_reg = F.mse_loss(t_output[1], s_output[1]) return 0.5*loss_cls + 0.5*loss_reg # 训练循环 for images, targets in dataloader: with torch.no_grad(): t_preds = teacher(images) s_preds = student(images) # 总损失 = 原始检测损失 + 蒸馏损失 loss = original_detection_loss(s_preds, targets) + distillation_loss(t_preds, s_preds) loss.backward() optimizer.step() ``` --- #### 三、优化技巧 1. **渐进式蒸馏**:逐步增加蒸馏损失的权重,避免早期训练不稳定 2. **多教师蒸馏**:融合多个教师模型的输出提升鲁棒性 3. **特征解耦**:对分类和回归任务分别设计蒸馏路径[^1] 4. **自适应温度**:动态调整$\tau$参数平衡软标签的平滑度 --- #### 四、典型应用场景 1. 移动端/边缘设备部署(如YOLOv5n → YOLOv5s) 2. 多任务模型压缩(检测+分割联合蒸馏) 3. 跨模态知识迁移(RGB→红外检测模型) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值