Hard Negative Mining
コンピュータービジョンにおいて、紛らわしいネガティブ例を特定してYOLOモデルのトレーニングを改善することにより、ハードネガティブマイニングがどのように誤検知を減らすかを学びます。
ハードネガティブマイニングは、モデルが異常に確信を持って間違えてしまうネガティブな例を特定し、学習時にそれらをより重視するトレーニングデータの戦略です。ネガティブな例はターゲットクラスに属しませんが、ハードネガティブはポジティブな例に非常に似ており、高スコア、誤検出、または近接した埋め込み(embedding)を生成します。モデルに簡単な背景の例を繰り返し見せる代わりに、このような紛らわしいケースに集中することで、ハードネガティブマイニングは決定境界をシャープにし、誤検出を減らすことができます。
ハードネガティブマイニングの仕組み#
このプロセスは通常、代表的なトレーニングデータでトレーニングされたベースラインモデルから始まります。次に、モデルは、ラベルなしの本番画像、ネガティブのみのシーン、または各トレーニングバッチ内の例など、より大きな候補プールを評価します。ネガティブであるにもかかわらず高いポジティブスコアを受け取った候補が、レビューおよび今後のトレーニングのために選択されます。
「ハード」の条件はタスクによって異なります:
- オブジェクト検出では、検出器がターゲットオブジェクトと誤認した場合、背景領域はハードになります。
- 分類では、ターゲットクラスに対して高い確信度を割り当てられた、間違ったクラスの例です。
- 検索またはメトリック学習では、埋め込み空間内でクエリの近くにランク付けされた無関係なアイテムです。Googleの推薦モデルのためのネガティブサンプリングに関するガイダンスでは、ハードネガティブを、勾配に強く影響する高スコアのネガティブアイテムとして説明しています。
- 三つ組(トリプレット)学習では、ネガティブは一致するポジティブと比較してアンカーに近すぎます。PyTorch TripletMarginLossドキュメントでは、相対的な類似性を学習するために使用されるアンカー・ポジティブ・ネガティブの構造について説明しています。
マイニングは、大規模なデータセット全体でモデルを定期的に実行するオフラインで行われる場合と、現在のミニバッチから困難なネガティブを選択するオンラインで行われる場合があります。Kerasのハードネガティブマイニングレイヤーは、候補ロジットに基づいたクエリごとの選択の例を提供します。
ハードネガティブが重要である理由#
ほとんどのネガティブな例は簡単です。空っぽの空がフォークリフト検出器を混乱させることはまずありません。モデルがそのような例を正しく分類すると、それらは有用な学習シグナルにほとんど貢献しなくなります。ハードネガティブは、モデルが誤解している正確な視覚的またはセマンティックな特徴を明らかにします。
これらは、誤報(false alarm)によって精度(precision)が低下する場合に特に価値があります。scikit-learnの精度・再現率ガイドに示されているように、精度・再現率分析は、再現率の受け入れられない低下を引き起こすことなく、再トレーニングが実際に誤検出を削減するかどうかを判断するのに役立ちます。
ハードネガティブマイニングは、関連する手法とは異なります:
- ネガティブサンプリングは、すべてのネガティブの中から管理しやすいサブセットを選択します。ハードネガティブマイニングは、最も紛らわしいものを優先します。
- **アクティブラーニング**は一般に、人間によるラベリングのために不確実な例(可能性のあるポジティブを含む)を選択します。ハードネガティブマイニングは、モデルに挑戦する確認済みのネガティブを具体的にターゲットにします。
- **Focal loss**は損失関数内で例の重み付け方法を変更するのに対し、マイニングはどの例を選択するか、または強調するかを変更します。
- クラスの不均衡は、不均等なクラス頻度に対処します。Googleのクラス不均衡データセットのガイダンスではダウンサンプリングと重み付けについて説明していますが、頻繁に出現するネガティブが必ずしも困難なネガティブであるとは限りません。
- **データ拡張(Data augmentation)**は既存のサンプルのバリエーションを作成しますが、未知の本番環境での失敗モードを確実に導入することはできません。
実社会での応用#
倉庫の安全検出: フォークリフト検出器がパレットジャック、棚の反射、シザースリフトをフォークリフトとして繰り返し識別すると仮定します。これらの誤検出は不必要なアラートを引き起こし、オペレーターの信頼を低下させる可能性があります。エンジニアは、フォークリフトのアノテーションなしでそれらのシーンをネガティブ画像として収集し、データセットに追加し、ターゲットを類似の機器から区別するように検出器を再トレーニングできます。
ビジュアル商品検索: 顧客が特定の黒いランニングシューズを検索したが、検索システムが異なる製品ラインの視覚的に似たシューズを高くランク付けしすぎます。それらの一致しない製品はハードネガティブになります。それらに対してトレーニングを行うことで、埋め込みモデルは、ソールの形状、ロゴの配置、素材などの微妙な違いを保持するようになります。Kerasのシャムネットワーク(Siamese network)の例は、アンカー、ポジティブ、ネガティブの各画像が類似度学習をどのようにサポートするかを示しています。
実践的なマイニングワークフロー#
信頼性の高いワークフローは反復的です:
- 代表的な検証データおよび本番データに対して予測を実行します。
- Ultralytics検証モードと混同行列(confusion matrix)を使用して、信頼度の高い誤検出とクラス混同パターンを確認します。
- すべての候補が真にネガティブであることを確認します。不正確なラベルは、モデルに実際のオブジェクトを抑制するように教えてしまう可能性があります。
- 関連するサンプルを見つけ、重複を削除し、多様な背景、視点、条件を維持します。
- コンピュータビジョンモデルのテストワークフローを使用して、再トレーニングを行い、完全なテストセットと専用のハードネガティブスライスの両方でパフォーマンスを比較します。
Ultralytics Explorer類似度検索は、既知の誤検出に似た画像を表面化させるのに役立ちます:
from ultralytics import Explorer
# Build an embedding index for the example dataset
explorer = Explorer(data="coco128.yaml", model="yolo26n.pt")
explorer.create_embeddings_table()
# Retrieve visually similar candidates for human review
candidates = explorer.get_similar(
img="https://ultralytics.com/images/bus.jpg",
limit=12,
)
print(candidates.head())類似性だけでは、候補がハードネガティブであることは証明されません。レビュアーがその正解ラベル(ground-truth label)を検証する必要があります。チームはUltralytics Platformを使用して、候補画像の整理、アノテーションまたは修正、更新されたモデルのトレーニング、およびデプロイの監視を行うことができます。
絶対に最もハードな例ばかりを選択することは避けてください。一部は、ラベル付けミス、曖昧、またはトレーニングを不安定にする極端な外れ値である可能性があります。簡単、中程度の難易度、およびハードなネガティブのバランスの取れた混合により、現在の境界がどこで失敗するかをモデルに教えながら、通常は幅広いカバレッジが維持されます。






