Modell-Export mit Ultralytics YOLO#
Einfü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 🚀
Warum den Exportmodus von YOLO26 wählen?#
- Vielseitigkeit: Exportiere in verschiedene Formate wie ONNX, TensorRT, CoreML und mehr.
- Leistung: Erziele bis zu 5x GPU-Beschleunigung mit TensorRT und 3x 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.
Hauptmerkmale 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.
Anwendungsbeispiele#
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")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 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. |
name | str | None | Hardware-Zielname für Formate, die einen erfordern: Hailo-Architektur ('hailo8', 'hailo8l', 'hailo10h', 'hailo15h', 'hailo15l'; Standard ist 'hailo8l'), Rockchip-RKNN-Chip (Standard ist 'rk3588'), Huawei-Ascend-SoC (ein CANN --soc_version; Standard ist 'Ascend310B4') oder Qualcomm-QNN-HTP-Ziel (Standard ist '73'). Unterscheidet sich von dem von anderen Modi verwendeten project/name-Laufnamepaar. |
imgsz | int oder tuple | 640 | Gewünschte Bildgröße für die Modelleingabe. Kann eine Ganzzahl für quadratische Bilder (z. B. 640 für 640×640) oder ein Tupel (height, width) für spezifische Dimensionen sein. |
keras | bool | False | Aktiviert den Export in das Keras-Format für TensorFlow SavedModel, was die Kompatibilität mit TensorFlow Serving und APIs bietet. |
optimize | bool | False | Aktiviert eine höhere Compiler-Optimierung für DEEPX, wodurch die Inferenzlatenz verringert und gleichzeitig die Kompilierungszeit erhöht wird. |
quantize | int oder str | None | Quantisierungspräzision: 16 (FP16, reduziert die Modellgröße und kann die Inferenz auf unterstützter Hardware beschleunigen) oder 8 (INT8/PTQ, komprimiert das Modell bei minimalem Genauigkeitsverlust weiter, hauptsächlich für Edge-Geräte; erfordert Kalibrierung data/fraction); 32/nicht gesetzt ist FP32. Exportformate, die gemischte Gewichts-/Aktivierungspräzision unterstützen, akzeptieren auch die Notation 'w8a8'/'w16a16'/'w8a16'/'w8a32'. Ersetzt die veralteten half/int8-Flags (half=True → 16, int8=True → 8, werden weiterhin mit einer Deprecation-Warnung akzeptiert). Es sind nur Präzisionen zulässig, die vom Zielformat unterstützt werden (siehe unten). |
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 intermediären ONNX-Graphen mit onnxslim für Exporte, die einen erstellen (siehe Exportformate), was Leistung und Kompatibilität mit Inferenz-Engines möglicherweise verbessert. |
opset | int | None | Gibt die ONNX-Opset-Version für Exporte an, die einen ONNX-Graphen erstellen (siehe Exportformate), um die Kompatibilität mit verschiedenen ONNX-Parsern und -Run-Zeiten sicherzustellen. Falls nicht gesetzt, wird die neueste unterstützte Version verwendet. |
workspace | float oder None | None | Legt die maximale Arbeitsspeichergröße in GiB für TensorRT-Optimierungen fest und gleicht dabei Speicherverbrauch und Leistung aus. Verwende None für die automatische Zuweisung durch TensorRT bis zum Gerätemaximum. |
nms | bool | False | Fügt dem exportierten Modell Non-Maximum Suppression (NMS) hinzu, sofern dies unterstützt wird (siehe Exportformate), was die Effizienz der Erkennungs-Nachbearbeitung verbessert. Für End-to-End-Modelle nicht verfügbar. Für CoreML nur für Erkennungsmodelle unterstützt. |
conf | float | None | Konfidenzschwellenwert, der überall dort verwendet wird, wo NMS zur Exportzeit generiert wird: nms=True-Exporte; Hailos Nicht-End-to-End-Detect-Exporte; sowie IMX-Detect-, Pose- und Segment-Exporte, die intern nms=True erzwingen. Standardmäßig 0.25, wenn nicht gesetzt, außer bei IMX-Exporten, die standardmäßig 0.001 verwenden. |
iou | float | 0.7 | IoU-Schwellenwert, der überall dort verwendet wird, wo NMS zur Exportzeit generiert wird: nms=True-Exporte; Hailos Nicht-End-to-End-Detect-Exporte; sowie IMX-Detect-, Pose- und Segment-Exporte, die intern nms=True erzwingen. |
max_det | int | 300 | Maximale Anzahl an Erkennungen, die in der Ausgabe des exportierten Modells beibehalten werden. Gilt für nms=True-Exporte in jedem Format außer CoreML, dessen NMS-Pipeline kein Erkennungslimit hat, sowie für NMS-freie End-to-End-Erkennungsexporte (YOLO26, YOLOv10, beschränkt auf die Anzahl der verfügbaren Anker) und IMX-Detect-, Pose- und Segment-Exporte. |
agnostic_nms | bool | False | Aktiviert die klassenunabhängige NMS überall dort, wo eine NMS zur Exportzeit über die Standard-nms=True-Pipeline generiert wird, einschließlich der eigenen NMS-Stufe von CoreML, wodurch überlappende Boxen mit niedrigerem Score über verschiedene Klassen hinweg anstatt nur innerhalb derselben Klasse unterdrückt werden. Wird von den eigenen generierten NMS-Konfigurationen von Hailo oder IMX nicht berücksichtigt, da diese keine klassenunabhängige Option besitzen und unabhängig von diesem Flag klassenbezogen bleiben. Ist auch in NMS-freie End-to-End-Exporte (YOLO26, YOLOv10) integriert, wo es lediglich verhindert, dass dieselbe Erkennung unter mehreren Klassenlabels erscheint (IoU=1.0-Duplikate), aber keine IoU-Schwellenwertunterdrückung zwischen unterschiedlichen Boxen vornimmt. |
batch | int | 1 | Gibt die Batch-Inferenzgröße des Exportmodells oder die maximale Anzahl von Bildern an, die das exportierte Modell im Modus predict gleichzeitig 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, aber TensorRT 11.0 unterstützt kein DLA. |
verbose | bool | True | Erhöht das TensorRT-Builder-Protokoll während des format='engine'-Exports auf den Schweregrad VERBOSE. Andere Exportformate ignorieren dies. |
data | str | None | Pfad zum Dataset-YAML, das für die INT8-Quantisierungskalibrierung unerlässlich ist; bei der Klassifizierung wird stattdessen ein Dataset-Verzeichnis oder ein integrierter Dataset-Name verwendet. Wenn bei aktiviertem INT8 nicht angegeben, wählt Ultralytics ein aufgabenspezifisches Kalibrierungs-Dataset aus, sofern erforderlich, oder greift auf das Standard-Dataset für die Modellaufgabe zurück. |
split | str | 'val' | Dataset-Split ('train', 'val' oder 'test'), der verwendet wird, um den INT8-Quantisierungskalibrierungs-Dataloader aus data zu erstellen. |
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). Wenn du es auf False setzt, kannst du diese Modelle so exportieren, dass sie mit der traditionellen NMS-basierten Nachbearbeitungspipeline kompatibel sind. Weitere Einzelheiten findest du im Leitfaden zur End-to-End-Erkennung. |
Durch die Anpassung dieser Parameter kannst du den Exportprozess an spezifische Anforderungen wie Einsatzumgebung, Hardwareeinschränkungen und Leistungsziele anpassen. Die Auswahl des geeigneten Formats und der passenden Einstellungen ist entscheidend, um die beste Balance zwischen Modellgröße, Geschwindigkeit und Genauigkeit zu erreichen.
Exportformate#
Verfügbare YOLO26-Exportformate findest du in der Tabelle unten. Du kannst in jedes Format exportieren, indem du das Argument format verwendest, d. h. format='onnx' oder format='engine'. Du kannst direkt mit exportierten Modellen vorhersagen oder validieren, d. h. yolo predict model=yolo26n.onnx. Anwendungsbeispiele werden nach Abschluss des Exports für dein Modell angezeigt. Modelle können auch direkt im Browser auf der Ultralytics Platform ohne lokale Einrichtung exportiert werden.
| Format | format-Argument | 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 |
Quantisierungsoptionen#
Verwende das Argument quantize, um die Exportpräzision anzufordern. String-Werte ignorieren die Groß- und Kleinschreibung, und Ultralytics normalisiert akzeptierte Aliase vor dem Export:
| Anfragewerte | Normalisierter Wert | Bedeutung |
|---|---|---|
8, "8", "int8", "w8a8" | 8 | INT8 Gewichte und Aktivierungen |
16, "16", "fp16", "w16a16" | 16 | FP16 Gewichte und Aktivierungen |
32, "32", "fp32", "w32a32" | 32 | FP32-Export; identisch mit dem Standardwert außer bei CoreML NMS ML-Programmen, die standardmäßig auf FP16 eingestellt sind. |
"w8a16" | "w8a16" | INT8-Gewichte mit 16-Bit-Aktivierungen (FP16; INT16 bei LiteRT) |
"w8a32" | "w8a32" | INT8-Gewichte mit FP32-Aktivierungen (LiteRT dynamisches INT8, keine Kalibrierung erforderlich) |
Die alten Flags half=True und int8=True werden weiterhin mit Veraltungswarnungen akzeptiert und an quantize=16 sowie quantize=8 weitergeleitet.
Nicht jedes Exportformat unterstützt jede Präzision. Explizite quantize-Anfragen erzeugen entweder diese Präzision oder schlagen vor dem Export fehl:
| Format | FP32 (32/nicht festgelegt) | FP16 (16) | INT8 (8) | W8A16 ("w8a16") | Hinweise |
|---|---|---|---|---|---|
| PyTorch | ✅ | N/A | N/A | N/A | Natives Trainings-/Checkpoint-Format. |
| TorchScript | ✅ | ✅ Nur GPU | ❌ | ❌ | Der FP16-TorchScript-Export erfordert device=0; der CPU-Export erfolgt in FP32. |
| ONNX | ✅ | ✅ | ✅ | ❌ | INT8 verwendet statische Quantisierung und Kalibrierungsdaten der ONNX Runtime. |
| OpenVINO | ✅ | ✅ | ✅ | ❌ | INT8 verwendet NNCF Post-Training-Quantisierung. |
| TensorRT | ✅ | ✅ | ✅ | ❌ | INT8 benötigt repräsentative Kalibrierungsdaten. |
| CoreML | ✅¹ | ✅ | ✅ | ✅ | CoreML INT8 ist eine Gewichtungsquantisierung; W8A16 verwendet INT8-Gewichtungen mit FP16-Aktivierungen. ¹Nicht gesetzte NMS ML-Programme sind standardmäßig FP16. |
| TF SavedModel | ✅ | ❌ | ✅ | ❌ | Der INT8-Export verwendet TensorFlow-Kalibrierung. |
| TF GraphDef | ✅ | ❌ | ❌ | ❌ | Keine Genauigkeitskonvertierung zum Exportzeitpunkt. |
| Edge TPU | ❌ | ❌ | ✅ auto | ❌ | Edge TPU erfordert INT8; dies wird automatisch aktiviert, wenn es nicht gesetzt ist. |
| PaddlePaddle | ✅ | ❌ | ❌ | ❌ | Keine Genauigkeitskonvertierung zum Exportzeitpunkt. |
| MNN | ✅ | ✅ | ✅ | ❌ | INT8 ist eine Gewichtsquantisierung durch MNN-Konvertierung. |
| NCNN | ✅ | ✅ | ❌ | ❌ | Laufzeitformat für Mobilgeräte/eingebettete Systeme. |
| IMX500 | ❌ | ❌ | ✅ auto | ✅ | IMX500 erfordert Quantisierung; INT8 wird automatisch aktiviert, wenn es nicht gesetzt ist. |
| RKNN | ❌ | ✅ chipabhängig | ✅ | ❌ | RK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B unterstützen FP16 oder INT8; RV1103/RV1106-Varianten sind nur INT8. |
| ExecuTorch | ✅ | ❌ | ❌ | ❌ | Keine Genauigkeitskonvertierung zum Exportzeitpunkt. |
| Axelera | ❌ | ❌ | ✅ auto | ❌ | Der Axelera-Export erfordert INT8; dies wird automatisch aktiviert, wenn es nicht gesetzt ist. |
| DEEPX | ❌ | ❌ | ✅ auto | ❌ | Der DEEPX-Export erfordert INT8; dies wird automatisch aktiviert, wenn es nicht gesetzt ist. |
| Qualcomm QNN | ❌ | ❌ | ❌ | ✅ auto | Der QNN HTP-Export ist auf INT8-Gewichte mit 16-Bit-Aktivierungen festgelegt. |
| LiteRT | ✅ | ❌ | ✅ | ✅ | Statisches INT8 (8) und "w8a16" (INT8-Gewichte + int16-Aktivierungen) verwenden Kalibrierungsdaten; es wird auch "w8a32" dynamisches INT8 (ohne Kalibrierung) unterstützt. quantize=16 ist kein separater Export; ein FP32-Modell läuft zur Laufzeit über den GPU-Delegaten in FP16. |
| Huawei Ascend | ❌ | ✅ auto | ❌ | ❌ | Ascend AI Core Faltungen akzeptieren nur FP16/INT8-Eingaben, weshalb ATC FP16 kompiliert; dies wird automatisch aktiviert, wenn es nicht gesetzt ist. |
Gib für INT8- und W8A16-Exporte repräsentative Kalibrierungsdaten mit data an, wie etwa data="coco8.yaml", es sei denn, die Zielintegration dokumentiert ein Standard- oder automatisch aktiviertes Verhalten. Das LiteRT "w8a32"-Schema (dynamisches INT8) benötigt keine Kalibrierungsdaten.
Wie geht es weiter?#
Finde den Integrationsleitfaden deines Zielgeräts — ONNX, TensorRT, CoreML und mehr findest du in der vollständigen Integrationsliste —, um zu erfahren, wie du das exportierte Modell ausführen kannst.
FAQ#
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.
Beispielfrom 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 Details zum Prozess, einschließlich fortgeschrittener Optionen wie der Handhabung unterschiedlicher Eingabegrößen, findest du im ONNX-Integrationsleitfaden.
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.
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:
Beispielfrom ultralytics import YOLO model = YOLO("yolo26n.pt") # Load a model model.export(format="onnx", quantize=8, data="coco8.yaml")Eine INT8-Quantisierung kann auf Formate wie ONNX, TensorRT, OpenVINO, CoreML und Rockchip RKNN angewendet werden. Für optimale Quantisierungsergebnisse stelle einen repräsentativen Datensatz über den Parameter
datazur Verfügung. Siehe Quantisierungsoptionen für akzeptiertequantize-Werte und unterstützte Formate.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 der dynamischen Eingabegröße sicher, dass sich das Modell nahtlos an verschiedene Eingabeformen anpassen kann.
Um diese Funktion zu aktivieren, verwende das Flag
dynamic=Truewährend des Exports:Beispielfrom 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.
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 die Modelleingabe (z. B.640oder(height, width)).quantize:Quantisierungspräzision, wie8/"int8",16/"fp16",32/"fp32"oder die gemischten Gewichts-/Aktivierungsschemata"w8a16"und"w8a32"(LiteRT dynamisches INT8) auf unterstützten Formaten. Siehe Quantisierungsoptionen.optimize:Ermöglicht eine höhere Compiler-Optimierung für DEEPX-Exporte.
Für die Bereitstellung auf bestimmten Hardwareplattformen solltest du spezialisierte 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.
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 YOLO26-Erkennungsmodelle (z. B.
yolo26n.pt) ist der End-to-End-Export in Formaten, die ihn unterstützen, standardmäßig aktiviert, sodass die Ausgabe wie(batch_size, max_detections, 6)mit[x1, y1, x2, y2, confidence, class_id]-Werten geformt ist. Mit dem Standardwertmax_det=300ist dies normalerweise(batch_size, 300, 6). Einige eingeschränkte Formate greifen automatisch auf das traditionelle Ausgabelayout zurück, wenn End-to-End-Operatoren nicht unterstützt werden.Für Nicht-End-to-End-Erkennungsmodelle oder YOLO26-Modelle, die mit
end2end=Falseexportiert wurden, ist die Ausgabe typischerweise ein einzelner Tensor, der wie(batch_size, 4 + num_classes, num_predictions)geformt ist, wobei die Kanäle Box-Koordinaten plus Klassen-Scores darstellen undnum_predictionsvon 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, geformt wie(batch_size, 4 + num_classes + mask_dim, num_predictions)(Boxen, Klassen-Scores und Maskenkoeffizienten), und den zweiten Tensor, geformt wie(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 wie(batch_size, 4 + num_classes + keypoint_dims, num_predictions)geformt, wobeikeypoint_dimsvon der Posespezifikation abhängt (z. B. Anzahl der Keypoints und ob die Konfidenz enthalten ist) undnum_predictionsvon der Export-Eingabeauflösung abhängt (und dynamisch sein kann).Die Beispiele in den ONNX-Inferenzbeispielen veranschaulichen, wie diese Ausgaben für jeden Modelltyp verarbeitet werden.
Ultralytics bietet derzeit keine dedizierte C++-Inferenz-API für YOLO-Modelle an. Für C++-Bereitstellungen exportiere das Modell in ein Laufzeitformat wie ONNX, TensorRT, TorchScript oder MNN und lade das exportierte Artefakt dann mit der nativen C++-API dieser Laufzeit.
Exportiere beispielsweise ein Erkennungsmodell mit
yolo export model=yolo26n.pt format=onnxund führe die.onnx-Datei mit ONNX Runtime C++ aus oder exportiere mitformat=engineund führe die TensorRT-Engine aus einer TensorRT C++-Anwendung aus. Wenn du benutzerdefinierte C++-Nachbearbeitung verwendest, passe das Ausgabe-Tensor-Layout an deine Aufgabe und Exporteinstellungen an; YOLO26 End-to-End-Erkennungsexporte geben normalerweise(batch, max_det, 6)zurück, während Nicht-End-to-End-Exporte rohe Vorhersagetensoren zurückgeben, die eine externe Nachbearbeitung erfordern.Beim Exportieren mit
quantize=16(FP16) oderquantize=8(INT8) werden die meisten Tensoren in eine niedrigere Präzision konvertiert, um die Modellgröße zu reduzieren und die Leistung zu verbessern. Wenn jedochend2end=Trueaktiviert ist, wird die Nachbearbeitung (einschließlich Klassenindizes) direkt in den exportierten Graph eingebettet.Der
output0-Tensor enthält Klassenindizes, die intern als Gleitkommazahlen dargestellt werden. FP16 kann ganzzahlige Werte über 2048 aufgrund seiner begrenzten Mantissenpräzision nicht zuverlässig darstellen. Um einen potenziellen Genauigkeitsverlust oder falsche Klassen-IDs zu vermeiden, wirdoutput0absichtlich in FP32 gehalten.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=Falseund führe die Nachbearbeitung extern durch.