YOLO Vision Shenzhen
深セン
今すぐ参加
用語集

ノンマキシマムサプレッションNMS

Non-Maximum Suppression (NMS) がオブジェクト検出における重複するバウンディングボックスをどのように排除するかを学びましょう。Ultralytics YOLO26 がネイティブなエンドツーエンド NMS を提供する方法を発見してください。

Non-Maximum Suppression (NMS) は、モデルによって行われた生の予測を洗練するために、object detectionで使用される後処理技術です。object detectionモデルが画像を分析する際、単一のオブジェクトに対して複数の重複するbounding boxesを生成することがよくあり、それぞれに関連するconfidence scoreが付与されます。これらの冗長な予測は、モデルが同じ特徴をわずかに異なるスケールや位置でdetectする可能性があるために発生します。NMSは、各オブジェクトに対して最も正確なbounding boxのみを保持し、他を破棄することでこの出力をフィルタリングし、最終出力がクリーンで正確、かつ重複がないことを保証します。

Non-Maximum Suppression(非最大抑制)の仕組み

NMSアルゴリズムは、候補となるバウンディングボックスのリストと、それに対応する信頼度スコアに対して動作します。目標は、オブジェクトに最適なボックスを選択し、それに大きく重複する他のボックスを抑制(削除)することです。これらは同じオブジェクトの重複したdetectionsである可能性が高いためです。このプロセスは通常、以下のステップに従います:

  1. フィルタリング: 特定の閾値(例:0.25)を下回る信頼度スコアを持つすべてのバウンディングボックスを排除し、弱い予測を即座に除去します。
  2. Sorting: 残りのボックスを信頼度スコアに基づいて降順にソートします。
  3. 選択: 最も高いconfidence scoreを持つボックスを有効なdetectとして選択します。
  4. 比較: この選択されたボックスを、2つのボックス間の重なりを測定するメトリックであるIntersection over Union (IoU)を使用して、残りのすべてのボックスと比較します。
  5. 抑制: 選択されたボックスと別のボックス間のIoUが事前定義された閾値(例: 0.45)を超えた場合、スコアの低いボックスは重複と見なされ、削除されます。
  6. Iteration: すべてのボックスが処理されるまで、まだ抑制または選択されていない、次にスコアの高いボックスでプロセスを繰り返します。

実際のアプリケーション

NMSは、精度が最重要であり、重複するdetectがダウンストリームシステムを混乱させる可能性があるシナリオにおいて不可欠です。

  • 自動運転: 自動運転車システムでは、カメラが歩行者、他の車両、交通標識をdetectします。モデルは、単一の歩行者に対してわずかに異なる3つのボックスを予測する場合があります。NMSは、車両の計画システムがその歩行者に対して1つの座標のみを受け取ることを保証し、「ゴースト」障害物によって引き起こされる不規則なブレーキングや経路計画エラーを防ぎます。
  • 小売在庫管理: 棚の製品を数えるためにコンピュータービジョンを使用する場合、アイテムはしばしば密接に詰められています。NMSがないと、重複する予測のために1つのソーダ缶が2回カウントされる可能性があり、不正確な在庫レベルにつながります。NMSはこれらのdetectionsを洗練し、在庫数が現実と一致するようにします。

PyTorchによるNMSの実装

多くの現代のフレームワークはNMSを内部的に処理しますが、その実装を理解することはパラメータチューニングに役立ちます。以下の例は、PyTorchライブラリを使用してNMSを適用する方法を示しています。

import torch
import torchvision.ops as ops

# Example bounding boxes: [x1, y1, x2, y2]
boxes = torch.tensor(
    [
        [100, 100, 200, 200],  # Box A
        [105, 105, 195, 195],  # Box B (High overlap with A)
        [300, 300, 400, 400],  # Box C (Distinct object)
    ],
    dtype=torch.float32,
)

# Confidence scores for each box
scores = torch.tensor([0.9, 0.8, 0.95], dtype=torch.float32)

# Apply NMS with an IoU threshold of 0.5
# Boxes with IoU > 0.5 relative to the highest scoring box are suppressed
keep_indices = ops.nms(boxes, scores, iou_threshold=0.5)

print(f"Indices to keep: {keep_indices.tolist()}")
# Output will likely be [2, 0] corresponding to Box C (0.95) and Box A (0.9),
# while Box B (0.8) is suppressed due to overlap with A.

NMSとエンドツーエンドdetect

従来、NMSは主要なニューラルネットワークの外部に位置する必須の「クリーンアップ」ステップであり、推論レイテンシを増加させていました。しかし、この分野はエンドツーエンドアーキテクチャへと進化しています。

  • 標準NMS: IoUしきい値の手動調整を必要とするヒューリスティックなプロセスです。しきい値が低すぎると、互いに近い有効なオブジェクトが見逃される可能性があり(低いrecall)、高すぎると重複が残ります(低いprecision)。
  • エンドツーエンドモデル: YOLO26のような次世代モデルは、ネイティブにエンドツーエンドとして設計されています。これらはトレーニング中にオブジェクトごとに正確に1つのボックスを予測することを学習し、NMSプロセスを効果的に内部化します。これにより、外部の後処理が不要になり、Ultralytics Platform上での推論速度の向上とデプロイメントパイプラインの簡素化につながります。

関連概念

  • Soft-NMS: 重なり合うボックスが厳密には除去されず、信頼度スコアが減少するバリエーションです。これにより、多少重なり合うオブジェクト (群衆の中の人々など) も、スコアが減衰後も十分に高いままであれば、引き続きdetectされることが可能になります。
  • アンカーボックス: 多くの検出器でオブジェクトサイズを推定するために使用される、事前に定義されたボックス形状です。これらのアンカーから洗練された最終予測にNMSが適用されます。
  • Intersection over Union (IoU): 2つのボックスがどれだけ重なるかをNMSが決定するために使用する数学的公式であり、抑制のための決定しきい値として機能します。

共にAIの未来を築きましょう!

未来の機械学習で、新たな一歩を踏み出しましょう。