オブジェクト検出において、非最大抑制(NMS)が重複するバウンディングボックスを排除する仕組みを学びましょう。Ultralytics ネイティブなエンドツーエンドNMSを提供する仕組みを発見してください。
非最大抑制(NMS)は、物体検出においてモデルの生成した生の予測を精緻化するために用いられる後処理技術である。 物体検出モデルが画像を分析する際、単一の物体に対して複数の重複する境界ボックスを生成することが多く、それぞれに関連付けられた信頼度スコアを持つ。これらの冗長な予測は、モデルがわずかに異なるスケールや位置で同じdetect 可能性があるために発生する。NMS はこのNMS 、各物体に対して最も正確な境界ボックスのみを保持し、他を破棄することで、最終出力がクリーンで正確、かつ重複のない状態を保証する。
NMS 、候補となる境界ボックスとその対応する信頼度スコアのリストに対して動作する。目的は、対象物に対して最適なボックスを選択し、それとは大きく重なる他のボックスを抑制(除去)することである。これらは同一対象物の重複検出である可能性が高い。このプロセスは通常、以下の手順に従う:
NMS 、精度が最優先され、重複検出が下流システムを混乱させる可能性があるシナリオにおいて不可欠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 。しかし、この分野はエンドツーエンドアーキテクチャへと進化しつつある。