【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

相关文章
|
算法 计算机视觉
YOLOv8改进 | 损失函数篇 | 最新ShapeIoU、InnerShapeIoU损失助力细节涨点
YOLOv8改进 | 损失函数篇 | 最新ShapeIoU、InnerShapeIoU损失助力细节涨点
774 2
|
计算机视觉
如何理解focal loss/GIOU(yolo改进损失函数)
如何理解focal loss/GIOU(yolo改进损失函数)
|
7月前
|
关系型数据库 决策智能
YOLOv11改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题
YOLOv11改进策略【损失函数篇】| Slide Loss,解决简单样本和困难样本之间的不平衡问题
1030 6
|
机器学习/深度学习 计算机视觉
YOLOv8改进 | 损失函数篇 | SlideLoss、FocalLoss分类损失函数助力细节涨点(全网最全)
YOLOv8改进 | 损失函数篇 | SlideLoss、FocalLoss分类损失函数助力细节涨点(全网最全)
1306 0
|
7月前
|
人工智能 计算机视觉
YOLOv11改进策略【损失函数篇】| NWD损失函数,提高小目标检测精度
YOLOv11改进策略【损失函数篇】| NWD损失函数,提高小目标检测精度
997 6
YOLOv11改进策略【损失函数篇】| NWD损失函数,提高小目标检测精度
|
7月前
|
人工智能 计算机视觉
RT-DETR改进策略【损失函数篇】| NWD损失函数,提高小目标检测精度
RT-DETR改进策略【损失函数篇】| NWD损失函数,提高小目标检测精度
570 5
RT-DETR改进策略【损失函数篇】| NWD损失函数,提高小目标检测精度
|
7月前
|
人工智能
YOLOv11改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)
YOLOv11改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)
1263 4
|
7月前
|
机器学习/深度学习
YOLOv11改进策略【损失函数篇】| 替换激活函数为Mish、PReLU、Hardswish、LeakyReLU、ReLU6
YOLOv11改进策略【损失函数篇】| 替换激活函数为Mish、PReLU、Hardswish、LeakyReLU、ReLU6
1792 4
|
10月前
|
机器学习/深度学习 编解码 Java
YOLO11创新改进系列:卷积,主干 注意力,C3k2融合,检测头等创新机制(已更新100+)
《YOLO11目标检测创新改进与实战案例》专栏已更新100+篇文章,涵盖注意力机制、卷积优化、检测头创新、损失与IOU优化、轻量级网络设计等多方面内容。每周更新3-10篇,提供详细代码和实战案例,帮助您掌握最新研究和实用技巧。[专栏链接](https://blog.csdn.net/shangyanaf/category_12810477.html)
YOLO11创新改进系列:卷积,主干 注意力,C3k2融合,检测头等创新机制(已更新100+)
|
11月前
|
机器学习/深度学习 人工智能 文字识别
ultralytics YOLO11 全新发布!(原理介绍+代码详见+结构框图)
本文详细介绍YOLO11,包括其全新特性、代码实现及结构框图,并提供如何使用NEU-DET数据集进行训练的指南。YOLO11在前代基础上引入了新功能和改进,如C3k2、C2PSA模块和更轻量级的分类检测头,显著提升了模型的性能和灵活性。文中还对比了YOLO11与YOLOv8的区别,并展示了训练过程和结果的可视化
17802 0