Link to this sectionModell-Export mit Ultralytics YOLO#
Link to this sectionEinführung#
Das ultimative Ziel des Trainings eines Modells ist dessen Bereitstellung für reale Anwendungen. Der Exportmodus in Ultralytics YOLO26 bietet eine vielseitige Reihe von Optionen zum Exportieren deines trainierten Modells in verschiedene Formate, wodurch es auf verschiedenen Plattformen und Geräten einsetzbar wird. Dieser umfassende Leitfaden führt dich durch die Nuancen 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 🚀
Link to this sectionWarum den Exportmodus von YOLO26 wählen?#
- Vielseitigkeit: Exportiere in verschiedene Formate, darunter 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 bereitstellbar in zahlreichen Hardware- und Softwareumgebungen.
- Benutzerfreundlichkeit: Einfache CLI und Python API für schnelles und unkompliziertes Exportieren von Modellen.
Link to this sectionHauptmerkmale des Exportmodus#
Hier sind einige der herausragenden Funktionalitäten:
- One-Click-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 für schnellere Inferenzzeiten optimiert.
- Tutorial-Videos: Ausführliche Anleitungen und Tutorials für einen reibungslosen Export-Prozess.
Link to this sectionAnwendungsbeispiele#
Exportiere ein YOLO26n-Modell in ein anderes Format wie ONNX oder TensorRT. Siehe den Abschnitt Argumente unten für eine vollständige Liste der Exportargumente.
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")Link to this sectionArgumente#
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 für die Bereitstellung in der vorgesehenen Anwendung mit optimaler Effizienz 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 den Modelleingang. Kann eine Ganzzahl für quadratische Bilder sein (z.B. 640 für 640×640) oder ein Tupel (height, width) für spezifische Dimensionen. |
keras | bool | False | Ermöglicht den Export ins Keras-Format für TensorFlow SavedModel und bietet Kompatibilität mit TensorFlow-Serving und APIs. |
optimize | bool | False | Wendet Optimierungen für mobile Geräte beim Export in 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 wird eine höhere Compiler-Optimierung aktiviert, die die Inferenzlatenz verringert und die Kompilierungszeit erhöht. |
half | bool | False | Aktiviert die FP16-Quantisierung (Halbpräzision), was die Modellgröße reduziert und potenziell die Inferenz auf unterstützter Hardware beschleunigt. Nicht kompatibel mit INT8-Quantisierung oder reinen CPU-Exporten. Nur für bestimmte Formate verfügbar, z.B. ONNX (siehe unten). |
int8 | bool | False | Aktiviert die INT8-Quantisierung, wodurch das Modell weiter komprimiert und die Inferenz mit minimalem Genauigkeitsverlust beschleunigt wird, vor allem für Edge-Geräte. TensorRT 11+ verwendet die explizite Q/DQ-Quantisierung von ModelOpt; TensorRT 7-10 verwendet PTQ mit einem Kalibrator. |
dynamic | bool | False | Erlaubt dynamische Eingabegrößen für TorchScript-, ONNX-, OpenVINO-, TensorRT- und CoreML-Exporte, was die Flexibilität beim Umgang mit variierenden Bilddimensionen erhöht. |
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 für die Kompatibilität mit verschiedenen ONNX-Parsern und Runtimes an. Wenn nicht gesetzt, wird die neueste unterstützte Version verwendet. |
workspace | float oder None | None | Setzt die maximale Workspace-Größe in GiB für TensorRT-Optimierungen und balanciert Speicherverbrauch und Leistung. Verwende None für die automatische Zuweisung durch TensorRT bis zum Maximum des Geräts. |
nms | bool | False | Fügt Non-Maximum Suppression (NMS) zum exportierten Modell hinzu, wenn dies unterstützt wird (siehe Exportformate), was die Effizienz der Nachverarbeitung bei der Erkennung verbessert. Nicht verfügbar für End-to-End-Modelle. |
batch | int | 1 | Gibt die Batch-Inferenzgröße des Exportmodells oder die maximale Anzahl an Bildern an, die das exportierte Modell gleichzeitig im predict-Modus verarbeitet. Für Edge TPU-Exporte 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, aber TensorRT 11.0 unterstützt kein DLA. |
data | str | 'coco8.yaml' | Pfad zur Dataset-Konfigurationsdatei, essenziell für die Kalibrierung der INT8-Quantisierung. Wenn bei aktivierter INT8-Quantisierung nicht angegeben, wird coco8.yaml als Fallback für die Kalibrierung verwendet. |
fraction | float | 1.0 | Gibt den Teil des Datensatzes an, der für die INT8-Quantisierungskalibrierung verwendet werden soll. Ermöglicht die Kalibrierung auf einer Teilmenge des vollständigen Datensatzes, nützlich für Experimente oder bei begrenzten Ressourcen. Wenn bei aktivierter INT8-Quantisierung nicht spezifiziert, wird der vollständige Datensatz verwendet. |
end2end | bool | None | Überschreibt den End-to-End-Modus in YOLO-Modellen, die NMS-freie Inferenz unterstützen (YOLO26, YOLOv10). Das Setzen auf False ermöglicht dir, diese Modelle so zu exportieren, dass sie mit der traditionellen NMS-basierten Postprocessing-Pipeline kompatibel sind. Siehe den End-to-End Detection-Leitfaden für Details. |
Die Anpassung dieser Parameter ermöglicht die Feinabstimmung des Exportprozesses an spezifische Anforderungen wie Bereitstellungsumgebung, Hardwarebeschränkungen und Leistungsziele. Die Auswahl des geeigneten Formats und der Einstellungen ist essenziell, um das beste Gleichgewicht zwischen Modellgröße, Geschwindigkeit und Genauigkeit zu erreichen.
Link to this sectionExportformate#
Verfügbare YOLO26-Exportformate findest du in der Tabelle unten. Du kannst in jedes Format exportieren, indem du das format-Argument verwendest, z.B. format='onnx' oder format='engine'. Du kannst direkt mit exportierten Modellen vorhersagen oder validieren, z.B. yolo predict model=yolo26n.onnx. Anwendungsbeispiele werden für dein Modell nach Abschluss des Exports angezeigt. Modelle können auch direkt aus dem 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, int8, dynamic, simplify, opset, nms, batch, data, fraction, 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, int8, data, fraction, 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 |
| Qualcomm QNN | qnn | yolo26n_qnn_model/ | ✅ | imgsz, batch, name, int8, data, fraction, device |
Link to this sectionFAQ#
Link to this sectionWie exportiere ich ein YOLO26-Modell in das ONNX-Format?#
Das Exportieren eines YOLO26-Modells in das ONNX-Format ist mit Ultralytics unkompliziert. Es bietet sowohl Python- als auch CLI-Methoden zum Exportieren 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")Für weitere Details zum Prozess, einschließlich fortgeschrittener Optionen wie dem Umgang mit verschiedenen Eingabegrößen, siehe den ONNX-Integrationsleitfaden.
Link to this sectionWas sind die Vorteile der Nutzung von TensorRT für den Modell-Export?#
Die Nutzung von TensorRT für den Modell-Export bietet signifikante Leistungsverbesserungen. YOLO26-Modelle, die in TensorRT exportiert wurden, können bis zu eine 5-fache GPU-Beschleunigung erreichen, was sie ideal für Echtzeit-Inferenzanwendungen macht.
- Vielseitigkeit: Optimiere Modelle für ein spezifisches Hardware-Setup.
- Geschwindigkeit: Erziele eine schnellere Inferenz durch fortgeschrittene Optimierungen.
- Kompatibilität: Integriere reibungslos mit NVIDIA-Hardware.
Um mehr über die Integration von TensorRT zu erfahren, siehe den TensorRT-Integrationsleitfaden.
Link to this sectionWie aktiviere ich die INT8-Quantisierung beim Exportieren meines YOLO26-Modells?#
Die INT8-Quantisierung ist eine hervorragende Möglichkeit, das Modell zu komprimieren und die Inferenz zu beschleunigen, besonders auf Edge-Geräten. Hier erfährst du, wie du die INT8-Quantisierung aktivieren kannst:
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # Load a model
model.export(format="onnx", int8=True, data="coco8.yaml")Die INT8-Quantisierung kann auf verschiedene Formate angewendet werden, wie ONNX, TensorRT, OpenVINO, CoreML und Rockchip RKNN. Für optimale Quantisierungsergebnisse stelle einen repräsentativen Datensatz mithilfe des data-Parameters bereit.
Link to this sectionWarum ist die dynamische Eingabegröße beim Exportieren von Modellen wichtig?#
Die dynamische Eingabegröße erlaubt 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 der dynamischen Eingabegröße sicher, dass sich das Modell nahtlos an verschiedene Eingabeformen anpassen kann.
Um dieses Feature 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ößenanpassung ist besonders nützlich für Anwendungen, bei denen Eingabedimensionen variieren können, wie bei der Videoverarbeitung oder beim Umgang mit Bildern aus verschiedenen Quellen.
Link to this sectionWas sind die wichtigsten Exportargumente, die für die Optimierung der Modellleistung zu berücksichtigen sind?#
Das Verstehen und Konfigurieren von Exportargumenten 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 den Modelleingang (z.B.640oder(height, width)).half:Aktiviert die FP16-Quantisierung, reduziert die Modellgröße und beschleunigt potenziell die Inferenz.optimize:Wendet spezifische Optimierungen für mobile oder eingeschränkte Umgebungen an.int8:Aktiviert die INT8-Quantisierung, äußerst vorteilhaft für Edge-KI-Bereitstellungen.
Für die Bereitstellung auf spezifischen Hardwareplattformen 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.
Link to this sectionWas repräsentieren die Ausgangstensoren in exportierten YOLO-Modellen?#
Wenn du ein YOLO-Modell in Formate wie ONNX oder TensorRT exportierst, hängt die Struktur der Ausgangstensoren von der Modellaufgabe ab. Das Verständnis dieser Ausgaben ist wichtig für benutzerdefinierte Inferenzimplementierungen.
Für Erkennungsmodelle (z.B. yolo26n.pt) ist die Ausgabe typischerweise 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 typischerweise 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 Maskenprototypen enthält, die 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 Ausgangstensor typischerweise geformt wie (batch_size, 4 + num_classes + keypoint_dims, num_predictions), 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 demonstrieren, wie diese Ausgaben für jeden Modelltyp verarbeitet werden.
Link to this sectionWarum 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 geringere Präzision umgewandelt, um die Modellgröße zu reduzieren und die Leistung zu verbessern. Wenn jedoch end2end=True aktiviert ist, wird das Postprocessing (einschließlich Klassenindizes) direkt in den exportierten Graphen eingebettet.
Der output0-Tensor enthält Klassenindizes, die intern als Fließkommawerte repräsentiert werden. FP16 kann aufgrund seiner begrenzten Mantissenpräzision Ganzzahlwerte über 2048 nicht zuverlässig darstellen. Um potenziellen Präzisionsverlust oder falsche Klassen-IDs zu vermeiden, wird output0 bewusst in FP32 belassen.
Dieses Verhalten ist zu erwarten und gilt auch für Exporte mit niedrigerer Präzision oder Quantisierung, bei denen die Genauigkeit der Klassenindizes erhalten bleiben muss.
Wenn vollständige FP16-Ausgaben erforderlich sind, exportiere mit end2end=False und führe das Postprocessing extern durch.