Focal Lossが物体検出におけるクラスの不均衡にどのように対処しているかをご覧ください。
フォーカル・ロスは、機械学習、特にコンピュータ・ビジョンの学習において、クラスが極端に不均衡になるという問題に対処するために設計された特殊な目的関数である。 特にコンピュータビジョンの分野ではそうである。多くの物体検出シナリオにおいて 背景の例(ネガ)の数は、関心のあるオブジェクト(ポジ)の数をはるかに上回ります。標準的な損失関数は 標準的な損失関数は、このようなclassify しやすい背景例の膨大な量に圧倒され、モデルの学習能力を妨げます。 を妨げてしまう。フォーカルロスは、予測の信頼度に基づいて損失を動的にスケーリングすることで、これを軽減します。 予測値の信頼度に基づいて損失を動的にスケーリングすることで、簡単な例を効果的に重み付けし、モデルに学習努力を集中させます。 を強制する。
フォーカルロスの主な動機は、次のような1段の物体検出器の性能を向上させることである。 一段階物体検出器 RetinaNetの初期バージョンや、次のような最新のアーキテクチャのような1段の物体検出器の性能を向上させることです。 Ultralytics YOLO11.これらのシステムでは 画像をスキャンし、何千もの候補位置を生成する。通常、画像の大部分は背景であるため、背景と物体の比率は 背景と物体の比率は1000:1以上になることが多い。
介入がなければ、膨大な数のバックグラウンド・サンプルによる小さな誤差の累積効果が、勾配更新の間、勾配を支配する可能性がある。 バックプロパゲーション中の を支配してしまう。これにより 最適化アルゴリズムは 最適化アルゴリズムが、実際の物体の微妙な特徴を学習するよりも、全体的な誤差を最小化するために単にすべてを背景として分類することを優先するようになります。 を優先してしまう。フォーカル・ロスは標準的な損失曲線を再形成し、モデルがすでに自信を持っている例に対するペナルティを減らす。 それによって、モデルの重みを モデルの重みを、困難なケースのために調整する。
フォーカル・ロスは標準的な クロスエントロピー損失(Cross-Entropy 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}")
フォーカル・ロスを、損失関数ランドスケープにおける関連用語と区別することは有益である:

