Modellexport mit Ultralytics YOLO

Einführung
Das ultimative Ziel des Modelltrainings ist der Einsatz in realen Anwendungen. Der Export-Modus in Ultralytics YOLO26 bietet eine vielseitige Auswahl an Optionen zum Export Ihres trainierten Modells in verschiedene Formate, wodurch es auf verschiedenen Plattformen und Geräten einsetzbar wird. Dieser umfassende Leitfaden soll Ihnen die Feinheiten des Modell-Exports näherbringen und zeigen, wie Sie maximale Kompatibilität und Leistung erzielen können.
Ansehen: So exportieren Sie ein benutzerdefiniert trainiertes Ultralytics YOLO-Modell und führen Live-Inferenz auf der Webcam aus.
Warum den Export-Modus von YOLO26 wählen?
- Vielseitigkeit: Export in verschiedene Formate, darunter ONNX, TensorRT, CoreML und mehr.
- Leistung: Erziele bis zu 5x GPU-Beschleunigung mit TensorRT und 3x CPU-Beschleunigung mit ONNX oder OpenVINO.
- Kompatibilität: Machen Sie Ihr Modell universell einsetzbar in zahlreichen Hardware- und Softwareumgebungen.
- Benutzerfreundlichkeit: Einfache CLI und Python API für schnellen und unkomplizierten Modellexport.
Hauptmerkmale des Exportmodus
Hier sind einige der herausragenden Funktionalitäten:
- One-Click-Export: Einfache Befehle zum Exportieren in verschiedene Formate.
- Batch-Export: Export von Modellen, die für Batched-Inference geeignet sind.
- Optimierte Inferenz: Exportierte Modelle sind für schnellere Inferenzzeiten optimiert.
- Tutorial-Videos: Ausführliche Anleitungen und Tutorials für ein reibungsloses Exporterlebnis.
Tipp
Anwendungsbeispiele
Exportieren Sie ein YOLO26n-Modell in ein anderes Format wie ONNX oder TensorRT. Eine vollständige Liste der Export-Argumente finden Sie im Abschnitt „Argumente“ unten.
Beispiel
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")
yolo export model=yolo26n.pt format=onnx # export official model
yolo export model=path/to/best.pt format=onnx # export custom-trained model
Argumente
Diese Tabelle beschreibt detailliert 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 auf verschiedenen Plattformen und in verschiedenen Umgebungen. Die richtige Konfiguration stellt sicher, dass das Modell für den Einsatz 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 die Modelleingabe. Kann eine ganze Zahl für quadratische Bilder sein (z. B. 640 für 640×640) oder ein Tupel (height, width) für bestimmte Abmessungen sein. |
keras | bool | False | Ermöglicht den Export in das Keras-Format für TensorFlow SavedModel und bietet Kompatibilität mit TensorFlow Serving und APIs. |
optimize | bool | False | Wendet die Optimierung für mobile Geräte beim Exportieren nach TorchScript an, wodurch potenziell die Modellgröße reduziert und die Inferenz-Leistung verbessert wird. Nicht kompatibel mit dem NCNN-Format oder CUDA-Geräten. |
half | bool | False | Aktiviert die FP16 (Halbpräzisions-)Quantisierung, wodurch die Modellgröße reduziert und die Inferenz auf unterstützter Hardware potenziell beschleunigt wird. Nicht kompatibel mit INT8-Quantisierung oder CPU-only-Exports. 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, hauptsächlich für Edge-Geräte. Bei Verwendung mit TensorRT wird eine Post-Training-Quantisierung (PTQ) durchgeführt. |
dynamic | bool | False | Ermöglicht dynamische Eingabegrößen für ONNX-, TensorRT- und OpenVINO-Exporte, was die Flexibilität bei der Verarbeitung unterschiedlicher Bildabmessungen erhöht. Automatisch eingestellt auf True bei Verwendung von TensorRT mit INT8. |
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 -Laufzeitumgebungen an. Wenn nicht festgelegt, wird die neueste unterstützte Version verwendet. |
workspace | float oder None | None | Legt die maximale Workspace-Größe in GiB fest für TensorRT Optimierungen, die ein Gleichgewicht zwischen Speichernutzung und Leistung herstellen. Verwenden Sie None zur automatischen Zuweisung durch TensorRT bis zum Gerätemaximum. |
nms | bool | False | Fügt dem exportierten Modell Non-Maximum Suppression (NMS) hinzu, sofern unterstützt (siehe Exportformate), wodurch die Effizienz der Detektions-Nachbearbeitung verbessert wird. Nicht verfügbar für End2End-Modelle. |
batch | int | 1 | Gibt die Batch-Inferenzgröße des Exportmodells oder die maximale Anzahl von Bildern an, die das exportierte Modell gleichzeitig verarbeitet in predict Modus. 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) oder DLA für NVIDIA Jetson (device=dla:0 oder device=dla:1). TensorRT-Exporte verwenden automatisch die GPU. |
data | str | 'coco8.yaml' | Pfad zu der Datensatz Konfigurationsdatei, unerlässlich für die INT8-Quantisierungskalibrierung. Wenn nicht angegeben und INT8 aktiviert ist, coco8.yaml wird als Fallback für die Kalibrierung verwendet. |
fraction | float | 1.0 | Gibt den Bruchteil des Datensatzes an, der für die INT8-Quantisierungskalibrierung verwendet werden soll. Ermöglicht die Kalibrierung auf einer Teilmenge des vollständigen Datensatzes, was für Experimente oder bei begrenzten Ressourcen nützlich ist. Wenn nicht mit aktiviertem INT8 angegeben, wird der vollständige Datensatz verwendet. |
end2end | bool | None | Überschreibt den End-to-End-Modus in YOLO , die NMS Inferenz unterstützen (YOLO26, YOLOv10). Wenn Sie ihn auf False ermöglicht Ihnen den Export dieser Modelle, sodass sie mit der herkömmlichen NMS Nachbearbeitungspipeline kompatibel sind. |
Die Anpassung dieser Parameter ermöglicht die Anpassung des Exportprozesses an spezifische Anforderungen, wie z. B. Einsatzumgebung, Hardwarebeschränkungen und Leistungsziele. Die Auswahl des geeigneten Formats und der geeigneten Einstellungen ist entscheidend, um das beste Gleichgewicht zwischen Modellgröße, Geschwindigkeit und Genauigkeit zu erreichen.
Exportformate
Die verfügbaren YOLO26-Exportformate sind in der folgenden Tabelle aufgeführt. Sie können in jedes Format exportieren mit dem format Argument, d.h. format='onnx' oder format='engine'. Sie können direkt auf exportierten Modellen vorhersagen oder validieren, d.h., yolo predict model=yolo26n.onnx. Anwendungsbeispiele werden nach Abschluss des Exports für Ihr Modell angezeigt.
| 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, 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, device |
| TF.js | tfjs | yolo26n_web_model/ | ✅ | imgsz, half, int8, nms, batch, 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, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, int8, data, fraction, 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.
Beispiel
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")
yolo export model=yolo26n.pt format=onnx # export official model
yolo export model=path/to/best.pt format=onnx # export custom-trained model
Weitere Informationen zu diesem Prozess, einschließlich erweiterter Optionen wie dem Umgang mit unterschiedlichen Eingabegrößen, finden Sie im ONNX-Integrationsleitfaden.
Welche Vorteile bietet die Verwendung von TensorRT für den Modellexport?
Die Verwendung von TensorRT für den Modell-Export bietet erhebliche Leistungsverbesserungen. Nach TensorRT exportierte YOLO26-Modelle können eine bis zu 5-fache GPU-Beschleunigung erreichen, was sie ideal für Echtzeit-Inferenzanwendungen macht.
- Vielseitigkeit: Optimieren Sie Modelle für ein bestimmtes Hardware-Setup.
- Geschwindigkeit: Erzielen Sie eine schnellere Inferenz durch fortschrittliche Optimierungen.
- Kompatibilität: Nahtlose Integration mit NVIDIA Hardware.
Um mehr über die Integration von TensorRT zu erfahren, lesen Sie den TensorRT-Integrationsleitfaden.
Wie aktiviere ich die INT8-Quantisierung beim Export meines YOLO26-Modells?
Die INT8-Quantisierung ist eine ausgezeichnete Möglichkeit, das Modell zu komprimieren und die Inferenz zu beschleunigen, insbesondere auf Edge-Geräten. Hier erfahren Sie, wie Sie die INT8-Quantisierung aktivieren können:
Beispiel
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # Load a model
model.export(format="engine", int8=True)
yolo export model=yolo26n.pt format=engine int8=True # export TensorRT model with INT8 quantization
Die INT8-Quantisierung kann auf verschiedene Formate angewendet werden, wie z. B. TensorRT, OpenVINOund CoreML. Um optimale Quantisierungsergebnisse zu erzielen, stellen Sie eine repräsentative Datensatz Verwendung des data Parameter.
Warum ist eine dynamische Eingabegröße beim Exportieren von Modellen wichtig?
Die dynamische Eingabegröße ermöglicht es dem exportierten Modell, unterschiedliche Bilddimensionen zu verarbeiten, 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 diese Funktion zu aktivieren, verwenden Sie das dynamic=True Flag während des Exports:
Beispiel
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolo26n.pt format=onnx dynamic=True
Die dynamische Eingabegrößenanpassung ist besonders nützlich für Anwendungen, bei denen die Eingabedimensionen variieren können, wie z. B. bei der Videoverarbeitung oder bei der Verarbeitung von Bildern aus verschiedenen Quellen.
Welche wichtigen Exportargumente sind für die Optimierung der Modellleistung zu berücksichtigen?
Das Verständnis und die Konfiguration von Exportargumenten ist entscheidend für die Optimierung der Modellleistung:
format:Das Zielformat für das exportierte Modell (z. B.onnx,torchscript,tensorflow), oder Auto-Modus mit angegebener Auslastungsfraktion (imgsz:Gewünschte Bildgröße für die Modelleingabe (z. B.640oder(height, width)), oder Auto-Modus mit angegebener Auslastungsfraktion (half:Aktiviert die FP16-Quantisierung, wodurch die Modellgröße reduziert und potenziell die Inferenz beschleunigt wird.optimize:Wendet spezifische Optimierungen für mobile oder eingeschränkte Umgebungen an.int8:Aktiviert die INT8-Quantisierung, was sehr vorteilhaft ist für Edge-KI Bereitstellungen.
Für die Bereitstellung auf bestimmten Hardwareplattformen sollten Sie die Verwendung spezieller Exportformate wie TensorRT für NVIDIA-GPUs, CoreML für Apple-Geräte oder Edge TPU für Google Coral-Geräte in Betracht ziehen.
Was stellen die Ausgabe-tensoren in exportierten YOLO-Modellen dar?
Wenn Sie ein YOLO-Modell in Formate wie ONNX oder TensorRT exportieren, hängt die Struktur des Ausgabe-tensors von der Modellaufgabe ab. Das Verständnis dieser Ausgaben ist wichtig für benutzerdefinierte Inferenzimplementierungen.
Für detect-Modelle (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 hängt von der Export-Eingangsauflösung ab (und kann dynamisch sein).
Für segment-Modelle (z. B. yolo26n-seg.pt), erhalten Sie 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 zur Generierung von Instanzmasken verwendet werden. Die Größen hängen von der Export-Eingangsauflösung ab (und können dynamisch sein).
Für Pose-Modelle (z. B. yolo26n-pose.pt), hat der Ausgabe-tensor typischerweise die Form (batch_size, 4 + num_classes + keypoint_dims, num_predictions), wobei keypoint_dims hängt von der Pose-Spezifikation ab (z.B. Anzahl der Keypoints und ob Konfidenz enthalten ist), und num_predictions hängt von der Export-Eingangsauflösung ab (und kann dynamisch sein).
Die Beispiele in den ONNX-Inferenzbeispielen zeigen, wie diese Ausgaben für jeden Modelltyp verarbeitet werden.