Loss【1】:Focal Loss

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 1. 什么是 Focal Loss
  • 2. 逐过程解析 Focal Loss
  • 3. Focal Loss 的 PyTorch 实现
  • 总结


前言

类别不平衡是一个在目标检测领域被广泛讨论的问题,因为目标数量的多少在数据集中能很直观的体现。同时,在分割中这也是一个值得关注的问题,毕竟分割的本质是对像素进行分类。而处理类别不平衡一个非差常用的方法就是通过 Focal Loss 来引导模型更关注困难的类。


1. 什么是 Focal Loss

Focal Loss 是在标准交叉熵损失基础上修改得到的。相比 CrossEntropy Loss 它增加了容易和难分样本的权重,对于难分的样本增加权重,增加 loss 的贡献度;减少易分类样本的权重,使得模型在训练时更专注于难分类的样本。

Focal Loss 从另外的视角来解决样本不平衡问题,那就是根据置信度动态调整 CE Loss,当预测正确的置信度增加时,loss 的权重系数会逐渐衰减至0,这样模型训练的 loss 更关注难例,而大量容易的例子其 loss 贡献很低。

比如假如一张图片上有 10 个正样本,每个正样本的损失值是 3,那么这些正样本的总损失是 10x3=30。而假如该图片上有 10000 个简单易分负样本,尽管每个负样本的损失值很小,假设是 0.1,那么这些简单易分负样本的总损失是 10000x0.1=1000,那么损失值要远远高于正样本的损失值。所以如果在训练的过程中使用全部的正负样本,那么它的训练效果会很差。


2. 逐过程解析 Focal Loss

  1. 公式一览:
    在这里插入图片描述
    • α \alpha α 侧重的是正负样本之间的不平衡,一般设置为 0.25
    • γ \gamma γ 难易样本上的权重调节,一般设置为 2
    • 简单的加权 CE Loss 可能只能实现正负样本之间不平衡的调节,所以对于大多数不平衡任务来说 Focal Loss 应该还是能起到更好的效果
  2. 首先看一下二分类交叉熵损失函数
    在这里插入图片描述
    在这里插入图片描述
  3. 二分类交叉熵损失函数: y y y 是样本的标签值,而 p p p 是模型预测某一个样本为正样本的概率,对于真实标签为正样本的样本,它的概率 p p p 越大说明模型预测的越准确,对于真实标签为负样本的样本,它的概率 p p p 越小说明模型预测的越准确
  4. 如果我们定义 p t p_t pt 为如下的形式
    在这里插入图片描述
  5. 公式 (1) 可以修改为如下形式 (2)
    在这里插入图片描述
  6. 现在我们定义一个参数 α \alpha α 1 − α 1 - \alpha 1α 来平衡正负样本的权重,定义 α t \alpha_t αt 如下,需要注意的是, α \alpha α 是个超参数用来平衡正负样本的权重,并不是实际的正负样本的比例,
    在这里插入图片描述
  7. 公式 (2) 可以修改为如下形式 (3)
    在这里插入图片描述
  8. 又因为样本有难易之分,所以我们必须要能区分出困难样本和简单样本,所以我们设置一个系数 ( 1 − p t ) γ ( 1-p_t )^{\gamma} (1pt)γ
  9. 它可以降低简单样本的损失贡献,而使得训练时更重视一些困难样本,Focal Loss 可以定义为:
    在这里插入图片描述
  10. 看一些权重计算的例子:
    在这里插入图片描述
    • 如果预测正样本概率是 0.95(即对于一个真实标签为正样本的样本,使用模型预测它也是正样本的概率是 0.95),这显然是一个简单的样本
    • 如果预测正样本概率是 0.5 ,这显然是一个稍微困难一定的样本
    • 如果预测负样本的概率为 0.9(即对于一个真实标签为负样本的样本,使用模型预测它是正样本的概率是 0.9),这显然是一个困难的样本,则该样本的难易权重是
    • 如果预测负样本的概率为 0.1(即对于一个真实标签为负样本的样本,使用模型预测它是正样本的概率是 0.1),这显然是一个简单的样本,
  11. 为此,我们得到最终的 Focal Loss
    在这里插入图片描述

3. Focal Loss 的 PyTorch 实现

首先感谢上海 AI Lab 的杰出工作,SAM-Med2D
我这里的实现来自仓库:SAM-Med2D
如果能对大家有帮助,希望后期大家不要忘记引用这个工作:

class FocalLoss(nn.Module):def __init__(self, gamma=2.0, alpha=0.25):super(FocalLoss, self).__init__()self.gamma = gammaself.alpha = alphadef forward(self, pred, mask):"""pred: [B, 1, H, W]mask: [B, 1, H, W]"""assert pred.shape == mask.shape, "pred and mask should have the same shape."p = torch.sigmoid(pred)num_pos = torch.sum(mask)num_neg = mask.numel() - num_posw_pos = (1 - p) ** self.gammaw_neg = p ** self.gammaloss_pos = -self.alpha * mask * w_pos * torch.log(p + 1e-12)loss_neg = -(1 - self.alpha) * (1 - mask) * w_neg * torch.log(1 - p + 1e-12)loss = (torch.sum(loss_pos) + torch.sum(loss_neg)) / (num_pos + num_neg + 1e-12)return loss

总结

参考链接:
深入剖析Focal loss损失函数

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

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

相关文章

理解pytorch的广播语义

目录 什么是广播运算 广播的条件 示例 示例1 示例2 示例3 补1 示例4 原位运算 示例5 参与广播运算的两个tensor,必须是从右向左对齐 总结规律 两个tensor可以做广播运算的条件: 两个可以互相广播的tensor运算的步骤: 例子&#x…

[C#]OpenCvSharp改变图像的对比度和亮度

目的 访问像素值mat.At<T>(y,x) 用0初始化矩阵Mat.Zeros 饱和操作SaturateCast.ToByte 亮度和对比度调整 g(x)αf(x)β 用α(>0)和β一般称作增益(gain)和偏置(bias)&#xff0c;分别控制对比度和亮度 把f(x)看成源图像像素&#xff0c;把g(x)看成输出图像像素…

蓝桥杯—DS1302

目录 1.管脚 2.时序&官方提供的读写函数 3.如何使用读写函数 4.如何在数码管中显示在DS1302中读取出的数据&#xff1f; 1.管脚 2.时序&官方提供的读写函数 /* # DS1302代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行…

如何锁定鼠标光标在水平、垂直或45度对角线模式下移动 - 鼠标水平垂直移动锁定器简易教程

在我们进行精细工作例如如创建图标和图形设计时&#xff0c;通常需要我们对鼠标移动进行精确控制。一旦向左或向右轻微移动&#xff0c;都可能导致设计出错。若出现不必要的错误&#xff0c;我们极有可能不得不重新开始&#xff0c;这会令人感到非常沮丧。这种情况下&#xff0…

RabbitMQ3.x之九_Docker中安装RabbitMQ

RabbitMQ3.x之_Docker中安装RabbitMQ 文章目录 RabbitMQ3.x之_Docker中安装RabbitMQ1. 官网2. 安装1 .拉取镜像2. 运行容器 3. 访问 1. 官网 rabbitmq - Official Image | Docker Hub 2. 安装 1 .拉取镜像 docker pull rabbitmq:3.13.0-management2. 运行容器 # latest Rabb…

单元测试 mockito(二)

1.返回指定值 2.void返回值指定插桩 3.插桩的两种方式 when(obj.someMethod()).thenXxx():其中obj可以是mock对象 doXxx().wien(obj).someMethod():其中obj可以是mock/spy对象 spy对象在没有插桩时是调用真实方法的,写在when中会导致先执行一次原方法,达不到mock的目的&#x…

模块化编程:AMD 和 CMD 的魅力

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

2024 年最新使用 Wechaty 开源框架搭建部署微信机器人(微信群智能客服案例)

读取联系人信息 获取当前机器人账号全部联系人信息 bot.on(ready, async () > {console.log("机器人准备完毕&#xff01;&#xff01;&#xff01;")let contactList await bot.Contact.findAll()for (let index 0; index < contactList.length; index) {…

RabbitMQ Tutorial

参考API : Overview (RabbitMQ Java Client 5.20.0 API) 参考文档: RabbitMQ: One broker to queue them all | RabbitMQ 目录 结构 Hello World consumer producer 创建连接API解析 创建连接工厂 生产者生产消息 消费者消费消息 队列声明 工作队列Work Queues 公平…

gpt国内怎么用?最新版本来了

claude 3 opus面世后&#xff0c;这几天已经有许多应用&#xff0c;而其精确以及从不偷懒&#xff08;截止到2024年3月11日还没有偷懒&#xff09;的个性&#xff0c;也使得我们可以用它来首次完成各种需要多轮对话的尝试。 今天我们想要进行的一项尝试就是—— 如何从一个不知…

Outlook会议邀请邮件在答复后就不见了

时常会有同事找到我说&#xff0c;Outlook答复会议邀请邮件后收件箱就找不到会议邀请的邮件了。 这其实是Outlook的的一个机制&#xff0c;会把应答后的会议邀请邮件从收件箱自动删除&#xff0c;到已删除的邮件那里就能找到。如果不想要自动删除&#xff0c;改一个设置即可。…

LeetCode-124. 二叉树中的最大路径和【树 深度优先搜索 动态规划 二叉树】

LeetCode-124. 二叉树中的最大路径和【树 深度优先搜索 动态规划 二叉树】 题目描述&#xff1a;解题思路一&#xff1a;递归。return max(max(l_val, r_val) node.val, 0)解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 二叉树中的 路径 被定义为一条…

iOS-App:App Store新的审核政策,在应用隐私清单中声明和解释使用特定API的原因

App Store新的审核政策&#xff0c;在应用隐私清单中声明和解释使用特定API的原因 设备/引擎&#xff1a;Mac&#xff08;11.6&#xff09;/Mac Mini 开发工具&#xff1a;终端 开发需求&#xff1a;苹果官方邮件通知&#xff0c; App Store新的审核政策&#xff0c;在应用隐…

面试总结------2024/04/04

1.面试官提问&#xff1a;你说你在项目中使用springsecurity jwt 实现了登录功能&#xff0c;能简单讲一下怎么实现的吗&#xff1f; 2.使用RabbitMQ实现订单超时取消功能 订单状态定义 首先&#xff0c;我们需要定义订单的不同状态。在这个示例中&#xff0c;我们可以定义以下…

Unity:2D SpriteShape

1.1 简介 Sprite Shape 可以很灵活的更改sprite的轮廓。比如&#xff1a; 它由两部分组成&#xff1a;Sprite Shape Profile、Sprite Shape Controller&#xff0c;需要导入2D Sprite Shape Package. 1.1.1 Sprite导入要求 Texture Type - ‘Sprite (2D and UI)’.Sprite Mo…

面试题:MySQL 高可用

&#x1f496; 主从同步 原理 核心&#xff1a;二进制日志 binlog 是 MySQL 的日志&#xff0c;redolog 和 undolog 是 innodo 引擎的日志。 &#x1f496; 分库分表 分类 问题和技术 数据一致性问题 使用分布式事务管理组件&#xff0c;如ShardingSphere的分布式事务功能&…

目标检测——监控下的汽车

一、重要性及意义 首先&#xff0c;车辆检测技术是保证视频监控系统正常运行的基础。通过监控摄像头实时获取的图像&#xff0c;可以自动检测出图像中的车辆&#xff0c;并进行车辆类型的分类和识别。这对于优化城市交通管理、实现智能交通系统具有重要意义。此外&#xff0c;…

通用分布式锁组件

通用分布式锁组件 1 Redisson1.1介绍1.2 为什么要使用Redisson实现分布式锁1.2.1 锁续期的问题1.2.2 获取锁尝试的问题1.2.3 可重入问题 1.3 Wath Dog的自动延期机制1.4 快速了解1.5 项目集成 2 定义通用分布式锁组件2.1 实现思路分析2.2 定义注解2.3 定义切面2.4 使用锁2.5.工…

Macbook文件清理软件 Mac电脑清理垃圾文件怎么清理

为了维护Macbook电脑的系统健康&#xff0c;我们需要定期给电脑进行全面清理&#xff0c;清除系统垃圾文件、软件缓存和系统内存。那么好用的Macbook文件清理软件有哪些呢&#xff1f;今天就给大家介绍几款好用的电脑清理软件并介绍Mac电脑清理垃圾文件怎么清理。 一、Macbook…

代码审计-PHP原生开发篇SQL注入数据库监控正则搜索文件定位静态分析

文章目录 前言1、Bluecms-CNVD-1Day-常规注入审计分析2、emlog-CNVD-1Day-常规注入审计分析3、emlog-CNVD-1Day-2次注入审计分析 前言 挖掘技巧&#xff1a; -语句监控-数据库SQL监控排查可利用语句定向分析 -功能追踪-功能点文件SQL执行代码函数调用链追踪 -正则搜索-(update…