Non-Maximum Suppression (NMS) がオブジェクト検出における重複するバウンディングボックスをどのように排除するかを学びましょう。Ultralytics YOLO26 がネイティブなエンドツーエンド NMS を提供する方法を発見してください。
Non-Maximum Suppression (NMS) は、モデルによって行われた生の予測を洗練するために、object detectionで使用される後処理技術です。object detectionモデルが画像を分析する際、単一のオブジェクトに対して複数の重複するbounding boxesを生成することがよくあり、それぞれに関連するconfidence scoreが付与されます。これらの冗長な予測は、モデルが同じ特徴をわずかに異なるスケールや位置でdetectする可能性があるために発生します。NMSは、各オブジェクトに対して最も正確なbounding boxのみを保持し、他を破棄することでこの出力をフィルタリングし、最終出力がクリーンで正確、かつ重複がないことを保証します。
NMSアルゴリズムは、候補となるバウンディングボックスのリストと、それに対応する信頼度スコアに対して動作します。目標は、オブジェクトに最適なボックスを選択し、それに大きく重複する他のボックスを抑制(削除)することです。これらは同じオブジェクトの重複したdetectionsである可能性が高いためです。このプロセスは通常、以下のステップに従います:
NMSは、精度が最重要であり、重複するdetectがダウンストリームシステムを混乱させる可能性があるシナリオにおいて不可欠です。
多くの現代のフレームワークは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は主要なニューラルネットワークの外部に位置する必須の「クリーンアップ」ステップであり、推論レイテンシを増加させていました。しかし、この分野はエンドツーエンドアーキテクチャへと進化しています。

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