Non-Maximum Suppression (NMS)
Erfahre, wie Non-Maximum Suppression (NMS) doppelte BBox bei der Objekterkennung entfernt. Entdecke, wie Ultralytics YOLO26 native End-to-End-NMS bereitstellt.
Die nichtmaximale Unterdrückung (NMS) ist eine Nachbearbeitungstechnik, die bei der Objekterkennung verwendet wird, um die Rohvorhersagen eines Modells zu verfeinern. Wenn ein Objekterkennungsmodell ein Bild analysiert, erzeugt es häufig mehrere überlappende Begrenzungsrahmen für ein einzelnes Objekt, jeweils mit einem zugehörigen Konfidenzwert. Diese redundanten Vorhersagen entstehen, weil das Modell dasselbe Merkmal möglicherweise bei leicht unterschiedlichen Maßstäben oder Positionen erkennt. NMS filtert diese Ausgabe, indem nur der genaueste Begrenzungsrahmen für jedes Objekt beibehalten und alle anderen verworfen werden. Dadurch ist die endgültige Ausgabe übersichtlich, präzise und frei von Duplikaten.
Funktionsweise der nichtmaximalen Unterdrückung#
Der NMS-Algorithmus arbeitet mit einer Liste von Kandidaten-Begrenzungsrahmen und den zugehörigen Konfidenzwerten. Ziel ist es, den besten Rahmen für ein Objekt auszuwählen und alle anderen Rahmen, die sich deutlich mit ihm überschneiden, zu unterdrücken (zu entfernen), da es sich dabei wahrscheinlich um doppelte Erkennungen desselben Objekts handelt. Der Prozess umfasst in der Regel die folgenden Schritte:
-
Filtern: Entferne alle Begrenzungsrahmen mit Konfidenzwerten unterhalb eines bestimmten Schwellenwerts (z. B. 0.25), um schwache Vorhersagen sofort zu entfernen.
-
Sortieren: Sortiere die verbleibenden Rahmen absteigend nach ihren Konfidenzwerten.
-
Auswahl: Wähle den Rahmen mit dem höchsten Konfidenzwert als gültige Erkennung aus.
-
Vergleich: Vergleiche diesen ausgewählten Rahmen mithilfe von Schnittmenge über Vereinigung (IoU) mit allen anderen verbleibenden Rahmen. Dabei handelt es sich um eine Metrik, die die Überlappung zwischen zwei Rahmen misst.
-
Unterdrückung: Wenn die IoU zwischen dem ausgewählten Rahmen und einem anderen Rahmen einen vordefinierten Schwellenwert (z. B. 0.45) überschreitet, wird der Rahmen mit dem niedrigeren Konfidenzwert als Duplikat betrachtet und entfernt.
-
Iteration: Wiederhole den Prozess mit dem Rahmen mit dem nächsthöheren Konfidenzwert, der bisher weder unterdrückt noch ausgewählt wurde, bis alle Rahmen verarbeitet sind.
Anwendungen in der Praxis#
NMS ist in Szenarien unverzichtbar, in denen Präzision entscheidend ist und doppelte Erkennungen nachgelagerte Systeme verwirren können.
- Autonomes Fahren: In Systemen für selbstfahrende Autos erkennen Kameras Fußgänger, andere Fahrzeuge und Verkehrsschilder. Ein Modell könnte für einen einzelnen Fußgänger drei leicht unterschiedliche Rahmen vorhersagen. NMS stellt sicher, dass das Planungssystem des Fahrzeugs nur eine Koordinate für diesen Fußgänger erhält. Dadurch werden unvorhersehbare Bremsmanöver oder Fehler bei der Routenplanung verhindert, die durch „Geister“-Hindernisse verursacht werden.
- Verwaltung von Einzelhandelsbeständen: Wenn Computer Vision zum Zählen von Produkten in einem Regal eingesetzt wird, stehen die Artikel häufig dicht beieinander. Ohne NMS könnte eine einzelne Getränkedose aufgrund überlappender Vorhersagen doppelt gezählt werden, was zu ungenauen Bestandsangaben führt. NMS verfeinert diese Erkennungen und stellt sicher, dass der Bestandszählergebnis der Realität entspricht.
NMS-Implementierung mit PyTorch#
Viele moderne Frameworks führen NMS zwar intern aus, doch das Verständnis der Implementierung hilft bei der Abstimmung der Parameter. Das folgende Beispiel zeigt, wie du NMS mithilfe der PyTorch-Bibliothek anwendest:
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 im Vergleich zur End-to-End-Erkennung#
Traditionell war NMS ein obligatorischer „Bereinigungsschritt“, der außerhalb des Hauptneuronennetzes ausgeführt wurde und zusätzliche Inferenzlatenz verursachte. Der Bereich entwickelt sich jedoch zunehmend in Richtung End-to-End-Architekturen.
- Standard-NMS: Ein heuristischer Prozess, der eine manuelle Abstimmung des IoU-Schwellenwerts erfordert. Ist der Schwellenwert zu niedrig, werden möglicherweise gültige Objekte, die nahe beieinander liegen, übersehen (niedriger Recall). Ist er zu hoch, bleiben Duplikate bestehen (niedrige Precision).
- End-to-End-Modelle: Modelle der nächsten Generation wie YOLO26 sind von Grund auf als End-to-End-Modelle konzipiert. Sie lernen während des Trainings, genau einen Rahmen pro Objekt vorherzusagen, und integrieren den NMS-Prozess dadurch effektiv in das Modell. Das macht externe Nachbearbeitung überflüssig und führt zu einer schnelleren Inferenz sowie einfacheren Bereitstellungspipelines auf der Ultralytics-Plattform.
Verwandte Konzepte#
- Soft-NMS: Eine Variante, bei der überlappende Rahmen nicht strikt entfernt werden, sondern ihre Konfidenzwerte reduziert werden. Dadurch können Objekte mit gewisser Überlappung (z. B. Menschen in einer Menschenmenge) weiterhin erkannt werden, wenn ihre Werte nach der Absenkung hoch genug bleiben.
- Ankerrahmen: Vordefinierte Rahmenformen, die viele Detektoren zur Schätzung der Objektgröße verwenden. NMS wird auf die endgültigen, aus diesen Ankern verfeinerten Vorhersagen angewendet.
- Schnittmenge über Vereinigung (IoU): Die mathematische Formel, mit der NMS bestimmt, wie stark sich zwei Rahmen überlappen. Sie dient als Entscheidungsschwellenwert für die Unterdrückung.









