Focal Loss
Focal Lossがディープラーニングにおけるクラス不均衡を解決する仕組みをご確認ください。Ultralytics YOLO26に実装し、難しいサンプルに注目させてモデル精度を向上させる方法を学べます。
Focal Lossは、主に深層学習で深刻なクラス不均衡の課題に対処するために使用される、特殊な目的関数です。物体検出など、多くのコンピュータービジョンタスクでは、背景の例(負のサンプル)の数が、関心対象の物体(正のサンプル)の数を大幅に上回ります。広く使用されているクロスエントロピー損失などの標準的な手法では、すべての誤差を同等に扱うため、分類が容易な背景データの膨大な量にモデルが圧倒されることがよくあります。Focal Lossは標準的な損失計算を変更して、これらの分類が容易な例の重みを下げ、最適化アルゴリズムが学習能力を「困難な」例、つまりモデルの性能に不可欠な、まれで分類が難しい物体に集中するようにします。
焦点化のメカニズム#
Focal Lossの中核となる革新性は、モデルの信頼度に基づいて各サンプルに割り当てるペナルティを動的にスケーリングできる点にあります。一般的な教師あり学習のシナリオでは、検出器が画像内の何千もの候補位置を評価することがあります。これらの位置のほとんどには物体が含まれていないため、標準的な損失関数では、分類が容易な負例から多数の小さな誤差信号が蓄積され、少数の正例から得られる貴重な信号が埋もれてしまう可能性があります。
Focal Lossは、正しいクラスに対する信頼度が高まるにつれて損失への寄与を減衰させる変調係数を導入します。つまり、モデルが背景パッチを本当に背景であるとすでに99%確信している場合、そのパッチの損失はほぼゼロまで減少します。その結果、モデルの重みは、主に誤分類されたサンプルやモデルが確信を持てないサンプルに基づいて更新されます。この対象を絞ったアプローチは、YOLO26のような高性能な一段階物体検出器の学習に不可欠であり、複雑なサンプリング段階を必要とせずに高い精度を実現できます。
実世界での利用例#
安全性と精度が最も重視される環境で堅牢なAIシステムを展開するには、不均衡なトレーニングデータへの対処が重要です。
- ヘルスケアにおけるAI: 医用画像解析などの分野では、病変を特定する作業は、干し草の山から針を探す作業にたとえられることがよくあります。たとえば、小さな病変を探すMRIスキャンでは、健康な組織がピクセルの99%を超えることがあります。標準的なモデルは、どこでも「健康」と予測することで単純な精度を最大化し、重大な診断を見逃す可能性があります。Focal Lossを使用すると、システムは大量に存在する健康な組織からの信号を抑制し、異常の微細な特徴の学習を優先できるため、命を救う検出における再現率が向上します。
- 自動運転車: 自動運転車の知覚システムは、建物、道路、空といった複雑な背景の中で、歩行者や自転車利用者などの交通弱者を検出する必要があります。背景は容易に学習できる一方で、小さな障害物や遠方の障害物は大きな課題となります。Focal Lossを利用することで、自動車分野におけるAIアプリケーションは、知覚スタックがこのような検出困難な物体を無視しないようにし、危険が視野のごく小さな部分しか占めていない場合でも安全基準を維持できます。
Ultralyticsを使用した実装#
ultralyticsライブラリには、最先端モデルをサポートするために最適化された高度な損失関数の実装が含まれています。Ultralyticsプラットフォームは最適なトレーニングのためにこれらのハイパーパラメーターを自動的に設定しますが、開発者はカスタム研究のためにこれらのコンポーネントへ直接アクセスすることもできます。
次の例では、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とクロスエントロピー損失の比較: クロスエントロピーは、対数誤差に基づいて予測にペナルティを課す、分類の基礎となる指標です。Focal Lossはクロスエントロピーを厳密に拡張したものであり、焦点化パラメーターを0に設定すると、数学的に標準的なクロスエントロピーに戻ります。主な違いは、Focal Lossが分類容易な負例の重みを自動的に下げられる点にあり、COCOのような不均衡データセットに適しています。
- Focal LossとIoU Lossの比較: Focal Lossは分類(物体が何であるかの判定)向けに設計されているのに対し、IoU Lossは位置特定(物体がどこにあるかの判定)に使用されます。最新の検出器では、クラス確率にFocal Lossを、バウンディングボックス回帰にIoUベースの指標を組み合わせた複合損失関数が使用されます。
- Focal LossとDice Lossの比較: Dice Lossは、不均衡に対処するために使用されるもう1つの手法で、主に画像セグメンテーションタスクで利用されます。Focal Lossが信頼度に基づいて個々のピクセルまたはサンプルを処理するのに対し、Dice Lossは予測領域と正解領域の重なりを全体として最適化します。複雑なセグメンテーションワークフローでは、両方を併用することが一般的です。









