Modell-Benchmarking mit Ultralytics YOLO#
Benchmark-Visualisierung#
Einführung#
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 von Ultralytics YOLO26 bietet dafür ein robustes Verfahren, mit dem du die Geschwindigkeit und Genauigkeit deines Modells in einer Reihe von Exportformaten bewerten kannst.
Vorläufige Geschwindigkeits-Benchmarks findest du in der unveröffentlichten YOLO27-Vorschau.
Ansehen: Ultralytics-YOLO26-Modelle einem Leistungstest unterziehen | So vergleichst du die Modellleistung auf verschiedener Hardware
Warum ist Benchmarking so wichtig?#
- Fundierte Entscheidungen: Gewinne Einblicke in die Kompromisse zwischen Geschwindigkeit und Genauigkeit.
- Ressourcenzuweisung: Finde heraus, wie verschiedene Exportformate auf unterschiedlicher Hardware abschneiden.
- Optimierung: Finde heraus, welches Exportformat für deinen konkreten Anwendungsfall die beste Leistung bietet.
- Kosteneffizienz: Nutze die Hardware-Ressourcen anhand der Benchmark-Ergebnisse effizienter.
Wichtige Kennzahlen im Benchmark-Modus#
- mAP50-95: Für die Objekterkennung, Instanzsegmentierung, Pose-Schätzung und OBB.
- mIoU: Für semantische Segmentierung.
- delta1: Für Tiefenschätzung.
- accuracy_top1: Für Bildklassifizierung.
- Inferenzzeit: Benötigte Zeit pro Bild in Millisekunden.
Unterstützte Exportformate#
- ONNX: Für optimale CPU-Leistung
- TensorRT: Für maximale GPU-Effizienz
- OpenVINO: Zur Optimierung für Intel-Hardware
- CoreML, TensorFlow SavedModel und mehr: Für unterschiedliche Bereitstellungsanforderungen.
- Exportiere nach ONNX oder OpenVINO, um die CPU-Geschwindigkeit um bis zu das Dreifache zu steigern.
- Exportiere nach TensorRT, um die GPU-Geschwindigkeit um bis zu das Fünffache zu steigern.
Anwendungsbeispiele#
Installiere Ultralytics vor dem Benchmarking mit den Export-Abhängigkeiten, damit keine Pakete fehlen.
pip install ultralytics[export]Führe YOLO26n-Benchmarks für alle unterstützten Exportformate aus (ONNX, TensorRT usw.). Eine vollständige Liste der Exportoptionen findest du im Abschnitt „Argumente“ weiter unten.
from ultralytics.utils.benchmarks import benchmark
# Benchmark auf der GPU
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)
# Bestimmtes Exportformat benchmarken
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, format="onnx")Argumente#
Argumente wie model, data, imgsz, quantize, device, verbose und format bieten dir die Flexibilität, Benchmarks an deine konkreten Anforderungen anzupassen und die Leistung verschiedener Exportformate einfach zu vergleichen.
| Schlüssel | Standardwert | Beschreibung |
|---|---|---|
model | None | Gibt den Pfad zur Modelldatei an. Unterstützt sowohl das Format .pt als auch .yaml, z. B. "yolo26n.pt" für vortrainierte Modelle oder Konfigurationsdateien. |
data | None | Pfad zur Dataset-YAML-Datei für das Benchmarking, die normalerweise Pfade und Einstellungen für Validierungsdaten enthält. Beispiel: "coco8.yaml". Bei der Klassifizierung wird stattdessen ein Dataset-Verzeichnis oder der Name eines integrierten Datasets verwendet (z. B. imagenet10). |
imgsz | 640 | Die Eingabebildgröße für das Modell. Für quadratische Bilder muss es eine einzelne Ganzzahl sein (z. B. 640); benchmark() unterstützt nur quadratische Bildgrößen. |
quantize | None | Angeforderte Genauigkeit: 16 (FP16) oder 8 (INT8; PTQ-Verfahren benötigen Kalibrierungs-data/fraction, Verfahren, die nur Gewichte quantisieren, hingegen nicht); 32/nicht gesetzt bedeutet FP32, sofern das Format dies unterstützt – ein Format, das keinen FP32-Export unterstützt, weist ein explizites 32 zurück oder greift auf die erforderliche Genauigkeit zurück. Die native PyTorch-Zeile wird nicht exportiert: Nur 16 wirkt sich darauf aus und wählt die FP16-Inferenz aus, während 8, 32 und ein nicht gesetzter Wert FP32 ausführen. Anschließend führt jedes Format die Inferenz mit seiner eigenen Laufzeitgenauigkeit aus. Ersetzt die veralteten Flags half/int8. |
device | None | Legt das Berechnungsgerät für das Benchmarking fest, z. B. "cpu" oder "cuda:0"; ist kein Gerät festgelegt, wird die erste verfügbare GPU verwendet, andernfalls die CPU. |
verbose | False | Bei True oder einem Float-Wert führen Benchmark-Fehler (außer Assertions) zu einer Ausnahme, anstatt als Fehler protokolliert zu werden; bei einem Float-Wert wie 0.25 wird außerdem geprüft, ob die Metrik jedes erfolgreichen Formats über diesem Grenzwert liegt. |
eps | 0.001 | Ein kleiner Epsilon-Wert (Millisekunden), der zur Inferenzzeit pro Bild addiert wird, bevor sie in FPS umgerechnet wird, um eine Division durch null zu verhindern. Wird selten geändert. |
format | '' | Benchmarkt nur das angegebene Exportformat (z. B. format=onnx). Lass den Wert leer, um automatisch alle unterstützten Formate zu testen. |
Die eigenständige Funktion benchmark() (from ultralytics.utils.benchmarks import benchmark) verwendet ihre eigenen Signatur-Standardwerte anstelle der Tabellenwerte oben, insbesondere model="yolo26n.pt", imgsz=160 und device="cpu"; übergib imgsz und device ausdrücklich, um dieselben Werte wie in der yolo benchmark CLI zu verwenden.
Exportformate#
Benchmarks werden automatisch für alle unten aufgeführten möglichen Exportformate ausgeführt. Alternativ kannst du Benchmarks für ein bestimmtes Format ausführen, indem du das Argument format verwendest, das alle unten genannten 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 |
| Apple Core AI | coreai | yolo26n.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, 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 |
| LiteRT | litert | yolo26n.tflite | ✅ | imgsz, quantize, batch, 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 |
| Hailo | hailo | yolo26n_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None gibt standardmäßig Rohdaten für die externe NMS aus. Lege nms=False fest, um einen verfügbaren Kopf ohne NMS auszuwählen; nicht unterstützte Formate greifen auf ihren nativen Ausgabepfad zurück. Die obigen Einträge nms kennzeichnen Formate, die NMS mit nms=True integrieren können.
Ausführliche Informationen zu export findest du auf der Seite Export.
Häufig gestellte Fragen#
Ultralytics YOLO26 bietet einen Benchmark-Modus, mit dem du die Leistung deines Modells in verschiedenen Exportformaten bewerten kannst. Dieser Modus liefert Einblicke in wichtige Kennzahlen wie die mittlere Average Precision (mAP50-95), die Genauigkeit und die Inferenzzeit in Millisekunden. Benchmarks kannst du entweder mit Python oder mit CLI-Befehlen ausführen. So benchmarkst du beispielsweise auf einer GPU:
Beispielfrom ultralytics.utils.benchmarks import benchmark # Benchmark auf der GPU benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)Weitere Informationen zu Benchmark-Argumenten findest du im Abschnitt Argumente.
Wenn du YOLO26-Modelle in verschiedene Formate wie ONNX, TensorRT und OpenVINO exportierst, kannst du die Leistung für deine Bereitstellungsumgebung optimieren. Zum Beispiel:
- ONNX: Ermöglicht eine bis zu dreifach höhere CPU-Geschwindigkeit.
- TensorRT: Ermöglicht eine bis zu fünffach höhere GPU-Geschwindigkeit.
- OpenVINO: Speziell für Intel-Hardware optimiert.
Diese Formate verbessern die Inferenzgeschwindigkeit auf der jeweiligen Zielhardware und machen deine Modelle für zahlreiche reale Anwendungen effizienter. Ausführliche Informationen findest du auf der Seite Export.
Das Benchmarking deiner YOLO26-Modelle ist aus mehreren Gründen wichtig:
- Fundierte Entscheidungen: Verstehe die Kompromisse zwischen Geschwindigkeit und Genauigkeit.
- Ressourcenzuweisung: Beurteile die Leistung auf verschiedenen Hardware-Optionen.
- Optimierung: Finde heraus, welches Exportformat bei bestimmten Anwendungsfällen die beste Leistung bietet.
- Kosteneffizienz: Optimiere die Hardware-Nutzung anhand der Benchmark-Ergebnisse.
Wichtige Kennzahlen wie mAP50-95, Top-1-Genauigkeit und Inferenzzeit helfen bei diesen Bewertungen. Weitere Informationen findest du im Abschnitt Wichtige Kennzahlen.
YOLO26 unterstützt verschiedene Exportformate, die jeweils auf bestimmte Hardware und Anwendungsfälle zugeschnitten sind:
- ONNX: Am besten für CPU-Leistung geeignet.
- TensorRT: Ideal für GPU-Effizienz.
- OpenVINO: Für Intel-Hardware optimiert.
- CoreML und 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 kannst du verschiedene Argumente an deine Anforderungen anpassen:
- model: Pfad zur Modelldatei (z. B. "yolo26n.pt").
- data: Pfad zur Dataset-YAML-Datei (z. B.
"coco8.yaml"); bei der Klassifizierung wird stattdessen ein Dataset-Verzeichnis oder der Name eines integrierten Datasets verwendet (z. B.imagenet10). - imgsz: Die quadratische Eingabebildgröße als einzelne Ganzzahl, z. B.
640. Der Benchmark-Modus verwendet für PyTorch und exportierte Formate dieselbe quadratische Bildgröße, um einen fairen Vergleich zu ermöglichen. - quantize: Angeforderte Genauigkeit:
16für FP16,8für INT8 (nützlich für Edge-Geräte);32/nicht gesetzt bedeutet FP32, sofern das Format dies unterstützt – ein Format, das keinen FP32-Export unterstützt, weist ein explizites32zurück oder greift auf die erforderliche Genauigkeit zurück. Die native PyTorch-Zeile wird nicht exportiert: Nur16wirkt sich darauf aus und wählt die FP16-Inferenz aus, während8,32und ein nicht gesetzter Wert FP32 ausführen. Anschließend führt jedes Format die Inferenz mit seiner eigenen Laufzeitgenauigkeit aus. - device: Gibt das Berechnungsgerät an (z. B. "cpu", "cuda:0").
- verbose: Löst bei Benchmark-Fehlern eine Ausnahme aus, anstatt sie zu protokollieren; übergib einen Float-Wert, um zusätzlich zu verlangen, dass die Metrik jedes Formats diesen Grenzwert überschreitet.
Eine vollständige Liste der Argumente findest du im Abschnitt Argumente.