【YOLOv8改进-损失函数】SlideLoss损失函数,解决样本不平衡问题

简介: YOLO-FaceV2是基于YOLOv5的实时人脸检测模型,采用RFE模块增强小人脸检测,NWD损失处理定位偏差,SEAM注意力模块应对遮挡,Slide Loss解决样本不平衡,提升对难样本的关注。在WiderFace数据集上超越YOLO系列。论文和代码已公开。Slide Loss通过IoU加权,优化边界样本,提高模型性能。

介绍

image-20240605222542603

YOLO目标检测创新改进与实战案例专栏

专栏目录: YOLO有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLO基础解析+创新改进+实战案例

摘要

近年来,基于深度学习的人脸检测算法取得了很大进展。这些算法一般可以分为两类,即像 Faster R-CNN 这样的两阶段检测器和像 YOLO 这样的单阶段检测器。由于在准确性和速度之间更好的平衡,单阶段检测器已在许多应用中得到广泛使用。在本文中,我们提出了一种基于单阶段检测器 YOLOv5 的实时人脸检测器,名为 YOLO-FaceV2。我们设计了一个称为 RFE(感受野增强)模块来增强小人脸的感受野,并使用 NWD 损失来弥补 IoU 对微小物体位置偏差的敏感性。对于人脸遮挡问题,我们提出了一个名为 SEAM 的注意力模块,并引入排斥损失来解决。此外,我们使用一个权重函数 Slide 来解决简单和困难样本之间的不平衡,并利用有效感受野的信息设计了锚点。在 WiderFace 数据集上的实验结果表明,我们的人脸检测器在所有的简单、中等和困难子集上均优于 YOLO 及其变体。源码地址:https://github.com/Krasjet-Yu/YOLO-FaceV2

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

Slide Loss旨在解决易样本和难样本之间的不平衡问题。该损失函数根据预测框和真实框之间的IoU大小区分易样本和难样本,并通过一个称为Slide的加权函数来赋予难样本更高的权重。Slide函数的设计使得模型能够更好地优化那些处于边界的样本,并更充分地利用这些样本来训练网络,从而提高模型对难样本的关注度。

Slide Loss的公式如下所示:
$$ f(x) = \begin{cases} 1 & x \leq \mu - 0.1 \\ e^{\frac{1-\mu}{x}} & \mu < x < \mu - 0.1 \\ e^{\frac{1-x}{\mu}} & x \geq \mu \end{cases} $$

其中,$x$ 是IoU值,$\mu$ 是阈值参数,用于区分易样本和难样本。

image-20240605222648732

核心代码


```py
import math

class SlideLoss(nn.Module):
    def __init__(self, loss_fcn):
        super(SlideLoss, self).__init__()
        self.loss_fcn = loss_fcn
        self.reduction = loss_fcn.reduction
        self.loss_fcn.reduction = 'none'  # required to apply SL to each element

    def forward(self, pred, true, auto_iou=0.5):
        loss = self.loss_fcn(pred, true)
        if auto_iou < 0.2:
            auto_iou = 0.2
        b1 = true <= auto_iou - 0.1
        a1 = 1.0
        b2 = (true > (auto_iou - 0.1)) & (true < auto_iou)
        a2 = math.exp(1.0 - auto_iou)
        b3 = true >= auto_iou
        a3 = torch.exp(-(true - 1.0))
        modulating_weight = a1 * b1 + a2 * b2 + a3 * b3
        loss *= modulating_weight
        if self.reduction == 'mean':
            return loss.mean()
        elif self.reduction == 'sum':
            return loss.sum()
        else:  # 'none'
            return loss

task与yaml配置

详见:https://blog.csdn.net/shangyanaf/article/details/139483941

相关文章
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
训练误差与泛化误差的说明
训练误差与泛化误差的说明
150 0
|
5月前
|
机器学习/深度学习 算法 计算机视觉
YOLOv5改进 | 损失函数 | EIoU、SIoU、WIoU、DIoU、FocusIoU等多种损失函数
💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡
|
5月前
|
机器学习/深度学习 算法
损失函数
【6月更文挑战第14天】损失函数。
44 2
|
6月前
|
机器学习/深度学习 算法 数据可视化
样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
|
6月前
|
机器学习/深度学习 计算机视觉
YOLOv8改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
YOLOv8改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
493 1
|
机器学习/深度学习 并行计算
深度学习方差代价函数误差评估
深度学习方差代价函数误差评估
65 0
|
机器学习/深度学习 数据可视化 计算机视觉
图像分类_03分类器及损失:线性分类+ SVM损失+Softmax 分类+交叉熵损失
解释:w的每⼀⾏都是其中⼀个类的分类器。这些数字的⼏何解释是,当我们改变w的⼀行时,像素空间中相应的线将以不同的⽅向旋转。⽽其中的偏置是为了让我们避免所有的分类器都过原点。
167 0
|
机器学习/深度学习 人工智能 PyTorch
【Pytorch神经网络理论篇】 34 样本均衡+分类模型常见损失函数
Sampler类中有一个派生的权重采样类WeightedRandomSampler,能够在加载数据时,按照指定的概率进行随机顺序采样。
413 0
|
机器学习/深度学习 数据可视化 PyTorch
使用梯度下降训练线性模型
使用梯度下降训练线性模型
104 0
使用梯度下降训练线性模型
|
机器学习/深度学习 数据采集 前端开发
机器学习--方差和偏差、Bagging、Boosting、Stacking
机器学习--方差和偏差、Bagging、Boosting、Stacking
403 0
机器学习--方差和偏差、Bagging、Boosting、Stacking