Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Focal Loss

焦点损失会调整交叉熵的权重,让简单样本几乎不起作用,而由罕见且困难的样本主导训练。涵盖公式、gamma、RetinaNet 和各种变体。

焦点损失是一种改进的交叉熵损失函数,它会降低模型已经能够正确分类的样本的权重,让训练集中处理难以分类和误分类的样本。Lin 等人在 2017 年的论文 Focal Loss for Dense Object Detection 中提出了焦点损失,并同时推出 RetinaNet 检测器,以处理目标检测中背景与物体之间极端的类别不平衡问题。如今,焦点损失广泛用于某个类别的样本数量远多于其他类别的分类问题。

类别不平衡问题#

单阶段目标检测器会对图像中的每个候选位置进行分类,而 RetinaNet 每张图像约评估 100,000 个候选位置。这些位置几乎全是背景,模型在训练初期就学会了将其排除。在标准交叉熵下,每个容易分类的负样本仍会产生少量损失;大量负样本累积起来,会主导总损失及其梯度,淹没少数包含物体的位置。两阶段目标检测器通过候选区域提议阶段过滤候选框,并按固定比例采样前景和背景,从而避免了这个问题;早期的单阶段检测器则依赖困难负样本挖掘。焦点损失直接在损失函数内部解决不平衡问题,因此无需采样即可训练每个候选位置。

焦点损失的工作原理#

将 p_t 记为模型对正确类别所分配的概率。交叉熵为 CE = -log(p_t),焦点损失则会将交叉熵乘以一个调制因子:

FL = -α_t (1 - p_t)^γ log(p_t)

  • 聚焦参数 γ(gamma): 控制容易样本的损失缩小得有多快。当 γ = 0 时,焦点损失等于交叉熵。当 p_t 趋近于 1 时,(1 - p_t)^γ 趋近于 0;而分类错误且 p_t 较小的样本,则几乎保留全部交叉熵损失。使用论文中效果最佳的设置 γ = 2 时,与交叉熵相比,分类置信度为 p_t = 0.9 的样本损失会降低 100 倍。
  • 平衡权重 α_t(alpha): 为正类设置一个固定权重,负类则使用其补数。RetinaNet 使用 α = 0.25 和 γ = 2;论文还会用分配给物体的锚框数量,对每张图像的总损失进行归一化。

torchvision 中的 sigmoid_focal_loss 函数实现了这个公式。设置 alpha=-1 会禁用平衡权重,从而单独观察 γ 对容易、一般和困难正样本的影响:

import torch
import torch.nn.functional as F
from torchvision.ops import sigmoid_focal_loss

# Logits for three positive examples: easy, moderate, and hard
logits = torch.tensor([4.0, 1.0, -2.0])
targets = torch.ones(3)

# alpha=-1 turns off class weighting so only the gamma focusing term differs
bce = F.binary_cross_entropy_with_logits(logits, targets, reduction="none")
focal = sigmoid_focal_loss(logits, targets, alpha=-1, gamma=2.0, reduction="none")

for p, b, f in zip(logits.sigmoid(), bce, focal):
    print(f"p={p:.2f}  cross-entropy={b:.6f}  focal={f:.6f}  ratio={b / f:,.1f}x")

焦点损失会将容易样本的损失(p = 0.98)缩小约 3,091 倍,将一般样本(p = 0.73)的损失缩小 13.8 倍,而困难样本(p = 0.12)的损失仅缩小 1.3 倍,因此困难样本现在几乎承载了全部训练信号。

焦点损失的应用场景#

除了 RetinaNet,焦点损失及其变体还用于训练许多密集型和基于 Transformer 的检测器中的分类分支,包括 Deformable DETR 等 DETR 系列模型。在医学图像分析中,病变通常只占极少像素,因此图像分割模型通常会将焦点损失与 Dice 损失结合使用,避免忽略细小病灶并提高召回率。在 Ultralytics 中,RT-DETR 训练器使用 Varifocal Loss 对类别打分,而 ultralytics.utils.loss 模块提供了一个 FocalLoss 类,其默认值为 gamma=1.5 和 alpha=0.25。

  • 类别加权: 加权交叉熵会根据类别频率,为稀有类别的每个样本提供相同的固定权重提升。焦点损失则根据每个样本当前的难度为其加权,因此权重会随着模型学习而变化。
  • 困难负样本挖掘: 只保留损失最高的负样本,并丢弃其余样本。焦点损失会保留所有样本,并平滑地降低容易样本的权重。
  • Varifocal Loss: VarifocalNet 提出的一种非对称变体,只降低负样本的权重,并训练正样本,使其分数感知 IoU,因此类别置信度也能反映定位质量。
  • 分布焦点损失(DFL): 来自广义焦点损失的一种边界框回归损失,将边界框的每条边视为离散概率分布。它与焦点损失仅名称相同,实际用于边界框回归。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来