Focal Loss
Focal Lossがディープラーニングにおけるクラス不均衡をいかに解決するか解説します。Ultralytics YOLO26に実装して困難な例に焦点を当て、モデル精度を向上させる方法を学びましょう。
Focal Lossは、深刻なクラス不均衡の課題に対処するために主にディープラーニングで使用される特殊な目的関数です。物体検出などの多くのコンピュータビジョンタスクでは、背景の例(ネガティブサンプル)の数が、関心のあるオブジェクト(ポジティブサンプル)の数を大幅に上回ります。広く使用されているCross-Entropy Lossのような標準的な手法は、すべてのエラーを平等に扱うため、モデルが分類の容易な背景データの膨大な量に圧倒されてしまうことがよくあります。Focal Lossは、標準的な損失計算を修正して、これらの簡単な例の重みを下げ、optimization algorithmに、モデルのパフォーマンスにとって極めて重要な、まれで分類が困難なオブジェクトである「ハード」な例に学習能力を集中させるよう強制します。
フォーカシングのメカニズム#
Focal Lossの核心的なイノベーションは、モデルの信頼度に基づいて各サンプルに割り当てられたペナルティを動的にスケーリングする能力にあります。一般的なsupervised learningのシナリオでは、検出器は画像内の何千もの候補位置を評価する場合があります。これらの位置のほとんどにはオブジェクトが含まれていないため、標準的なloss functionは、これらの簡単なネガティブから多くの小さな誤差信号を蓄積し、少数のポジティブインスタンスからの貴重な信号がかき消されてしまう可能性があります。
Focal Lossは、正しいクラスに対する信頼度が高まるにつれて、損失の寄与を減衰させる変調係数を導入します。これは、背景パッチが確かに背景であるとモデルがすでに99%確信している場合、そのパッチの損失がほぼゼロに減少することを意味します。その結果、model weightsは、主に誤分類されたサンプルや、モデルが不確実なサンプルに基づいて更新されます。YOLO26のような高性能なone-stage object detectorsのトレーニングには、このターゲットを絞ったアプローチが不可欠であり、複雑なサンプリングステージを必要とせずに高い精度を達成できるようになります。
実社会での応用#
不均衡なtraining dataの処理は、安全性と精度が最優先される環境で堅牢なAIシステムを展開するために不可欠です。
- AI in Healthcare: medical image analysisのような分野では、病変の特定は干し草の山から針を探すことに似ていることがよくあります。たとえば、小さな病変を探すMRIスキャンでは、健康な組織がピクセルの99%以上を占める場合があります。標準的なモデルは、至る所で「健康」と予測することで単純な精度を最大化し、重要な診断を見逃してしまう可能性があります。Focal Lossを使用すると、システムは豊富な健康な組織からの信号を抑制し、異常の微細な特徴の学習を優先できるようになり、命に関わる検出のrecallが向上します。
- Autonomous Vehicles: 自動運転車向けの認識システムは、建物、道路、空などの複雑な背景に対して、歩行者やサイクリストなどの脆弱な道路利用者を検知する必要があります。背景は簡単に学習できますが、小さかったり遠くにある障害物は大きな課題となります。Focal Lossを利用することで、AI in automotiveアプリケーションは、危険物が視界のわずかな部分しか占めていない場合でも、認識スタックがこれらの検出困難なオブジェクトを無視しないようにし、安全基準を維持することができます。
Ultralyticsによる実装#
ultralyticsライブラリには、最先端モデルをサポートするために高度な損失関数の最適化された実装が含まれています。Ultralytics Platformは最適なトレーニングのためにこれらのハイパーパラメータを自動的に構成しますが、開発者はカスタム研究のためにこれらのコンポーネントに直接アクセスすることもできます。
次の例は、ultralyticsユーティリティパッケージを使用してFocal Lossを初期化し、一連の予測のエラーを計算する方法を示しています。
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がエラー測定のより広い状況の中でどのような位置を占めるかを理解することは、特定のコンピュータビジョンタスクに適した戦略を選択するのに役立ちます。
- Focal Loss vs. Cross-Entropy Loss: クロスエントロピーは、対数誤差に基づいて予測にペナルティを課す、分類のための基礎的なメトリックです。Focal Lossは厳密にはクロスエントロピーの拡張であり、フォーカシングパラメータがゼロに設定されている場合、数学的に標準のクロスエントロピーに戻ります。主な違いは、簡単なネガティブの重みを自動的に下げるFocal Lossの能力であり、COCOのような不均衡なデータセットに対して優れています。
- Focal Loss vs. IoU Loss: Focal Lossが分類(オブジェクトが何であるかを決定すること)のために設計されているのに対し、IoU Lossはローカライゼーション(オブジェクトがどこにあるかを決定すること)のために使用されます。最新の検出器は、クラス確率のためのFocal Lossと、bounding box回帰のためのIoUベースのメトリックを組み合わせた複合損失関数を利用しています。
- Focal Loss vs. Dice Loss: Dice Lossは、主にimage segmentationタスクにおいて不均衡に対処するために使用されるもう1つの手法です。Focal Lossが信頼度に基づいて個々のピクセルやサンプルに対して動作するのに対し、Dice Lossは予測領域とグラウンドトゥルース領域の間の重なりをグローバルに最適化します。複雑なsegmentation workflowsでは、両方が一緒に使用されることがよくあります。






