Non-Maximum Suppression (NMS)
Lerne, wie Non-Maximum Suppression (NMS) doppelte Bounding Boxes bei der Objekterkennung eliminiert. Entdecke, wie Ultralytics YOLO26 natives End-to-End-NMS bietet.
Non-Maximum Suppression (NMS) ist eine Nachverarbeitungstechnik, die in der object detection verwendet wird, um die rohen Vorhersagen eines Modells zu verfeinern. Wenn ein Objekterkennungsmodell ein Bild analysiert, erzeugt es häufig mehrere überlappende bounding boxes für ein einzelnes Objekt, jeweils mit einem zugehörigen confidence score. Diese redundanten Vorhersagen entstehen, da das Modell dasselbe Merkmal möglicherweise in leicht unterschiedlichen Maßstäben oder Positionen erkennt. NMS filtert diese Ausgabe, indem nur die genaueste Bounding Box für jedes Objekt beibehalten und die anderen verworfen werden, wodurch sichergestellt wird, dass die endgültige Ausgabe sauber, präzise und frei von Duplikaten ist.
So funktioniert Non-Maximum Suppression#
Der NMS-Algorithmus arbeitet mit einer Liste von Bounding-Box-Kandidaten und deren entsprechenden Konfidenzwerten. Ziel ist es, die beste Box für ein Objekt auszuwählen und alle anderen Boxen zu unterdrücken (entfernen), die sich signifikant mit ihr überschneiden, da es sich wahrscheinlich um doppelte Erkennungen desselben Objekts handelt. Der Prozess folgt normalerweise diesen Schritten:
-
Filtern: Eliminiere alle Bounding Boxes mit Konfidenzwerten unterhalb eines bestimmten Schwellenwerts (z. B. 0,25), um schwache Vorhersagen sofort zu entfernen.
-
Sortieren: Sortiere die verbleibenden Boxen in absteigender Reihenfolge basierend auf ihren Konfidenzwerten.
-
Auswahl: Wähle die Box mit dem höchsten Konfidenzwert als gültige Erkennung aus.
-
Vergleich: Vergleiche diese ausgewählte Box mit allen anderen verbleibenden Boxen mithilfe von Intersection over Union (IoU), einer Metrik zur Messung der Überlappung zwischen zwei Boxen.
-
Unterdrückung: Wenn die IoU zwischen der ausgewählten Box und einer anderen Box einen vordefinierten Schwellenwert (z. B. 0,45) überschreitet, wird die Box mit dem niedrigeren Wert als Duplikat betrachtet und entfernt.
-
Iteration: Wiederhole den Vorgang mit der nächsthöheren bewerteten Box, die noch nicht unterdrückt oder ausgewählt wurde, bis alle Boxen verarbeitet sind.
Praxisanwendungen#
NMS ist unerlässlich in Szenarien, in denen Präzision von größter Bedeutung ist und doppelte Erkennungen nachgelagerte Systeme verwirren können.
- Autonomes Fahren: In selbstfahrenden Autosystemen erkennen Kameras Fußgänger, andere Fahrzeuge und Verkehrszeichen. Ein Modell könnte drei leicht unterschiedliche Boxen für einen einzelnen Fußgänger vorhersagen. NMS stellt sicher, dass das Planungssystem des Fahrzeugs nur eine Koordinate für diesen Fußgänger erhält, was unvorhersehbare Bremsmanöver oder Fehler bei der Pfadplanung durch "Geisterhindernisse" verhindert.
- Einzelhandelsbestandsverwaltung: Bei der Verwendung von computer vision zum Zählen von Produkten im Regal liegen Artikel oft dicht beieinander. Ohne NMS könnte eine einzelne Getränkedose aufgrund überlappender Vorhersagen doppelt gezählt werden, was zu ungenauen Bestandsständen führt. NMS verfeinert diese Erkennungen, um sicherzustellen, dass die Bestandszählung der Realität entspricht.
NMS-Implementierung mit PyTorch#
Obwohl viele moderne Frameworks NMS intern handhaben, hilft das Verständnis der Implementierung beim Anpassen von Parametern. Das folgende Beispiel demonstriert, wie NMS mit der PyTorch library angewendet wird:
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 vs. End-to-End-Erkennung#
Traditionell war NMS ein obligatorischer „Bereinigungsschritt“, der außerhalb des neuronalen Hauptnetzwerks stattfindet und inference latency hinzufügt. Das Feld entwickelt sich jedoch in Richtung End-to-End-Architekturen.
- Standard-NMS: Ein heuristischer Prozess, der eine manuelle Anpassung des IoU-Schwellenwerts erfordert. Wenn der Schwellenwert zu niedrig ist, werden gültige Objekte, die nahe beieinander liegen, möglicherweise übersehen (geringer recall). Wenn er zu hoch ist, bleiben Duplikate bestehen (geringe precision).
- End-to-End-Modelle: Modelle der nächsten Generation wie YOLO26 sind so konzipiert, dass sie von Natur aus End-to-End sind. Sie lernen, während des Trainings genau eine Box pro Objekt vorherzusagen, wodurch der NMS-Prozess effektiv internalisiert wird. Dies macht externe Nachverarbeitungsschritte überflüssig, was zu schnelleren Inferenzgeschwindigkeiten und einfacheren Bereitstellungspipelines auf der Ultralytics Platform führt.
Verwandte Konzepte#
- Soft-NMS: Eine Variante, bei der überlappende Boxen nicht strikt entfernt werden, sondern ihre Konfidenzwerte reduziert werden. Dies ermöglicht es, dass sich etwas überlappende Objekte (wie Personen in einer Menge) dennoch erkannt werden, wenn ihre Werte nach dem Abklingen hoch genug bleiben.
- Anchor Boxes: Vordefinierte Boxformen, die von vielen Detektoren verwendet werden, um die Objektgröße zu schätzen. NMS wird auf die endgültigen Vorhersagen angewendet, die aus diesen Ankern verfeinert wurden.
- Intersection over Union (IoU): Die mathematische Formel, die von NMS verwendet wird, um zu bestimmen, wie stark sich zwei Boxen überlappen, und die als Entscheidungsschwelle für die Unterdrückung dient.






