探索 Focal Loss 如何解决深度学习中的类别不平衡问题。学习如何结合 Ultralytics YOLO26 实现它,以关注难例并提高模型准确性。
Focal Loss是一种专门的目标函数,主要用于深度学习中解决严重的类别不平衡问题。在许多计算机视觉任务中,例如object detect,背景样本(负样本)的数量远远超过感兴趣对象(正样本)。像广泛使用的交叉熵损失(Cross-Entropy Loss)这样的标准方法,对所有错误一视同仁,这常常导致模型被大量易于分类的背景数据所淹没。Focal Loss修改了标准的损失计算方式,以降低这些易分类样本的权重,从而迫使优化算法将其学习能力集中在“难”样本上——即那些对模型性能至关重要的稀有且难以分类的对象。
Focal Loss的核心创新在于它能够根据模型的置信度动态调整分配给每个样本的惩罚。在典型的监督学习场景中,检测器可能会评估图像中的数千个候选位置。由于这些位置大多不包含任何物体,标准损失函数会从这些易于分类的负样本中累积许多小的误差信号,这可能会淹没少数正样本的宝贵信号。
Focal Loss引入了一个调制因子,随着模型对正确类别的置信度增加,损失贡献会随之衰减。这意味着,如果模型已经99%确定某个背景区域确实是背景,那么该区域的损失将被降至接近零。因此,模型权重的更新主要基于被错误分类的样本或模型不确定的样本。这种有针对性的方法对于训练高性能的单阶段object detect器(如YOLO26)至关重要,使其无需复杂的采样阶段即可实现高精度。
处理不平衡的训练数据对于在安全性和精确性至关重要的环境中部署稳健的AI系统至关重要。
"(《世界人权宣言》) ultralytics 该库包含高级损失函数的优化实现,以支持最先进的模型。尽管 Ultralytics 平台 会自动配置这些超参数以实现最佳训练,但开发人员也可以直接访问这些组件进行自定义研究。
以下示例演示了如何使用...初始化 Focal Loss。 ultralytics 实用程序包并计算一组预测的误差。
import torch
from ultralytics.utils.loss import FocalLoss
# Initialize Focal Loss.
# The 'gamma' parameter controls the focusing strength (higher = more focus on hard examples).
criterion = FocalLoss(gamma=1.5)
# Example: Model predictions (logits) and binary Ground Truth labels
# requires_grad=True simulates model outputs that need backpropagation
predictions = torch.tensor([[0.8], [-1.5], [0.1]], requires_grad=True)
targets = torch.tensor([[1.0], [0.0], [1.0]])
# Calculate the loss value
loss = criterion(predictions, targets)
print(f"Computed Focal Loss: {loss.item():.4f}")
了解 Focal Loss 在误差测量更广阔的领域中的位置,有助于为特定计算机视觉任务选择正确的策略。

开启您的机器学习未来之旅