YoloV8改进策略:蒸馏改进|CWDLoss|使用蒸馏模型实现YoloV8无损涨点|特征蒸馏

摘要

在本文中,我们成功应用蒸馏策略以实现YoloV8小模型的无损性能提升。我们采用了CWDLoss作为蒸馏方法的核心,通过对比在线和离线两种蒸馏方式,我们发现离线蒸馏在效果上更为出色。因此,为了方便广大读者和研究者应用,本文所描述的蒸馏方法仅保留了离线蒸馏方案。此外,我们还提供了相关论文的译文,旨在帮助大家更深入地理解蒸馏方法的原理和应用。

论文翻译:《用于密集预测任务的通道知识蒸馏》

https://arxiv.org/pdf/2011.13256
知识蒸馏(KD)已被证明是训练紧凑密集预测模型的简单有效工具。通过从大型教师网络转移而来的额外监督来训练轻量级学生网络。大多数先前的针对密集预测任务的KD变体都在空间域中对学生网络和教师网络的激活图进行对齐,通常是通过在每个空间位置标准化激活值并最小化逐点和/或成对差异来实现的。与先前的方法不同,我们提出对每个通道的激活图进行标准化以获得软概率图。通过简单地最小化两个网络的通道概率图之间的Kullback-Leibler(KL)散度,蒸馏过程更关注于每个通道的最显著区域,这对于密集预测任务来说是非常有价值的。

我们在一些密集预测任务上进行了实验,包括语义分割和对象检测。实验表明,我们提出的方法在性能上显著优于最先进的蒸馏方法,并且在训练过程中需要的计算成本更低。特别地,我们在COCO数据集上将RetinaNet检测器(ResNet50主干)的mAP提高了3.4%,在Cityscapes数据集上将PSPNet(ResNet 18主干)的mIoU提高了5.81%。代码可在以下网址获取:
https://git.io/Distiller

在这里插入图片描述

1、引言

密集预测任务是计算机视觉中的一组基础任务,包括语义分割[48,6]和对象检测[21,30]。这些任务需要在像素级别上学习强大的特征表示,以实现对复杂场景的理解。因此,最先进的模型通常需要高计算成本,这使得它们难以部署到移动设备上。因此,针对密集预测任务设计的紧凑网络引起了广泛关注。此外,先前的工作已经研究了通过使用知识蒸馏(KD)来有效训练轻量级网络。紧凑网络在大教师网络的监督下进行训练,可以获得更好的性能。对于图像分类任务,已经提出了许多开创性的工作[16,2]并进行了深入研究。

密集预测任务是逐像素预测问题,比图像级分类更具挑战性。先前的研究[25,20]发现,直接将分类中的KD方法[16,2]转移到语义分割可能无法获得令人满意的结果。严格对齐教师和学生网络之间的逐点分类分数或特征图可能会施加过于严格的约束,导致次优解。
在这里插入图片描述

最近的工作[25,24,18]关注于加强不同空间位置之间的相关性。如图2(a)所示,每个空间位置的激活值{}^{1}被标准化。然后,通过聚合不同空间位置的一个子集来执行一些特定于任务的关系,例如成对关系[25,35]和类间关系[18]。这样的方法可能在捕获空间结构信息方面比逐点对齐更好,并提高学生网络的性能。

然而,在激活图中,每个空间位置对知识转移的贡献是相等的,这可能会从教师网络中带来冗余信息。

在这项工作中,我们提出了一种新颖的针对密集预测任务的通道级知识蒸馏方法,通过标准化每个通道的激活图来实现,如图2(b)所示。然后,我们最小化了教师网络和学生网络之间标准化通道激活图的非对称Kullback-Leibler(KL)散度,这些激活图被转换为每个通道的分布。我们在图2©中展示了通道级分布的一个示例。每个通道的激活倾向于编码场景类别的显著性。对于每个通道,学生网络被引导更多地关注于模仿具有显著激活值的区域,从而在密集预测任务中实现更准确的定位。例如,在对象检测中,学生网络更加关注于学习前景对象的激活。

最近的一些工作利用了通道中包含的知识。通道蒸馏[50]提出将每个通道的激活转换为一个聚合的标量,这对于图像级分类可能有所帮助,但空间聚合丢失了所有空间信息,因此不适合密集预测。其他工作,如MGD[41]、通道交换[33]和CSC[26]显示了通道级信息的重要性。MGD将教师通道与学生通道进行匹配,并将其视为一个分配问题来解决。通道交换[33]使用一个融合模块来动态地在不同模态的子网络之间交换通道。

我们展示了针对每个通道的简单标准化操作可以极大地提高基于空间蒸馏的基线性能。所提出的通道级蒸馏方法简单且易于应用于各种任务和网络结构。我们总结我们的主要贡献如下:

  • 与现有的空间蒸馏方法不同,我们为密集预测任务提出了一种新颖的通道级蒸馏范式。我们的方法简单但有效。
  • 所提出的通道级蒸馏在语义分割和对象检测方面显著优于最先进的KD方法。
  • 我们在四个基准数据集上展示了使用不同网络结构在语义分割和对象检测任务上的一致改进,证明了我们的方法是通用的。鉴于其简单性和有效性,我们相信我们的方法可以作为密集预测任务的强大基线KD方法。

2、相关工作

在知识蒸馏领域,大多数工作都集中在分类任务上[11,12,16,27,36,38,45]。然而,这里的工作旨在研究针对密集预测任务的高效和有效的蒸馏方法,而不仅仅是像分类任务中那样简单地应用逐像素蒸馏。

语义分割的知识蒸馏。在[35]中,构建了一个局部相似度图来最小化教师网络和学生网络之间分割边界信息的差异,其中使用中心像素与其8个邻域像素之间的欧几里得距离作为传输的知识。Liu等人[24,25]提出了两种方法来捕捉像素之间的结构化信息,包括像素之间的成对相似性和由判别器捕获的全局相关性。在[34]的工作中,重点在于具有相同标签的像素之间的类内特征变化,其中通过构建每个像素的特征与其对应的类级原型之间的余弦距离集来传输结构知识。He等人[14]则采用了一个特征适配器来减轻教师网络和学生网络之间的特征不匹配问题。

此外,正如您所提到的,通道级的知识蒸馏方法在密集预测任务中也逐渐受到关注。例如,一些方法通过标准化每个通道的激活图并最小化教师网络和学生网络之间标准化通道激活图的非对称KL散度来改进知识蒸馏的效果。这种方法能够让学生网络更加关注于模仿具有显著激活值的区域,从而实现更准确的定位。与现有的空间蒸馏方法相比,通道级蒸馏在语义分割和对象检测方面表现出了显著的性能提升,并证明了其在不同网络结构和基准数据集上的通用性。

目标检测的知识蒸馏。在目标检测任务中,许多方法发现区分前景和背景区域在蒸馏过程中非常重要。例如,MIMIC [20]通过 L 2 L_{2} L2损失强制学生网络的RPN内部特征图与教师网络相似,并发现直接应用逐像素损失可能会损害目标检测的性能。Wang等人 [32] 提出蒸馏对象锚点位置附近的细粒度特征。Zhang和Ma [43] 使用注意力生成的掩码来区分前景和背景,取得了显著的效果。

然而,与这些方法不同,我们的方法通过柔和地对齐通道激活来区分前景和背景区域。具体来说,我们关注每个通道中包含的知识。最近的一些工作 [50] 也开始关注每个通道中包含的知识。例如,Zhou等人计算每个通道中激活的平均值,并在分类任务中对每个通道的加权差异进行对齐。CSC [26] 计算所有空间位置和所有通道之间的成对关系以传输知识。而Channel exchanging [33] 提出每个通道中包含的信息是通用的,可以在不同的模态之间共享。

3、我们的方法

我们首先回顾文献中相关的空间知识蒸馏方法。

3.1、空间蒸馏

现有的KD方法通常采用逐点对齐或对齐空间位置之间的结构化信息,这可以表示为:

ℓ ( y , y S ) + α ⋅ φ ( ϕ ( y T ) , ϕ ( y S ) ) \ell(y, y^{S}) + \alpha \cdot \varphi(\phi(y^{T}), \phi(y^{S})) (y,yS)+αφ(ϕ(yT),ϕ(yS))

在这里,任务损失 ℓ ( ⋅ ) \ell(\cdot) ()仍然被应用,其中 y y y是真实标签。例如,在语义分割中,通常使用交叉熵损失。为了稍微滥用符号,这里 y S y^{S} yS y T y^{T} yT分别代表学生网络和教师网络的logits或内部激活。 α \alpha α是一个超参数,用于平衡损失项。下标 T {}^{T} T S {}^{S} S分别表示教师网络和学生网络。我们在表1中列出了代表性的空间蒸馏方法。

这些方法的简要概述如下。注意力转移(Attention Transfer,AT)[42]使用注意力掩码将特征图压缩为单个通道以进行蒸馏。逐像素损失(Pixel-wise Loss)[17]直接对齐逐点的类别概率。局部亲和力(Local Affinity)[35]通过中心像素与其8个邻域像素之间的距离来计算。成对亲和力(Pairwise Affinity)[25, 14, 24]被用来传递像素对之间的相似性。计算每个像素的特征与其对应的类别原型之间的相似性以传递结构知识[34]。在[25, 24]中的整体损失使用对抗性方案来对齐两个网络特征图之间的高阶关系。请注意,最后四项考虑了像素之间的相关性。如表1所示,现有的KD方法都是空间蒸馏方法。所有这些方法都将空间位置上的 N N N个通道激活值作为特征向量进行操作。
在这里插入图片描述

3.2、通道蒸馏

为了更好地利用每个通道中的知识,我们提出了在教师网络和学生网络之间柔和地对齐对应通道激活的方法。为此,我们首先将一个通道的激活转换为概率分布,这样我们就可以使用概率距离度量(如KL散度)来衡量差异。如图2©所示,不同通道的激活倾向于编码输入图像的场景类别的显著性。此外,经过良好训练的语义分割教师网络显示出每个通道清晰的特定于类别的掩码激活图,如图1右侧所示。在这里,我们提出了一种新颖的通道蒸馏范式,以指导学生从训练有素的教师那里学习知识。

当我们使用LaTeX格式来表示数学符号时,我们会使用$符号来包围LaTeX代码。对于您提供的文本,我们可以将其转化为LaTeX格式,并用$符号包围起来。以下是转化后的结果:

教师网络和学生网络分别表示为 T T T S S S,来自 T T T S S S 的激活图分别为 y T y^{T} yT y S y^{S} yS。通道蒸馏损失可以一般性地表示为:

φ ( ϕ ( y T ) , ϕ ( y S ) ) = φ ( ϕ ( y c T ) , ϕ ( y c S ) ) . \varphi\left(\phi\left(y^{T}\right), \phi\left(y^{S}\right)\right)=\varphi\left(\phi\left(y_{c}^{T}\right), \phi\left(y_{c}^{S}\right)\right) \,. φ(ϕ(yT),ϕ(yS))=φ(ϕ(ycT),ϕ(ycS)).

ϕ ( ⋅ ) \phi(\cdot) ϕ() 用于将激活值转换为概率分布,具体为:

ϕ ( y c ) = exp ⁡ ( y c , i T ) ∑ i = 1 W ⋅ H exp ⁡ ( y c , i T ) , \phi\left(y_{c}\right)=\frac{\exp \left(\frac{y_{c, i}}{T}\right)}{\sum_{i=1}^{W \cdot H} \exp \left(\frac{y_{c, i}}{T}\right)} \,, ϕ(yc)=i=1WHexp(Tyc,i)exp(Tyc,i),

其中 c = 1 , 2 , … , C c=1,2,\ldots,C c=1,2,,C 索引通道; i i i 索引通道中的空间位置。 T T T 是一个超参数(温度)。如果教师和学生之间的通道数不匹配,我们会使用一个 1 × 1 1 \times 1 1×1 的卷积层来上采样学生网络的通道数。 φ ( ⋅ ) \varphi(\cdot) φ() 评估了来自教师网络和学生网络的通道分布之间的差异。我们使用 KL 散度:

φ ( y T , y S ) = T 2 C ∑ c = 1 C ∑ i = 1 W ⋅ H ϕ ( y c , i T ) ⋅ log ⁡ [ ϕ ( y c , i T ) ϕ ( y c , i S ) ] . \varphi\left(y^{T}, y^{S}\right)=\frac{\mathcal{T}^{2}}{C} \sum_{c=1}^{C} \sum_{i=1}^{W \cdot H} \phi\left(y_{c, i}^{T}\right) \cdot \log \left[\frac{\phi\left(y_{c, i}^{T}\right)}{\phi\left(y_{c, i}^{S}\right)}\right] \,. φ(yT,yS)=CT2c=1Ci=1WHϕ(yc,iT)log[ϕ(yc,iS)ϕ(yc,iT)].

KL 散度是一个不对称度量。从上面的方程中我们可以看到,如果 ϕ ( y c , i T ) \phi\left(y_{c, i}^{T}\right) ϕ(yc,iT) 很大, ϕ ( y c , i S ) \phi\left(y_{c, i}^{S}\right) ϕ(yc,iS) 也应该尽可能大以最小化 KL 散度。否则,如果 ϕ ( y c , i T ) \phi\left(y_{c, i}^{T}\right) ϕ(yc,iT) 非常小,KL 散度就不会太关注最小化 ϕ ( y c , i S ) \phi\left(y_{c, i}^{S}\right) ϕ(yc,iS) 的值。

KL散度是一个非对称度量。从方程(4)中我们可以看到,如果 ϕ ( y c , i T ) \phi\left(y_{c, i}^{T}\right) ϕ(yc,iT)很大,为了最小化KL散度, ϕ ( y c , i S ) \phi\left(y_{c, i}^{S}\right) ϕ(yc,iS)也应该尽可能地大,与 ϕ ( y c , i T ) \phi\left(y_{c, i}^{T}\right) ϕ(yc,iT)一样大。否则,如果 ϕ ( y c , i T ) \phi\left(y_{c, i}^{T}\right) ϕ(yc,iT)非常小,KL散度在最小化 ϕ ( y c , i S ) \phi\left(y_{c, i}^{S}\right) ϕ(yc,iS)时就不会太关注。因此,学生网络倾向于在前景显著区域产生类似的激活分布,而教师网络背景区域对应的激活对学习的影响较小。我们假设KL的这种非对称性质有利于密集预测任务的KD学习。

4、实验

在本节中,我们首先描述实现细节和实验设置。然后,我们将我们的通道级蒸馏方法与其他最先进的蒸馏方法进行比较,并在语义分割任务上进行消融研究。最后,我们在语义分割和对象检测任务上展示了使用不同基准和学生网络结构时的一致改进。

4.1、实验设置

数据集。我们在这里使用了三个公开的语义分割基准数据集,分别是Cityscapes [8]、ADE20K [49]和Pascal VOC [10]。此外,我们还将提出的蒸馏方法应用于MS-COCO 2017 [23]上的对象检测任务,这是一个包含超过120k张80个类别的图像的大规模数据集。

Cityscapes 数据集用于城市场景语义理解。它包含5,000张精细标注的图像,其中2,975/500/1,525张图像分别用于训练/验证/测试,提供了30个常见类别,其中19个类别用于评估和测试。每张图像的尺寸为2048x1024像素。这些图像来自50个不同的城市。在我们的实验中,我们没有使用粗略标注的数据。

Pascal VOC 数据集包含 1 , 464 / 1 , 449 / 1 , 456 1,464 / 1,449 / 1,456 1,464/1,449/1,456 张图像用于训练/验证/测试。它包含20个前景对象类别和一个额外的背景类别。此外,该数据集通过额外的粗略标注进行了扩充,其中包含10,582张训练图像。我们使用训练分割进行训练,并在21个类别上通过验证集测量最终性能。

ADE20K 数据集涵盖了150个不同场景的类别。它包含 20 K / 2 K / 3 K 20 \text{K} / 2 \text{K} / 3 \text{K} 20K/2K/3K 张图像用于训练、验证和测试。在我们的实验中,我们报告了验证集上的分割精度。

评估指标。为了评估我们在语义分割上提出的通道分布蒸馏方法的性能和效率,我们遵循先前的工作[18,24],在所有实验中通过单尺度设置下的平均交并比(mIoU)来测试每种策略。每秒浮点运算次数(FLOPs)是在固定输入大小为 512 × 1024 512 \times 1024 512×1024 像素的情况下计算的。此外,对于Pascal VOC和ADE20K,我们列出了平均类别准确率(mAcc)。为了评估在对象检测上的性能,我们报告了平均精度(mAP)、推理速度(FPS)和模型大小(参数),遵循[43]中的工作。

实现细节。对于语义分割,教师网络在所有实验中都是使用ResNet 101(PSPNet-R101)作为骨干网络的PSPNet。我们采用了几种不同的架构,包括PSPNet[48]、使用ResNet18和MobileNetV2作为骨干网络的Deeplab[44]作为学生网络,以验证我们方法的有效性。

在消融研究中,我们基于以ResNet 18为骨干网络的PSPNet(PSPNet-R18)来分析我们方法的有效性。除非另有说明,学生网络的每张训练图像都被随机裁剪为 512 × 512 512 \times 512 512×512像素。批处理大小设置为8,训练步数设置为 40 K 40 \text{K} 40K。在所有实验中,我们设置温度参数 T = 4 \mathcal{T}=4 T=4,对于logits图的损失权重 α = 3 \alpha=3 α=3,对于特征图的损失权重 α = 50 \alpha=50 α=50。对于对象检测,我们采用与[43]中相同的教师网络、学生网络和训练设置。

4.2、与最近的知识蒸馏方法比较

为了验证我们提出的通道蒸馏方法的有效性,我们将我们的方法与以下当前流行的蒸馏方法进行了比较:

  • 注意力转移(Attention Transfer, AT) [42]:Sergey等人计算每个空间位置所有通道的和,以获得单个通道注意力图。他们使用 L 2 L_{2} L2损失来最小化注意力图之间的差异。
  • 局部亲和力(Local Affinity, LOCAL) [35]:对于每个像素,构建一个局部相似度图,该图考虑了该像素与其8个邻域像素之间的相关性。同样,使用 L 2 L_{2} L2损失来最小化局部亲和力图之间的差异。
  • 像素级蒸馏(Pixel-wise Distillation, PI) [25,24,34,7]:使用KL散度来对齐两个网络中每个空间位置的分布。
  • 成对蒸馏(Pair-wise Distillation, PA) [25,14,24]:考虑了所有像素对之间的相关性。
  • 类内特征变化蒸馏(Intra-class Feature Variation Distillation, IFVD) [34]:将每个像素的特征与其对应的类原型之间的相似度集合视为类内特征变化,以传递结构知识。
  • 全局蒸馏(Holistic Distillation, HO) [25,24,34]:通过鉴别器计算特征图的全局嵌入,用于最小化高阶关系之间的差异。

我们在内部特征图和最终logits图上应用了所有这些流行的蒸馏方法。在所有实验中,都应用了传统的交叉熵损失。表2报告了空间蒸馏方法的计算复杂度和性能。

给定的输入特征图(logits图)的大小为 h f × w f × c ( h s × w s × n ) h_{f} \times w_{f} \times c\left(h_{s} \times w_{s} \times n\right) hf×wf×c(hs×ws×n),其中 h f ( h s ) × w f ( w s ) h_{f}\left(h_{s}\right) \times w_{f}\left(w_{s}\right) hf(hs)×wf(ws) 是特征图(logits图)的形状。 c c c 是通道数, n n n 是类别数。

如表2所示,所有蒸馏方法都能提高学生网络的性能。我们的通道蒸馏方法在所有空间蒸馏方法中表现最好。我们的方法比最佳的空间蒸馏方法(AT)高出2.5%。此外,我们的方法更加高效,因为它在训练阶段需要的计算成本比其他方法更少。

此外,我们在表3中列出了我们的方法与两种最近的先进方法PA [25]和IFVD [18]的详细类别IoU(Intersection over Union,交并比)。这些方法旨在在语义分割中转移结构信息。我们的方法显著提高了多个对象的类别准确性,如交通灯、地形、墙壁、卡车、公共汽车和火车,这表明通道分布可以很好地转移结构知识。

4.3、消融研究

在本节中,我们展示了通道蒸馏的有效性,并讨论了语义分割中超参数的选择。基线学生模型是PSPNet-R18,教师模型是PSPNet-R101。所有结果均在Cityscapes验证集上进行评估。

通道蒸馏的有效性。归一化的通道概率图和不对称KL散度在我们的蒸馏方法中起着重要作用。我们通过四种不同的变体进行实验,以展示表4中提出的方法的有效性。

所有蒸馏方法都应用于相同的激活图作为输入,并且我们使用与第4.1节中描述的相同的训练方案。
'PI’代表像素级知识蒸馏,它对每个空间位置的激活进行归一化。' L 2 w / o N O R M L2 w/o NORM L2w/oNORM’表示我们直接最小化来自两个网络的特征图之间的差异,这种方法在所有通道的所有位置都平等地考虑差异。'Bhat’是Bhattacharyya距离[3],它是一个对称分布度量,用于对齐每个通道中的差异。

从表4中我们可以看到,使用不对称KL散度来衡量归一化通道差异的方法取得了最佳性能。请注意,由于KL散度是不对称的,因此学生和教师的输入不能互换。我们尝试在KL散度中改变输入的顺序,但训练并没有收敛。

温度参数和损失权重的影响。我们通过在不同的损失权重α下调整温度参数 T \mathcal{T} T来改变通道概率图。实验在logits图上进行。结果如图3所示。
在这里插入图片描述

所有结果都是三次运行的平均值。损失权重设置为1, 2, 3,而 T ∈ [ 1 , 5 ] \mathcal{T} \in [1,5] T[1,5]。如果我们增加 T \mathcal{T} T,则分布会变得更软。

从图中可以看出,较软的概率图可能有助于知识蒸馏。此外,在一定范围内,性能是稳定的。如果 T \mathcal{T} T设置得太小,性能似乎会下降。在这种情况下,该方法仅关注有限的显著像素。我们在Cityscapes验证集上使用PSPNet 18时,在 T \mathcal{T} T=4和 α = 3 \alpha=3 α=3时取得了最佳性能。

4.4、语义分割

我们展示了所提出的通道蒸馏方法可以与其他先前的语义分割蒸馏方法相结合,即用于分割/密集预测的结构知识蒸馏(SKDS [24] 和 SKDD [25])以及类内特征变化蒸馏(IFVD [34]),并且适用于各种学生网络。

我们在logits图(Ours-logits)和特征图(Ours-feature)上都使用了所提出的通道蒸馏。同时,根据先前的方法[25,18],我们也包括了logits图上的像素级蒸馏(PI)和整体蒸馏(HO)。
在这里插入图片描述

我们首先在Cityscapes数据集上评估了我们方法的性能。使用不同编码器和解码器的各种学生网络来验证我们方法的有效性。编码器包括ResNet18(在ImageNet上预训练权重进行初始化,以及通道减半的ResNet18变体[13]),解码器包括PSPhead [48]和ASPPhead [6]。表5展示了在Cityscapes上的结果。Pascal VOC [10]和ADE20K [49]上的实验结果在补充材料中给出。

我们的方法在五个学生网络和三个基准测试中均优于SKD和IFVD,这进一步表明通道蒸馏在语义分割中是有效的。

对于与教师具有相同架构类型的学生,即 PSPNet-R 1 8 ∘ ( 0.5 ) \text{PSPNet-R} 18^{\circ}(0.5) PSPNet-R18(0.5) PSPNet-R 1 8 ∘ \text{PSPNet-R} 18^{\circ} PSPNet-R18 PSPNet-R18 ⋆ \text{PSPNet-R18}^{\star} PSPNet-R18,改进更为显著。对于与教师架构类型不同的学生,即 Deeplab-R 1 8 ∘ ( 0.5 ) \text{Deeplab-R} 18^{\circ}(0.5) Deeplab-R18(0.5) Deeplab-R18 ⋆ \text{Deeplab-R18}^{\star} Deeplab-R18,我们的方法与SKDS和IFVD相比也实现了一致的改进。因此,我们的方法能够很好地适用于不同的教师和学生网络。

紧凑模型容量的学生网络( PSPNet-R18 ∘ ( 0.5 ) \text{PSPNet-R18}^{\circ}(0.5) PSPNet-R18(0.5))显示出比容量更大的学生( PSPNet-R18 ⋆ \text{PSPNet-R18}^{\star} PSPNet-R18)更差的蒸馏性能( 68.57 % 68.57\% 68.57% vs 75.90 % 75.90\% 75.90%)。这可能是因为小网络的能力与教师网络相比有限,无法充分吸收当前任务的知识。对于 PSPNet-R18 \text{PSPNet-R18} PSPNet-R18,使用在ImageNet上训练的权重进行初始化的学生获得了最好的蒸馏性能(从 70.09 % 70.09\% 70.09%提高到 75.90 % 75.90\% 75.90%),进一步证明了良好的初始化参数有助于蒸馏。因此,更好的学生会带来更好的蒸馏性能,但随着教师和学生网络之间的差距减小,这种改进变得不那么显著。

4.5、目标检测

我们也将我们的通道蒸馏方法应用于目标检测任务。实验在MS COCO2017 [23]上进行。

为了验证我们方法的有效性,我们使用了不同范式下的各种学生网络,即基于锚点的两阶段方法(Faster RCNN [28])、基于锚点的一阶段方法(RetinaNet [21])和无锚点方法(RepPoints [37])。为了进行公平的比较,我们使用了与[43]中相同的教师和相同的超参数进行实验。

唯一的改动是将特征对齐改为了我们的通道蒸馏。表6报告了实验结果。从表中可以看出,我们的方法在强大的基线学生网络上实现了一致的改进(大约提高了 3.4 % 3.4\% 3.4%的mAP)。与先前的最先进蒸馏方法[43]相比,我们简单的通道蒸馏表现得更好,尤其是在无锚点方法上。我们提高了RepPoints的性能 3.4 % 3.4\% 3.4%,而Zhang等人只提高了 2 % 2\% 2%。此外,我们可以看到所提出的蒸馏方法能更显著地提高 A P 75 AP_{75} AP75

5、结论

在本文中,我们为密集预测任务提出了一种新颖的通道蒸馏方法。与先前的空间蒸馏方法不同,我们将每个通道的激活值归一化为概率图。然后,应用非对称KL散度来最小化教师网络和学生网络之间的差异。实验结果表明,所提出的蒸馏方法在四个公共基准数据集上,对于不同网络主干结构的语义分割和目标检测任务,均一致优于现有的最先进蒸馏方法。

此外,我们的消融实验证明了通道蒸馏的有效性和效率,并且它可以进一步补充空间蒸馏方法。我们希望所提出的简单而有效的蒸馏方法能够作为许多其他密集预测任务(包括实例分割、深度估计和全景分割)中有效训练紧凑网络的有力基线。

附录

A、在Pascal VOC和ADE20K上的结果

为了进一步证明所提出的通道分布蒸馏(CD)的有效性,我们仅在Pascal VOC和ADE20K的特征图上应用所提出的CD作为最终结果。实验结果分别在表7和表8中报告。我们使用了具有不同编码器和解码器的多个学生网络变体来验证我们方法的有效性。这里,编码器包括ResNet18和MobileNetV2,解码器包括PSPhead和ASPP-head。

Pascal VOC。我们在Pascal VOC数据集上评估了我们方法的性能。蒸馏结果列在表7中。我们提出的CD提高了无蒸馏的PSPNet-R18性能 3.83 % 3.83\% 3.83%,在SKDS和IFVD的基础上分别提升了 1.51 % 1.51\% 1.51% 1.21 % 1.21\% 1.21%。在使用不同编码器和解码器的其他学生网络上,我们也取得了一致的改进。使用我们的方法,PSPNet-MBV2的增益为 3.55 % 3.55\% 3.55%,在SKDS和IFVD的基础上分别提升了 1.98 % 1.98\% 1.98% 1.20 % 1.20\% 1.20%。对于Deeplab-R18,我们的CD将学生网络从 66.81 % 66.81\% 66.81%提升至 69.97 % 69.97\% 69.97%,在SKDS和IFVD的基础上分别提升了 1.84 % 1.84\% 1.84% 1.55 % 1.55\% 1.55%。此外,使用我们的蒸馏方法,Deeplab-MBV2的性能从 50.80 % 50.80\% 50.80%提升至 54.62 % 54.62\% 54.62%,在SKDS和IFVD的基础上分别提升了 2.51 % 2.51\% 2.51% 1.23 % 1.23\% 1.23%
在这里插入图片描述

ADE20K。我们也在ADE20K数据集上评估了我们的方法,以进一步证明CD比其他结构知识蒸馏方法更有效。结果如表8所示。我们提出的CD将无蒸馏的PSPNetR18提升了 3.83 % 3.83\% 3.83%,并在多个方面分别超越了SKDS和IFVD 1.51 % 1.51\% 1.51% 1.21 % 1.21\% 1.21%。对于具有不同编码器和解码器的其他学生网络,也始终实现了显著的性能提升。对于PSPNetMBV2,我们的方法取得了 27.97 % 27.97\% 27.97%的卓越性能,分别比学生网络、SKDS和IFVD提升了 4.82 % 4.82\% 4.82% 3.18 % 3.18\% 3.18% 2.64 % 2.64\% 2.64%。使用我们的CD,Deeplab-R18的增益为 2.48 % 2.48\% 2.48%,分别超越了SKDS和IFVD 1.85 % 1.85\% 1.85% 0.84 % 0.84\% 0.84%。最后,使用我们的通道蒸馏,Deeplab-MBV2的性能从 24.98 % 24.98\% 24.98%提高到 29.18 % 29.18\% 29.18%,分别比SKDS和IFVD提升了 3.08 % 3.08\% 3.08% 1.93 % 1.93\% 1.93%

B、更多的可视化结果

我们在图6中列出了可视化结果,以直观地展示通道分布蒸馏方法(CD)优于空间蒸馏策略(注意力转移)。此外,为了评估所提出的通道分布蒸馏的有效性,我们在图7和图8中可视化了三种范式下学生网络的通道分布,即原始网络、通过注意力转移(AT)蒸馏和通过通道分布蒸馏分别蒸馏的网络。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

官方结果

蒸馏结果

Validating runs\detect\train6\weights\best.pt...
Ultralytics YOLOv8.2.20 🚀 Python-3.11.5 torch-2.1.2 CUDA:0 (NVIDIA GeForce RTX 3090, 24575MiB)
YOLOv8n summary (fused): 168 layers, 3011888 parameters, 0 gradients, 8.1 GFLOPsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 15/15 [00:02<00:00,  7.24it/s]all        230       1412      0.889       0.76      0.876      0.563c17        230        131      0.933      0.952      0.975      0.758c5        230         68      0.952      0.838      0.952      0.739helicopter        230         43      0.836      0.814      0.842      0.477c130        230         85      0.921      0.828      0.925      0.612f16        230         57      0.859      0.749      0.823       0.49b2        230          2          1          0      0.995      0.201other        230         86        0.6       0.86      0.822      0.393b52        230         70      0.916      0.933      0.967      0.746kc10        230         62      0.968      0.966       0.98       0.77command        230         40      0.909        0.9      0.978      0.768f15        230        123      0.938      0.743      0.924      0.583kc135        230         91      0.801      0.842      0.912      0.603a10        230         27      0.675      0.296      0.616       0.22b1        230         20          1      0.833      0.923      0.441aew        230         25       0.92       0.92      0.971      0.753f22        230         17      0.621       0.77      0.692      0.472p3        230        105      0.995      0.962      0.993      0.784p8        230          1      0.769          1      0.995      0.497f35        230         32      0.897      0.547      0.827      0.373f18        230        125      0.972      0.992      0.991      0.768v22        230         41      0.926      0.909      0.957      0.601su-27        230         31       0.92          1      0.995      0.777il-38        230         27      0.864      0.926       0.95      0.654tu-134        230          1          1          0     0.0711     0.0497su-33        230          2          1          0      0.595      0.303an-70        230          2      0.838          1      0.995      0.721tu-22        230         98      0.969      0.939      0.986      0.653
Speed: 0.1ms preprocess, 1.4ms inference, 0.0ms loss, 1.2ms postprocess per image
Results saved to runs\detect\train6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/330681.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1076: 判断给定有向图是否存在回路

解法&#xff1a; 直观的方法用邻接矩阵dfs,这是错误的代码 #include<iostream> #include<vector> using namespace std; int arr[100][100]; int f 0; void dfs(vector<int>& a, int u) {a[u] 1;for (int i 0; i < a.size(); i) {if (arr[u][i]…

Github 2024-05-25 Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-05-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Svelte项目1TypeScript项目1Python项目1Go项目1Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust…

Linux--动静态库制作使用及使用

目录 0.文件系统 1.软硬链接 2.静态库 2.1先见一见 2.2 制作静态库&#xff0c;并使用制作的静态库 3.动态库 3.1制作动态库&#xff0c;并使用制作的动态库 4.推荐一个第三方库&#xff08;ncurses&#xff09; 5.动态库的加载 6.动态库VS静态库 0.文件系统 Linux…

北理工提出 LTrack 双摄像头系统 | 专注于暗场景多目标跟踪,自动驾驶和夜间监控的福音!

低光照场景在现实世界应用中很普遍&#xff08;例如自动驾驶和夜间监控&#xff09;。最近&#xff0c;在各种实际用例中的多目标跟踪受到了很多关注&#xff0c;但在暗场景中的多目标跟踪却鲜少被考虑。 在本文中&#xff0c;作者专注于暗场景中的多目标跟踪。为了解决数据集…

9.5 Go语言入门(条件语句和循环语句)

Go语言入门&#xff08;条件语句和循环语句&#xff09; 目录四、条件语句和循环语句1. 条件语句1.1 if 语句1.2 if-else 语句1.3 if-else if-else 语句1.4 带初始化语句的 if1.5 switch 语句1.6 带条件的 switch1.7 多个条件的 case 2. 循环语句2.1 基本 for 循环2.2 省略初始…

转行3年涨薪300%,我总结了一套产品经理快速入门指南!

想转行的产品小白&#xff0c;初期一定会遇到这个问题——我要如何 0 基础转行产品经理&#xff1f; 要想 0 基础快速转行产品经理&#xff0c;我通过个人实践总结了 5 个关键点&#xff0c;可以参考。 一、熟悉产品经理的工作全流程 转行的产品小白&#xff0c;首先要建立产…

Amesim应用篇-制冷剂压焓图软件Coolpack简介与冷媒流量评估

前言 空调系统仿真不可避免的会涉及到冷媒的物性参数、压焓图等信息。冷媒的物性可以在Amesim中自带的模型中查看。而压焓图可以通过Coolpack软件绘制。 一 软件介绍 Coolpack是个独立的小程序&#xff0c;集成了各种冷媒的性能参数&#xff0c;可以直观查看冷媒工作工况曲线…

c语言:摆脱对指针的恐惧【4】

在上一期指针我们讲到了二级指针是的作用是存放一级指针的地址&#xff0c;还讲了指针数组是一个可以存放若干个指针变量的数组&#xff0c;这里我们再复习一下&#xff0c;下面指针数组是什么意思&#xff1f; int* arr1[10]; //整形指针的数组 char *arr2[4]; //一级字符指针…

Python中动态调用C#的dll动态链接库中方法

在Python中调用C#的dll库_哔哩哔哩_bilibili 环境准备&#xff1a; 安装 pythonnet pip install pythonnet在Python中调用C#动态链接库&#xff08;DLL&#xff09;&#xff0c;可以使用pythonnet库&#xff0c;它允许直接使用 .NET 的程序集。以下是一个示例&#xff0c;…

C++ 写的_string类,兼容std::string, MFC CString和 C# 的string

代码例子&#xff1a; using namespace lf; int main() { CString s1 _t("http://www.csdn.net"); _string s2 s1; CString s3 s2; _pcn(s1); _pcn(s2); _pcn(s3); return 0; } 输出&#xff1a; _Str.h /***************************************…

在使用LabVIEW控制多个串口设备进行数据读取时,读取时间过长

在使用LabVIEW控制多个串口设备进行数据读取时&#xff0c;如果发现数据更新时间超过5秒&#xff0c;可以从以下几个方面进行分析和解决&#xff1a; 1. 串口配置与通信参数 确保每个串口的通信参数&#xff08;波特率、数据位、停止位、校验位等&#xff09;配置正确&#x…

【数据结构】二叉树的功能实现

文章目录 关于二叉树的创建如何创建二叉树实现二叉树的前、中、后序遍历层序遍历 关于二叉树的创建 在笔者的上一篇文章中堆进行了一个详细介绍&#xff0c;而二叉树是以堆为基础进行创建&#xff0c;它与堆的显著不同是 堆像是一个线性结构&#xff0c;堆的结构往往是一个数…

springboot项目,@Test写法 @Before @After

某文件示例 package cn.xxx.crm.boss;import cn.xxxx.crm.manager.mq.rabbit.AliyunCredentialsProvider; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; im…

2024电工杯数学建模B题Python代码+结果表数据教学

2024电工杯B题保姆级分析完整思路代码数据教学 B题题目&#xff1a;大学生平衡膳食食谱的优化设计及评价 以下仅展示部分&#xff0c;完整版看文末的文章 import pandas as pd df1 pd.read_excel(附件1&#xff1a;1名男大学生的一日食谱.xlsx) df1# 获取所有工作表名称 e…

XSS漏洞:pikachu靶场中的XSS通关

目录 1、反射型XSS&#xff08;get&#xff09; 2、反射性XSS&#xff08;POST&#xff09; 3、存储型XSS 4、DOM型XSS 5、DOM型XSS-X 6、XSS之盲打 7、XSS之过滤 8、XSS之htmlspecialchars 9、XSS之href输出 10、XSS之js输出 最近在学习XSS漏洞&#xff0c;这里使用…

与WAF的“相爱相杀”的RASP

用什么来保护Web应用的安全&#xff1f; 猜想大部分安全从业者都会回答&#xff1a;“WAF&#xff08;Web Application Firewall,应用程序防火墙&#xff09;。”不过RASP&#xff08;Runtime Application Self-Protection&#xff0c;应用运行时自我保护&#xff09;横空出世…

LeetCode198:打家劫舍

题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋存…

【LeetCode】【5】最长回文子串

文章目录 [toc]题目描述样例输入输出与解释样例1样例2 提示Python实现动态规划 个人主页&#xff1a;丷从心 系列专栏&#xff1a;LeetCode 刷题指南&#xff1a;LeetCode刷题指南 题目描述 给一个字符串s&#xff0c;找到s中最长的回文子串 样例输入输出与解释 样例1 输入…

打造专业级网页排版:全方位解析专业字体家族font-family实践与全球知名字体库导览

CSS中的字体家族&#xff08;font-family&#xff09;属性用于指定文本所使用的字体系列。它允许开发者选择一种或多种字体作为备选&#xff0c;确保在浏览器中以最佳可用字体显示文本。本文将深度解析专业级网页排版中字体家族&#xff08;font-family&#xff09;设置的实践技…

嵌入式实时操作系统笔记2:UCOS基础知识_UC/OS-III移植(STM32F4)_编写简单的UC/OS-III任务例程(失败.....)

今日学习嵌入式实时操作系统RTOS&#xff1a;UC/OS-III实时操作系统 本文只是个人学习笔记备忘用&#xff0c;附图、描述等 部分都是对网上资料的整合...... 文章主要研究如何将UC/OS-III 移植到 STM32 F407VET6上&#xff0c;提供测试工程下载 &#xff08;2024.5.21 文章未…