首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >YOLOV8损失函数优化策略:SlideLoss,解决简单样本和困难样本之间的不平衡问题

YOLOV8损失函数优化策略:SlideLoss,解决简单样本和困难样本之间的不平衡问题

原创
作者头像
AI小怪兽
发布2023-11-04 15:47:11
发布2023-11-04 15:47:11
6.7K0
举报
文章被收录于专栏:YOLO大作战YOLO大作战

💡💡💡本文改进:SlideLoss,解决简单样本和困难样本之间的不平衡问题,并使用有效感受野的信息来设计Anchor

SlideLoss| 亲测在多个数据集能够实现涨点,对小目标、遮挡物性能提升也能够助力涨点。

1.SlideLoss介绍

论文:https://arxiv.org/pdf/2208.02019.pdf

图 4:我们提出了一种新的损失,称为“滑动损失”,它自适应地学习正样本阈值参数和负样本阈值参数 µ。 在 µ 附近设置较高的权重会增加难分类示例的相对损失,从而将更多注意力集中在难分类的错误示例上。

Slide损失函数的主要目的是让模型更加关注难样本。根据表格第五行的结果,Slide函数提升主要在中、难任务上。

2. Slideloss加入YOLOV8

2.1 修改ultralytics/utils/loss.py

加入Slideloss

核心代码:

代码语言:javascript
复制
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

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.SlideLoss介绍
  • 2. Slideloss加入YOLOV8
    • 2.1 修改ultralytics/utils/loss.py
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档