Modell-Benchmarking mit Ultralytics YOLO#
Benchmark-Visualisierung#
Einleitung#
Sobald dein Modell trainiert und validiert ist, besteht der nächste logische Schritt darin, seine Leistung in verschiedenen realen Szenarien zu bewerten. Der Benchmark-Modus in Ultralytics YOLO26 dient diesem Zweck, indem er ein robustes Framework zur Bewertung der Geschwindigkeit und Genauigkeit deines Modells über eine Reihe von Exportformaten hinweg bereitstellt.
Sieh dir die unreleased YOLO27 preview an, um vorläufige Geschwindigkeits-Benchmarks zu erhalten.
Watch: Benchmark Ultralytics YOLO26 Models | How to Compare Model Performance on Different Hardware?
Warum ist Benchmarking entscheidend?#
- Fundierte Entscheidungen: Gewinne Einblicke in die Kompromisse zwischen Geschwindigkeit und Genauigkeit.
- Ressourcenzuweisung: Verstehe, wie verschiedene Exportformate auf unterschiedlicher Hardware abschneiden.
- Optimierung: Finde heraus, welches Exportformat die beste Leistung für deinen spezifischen Anwendungsfall bietet.
- Kosteneffizienz: Nutze Hardware-Ressourcen basierend auf Benchmark-Ergebnissen effizienter.
Wichtige Metriken im Benchmark-Modus#
- mAP50-95: Für Objekterkennung, Segmentierung und Posen-Schätzung.
- accuracy_top1: Für Bildklassifizierung.
- Inferenzzeit: Benötigte Zeit für jedes Bild in Millisekunden.
Unterstützte Exportformate#
- ONNX: Für optimale CPU-Leistung
- TensorRT: Für maximale GPU-Effizienz
- OpenVINO: Für Intel-Hardware-Optimierung
- CoreML, TensorFlow SavedModel und mehr: Für diverse Bereitstellungsanforderungen.
- Exportiere nach ONNX oder OpenVINO für eine bis zu 3-fache CPU-Beschleunigung.
- Exportiere nach TensorRT für eine bis zu 5-fache GPU-Beschleunigung.
Verwendungsbeispiele#
Installiere Ultralytics mit Export-Abhängigkeiten vor dem Benchmarking, um fehlende Pakete zu vermeiden.
pip install ultralytics[export]Führe YOLO26n-Benchmarks über alle unterstützten Exportformate hinweg aus (ONNX, TensorRT usw.). Siehe den Abschnitt „Argumente“ unten für eine vollständige Liste der Exportoptionen.
from ultralytics.utils.benchmarks import benchmark
# Benchmark on GPU
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)
# Benchmark specific export format
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, format="onnx")Argumente#
Argumente wie model, data, imgsz, quantize, device, verbose und format geben Benutzern die Flexibilität, die Benchmarks an ihre spezifischen Bedürfnisse anzupassen und die Leistung verschiedener Exportformate einfach zu vergleichen.
| Schlüssel | Standardwert | Beschreibung |
|---|---|---|
model | None | Gibt den Pfad zur Modelldatei an. Akzeptiert sowohl .pt- als auch .yaml-Formate, z. B. "yolo26n.pt" für vortrainierte Modelle oder Konfigurationsdateien. |
data | None | Pfad zum Dataset-YAML für das Benchmarking, das typischerweise Pfade und Einstellungen für Validierungsdaten enthält. Beispiel: "coco8.yaml". Die Klassifizierung erfordert stattdessen ein Dataset-Verzeichnis oder einen integrierten Dataset-Namen (z. B. imagenet10). |
imgsz | 640 | Die Eingabebildgröße für das Modell. Muss für quadratische Bilder eine einzelne ganze Zahl sein (z. B. 640); benchmark() unterstützt nur quadratische Bildgrößen. |
quantize | None | Angeforderte Präzision: 16 (FP16) oder 8 (INT8; PTQ-Schemata erfordern Kalibrierung data/fraction, reines Gewichts-Quantisieren nicht); 32/nicht gesetzt ist FP32, wo das Format dies unterstützt – ein Format, das kein FP32 exportieren kann, lehnt ein explizites 32 ab oder fällt auf die von ihm benötigte Präzision zurück. Die native PyTorch-Zeile wird nicht exportiert: Nur 16 beeinflusst sie, indem FP16-Inferenz ausgewählt wird, während 8, 32 und nicht gesetzt FP32 ausführen. Jedes Format führt die Inferenz dann mit seiner eigenen Laufzeitpräzision aus. Ersetzt die veralteten Flags half/int8. |
device | 'cpu' | Definiert das Berechnungsgerät bzw. die Berechnungsgeräte für das Benchmarking, wie etwa "cpu" oder "cuda:0". |
verbose | False | Steuert den Detailgrad der Protokollierungsausgabe. Setze verbose=True für detaillierte Protokolle. |
eps | 0.001 | Kleines Epsilon (Millisekunden), das zur Inferenzzeit pro Bild hinzugefügt wird, bevor sie in FPS umgewandelt wird, um eine Division durch Null zu verhindern. Wird selten geändert. |
format | '' | Führt Benchmarks nur für das angegebene Exportformat aus (z. B. format=onnx). Lass es leer, um jedes unterstützte Format automatisch zu testen. |
Die eigenständige benchmark()-Funktion (from ultralytics.utils.benchmarks import benchmark) verwendet ihre eigenen Signatur-Standardwerte anstelle der Tabellenwerte oben, insbesondere model="yolo26n.pt" und imgsz=160; übergib imgsz explizit, um mit der yolo benchmark-CLI übereinzustimmen.
Exportformate#
Benchmarks versuchen automatisch, auf allen unten aufgeführten möglichen Exportformaten ausgeführt zu werden. Alternativ kannst du Benchmarking für ein spezifisches Format ausführen, indem du das Argument format verwendest, das jedes der unten erwähnten Formate akzeptiert.
| Format | Argument format | Modell | Metadaten | Argumente |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n.aimodel | ✅ | imgsz, batch, quantize |
nms=None verwendet standardmäßig Rohausgaben für externes NMS. Setze nms=False, um einen verfügbaren NMS-freien Kopf auszuwählen; nicht unterstützte Formate greifen auf ihren nativen Ausgabepfad zurück. Die Einträge nms oben identifizieren Formate, die NMS mit nms=True einbetten können.
Ausführliche Informationen zu export findest du auf der Seite Export.
FAQ#
Ultralytics YOLO26 bietet einen Benchmark-Modus, um die Leistung deines Modells über verschiedene Exportformate hinweg zu bewerten. Dieser Modus liefert Einblicke in wichtige Metriken wie die mittlere durchschnittliche Genauigkeit (mAP50-95), die Genauigkeit und die Inferenzzeit in Millisekunden. Um Benchmarks auszuführen, kannst du entweder Python- oder CLI-Befehle verwenden. Zum Beispiel für ein Benchmarking auf einer GPU:
Beispielfrom ultralytics.utils.benchmarks import benchmark # Benchmark on GPU benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)Weitere Details zu Benchmark-Argumenten findest du im Abschnitt Argumente.
Der Export von YOLO26-Modellen in verschiedene Formate wie ONNX, TensorRT und OpenVINO ermöglicht es dir, die Leistung basierend auf deiner Bereitstellungsumgebung zu optimieren. Zum Beispiel:
- ONNX: Bietet eine bis zu 3-fache CPU-Beschleunigung.
- TensorRT: Bietet eine bis zu 5-fache GPU-Beschleunigung.
- OpenVINO: Speziell für Intel-Hardware optimiert.
Diese Formate verbessern sowohl die Geschwindigkeit als auch die Genauigkeit deiner Modelle und machen sie effizienter für verschiedene reale Anwendungen. Besuche die Export-Seite für vollständige Details.
Das Benchmarking deiner YOLO26-Modelle ist aus mehreren Gründen unerlässlich:
- Fundierte Entscheidungen: Verstehe die Kompromisse zwischen Geschwindigkeit und Genauigkeit.
- Ressourcenzuweisung: Messe die Leistung über verschiedene Hardware-Optionen hinweg.
- Optimierung: Bestimme, welches Exportformat die beste Leistung für spezifische Anwendungsfälle bietet.
- Kosteneffizienz: Optimiere die Hardware-Nutzung basierend auf den Benchmark-Ergebnissen.
Wichtige Metriken wie mAP50-95, Top-1-Genauigkeit und Inferenzzeit helfen bei diesen Auswertungen. Siehe den Abschnitt Wichtige Metriken für weitere Informationen.
YOLO26 unterstützt eine Vielzahl von Exportformaten, die jeweils auf spezifische Hardware und Anwendungsfälle zugeschnitten sind:
- ONNX: Am besten für CPU-Leistung.
- TensorRT: Ideal für GPU-Effizienz.
- OpenVINO: Optimiert für Intel-Hardware.
- CoreML & TensorFlow: Nützlich für iOS und allgemeine ML-Anwendungen.
Eine vollständige Liste der unterstützten Formate und ihrer jeweiligen Vorteile findest du im Abschnitt Unterstützte Exportformate.
Beim Ausführen von Benchmarks können mehrere Argumente angepasst werden, um spezifischen Anforderungen gerecht zu werden:
- model: Pfad zur Modelldatei (z. B. „yolo26n.pt“).
- data: Pfad zum Dataset-YAML (z. B.
"coco8.yaml"); die Klassifizierung erfordert stattdessen ein Dataset-Verzeichnis oder einen integrierten Dataset-Namen (z. B.imagenet10). - imgsz: Die quadratische Eingabebildgröße als einzelne ganze Zahl, wie z. B.
640. Der Benchmark-Modus verwendet für einen fairen Vergleich dieselbe quadratische Bildgröße über PyTorch und exportierte Formate hinweg. - quantize: Angeforderte Präzision:
16für FP16,8für INT8 (nützlich für Edge-Geräte);32/nicht gesetzt ist FP32, wo das Format dies unterstützt – ein Format, das kein FP32 exportieren kann, lehnt ein explizites32ab oder fällt auf die von ihm benötigte Präzision zurück. Die native PyTorch-Zeile wird nicht exportiert: Nur16beeinflusst sie, indem FP16-Inferenz ausgewählt wird, während8,32und nicht gesetzt FP32 ausführen. Jedes Format führt die Inferenz dann mit seiner eigenen Laufzeitpräzision aus. - device: Gib das Berechnungsgerät an (z. B. „cpu“, „cuda:0“).
- verbose: Steuere den Detailgrad der Protokollierung.
Eine vollständige Liste der Argumente findest du im Abschnitt Argumente.