当前位置: 首页 > news >正文

激活函数Focal Loss 详解​

  • Focal Loss 详解​
  • 1. 背景​
  • Focal Loss 是由 Lin et al. (2017) 在论文 《Focal Loss for Dense Object Detection》 中提出的一种损失函数,主要用于解决 目标检测(Object Detection) 中的 类别不平衡问题,特别是在 One-Stage 检测器(如 RetinaNet)​ 中表现优异。
  • 在目标检测任务中,背景(负样本)通常远多于前景(正样本),导致模型倾向于预测背景,从而影响检测性能。传统的交叉熵损失(Cross-Entropy Loss)对所有样本一视同仁,无法有效处理这种不平衡问题。
  • 2. 传统交叉熵损失的问题​
  • 标准的交叉熵损失(CE Loss)定义为:
  • CE(pt)=−log(pt)
  • 其中,pt 是模型预测的正类概率(对于正样本 pt=p,对于负样本 pt=1−p)。
  • 问题​:
  • 当 pt 很大时(即模型已经正确分类),损失仍然较大,导致训练效率低。
  • 负样本(背景)数量远多于正样本,导致模型被大量简单负样本主导,难以学习难样本(Hard Examples)。
  • 3. Focal Loss 的改进​
  • Focal Loss 在交叉熵的基础上引入了一个 调制因子(modulating factor) (1−pt)γ,用于降低易分类样本的权重,使模型更关注难样本。
  • 公式​:
  • Focal Loss(pt)=−αt(1−pt)γlog(pt)
  • 其中:
  • pt:模型预测的正类概率(对于正样本 pt=p,对于负样本 pt=1−p)。
  • γ(聚焦参数):控制调制因子的强度,通常取 γ∈[0,5]。
    • γ=0:退化为标准交叉熵损失。
    • γ>0:难样本(pt 较小)的权重更大,易样本(pt 较大)的权重更小。
  • αt(平衡因子):用于平衡正负样本的权重,通常 αt 是一个可学习的参数或固定值(如 α=0.25 用于正样本,α=0.75 用于负样本)。
  • 4. Focal Loss 的作用​
  • 解决类别不平衡问题​
    • 通过 αt 调整正负样本的权重,避免模型被大量背景样本主导。
  • 关注难样本(Hard Examples)​
    • 通过 (1−pt)γ 降低易分类样本的权重,使模型更关注难以正确分类的样本。
  • 5. Focal Loss 在目标检测中的应用​
  • Focal Loss 最初由 RetinaNet​ 提出,用于解决 One-Stage 检测器(如 SSD、YOLO)中的类别不平衡问题。
  • RetinaNet 的改进点​:
  • 使用 Focal Loss​ 替代标准的交叉熵损失。
  • 引入 FPN(Feature Pyramid Network) 和 Anchor Boxes​ 提高检测精度。
  • 6. 代码实现(PyTorch 示例)​
  • python
  • import torchimport torch.nn as nnimport torch.nn.functional as Fclass FocalLoss(nn.Module): def __init__(self, alpha=0.25, gamma=2.0): super(FocalLoss, self).__init__() self.alpha = alpha self.gamma = gamma def forward(self, inputs, targets): # 计算交叉熵损失 ce_loss = F.cross_entropy(inputs, targets, reduction='none') # shape: [N] # 计算 pt = exp(-ce_loss) pt = torch.exp(-ce_loss) # 模型预测的概率 # 计算 Focal Loss focal_loss = self.alpha * (1 - pt) ** self.gamma * ce_loss return focal_loss.mean() # 返回平均损失
  • 使用示例​:
  • python
  • # 假设 inputs 是模型的 logits,targets 是真实标签criterion = FocalLoss(alpha=0.25, gamma=2.0)loss = criterion(model_output, ground_truth_labels)
  • 7. Focal Loss 的变体​
  • RetinaNet Focal Loss​:适用于目标检测中的正负样本不平衡。
  • Dice Loss + Focal Loss​:结合 Dice Loss(用于分割任务)和 Focal Loss,提高小目标检测效果。
  • Class-Balanced Focal Loss:动态调整 α 以适应不同类别的样本数量。
  • 8. 总结​
  • 特性说明
  • 核心思想 降低易分类样本的权重,增强难样本的影响
  • 适用场景 类别不平衡问题(如目标检测、长尾分类)
  • 关键参数 γ(聚焦参数)、α(平衡因子)
  • 改进效果 提高模型对难样本的学习能力,提升检测精度
  • Focal Loss 在 目标检测(RetinaNet、FCOS) 和 医学图像分析(如肿瘤检测)​ 中有广泛应用,是解决类别不平衡问题的有效方法之一。
http://www.dtcms.com/a/292030.html

相关文章:

  • Jenkins流水线中的核心概念
  • DearMom以“新生儿安全系统”重塑婴儿车价值,揽获CBME双项大奖
  • STM32 GPIO(通用输入输出)详解:从模式原理到实战应用
  • C++_Hello算法_队列
  • Word2Vec和Doc2Vec学习笔记
  • 用手机当外挂-图文并茂做报告纪要
  • AWS PrivateLink方式访问Redis
  • Windows游戏自动检测本地是否安装 (C++版)
  • 设计模式七:抽象工厂模式(Abstract Factory Pattern)
  • 技能系统详解(4)——运动表现
  • 面向对象高级:static
  • linux内核与GNU之间的联系和区别
  • 决策规划内容整理
  • Linux的磁盘存储管理实操——(下一)——标准分区扩容
  • 得物视觉算法面试30问全景精解
  • 图论的整合
  • 西门子 S7-1500分布式 I/O通信 :PROFINET IO 与 PROFIBUS DP核心技术详解(上)
  • Spring、Spring MVC、Spring Boot、Spring Cloud的联系和区别
  • Uni-App:跨平台开发的终极解决方案
  • uniapp app打包流程
  • 华为服务器操作系统openEuler介绍与安装
  • uniapp 报错 Not found ... at view.umd.min.js:1的问题
  • Kafka——揭开神秘的“位移主题”面纱
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现持械检测(C#代码,UI界面版)
  • 记一次flink资源使用优化
  • 《Uniapp-Vue 3-TS 实战开发》自定义时间选择
  • @DateTimeFormat、@JsonFormat、@JSONField区别及用法
  • 获取制定版本的yolov5,使用下载zip文件替代git
  • C++核心编程学习4--类和对象--封装
  • J2EE模式---前端控制器模式