了解 Focal Loss 如何解决物体检测中的类不平衡问题--将训练重点放在困难示例上,从而提高不平衡数据集的准确性。
Focal Loss 是一种专门的目标函数,旨在解决机器学习训练中的极端类不平衡问题,尤其是在计算机视觉领域。 特别是在计算机视觉领域。在许多物体检测场景中,背景示例(阴性)的数量远远超过感兴趣物体(阳性)的数量。 背景示例(阴性)的数量远远超过感兴趣对象(阳性)的数量。标准损失函数会 会被这些易于classify 的背景示例的庞大数量所淹没,从而阻碍模型学习难度更大的正面示例的能力。 学习难度更大的正面示例的能力。Focal Loss 可以根据预测的置信度动态缩放损失,有效地降低了模型学习难度。 预测的置信度来动态缩放损失,从而有效降低易分类示例的权重,并迫使模型将训练重点 在困难的阴性和分类错误的对象上。
Focal Loss 背后的主要动机是提高单级物体检测器的性能,如 单级物体检测器的性能,例如 早期版本的 RetinaNet 和现代架构,如 Ultralytics YOLO11.在这些系统中,检测器扫描图像并生成数千个候选位置。 生成数千个候选位置。由于图像的大部分通常是背景,因此背景与物体的比例通常可达 1000:1 或更高。 通常可达 1000:1 或更高。
在没有干预的情况下,大量背景样本产生的微小误差的累积效应会在梯度更新过程中占据主导地位。 在反向传播过程中主导梯度更新。 反向传播。这会导致 优化算法优先考虑简单地 将所有东西都归类为背景,以尽量减少整体误差,而不是学习实际物体的细微特征。 实际物体的细微特征。焦点损失会重塑标准损失曲线,以减少对模型已经有把握的实例的惩罚,从而引导优化算法将目标锁定为背景。 的例子减少惩罚,从而引导 模型权重来调整具有挑战性的案例。
焦点损失是标准 交叉熵损失的扩展。它 它引入了一个调制因子,随着对正确类别的置信度增加,损失贡献会逐渐减小。 当模型遇到一个 "简单 "的例子--比如一片晴朗的天空,它有很高的概率将其正确识别为背景--调制因子就会随着对正确类别的信心增加而衰减。 当模型遇到 "容易 "的例子时--比如一片晴朗的天空,它能以很高的概率将其正确识别为背景--调制因子会将损失推近零。相反,对于 "难 相反,对于模型预测不正确或不确定的 "难 "例子,损失仍然很大。
这种行为由聚焦参数控制,通常用 gamma 表示。通过调整该参数,数据科学家 可以调整损失函数对分类良好的示例降低权重的程度。这样就能在高度不平衡的 在高度不平衡的训练数据上进行训练,从而 从而提高稀有类的准确率和召回率。
处理不平衡的能力使 Focal Loss 成为安全关键型和高精度环境中必不可少的设备。
"(《世界人权宣言》) ultralytics 库提供了强大的 Focal Loss 实现,可轻松集成到定制培训管道中。
自定义训练管道中。下面的示例演示了如何初始化损失函数并计算
预测对数与地面实况标签之间的误差。
import torch
from ultralytics.utils.loss import FocalLoss
# Initialize Focal Loss with a gamma of 1.5
criterion = FocalLoss(gamma=1.5)
# Example: Prediction logits (before activation) and Ground Truth labels (0 or 1)
preds = torch.tensor([[0.1], [2.5], [-1.0]], requires_grad=True)
targets = torch.tensor([[0.0], [1.0], [1.0]])
# Compute the loss
loss = criterion(preds, targets)
print(f"Focal Loss value: {loss.item():.4f}")
将 Focal Loss 与损失函数图谱中的相关术语区分开来很有帮助: