Modell-Export mit Ultralytics YOLO
Einführung
Das ultimative Ziel des Trainings eines Modells ist dessen Bereitstellung für reale Anwendungen. Der Export-Modus in Ultralytics YOLO26 bietet eine vielseitige Auswahl an Optionen für den Export deines trainierten Modells in verschiedene Formate, wodurch es auf einer Vielzahl von Plattformen und Geräten bereitgestellt werden kann. Dieser umfassende Leitfaden führt dich durch die Feinheiten des Modell-Exports und zeigt dir, wie du maximale Kompatibilität und Leistung erreichst.
Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀
Warum den Export-Modus von YOLO26 wählen?
- Vielseitigkeit: Exportiere in verschiedene Formate, einschließlich ONNX, TensorRT, CoreML und mehr.
- Leistung: Erziele bis zu 5-fache GPU-Beschleunigung mit TensorRT und 3-fache CPU-Beschleunigung mit ONNX oder OpenVINO.
- Kompatibilität: Mache dein Modell universell auf zahlreichen Hardware- und Softwareumgebungen bereitstellbar.
- Einfache Bedienung: Unkomplizierte CLI- und Python API für einen schnellen und direkten Modell-Export.
Hauptfunktionen des Export-Modus
Hier sind einige der herausragenden Funktionen:
- Ein-Klick-Export: Einfache Befehle für den Export in verschiedene Formate.
- Batch-Export: Exportiere Modelle, die für Batch-Inferenz geeignet sind.
- Optimierte Inferenz: Exportierte Modelle sind auf schnellere Inferenzzeiten optimiert.
- Tutorial-Videos: Ausführliche Anleitungen und Tutorials für eine reibungslose Export-Erfahrung.
Anwendungsbeispiele
Exportiere ein YOLO26n-Modell in ein anderes Format wie ONNX oder TensorRT. Siehe den Abschnitt Argumente weiter unten für eine vollständige Liste der Export-Argumente.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom-trained model
# Export the model
model.export(format="onnx")Argumente
Diese Tabelle beschreibt die Konfigurationen und Optionen, die für den Export von YOLO-Modellen in verschiedene Formate verfügbar sind. Diese Einstellungen sind entscheidend für die Optimierung der Leistung, Größe und Kompatibilität des exportierten Modells über verschiedene Plattformen und Umgebungen hinweg. Eine korrekte Konfiguration stellt sicher, dass das Modell mit optimaler Effizienz für die Bereitstellung in der vorgesehenen Anwendung bereit ist.
| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
format | str | 'torchscript' | Zielformat für das exportierte Modell, wie z. B. 'onnx', 'torchscript', 'engine' (TensorRT) oder andere. Jedes Format ermöglicht die Kompatibilität mit verschiedenen Bereitstellungsumgebungen. |
imgsz | int oder tuple | 640 | Gewünschte Bildgröße für die Modelleingabe. Kann ein Integer für quadratische Bilder (z. B. 640 für 640×640) oder ein Tupel (height, width) für spezifische Dimensionen sein. |
keras | bool | False | Ermöglicht den Export in das Keras-Format für TensorFlow SavedModel, was Kompatibilität mit TensorFlow Serving und APIs bietet. |
optimize | bool | False | Wendet Optimierungen für mobile Geräte beim Export nach TorchScript an, was potenziell die Modellgröße reduziert und die Inferenzleistung verbessert. Nicht kompatibel mit dem NCNN-Format oder CUDA-Geräten. Für DeepX ermöglicht dies eine höhere Compiler-Optimierung, die die Inferenzlatenz verringert und die Kompilierzeit erhöht. |
half | bool | False | Ermöglicht FP16-Quantisierung (halbe Präzision), was die Modellgröße reduziert und potenziell die Inferenz auf unterstützter Hardware beschleunigt. Nicht kompatibel mit INT8-Quantisierung oder CPU-only-Exporten. Nur für bestimmte Formate verfügbar, z. B. ONNX (siehe unten). |
int8 | bool | False | Aktiviert die INT8-Quantisierung, was das Modell weiter komprimiert und die Inferenz bei minimalem Genauigkeitsverlust beschleunigt, primär für Edge-Geräte. Bei Verwendung mit TensorRT erfolgt eine Post-Training-Quantisierung (PTQ). |
dynamic | bool | False | Erlaubt dynamische Eingabegrößen für TorchScript-, ONNX-, OpenVINO-, TensorRT- und CoreML-Exporte, was die Flexibilität im Umgang mit variierenden Bilddimensionen erhöht. Wird bei der Verwendung von TensorRT mit INT8 automatisch auf True gesetzt. |
simplify | bool | True | Vereinfacht den Modellgraphen für ONNX-Exporte mit onnxslim, was potenziell die Leistung und Kompatibilität mit Inferenz-Engines verbessert. |
opset | int | None | Gibt die ONNX-Opset-Version zur Kompatibilität mit verschiedenen ONNX-Parsern und Runtimes an. Wenn nicht gesetzt, wird die neueste unterstützte Version verwendet. |
workspace | float oder None | None | Legt die maximale Arbeitsbereichsgröße in GiB für TensorRT-Optimierungen fest, um ein Gleichgewicht zwischen Speicherauslastung und Leistung zu finden. Verwende None für die automatische Zuweisung durch TensorRT bis zum Geräte-Maximum. |
nms | bool | False | Fügt Non-Maximum Suppression (NMS) zum exportierten Modell hinzu, sofern unterstützt (siehe Exportformate), was die Effizienz der Nachbearbeitung bei der Erkennung verbessert. Nicht verfügbar für end2end-Modelle. |
batch | int | 1 | Gibt die Batch-Inferenzgröße des Exportmodells oder die maximale Anzahl der Bilder an, die das exportierte Modell gleichzeitig im predict-Modus verarbeitet. Bei Edge TPU-Exporten wird dies automatisch auf 1 gesetzt. |
device | str | None | Gibt das Gerät für den Export an: GPU (device=0), CPU (device=cpu), MPS für Apple Silicon (device=mps), Huawei Ascend NPU (device=npu oder device=npu:0) oder DLA für NVIDIA Jetson (device=dla:0 oder device=dla:1). TensorRT-Exporte verwenden automatisch die GPU. |
data | str | 'coco8.yaml' | Pfad zur Dataset-Konfigurationsdatei, essenziell für die INT8-Quantisierungskalibrierung. Wenn bei aktivierter INT8-Option nichts angegeben ist, wird coco8.yaml als Fallback für die Kalibrierung verwendet. |
fraction | float | 1.0 | Gibt den Anteil des Datensatzes an, der für die INT8-Quantisierungskalibrierung verwendet werden soll. Ermöglicht die Kalibrierung auf einer Teilmenge des gesamten Datensatzes, was für Experimente oder bei begrenzten Ressourcen nützlich ist. Wenn bei aktivierter INT8-Option nichts angegeben ist, wird der gesamte Datensatz verwendet. |
end2end | bool | None | Überschreibt den End-to-End-Modus in YOLO-Modellen, die NMS-freie Inferenz unterstützen (YOLO26, YOLOv10). Wenn du dies auf False setzt, kannst du diese Modelle so exportieren, dass sie mit der traditionellen NMS-basierten Nachbearbeitungspipeline kompatibel sind. Siehe den End-to-End Detection Leitfaden für Details. |
Die Anpassung dieser Parameter ermöglicht es, den Exportprozess an spezifische Anforderungen anzupassen, wie z. B. die Bereitstellungsumgebung, Hardware-Beschränkungen und Leistungsziele. Die Auswahl des geeigneten Formats und der Einstellungen ist entscheidend, um die beste Balance zwischen Modellgröße, Geschwindigkeit und Genauigkeit zu erreichen.
Exportformate
Verfügbare YOLO26-Exportformate sind in der Tabelle unten aufgeführt. Du kannst in jedes Format exportieren, indem du das format Argument verwendest, z. B. format='onnx' oder format='engine'. Du kannst Vorhersagen oder Validierungen direkt auf exportierten Modellen durchführen, z. B. yolo predict model=yolo26n.onnx. Anwendungsbeispiele werden nach Abschluss des Exports für dein Modell angezeigt. Modelle können auch direkt über den Browser auf der Ultralytics Platform ohne lokale Einrichtung exportiert werden.
| Format | format Argument | Modell | Metadaten | Argumente |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, half, dynamic, simplify, opset, nms, batch, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, int8, data, fraction, device |
| TF.js | tfjs | yolo26n_web_model/ | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, int8, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, int8, data, fraction, device |
| DeepX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, int8, data, optimize, device |
FAQ
Wie exportiere ich ein YOLO26-Modell in das ONNX-Format?
Der Export eines YOLO26-Modells in das ONNX-Format ist mit Ultralytics unkompliziert. Es bietet sowohl Python- als auch CLI-Methoden für den Export von Modellen.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom-trained model
# Export the model
model.export(format="onnx")Weitere Einzelheiten zum Prozess, einschließlich fortgeschrittener Optionen wie der Handhabung unterschiedlicher Eingabegrößen, findest du im ONNX-Integrationsleitfaden.
Welche Vorteile bietet die Verwendung von TensorRT für den Modell-Export?
Die Verwendung von TensorRT für den Modell-Export bietet erhebliche Leistungsverbesserungen. YOLO26-Modelle, die in TensorRT exportiert werden, können eine bis zu 5-fache GPU-Beschleunigung erreichen, was sie ideal für Anwendungen mit Echtzeit-Inferenz macht.
- Vielseitigkeit: Optimiere Modelle für eine spezifische Hardwarekonfiguration.
- Geschwindigkeit: Erreiche schnellere Inferenz durch fortgeschrittene Optimierungen.
- Kompatibilität: Integriere dich nahtlos in NVIDIA-Hardware.
Um mehr über die Integration von TensorRT zu erfahren, siehe den TensorRT-Integrationsleitfaden.
Wie aktiviere ich die INT8-Quantisierung beim Exportieren meines YOLO26-Modells?
INT8-Quantisierung ist eine hervorragende Methode, um das Modell zu komprimieren und die Inferenz zu beschleunigen, insbesondere auf Edge-Geräten. So kannst du die INT8-Quantisierung aktivieren:
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # Load a model
model.export(format="engine", int8=True)INT8-Quantisierung kann auf verschiedene Formate angewendet werden, wie TensorRT, OpenVINO und CoreML. Für optimale Quantisierungsergebnisse stelle einen repräsentativen Datensatz unter Verwendung des data-Parameters bereit.
Warum ist eine dynamische Eingabegröße beim Export von Modellen wichtig?
Eine dynamische Eingabegröße ermöglicht es dem exportierten Modell, mit unterschiedlichen Bilddimensionen umzugehen, was Flexibilität bietet und die Verarbeitungseffizienz für verschiedene Anwendungsfälle optimiert. Beim Export in Formate wie ONNX oder TensorRT stellt die Aktivierung einer dynamischen Eingabegröße sicher, dass sich das Modell nahtlos an unterschiedliche Eingabeformen anpassen kann.
Um diese Funktion zu aktivieren, verwende das dynamic=True Flag während des Exports:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(format="onnx", dynamic=True)Die dynamische Eingabegröße ist besonders nützlich für Anwendungen, bei denen die Eingabedimensionen variieren können, wie z. B. bei der Videoverarbeitung oder beim Umgang mit Bildern aus verschiedenen Quellen.
Was sind die wichtigsten Export-Argumente, die für die Optimierung der Modellleistung zu berücksichtigen sind?
Das Verständnis und die Konfiguration der Export-Argumente ist entscheidend für die Optimierung der Modellleistung:
format:Das Zielformat für das exportierte Modell (z. B.onnx,torchscript,tensorflow).imgsz:Gewünschte Bildgröße für die Modelleingabe (z. B.640oder(height, width)).half:Aktiviert FP16-Quantisierung, wodurch die Modellgröße reduziert und die Inferenz möglicherweise beschleunigt wird.optimize:Wendet spezifische Optimierungen für mobile oder eingeschränkte Umgebungen an.int8:Aktiviert die INT8-Quantisierung, was für Edge AI-Bereitstellungen sehr vorteilhaft ist.
Für die Bereitstellung auf spezifischen Hardware-Plattformen solltest du spezialisierte Exportformate in Betracht ziehen, wie TensorRT für NVIDIA-GPUs, CoreML für Apple-Geräte oder Edge TPU für Google Coral-Geräte.
Was stellen die Ausgabe-Tensoren in exportierten YOLO-Modellen dar?
Wenn du ein YOLO-Modell in Formate wie ONNX oder TensorRT exportierst, hängt die Struktur des Ausgabe-Tensors von der Modellaufgabe ab. Das Verständnis dieser Ausgaben ist wichtig für benutzerdefinierte Inferenz-Implementierungen.
Für Detektionsmodelle (z. B. yolo26n.pt) ist die Ausgabe normalerweise ein einzelner Tensor mit der Form (batch_size, 4 + num_classes, num_predictions), wobei die Kanäle Box-Koordinaten plus klassenspezifische Scores darstellen und num_predictions von der Export-Eingabeauflösung abhängt (und dynamisch sein kann).
Für Segmentierungsmodelle (z. B. yolo26n-seg.pt) erhältst du normalerweise zwei Ausgaben: den ersten Tensor mit der Form (batch_size, 4 + num_classes + mask_dim, num_predictions) (Boxen, Klassenscores und Maskenkoeffizienten) und den zweiten Tensor mit der Form (batch_size, mask_dim, proto_h, proto_w), der Masken-Prototypen enthält, die zusammen mit den Koeffizienten verwendet werden, um Instanzmasken zu generieren. Die Größen hängen von der Export-Eingabeauflösung ab (und können dynamisch sein).
Für Pose-Modelle (z. B. yolo26n-pose.pt) ist der Ausgabe-Tensor normalerweise mit (batch_size, 4 + num_classes + keypoint_dims, num_predictions) geformt, wobei keypoint_dims von der Pose-Spezifikation abhängt (z. B. Anzahl der Keypoints und ob Konfidenz enthalten ist), und num_predictions von der Export-Eingabeauflösung abhängt (und dynamisch sein kann).
Die Beispiele in den ONNX-Inferenzbeispielen zeigen, wie diese Ausgaben für jeden Modelltyp verarbeitet werden.
Warum ist output0 FP32, wenn mit half=True und end2end=True exportiert wird?
Beim Export mit half=True (oder int8=True) werden die meisten Tensoren in eine niedrigere Präzision konvertiert, um die Modellgröße zu reduzieren und die Leistung zu verbessern. Wenn jedoch end2end=True aktiviert ist, wird die Nachbearbeitung (einschließlich Klassenindizes) direkt in den exportierten Graphen eingebettet.
Der output0-Tensor enthält Klassenindizes, die intern als Gleitkommawerte dargestellt werden. FP16 kann aufgrund seiner begrenzten Mantissenpräzision keine ganzzahligen Werte über 2048 zuverlässig darstellen. Um potenziellen Präzisionsverlust oder falsche Klassen-IDs zu vermeiden, wird output0 absichtlich in FP32 belassen.
Dieses Verhalten ist beabsichtigt und gilt auch für Exporte mit niedrigerer Präzision oder quantisierte Exporte, bei denen die Wiedergabetreue der Klassenindizes bewahrt werden muss.
Falls vollständige FP16-Ausgaben erforderlich sind, exportiere mit end2end=False und führe die Nachbearbeitung extern durch.