Non-Maximum Suppression (NMS)
非最大抑制(NMS)が物体検出における重複するバウンディングボックスを除去する方法を学びます。Ultralytics YOLO26がネイティブなエンドツーエンドNMSを提供する仕組みを確認します。
非最大抑制 (NMS) は、モデルが生成した生の予測結果を改善するために物体検出で使用される後処理技術です。物体検出モデルが画像を解析すると、通常、単一の物体に対して、関連付けられた信頼度スコアとともに、重なり合う複数のバウンディングボックスを生成します。これらの冗長な予測は、モデルが同じ特徴をわずかに異なるスケールや位置で検出する可能性があるために発生します。NMS は、各物体について最も正確なバウンディングボックスだけを保持し、その他を破棄することでこの出力をフィルタリングし、最終出力から重複を排除して、クリーンで正確な結果を確保します。
非最大抑制の仕組み#
NMS アルゴリズムは、候補となるバウンディングボックスのリストと、それぞれに対応する信頼度スコアに対して動作します。目的は、ある物体について最適なボックスを選択し、それと大きく重なる他のボックスを抑制(削除)することです。これらは同じ物体を重複して検出した可能性が高いためです。通常、この処理は次の手順で行われます。
-
フィルタリング: 信頼度スコアが特定のしきい値(例: 0.25)未満のすべてのバウンディングボックスを除外し、信頼度の低い予測を直ちに取り除きます。
-
ソート: 残ったボックスを、信頼度スコアの降順に並べ替えます。
-
選択: 信頼度スコアが最も高いボックスを有効な検出結果として選択します。
-
比較: 選択したボックスと残りのすべてのボックスを、2つのボックス間の重なりを測定する指標であるIoUを使用して比較します。
-
抑制: 選択したボックスと別のボックスの IoU が事前定義されたしきい値(例: 0.45)を超える場合、スコアの低いボックスを重複とみなし、削除します。
-
反復: まだ抑制も選択もされていない、次にスコアが高いボックスを使って、すべてのボックスが処理されるまでこの処理を繰り返します。
実世界での利用例#
NMS は、精度が極めて重要であり、重複した検出結果が後続のシステムを混乱させる可能性があるシナリオで不可欠です。
- 自動運転: 自動運転車のシステムでは、カメラが歩行者、他の車両、交通標識を検出します。モデルが1人の歩行者に対して、わずかに異なる3つのボックスを予測する場合があります。NMS により、車両の経路計画システムはその歩行者について1つの座標だけを受け取るため、「ゴースト」障害物による不規則なブレーキ操作や経路計画エラーを防止できます。
- 小売在庫管理: コンピュータービジョンを使用して棚の商品を数える場合、商品同士が密集していることがよくあります。NMS がないと、重なり合う予測によって1本のソーダ缶が2回数えられ、在庫数が不正確になる可能性があります。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: IoU しきい値を手動で調整する必要があるヒューリスティックな処理です。しきい値が低すぎると、互いに近い位置にある有効な物体を見逃す可能性があります(再現率が低下)。高すぎると、重複が残ります(適合率が低下)。
- エンドツーエンドモデル: YOLO26などの次世代モデルは、ネイティブなエンドツーエンドモデルとして設計されています。これらのモデルは、トレーニング中に物体ごとにちょうど1つのボックスを予測するよう学習し、NMS の処理を実質的に内部化します。これにより外部の後処理が不要になり、Ultralytics Platformでの推論速度が向上し、デプロイパイプラインが簡素化されます。
関連する概念#
- Soft-NMS: 重なり合うボックスを厳密に削除するのではなく、信頼度スコアを低下させる手法です。これにより、人物が群衆の中にいる場合のように、ある程度重なっている物体でも、減衰後のスコアが十分に高ければ検出できます。
- Anchor Boxes: 多くの検出器で物体のサイズを推定するために使用される、事前定義済みのボックス形状です。NMS は、これらのアンカーから改善された最終予測に対して適用されます。
- IoU: 2つのボックスがどの程度重なっているかを判断するために NMS が使用する数学的な式であり、抑制の判定しきい値として機能します。









