Yolo 深圳
深セン
今すぐ参加
用語集

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

オブジェクト検出において、非最大抑制(NMS)が重複するバウンディングボックスを排除する仕組みを学びましょう。Ultralytics ネイティブなエンドツーエンドNMSを提供する仕組みを発見してください。

非最大抑制(NMS)は、物体検出においてモデルの生成した生の予測を精緻化するために用いられる後処理技術である。 物体検出モデルが画像を分析する際、単一の物体に対して複数の重複する境界ボックスを生成することが多く、それぞれに関連付けられた信頼度スコアを持つ。これらの冗長な予測は、モデルがわずかに異なるスケールや位置で同じdetect 可能性があるために発生する。NMS はこのNMS 、各物体に対して最も正確な境界ボックスのみを保持し、他を破棄することで、最終出力がクリーンで正確、かつ重複のない状態を保証する。

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

NMS 、候補となる境界ボックスとその対応する信頼度スコアのリストに対して動作する。目的は、対象物に対して最適なボックスを選択し、それとは大きく重なる他のボックスを抑制(除去)することである。これらは同一対象物の重複検出である可能性が高い。このプロセスは通常、以下の手順に従う:

  1. フィルタリング:特定の閾値(例: 0.25)未満の信頼度スコアを持つバウンディングボックスをすべて除去し、弱い予測を即時排除する。
  2. ソート:残りのボックスを信頼度スコアの降順で並べ替える。
  3. 選択:有効な検出として、信頼度スコアが最も高いボックスを選択してください。
  4. 比較:選択したこのボックスと残りのすべてのボックスを、 交差率(Intersection over Union,IoU)を用いて比較する。 これは2つのボックス間の重なりを測定する指標である。
  5. 抑制:選択されたボックスIoU 別のIoU 事前定義された閾値 (例: 0.45)を超える場合、スコアの低い方のボックスは重複と見なされ除去される。
  6. 反復処理:まだ抑制または選択されていない次点の高得点ボックスでプロセスを繰り返し、全てのボックスが処理されるまで続ける。

実際のアプリケーション

NMS 、精度が最優先され、重複検出が下流システムを混乱させる可能性があるシナリオにおいて不可欠NMS 。

  • 自動運転:自動運転車システムでは、カメラdetect 、他の車両、交通標識detect 。 あるモデルが単一の歩行者に対してわずかに異なる3つのボックスを予測する場合がある。 NMS 、車両の計画システムがその歩行者に対して単一の座標のみを受け取るNMS 、 「幽霊」障害物による不安定なブレーキ操作や経路計画の誤りを防止する。
  • 小売在庫管理: コンピュータビジョンを用いて棚上の商品をカウントする場合、 商品はしばしば密接に詰め込まれています。NMS、予測が重なることで1本のソーダ缶が二重にカウントされ、 在庫レベルが不正確になる可能性があります。NMS これらの検出NMS 、 在庫カウントが現実と一致することを保証します。

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 エンドツーエンド検出

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

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

関連概念

  • NMS: 重複するボックスを厳密に除去せず、その信頼度スコアを低下させる変法。これにより、 (群衆内の人物など)ある程度重なり合う物体も、減衰後もスコアが十分に高い場合、 検出が可能となる。
  • アンカーボックス事前定義されたボックス形状 多くの検出器が物体のサイズ推定に使用する。これらのアンカーから精緻化された最終予測値にはNMS 適用NMS 。
  • 交差率(IoU) NMS が2つのボックスの重なり具合をNMS 使用する数学式であり、 抑制の決定閾値として機能する。

Ultralytics コミュニティに参加する

AIの未来を共に切り開きましょう。グローバルなイノベーターと繋がり、協力し、成長を。

今すぐ参加