一、本文介绍
本文记录的是改进RT-DETR的损失函数,将其替换成Slide Loss
,并详细说明了优化原因,注意事项等。Slide Loss
函数可以有效地解决样本不平衡问题,为困难样本赋予更高的权重,使模型在训练过程中更加关注困难样本。若是在自己的数据集中发现容易样本的数量非常大,而困难样本相对稀疏,可尝试使用Slide Loss
来提高模型在处理复杂样本时的性能。
专栏目录:RT-DETR改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
专栏地址:RT-DETR改进专栏——以发表论文的角度,快速准确的找到有效涨点的创新点!
二、Slide Loss原理
2.1 IoU含义
IoU(P, G) = area(P∩G) / area(G)
,其中P
是预测框,G
是真实框(ground truth)。IoU
的值在[0, 1]
之间。
IoU
是预测框与真实框的交集面积与并集面积之比。它用于衡量预测框与真实框的重合程度。
2.2 原理
- 样本分类依据:
Slide Loss函数
基于预测框和真实框的IoU
大小来区分容易样本和困难样本。- 为了减少超参数,将所有边界框的
IoU
值的平均值作为阈值µ
,小于µ
的被视为负样本,大于µ
的为正样本。
- 强调边界样本:
- 但处于边界附近的样本由于分类不明确,往往会遭受较大损失。为了解决这个问题,希望模型能够学习优化这些样本,并更充分地利用这些样本训练网络。
- 首先将样本通过参数
µ
分为正样本和负样本,然后通过一个加权函数Slide
来强调处于边界的样本。 Slide加权函数
表达式为:
$$f(x)= \begin{cases} 1&x\leq\mu - 0.1\\ e^{1-\mu}&\mu < x <\mu - 0.1\\ e^{1 - x}&x\geq u \end{cases} $$
2.2 优势
- 解决样本不平衡问题:
- 在大多数情况下,容易样本的数量非常大,而困难样本相对稀疏,
Slide Loss函数
可以有效地解决样本不平衡问题,使模型在训练过程中更加关注困难样本。
- 在大多数情况下,容易样本的数量非常大,而困难样本相对稀疏,
- 自适应学习阈值:
- 通过自动计算所有边界框的
IoU
值的平均值作为阈值µ
,减少了人为设置超参数的难度,提高了模型的适应性。
- 通过自动计算所有边界框的
- 提高模型性能:
- 根据论文实验结果,
Slide函数
在中等难度和困难子集上提高了模型的性能,使模型能够更好地学习困难样本的特征,提高了模型的泛化能力。
- 根据论文实验结果,
论文:https://arxiv.org/pdf/2208.02019
源码:https://github.com/Krasjet-Yu/YOLO-FaceV2/blob/d9c8f24d5dba392ef9d6b350a7c50b850051b32b/utils/loss.py#L16
三、实现代码及RT-DETR修改步骤
模块完整介绍、个人总结、实现代码、模块改进、二次创新以及各模型添加步骤参考如下地址: