End-to-End-Erkennung in Ultralytics YOLO26 verstehen#
YOLO26 trainiert sowohl einen One-to-Many-Head als auch einen One-to-One-Head. Für Vorhersage und Validierung wird standardmäßig der One-to-Many-Head mit Non-Maximum Suppression (NMS) verwendet. Dies begünstigt die Genauigkeit bei denselben trainierten Gewichten. Setze nms=False, um stattdessen den schnelleren, NMS-freien One-to-One-Head zu verwenden.
Ein Argument steuert die Auswahl über Vorhersage, Validierung, Tracking, Export und Benchmarking hinweg:
nms | Vorhersage und Validierung | Export |
|---|---|---|
None (Standard) | One-to-Many-Head; Ultralytics führt NMS aus | Rohe One-to-Many-Ausgaben; der Verbraucher führt NMS aus |
True | Identisch mit None | One-to-Many-Head mit eingebettetem NMS, sofern unterstützt |
False | One-to-One-Head ohne IoU-Unterdrückung | NMS-freie One-to-One-Ausgaben, sofern unterstützt |
None bedeutet, dass keine optionale Nachbearbeitung in das Modell eingebettet ist. Die normale Verarbeitung, die Modellausgaben in Vorhersageergebnisse oder Validierungsmetriken umwandelt, wird dabei nicht entfernt. Klassifizierung, semantische Segmentierung, Tiefe und Modelle ohne auswählbare Detektions-Heads behalten das native Verhalten ihrer Aufgabe bei.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.predict("image.jpg") # one-to-many + NMS
metrics = model.val(data="coco.yaml") # one-to-many + NMS
results = model.predict("image.jpg", nms=False) # opt into NMS-free inference
results = model.predict("image.jpg", nms=None) # switch back to one-to-many + NMS
model.export(format="onnx") # raw one-to-many outputs
model.export(format="onnx", nms=True) # embed NMS
model.export(format="onnx", nms=False) # NMS-free one-to-one outputsSo funktioniert die End-to-End-Erkennung#
Beide Heads teilen sich Backbone und Neck und werden während des Trainings optimiert. Der One-to-Many-Head liefert mehrere Kandidatenvorhersagen pro Objekt; NMS entfernt überlappende Detektionen. Der One-to-One-Head lernt, eine einzelne Vorhersage pro Objekt zu erzeugen. Die Auswahl des Inferenzpfads deaktiviert die Überwachung mit zwei Heads nicht. Die Validierung während des Trainings verwendet den ausgewählten Inferenz-Head, sodass Checkpoint-Auswahl und Early Stopping denselben Vorhersagen wie das Deployment folgen.
| Kopf | Detektionsausgabe vor externer Verarbeitung | Verarbeitung |
|---|---|---|
| One-to-Many (Standard) | (N, nc + 4, 8400) | Konfidenzfilterung und NMS |
| One-to-One | (N, 300, 6) | Konfidenzfilterung; keine IoU-Unterdrückung |
Hier ist N die Batch-Größe, nc die Anzahl der Klassen und 8400 die Anzahl der Kandidaten bei imgsz=640. Die One-to-One-Detektionszeilen enthalten [x1, y1, x2, y2, confidence, class_id]. Andere Detektionsaufgaben enthalten zusätzliche Ausgaben:
| Aufgabe | End-to-End-Ausgabe | Zusätzliche Daten |
|---|---|---|
| Erkennung | (N, 300, 6) | — |
| Instanzsegmentierung | (N, 300, 6 + nm) und (N, nm, H, W) | Maskenkoeffizienten und Prototypen |
| Pose | (N, 300, 57) | 17 Keypoints × 3 Werte |
| OBB | (N, 300, 7) | Drehwinkel |
Durch Fusion werden nicht verwendete Inferenz-Branches entfernt sowie Conv- und BatchNorm-Schichten gefaltet. Behalte den ursprünglichen Trainings-Checkpoint bei, wenn du Heads wechseln musst: Durch Fusion kann ein bereits entfernter Branch nicht wiederhergestellt werden. Ein Modell, bei dem nur noch der One-to-One-Head verbleibt, behält diesen verfügbaren Pfad bei.
Exportierte Ausgaben#
Detektionsmodelle von YOLOv8, YOLO11 und YOLO26 exportieren standardmäßig rohe One-to-Many-Vorhersagen. Exportiere YOLO26 mit nms=False für NMS-freie Detektionen.
nms=None | nms=False | |
|---|---|---|
| Detektionsausgabe | (N, nc + 4, 8400) | (N, 300, 6) |
| Box-Format | xywh | xyxy |
| Scores | Ein Score pro Klasse pro Kandidat | Konfidenz und Klassen-ID pro Detektion |
| Externe Verarbeitung | Konfidenzfilterung und NMS | Konfidenzfilterung |
nms=True erzeugt ebenfalls verarbeitete Detektionen, verwendet jedoch den One-to-Many-Head und bettet herkömmliches NMS ein. Dies ist nützlich, wenn deine Deployment-Laufzeit Detektionen empfangen soll, ohne die Unterdrückung selbst implementieren zu müssen.
Der Graph eines exportierten Modells bestimmt dessen Ausgaben. Die Übergabe von nms beim Laden baut den Graphen nicht neu auf; exportiere den Quell-Checkpoint mit dem gewünschten nms-Wert, um seinen Ausgabepfad auszuwählen. Ultralytics verwendet die Metadaten des Artefakts, um zu vermeiden, dass NMS zweimal angewendet wird.
Kompatibilität der Exportformate#
ONNX, TensorRT, CoreML, OpenVINO und einige andere Formate unterstützen NMS-freie Exporte. NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU und Qualcomm QNN greifen auf den One-to-Many-Pfad zurück, wenn ihre Operatoren keine End-to-End-Ausgabe unterstützen. Formatwarnungen erläutern den Fallback.
- Eingebettetes NMS:
nms=Trueunterliegt den Aufgaben-, Präzisions- und Dynamic-Shape-Beschränkungen des jeweiligen Formats. Formate ohne Unterstützung für eingebettetes NMS exportieren native Ausgaben für die externe Verarbeitung. - CoreML: Das eingebettete NMS unterstützt Detect, Segment und Pose mit statischen Shapes. Verwende
nms=Truefür Detektionsmodelle, die die NMS-Pipeline der Xcode Preview benötigen. - MNN: Das eingebettete NMS unterstützt Detect und Pose mit
dynamic=False. - IMX: Detektion, Instanzsegmentierung und Pose erfordern eingebettetes NMS, das automatisch ausgewählt wird.
- Hailo: YOLO26 verwendet standardmäßig rohe Tensoren mit Host-NMS;
nms=Falsewählt dessen One-to-One-Pfad aus. YOLOv8/YOLO11-Detektion verwendet HailoRT-NMS. - Quantisierung: TensorRT-Versionen vor 8.5.0, TensorRT 10.3.0 INT8 auf JetPack 6 sowie LiteRT INT8 oder
w8a16greifen auf One-to-Many-Ausgaben zurück.
Siehe die einzelnen Integrationsanleitungen für Hardwareanforderungen. Für vollständige FP16-Ausgabetensoren verwendest du nms=None; End-to-End-Klassenindizes können Ausgabetensoren in FP32 halten, selbst wenn das Modell quantisiert ist.
Kompromisse zwischen Genauigkeit und Geschwindigkeit#
Die veröffentlichten YOLO26-COCO-Ergebnisse zeigen, dass der One-to-Many-Head die Detektions-mAP über die fünf Skalierungen hinweg um 0,6–0,8 Punkte verbessert: zum Beispiel 40,9 gegenüber 40,1 für YOLO26n und 57,5 gegenüber 56,9 für YOLO26x. Der One-to-One-Head vermeidet den NMS-Durchlauf und begünstigt die Latenz. Diese Ergebnisse begründen den Standard; sie garantieren keinen Gewinn auf jedem Datensatz.
Veröffentlichte NMS-freie Messungen der Geschwindigkeit verwenden nms=False. Vergleiche Genauigkeit und Latenz unter Verwendung derselben Head-Auswahl, Bildgröße, Präzision und Hardware.
FAQ#
Dies begrenzt die von Vorhersage und Validierung zurückgegebenen Detektionen. Bei End-to-End- und Embedded-NMS-Exporten ist das Limit Teil des Graphen, sodass du ihn für eine Änderung erneut exportieren musst; die CoreML-Detektion mit eingebettetem NMS bildet hierbei die Ausnahme und hat keine Detektionsbegrenzung. Die End-to-End-Ausgabe kann weniger Kandidaten enthalten, wenn das Bild weniger als
max_detAnker liefert.Ja, für
nms=Falseodernms=Truemit dem Standard-Detektionslimit. Allein an der Shape lässt sich nicht erkennen, welcher Head exportiert wurde. Ein standardmäßiger Export roher COCO-Detektionen hat stattdessen normalerweise die Shape(1, 84, 8400)beiimgsz=640.Ja. Dasselbe Argument
nmswählt den verfügbaren Detektions-Head für Detect, Instanzsegmentierung, Pose und OBB aus. Es ersetzt weder die Maskenrekonstruktion, die Keypoint-Dekodierung, die Handhabung rotierter Boxen, die Klassifizierungswahrscheinlichkeiten, die semantischen Klassenkarten noch die Tiefendekodierung.