今回の論文
今回取り上げるのは、Tsung-Yi Lin、Priya Goyal、Ross Girshick、Kaiming He、Piotr Dollárによる「Focal Loss for Dense Object Detection」です。2017年に発表されたICCV論文で、arXiv初版の公開日は2017年8月7日です。公開元はarXivおよびIEEE/CVFの会議論文集、研究分野は物体検出と損失関数の設計です。論文の書誌情報と原論文v2の本文を参照しています。
選んだ理由は、モデルを大きくする以外にも、学習を改善する方法があると具体的にわかるからです。「データの件数」だけでなく「どの例が学習への影響を占めるか」を考える発想は、画像検査や少数クラスの分類を作る際にも参考になります。
どんな技術か
Focal Lossは、すでに正しく判定できる例の損失を小さくし、まだ難しい例の影響を相対的に残す損失関数です。入力例をモデルに見せたあと、予測と正解のずれをどう数値化するかを変更します。
たとえば画像から小さな部品を検出するとき、候補位置の大半は何もない背景です。背景を簡単に見分けられるようになっても、その候補数が非常に多いと、学習が背景への対応に支配されます。Focal Lossは、このような簡単な負例の影響を減らします。
論文では、この損失を使う一段階の物体検出器RetinaNetも構築しています。Focal Lossは学習のルール、RetinaNetはそれを検証するモデルです。学習済みモデルの出力へ後から掛ければ検出精度が上がる、という推論時の技術ではありません。
課題
物体検出では、物体の種類だけでなく、画像内の位置と大きさも予測します。一段階方式は画像全体へ多数の候補枠を配置して判定するため、候補が1画像あたり約10万に達することもあります。そのうち物体に対応するものはわずかです。
通常の交差エントロピーも、正しく予測した例の損失を小さくします。しかし、簡単な背景例が大量にあれば、小さい値を足し合わせた影響は無視できません。正例と負例の件数に差があるだけでなく、簡単な例が全体の損失や勾配を占めることが問題になります。
二段階の検出器では、まず物体らしい場所に候補を絞り、その後に正例と負例の比率を調整して分類できます。一段階方式で同じようにサンプリングしても、どの例を残すかという設計が必要です。クラス別の固定重みを付ける方法もありますが、同じ負例の中にある「簡単な背景」と「物体と紛らわしい背景」の違いまでは扱えません。
実システムでも、正常な外観が大半を占める検査画像や、対象物が小さく写る定点カメラなどでは、背景の多さが学習の障害になりえます。ただし、異常例が存在しない問題を、損失関数だけで解消できるわけではありません。
用語解説
- 交差エントロピー
- 正解へ割り当てた予測確率が低いほど大きくなる損失です。Focal Lossはこの値に、例の難しさによって変わる係数を掛けます。基本形を知ると、何を変更した技術なのかがわかります。
- 正例・負例とクラス不均衡
- ここでは、検出対象に対応する候補が正例、背景に対応する候補が負例です。負例の数が圧倒的に多く、しかも大半が簡単に判定できることが、論文の中心課題です。
- アンカーボックス
- 画像上の各位置に置く、あらかじめ大きさと縦横比を決めた候補枠です。RetinaNetは各枠のクラスと位置の補正量を予測します。多数のアンカーを使う構造が、背景例の多さにつながります。
- Feature Pyramid Network(FPN)
- 異なる解像度の特徴マップを組み合わせ、小さな物体から大きな物体まで扱う構造です。RetinaNetの検出性能には、この多段階の画像表現も寄与しており、損失関数だけでモデル全体が成立するわけではありません。
- IoUとCOCO AP
- IoUは予測枠と正解枠の重なりを、両者の和集合に対する比率で測る値です。COCOの主要APはIoUの判定基準を0.50から0.95まで変えて平均した検出指標です。画像分類の正解率とは異なり、クラスと位置の両方を評価します。
技術の仕組み
正解への確信度から、例ごとの係数を作ります
あるクラスに属する予測確率をpとします。説明のため、正解ラベルが1ならp_t=p、正解ラベルが0ならp_t=1−pと置きます。p_tは「正解側へ割り当てた確率」です。背景を背景だと高い確信で判定している場合にも、p_tは大きくなります。
論文の重み付きFocal Lossは、次の形です。
CE = -log(p_t)
FL = -alpha_t × (1 - p_t)^gamma × log(p_t)
alpha_t = alpha (正例)
1 - alpha (負例)
gammaは、簡単な例をどれだけ抑えるかを決める非負の係数です。gamma=0なら変調係数が1になり、クラス重み付きの交差エントロピーへ戻ります。alpha_tを省略した形なら通常の交差エントロピーへ戻ります。
gamma=2、p_t=0.9なら、変調係数は0.01です。同じクラス重みを使う交差エントロピーに対し、損失は100分の1になります。p_t=0.1なら係数は0.81で、難しい例の影響は比較的残ります。この比較は損失値の比であり、勾配まで一律に100分の1になるという意味ではありません。係数自体も予測確率に依存するため、逆伝播ではその変化も含めて微分します。
alphaは正負クラスのバランス、gammaは同じクラス内を含む例の難しさを調整します。役割が違うため、両方を一緒に検証する必要があります。原論文3.1〜3.2節
RetinaNetは分類と枠の補正を分けます
RetinaNetは、ResNetとFPNで画像の特徴を作り、各解像度へ分類用と位置補正用の小さなネットワークを接続します。標準設定では、各位置で3種類のスケールと3種類の縦横比を組み合わせた9個のアンカーを扱います。
分類側は各アンカーについてクラスごとのシグモイド出力を作り、Focal Lossで学習します。背景は、対象クラスのいずれにも対応しない教師信号として扱います。枠の位置・大きさの補正には別のsmooth L1損失を使います。Focal Lossが直接改善する対象は分類側であり、位置誤差をそのまま最小化する損失ではありません。
教師信号はアンカーと正解枠のIoUから割り当てます。論文では0.5以上を正例、0.4未満を背景とし、その間の未割り当てアンカーは学習で無視します。分類損失はこうした無視対象を除く候補について集計し、正解物体に割り当てられたアンカー数で正規化します。単に全候補の平均へ置き換えると、学習の尺度が変わります。原論文4節
最初の予測確率にも工夫があります
初期状態で各クラスを50%の確率で存在すると予測すると、大量の背景例から大きな損失が発生します。そこで分類出力のバイアスを、初期の存在確率がpi=0.01になるよう設定します。
初期バイアス b = log(pi / (1 - pi))
pi = 0.01 の場合、b は約 -4.595
これは損失の式とは別の工夫です。論文では交差エントロピーでもFocal Lossでも学習を安定させています。実装では、確率へ変換してから単純にlogを取るより、シグモイドと損失計算を統合して数値的に安定させる点も重要です。
推論時は画像をネットワークへ通し、スコアで候補を絞り、重なった枠をNMSで整理します。Focal Lossの計算は推論には不要です。原論文4.1節
実験と結果
同じネットワークで損失関数を比較しています
主な評価はCOCOの物体検出です。学習には当時のtrainval35k、損失や設定の比較には5,000画像のminivalを使っています。表1a・1bではResNet-50-FPN、画像スケール600ピクセルという共通条件で比較しています。
| 分類損失 | gamma | alpha | COCO AP |
|---|---|---|---|
| クラス重み付き交差エントロピー | 0 | 0.75 | 31.1 |
| Focal Loss | 1 | 0.25 | 33.7 |
| Focal Loss | 2 | 0.25 | 34.0 |
| Focal Loss | 5 | 0.25 | 32.2 |
各gammaに対してalphaを選んだ比較なので、alphaを固定した純粋なgamma単独の実験ではありません。それでも、同じネットワークで、重み付き交差エントロピーの最良値31.1から34.0へ2.9 APポイント改善しています。一方、gammaを5へ増やすと32.2へ下がり、難しい例へ集中させるほどよいわけではありません。原論文表1a・1b
ResNet-101-FPNで、損失の高い例を選ぶOHEMと比べた表1dでは、試したOHEM設定の最高が32.8 AP、Focal Lossが36.0 APでした。これは「例を選別する」代わりに「損失を滑らかに調整する」方法の有効性を示します。ただし、この一段階検出の条件での比較です。
モデル全体の最高値と、損失単体の改善は区別します
COCO test-devの表2では、RetinaNetのResNet-101-FPN構成が39.1 AP、ResNeXt-101-FPN構成が40.8 APです。ただし表2のモデルには、表1の基本設定より長い学習とスケール変更によるデータ拡張が入っています。39.1 APを、損失だけを差し替えた改善値として扱うことはできません。原論文表2
この結果の意義は、2017年当時、一段階方式でも高精度な検出を実現できたことにあります。現在の検出器すべてより優れているという意味ではなく、業務画像でも同じ改善幅が得られると保証する結果でもありません。
何に使える?
以下は、損失の仕組みに基づく応用案です。原論文が業務システムごとに検証した結果とは区別してください。
背景の多い画像検査
製品表面の小さな欠陥や、棚の中の特定部品を検出するモデルを学習する場面が考えられます。対象物より背景候補が圧倒的に多く、すでに見分けられる背景が学習を占めるなら、Focal Lossを比較候補にできます。
検出後に対象の形まで必要なら、Segment Anythingのプロンプトによる領域切り出しと組み合わせる設計も考えられます。検出枠を出す段階と、枠内の輪郭を求める段階では、解く課題が異なります。
少数クラスを含む業務分類
問い合わせの中からまれな要対応カテゴリを見つける分類器でも、簡単な通常例が多数を占めるなら、同じ重み付けの発想を試せます。全体正解率だけでなく、対象カテゴリの適合率と再現率、見逃し件数を比較する必要があります。
ただし、頻度が低いことと判定が難しいことは別です。簡単な少数クラスの例も損失が抑えられるため、Focal Lossを使えば自動的に少数クラスが救われるわけではありません。正例データの追加やクラス別重みとの比較が必要です。
開発や事業へのヒント
モデル変更の前に、損失の内訳を確認します
小規模な開発でも、「正例と負例の件数」「両者が占める損失」「誤りが多い入力条件」を記録できます。正常例が多いという集計だけで判断せず、簡単な正常例が学習を支配しているかまで調べると、損失変更が必要な理由が明確になります。
比較実験では、学習用・検証用の分割とモデルをそろえ、交差エントロピー、クラス重み付き交差エントロピー、Focal Lossを試します。原論文のgamma=2とalpha=0.25は候補の一つですが、業務データの最適値と決めつけず、評価したい見逃し率や誤通知率に沿って選びます。
難しい例を、追加データの候補にします
Focal Lossを使っても高損失が続く例を調べると、撮影条件の不足、曖昧なラベル、対象物の見切れなどに気づける可能性があります。これは原論文の実験結果そのものではなく、難しい例へ影響を集める性質から考えられる開発上の使い方です。
そのような例を確認画面へ回し、ラベルを修正するか、新しい条件のデータを増やす設計が考えられます。高損失だから重要な正しい教師例だと自動判断せず、人が原因を確認する点が大切です。
学習時の工夫と、利用時の費用を分けます
Focal Lossは分類器の学習方法を変えるので、同じモデル構造なら、この損失自体による推論処理の追加はありません。すでに専用モデルを学習・配布しているサービスでは、推論の構成を保ちながら精度改善を試せる点が利点です。
一方、外部の生成AI APIへプロンプトを送るだけのアプリでは、内部の損失関数を変更できません。適用できる場所は、自社で学習できる検出器や分類器などです。損失設計への注目は有益ですが、LLMや検索へ同じ係数をそのまま適用すれば改善するという一般則ではありません。
限界
Focal Lossは簡単な例の損失を抑えますが、それらの順伝播計算を省く技術ではありません。RetinaNetでも多数のアンカーのスコアを計算します。画像解像度やネットワーク規模による学習・推論コストは残ります。
また、難しい例には、学ぶ価値のある境界例だけでなく、誤ったラベルやモデルでは判定できない入力も含まれます。その影響が相対的に強くなる可能性があるため、ラベル品質の悪さを補う仕組みと考えるのは危険です。原論文も、外れ値の影響を抑えるロバストな損失とは役割が逆であると説明しています。原論文2節
実装では、alphaを正例と負例のどちらへ掛けるか、無視ラベル、正規化の分母、正例がない画像の扱いを明確にする必要があります。小さな確率のlogや低精度計算での丸め誤差にも注意します。式だけ一致していても、集計方法が違えば論文と同じ学習にはなりません。
最後に、原論文の中心はCOCOの物体検出です。日本語の業務分類や欠陥検査へ転用する場合は、別途の検証が必要です。出力スコアを業務上の発生確率として扱うなら、スコア帯ごとの実測頻度も確認してください。APの改善は、確率の校正や適切な通知閾値を保証しません。
よくある質問
Q. クラスの重みを変える方法と何が違いますか?
A. クラス重みは正例か負例かに応じて固定値を掛けます。Focal Lossはさらに、その時点で正解をどれだけ確信できているかに応じた係数を掛けます。同じ背景クラスでも、簡単な例と紛らわしい例で影響が変わります。
Q. gamma=2、alpha=0.25をそのまま使ってよいですか?
A. 初期の比較条件にはできますが、原論文の検出設定で良好だった値です。gamma=5でAPが下がったように、集中を強めすぎると逆効果になる場合があります。クラス別の見逃し・誤検出を見て、両係数を検証してください。
Q. Focal Lossを入れれば異常データが少なくても大丈夫ですか?
A. 異常の見え方を学べる正例は依然として必要です。損失は存在しない例を補えず、異常の種類や撮影条件が不足していれば見逃しが残ります。正常例の影響を抑える方法と、必要な異常例を集める方法を併せて考えます。
Q. 簡単な例は学習から除外されますか?
A. 原則として候補の計算には残り、正解への確信が高いほど損失が小さくなります。高損失の例だけを選んで残すOHEMとは違い、重みを滑らかに変える仕組みです。処理対象の削減による高速化とは区別します。
Q. 学習済みの検出器へ後付けできますか?
A. 推論時に損失を追加するだけでは効果はありません。再学習やファインチューニングの分類損失として導入します。枠の位置補正用の損失や推論時のNMSを、そのまま置き換えるものでもありません。
今日の学び
この論文は、物体検出で大量の簡単な背景例が学習を支配する課題を扱いました。正解への確信度に応じて損失を小さくするFocal Lossにより、難しい例へ学習の影響を相対的に集めています。開発へのヒントは、データを増やす前に、どの例が損失を占めているかを見ることです。クラスの件数、例の難しさ、ラベル品質を分けて考えると、モデルの大型化以外の改善策が見えてきます。