Ultralytics YOLO27:
Get Started

Modellexport mit Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Einführung#

Das oberste Ziel beim Trainieren eines Modells ist dessen Bereitstellung für praktische Anwendungen. Der Exportmodus in Ultralytics YOLO26 bietet vielfältige Optionen, um dein trainiertes Modell in verschiedene Formate zu exportieren und so auf unterschiedlichen Plattformen und Geräten bereitzustellen. Dieser umfassende Leitfaden erläutert die Feinheiten des Modellexports und zeigt, wie du maximale Kompatibilität und Leistung erreichst.

Eine Vorschau der noch nicht veröffentlichten Version YOLO27 enthält Informationen zur geplanten Exportunterstützung.



Ansehen: So exportierst du Ultralytics YOLO26 für die Bereitstellung in verschiedene Formate | ONNX, TensorRT, CoreML 🚀

Warum den Exportmodus von YOLO26 wählen?#

  • Vielseitigkeit: Export in mehrere Formate, darunter ONNX, TensorRT, CoreML und weitere.
  • Leistung: Erzielen Sie mit TensorRT eine bis zu fünffach höhere GPU-Geschwindigkeit und mit ONNX oder OpenVINO eine bis zu dreifach höhere CPU-Geschwindigkeit.
  • Kompatibilität: Stelle dein Modell so bereit, dass es auf zahlreichen Hardware- und Softwareumgebungen eingesetzt werden kann.
  • Benutzerfreundlichkeit: Eine einfache CLI und Python-API ermöglichen einen schnellen und unkomplizierten Modellexport.

Anwendungsbeispiele#

Exportiere ein YOLO26n-Modell in ein anderes Format wie ONNX oder TensorRT. Eine vollständige Liste der Exportargumente findest du im Abschnitt „Argumente“ weiter unten.

Beispiel
from ultralytics import YOLO

# Ein Modell laden
model = YOLO("yolo26n.pt")  # Ein offizielles Modell laden
model = YOLO("path/to/best.pt")  # Ein benutzerdefiniert trainiertes Modell laden

# Modell exportieren
model.export(format="onnx")

Argumente#

Diese Tabelle enthält ausführliche Informationen zu den Konfigurationen und Optionen für den Export von YOLO-Modellen in verschiedene Formate. Diese Einstellungen sind entscheidend, um Leistung, Größe und Kompatibilität des exportierten Modells auf verschiedenen Plattformen und in unterschiedlichen Umgebungen zu optimieren. Durch die richtige Konfiguration ist das Modell optimal und effizient für den Einsatz in der vorgesehenen Anwendung vorbereitet.

ArgumentTypStandardBeschreibung
formatstr'torchscript'Zielformat für das exportierte Modell, etwa 'onnx', 'torchscript', 'engine' (TensorRT) oder ein anderes Format. Jedes Format ermöglicht die Kompatibilität mit unterschiedlichen Bereitstellungsumgebungen.
namestrNoneHardwarezielname für Formate, die eines erfordern: Hailo-Architektur ('hailo8', 'hailo8l', 'hailo10h', 'hailo15h', 'hailo15l'; Standardwert ist 'hailo8l'), Rockchip-RKNN-Chip (Standardwert ist 'rk3588'), Huawei-Ascend-SoC (ein CANN---soc_version; Standardwert ist 'Ascend310B4'), Qualcomm-QNN-HTP-Ziel (Standardwert ist '73') oder AMD-Xilinx-Versal-AI-Edge-Series-Gen-2-Gerät (Standardwert ist 've2-xc2ve3858', das VEK385-Evaluierungskit). Unterscheidet sich vom Run-Namenspaar project/name, das andere Modi verwenden.
imgszint oder tuple640Gewünschte Bildgröße für die Modelleingabe. Kann eine Ganzzahl für quadratische Bilder sein (z. B. 640 für 640×640) oder ein Tupel (height, width) für bestimmte Abmessungen. Wird kein Wert übergeben, verwendet der Export erneut die im geladenen Prüfpunkt gespeicherte Trainingsgröße: In den offiziellen YOLO26-Prüfpunkten ist für depth 768, für classify 224, für OBB 1024 und für die übrigen Aufgaben 640 gespeichert. Bei einem weitertrainierten Modell wird die jeweilige Trainingsgröße imgsz übernommen. Ein aus einer YAML-Datei erstelltes Modell hat keine gespeicherte Trainingsgröße und verwendet 640.
optimizeboolFalseAktiviert eine stärkere Compileroptimierung für DEEPX. Dadurch verringert sich die Inferenzlatenz, während sich die Kompilierungszeit erhöht.
quantizeint oder strNoneQuantisierungspräzision: 16 (FP16; verringert die Modellgröße und kann die Inferenz auf unterstützter Hardware beschleunigen) oder 8 (INT8/PTQ; komprimiert das Modell weiter und verursacht nur minimale Einbußen bei der Genauigkeit, vor allem für Edge-Geräte; benötigt die Kalibrierung data/fraction); 32/nicht gesetzt bedeutet FP32. Ein mit quantize=8 trainierter Prüfpunkt wird immer als INT8 exportiert: onnx und engine exportieren anhand der darin enthaltenen Wertebereiche ohne Kalibrierung; andere Formate oder Präzisionen werden abgelehnt. 'w8a8' und 'w16a16' sind Aliase für 8 und 16. Die gemischten Präzisionen 'w8a16' (INT8-Gewichte mit 16-Bit-Aktivierungen: CoreML, LiteRT, QNN) und 'w8a32' (dynamisches INT8: LiteRT) werden nur von diesen Formaten akzeptiert. Ersetzt die veralteten Flags half/int8 (half=True → 16, int8=True → 8, weiterhin mit einer Warnung zur Veraltung akzeptiert). Zulässig sind nur Präzisionen, die das Zielformat unterstützt (siehe unten).
dynamicboolFalseErmöglicht dynamische Eingabegrößen für TorchScript-, ONNX-, OpenVINO-, TensorRT-, CoreML- und MNN-Exporte und erhöht so die Flexibilität bei unterschiedlichen Bildabmessungen.
simplifyboolTrueVereinfacht den zwischengeschalteten ONNX-Graphen mit onnxslim für Exporte, die einen solchen Graphen erstellen (siehe Exportformate). Das kann Leistung und Kompatibilität mit Inferenz-Engines verbessern.
opsetintNoneGibt die ONNX-Operatorensatz-Version für Exporte an, die einen ONNX-Graphen erstellen (siehe Exportformate), damit die Kompatibilität mit unterschiedlichen ONNX-Parsern und Laufzeitumgebungen gewährleistet ist. Wenn kein Wert gesetzt ist, wird die neueste unterstützte Version verwendet.
workspacefloat oder NoneNoneLegt die maximale Workspace-Größe in GiB für TensorRT-Optimierungen fest und schafft so einen Ausgleich zwischen Speicherbedarf und Leistung. Verwende None, damit TensorRT automatisch bis zur maximalen Gerätegröße Speicher zuweist.
nmsbool, optionalNoneNone exportiert rohe Viele-zu-eins-Vorhersagen für eine externe NMS; True bindet NMS ein, sofern unterstützt; False wählt den NMS-freien Kopf, sofern verfügbar. Integrierte NMS in CoreML unterstützt detect, segment und pose mit statischen Formen. Weitere Informationen findest du in der Anleitung zur End-to-End-Erkennung.
conffloatNoneKonfidenzschwellenwert für alle Fälle, in denen beim Export NMS erzeugt wird: nms=True-Exporte, nicht durchgängige detect-Exporte für Hailo sowie detect-, pose- und segment-Exporte für IMX, die intern nms=True erzwingen. Wenn kein Wert gesetzt ist, wird standardmäßig 0.25 verwendet.
ioufloat0.7IoU-Schwellenwert für alle Fälle, in denen beim Export NMS erzeugt wird: nms=True-Exporte, nicht durchgängige detect-Exporte für Hailo sowie detect-, pose- und segment-Exporte für IMX, die intern nms=True erzwingen.
max_detint300Maximale Anzahl der Erkennungen, die in der Ausgabe des exportierten Modells erhalten bleibt. Gilt für nms=True-Exporte in allen Formaten außer der detect-Funktion von CoreML, deren native NMS-Pipeline keine Obergrenze für Erkennungen hat. Gilt außerdem für NMS-freie End-to-End-Erkennungsexporte (YOLO26, YOLOv10; begrenzt auf die Anzahl verfügbarer Anker) und detect-, pose- sowie segment-Exporte für IMX.
agnostic_nmsboolFalseAktiviert klassenunabhängige NMS in allen Fällen, in denen NMS beim Export über die standardmäßige Pipeline nms=True erzeugt wird, einschließlich der eigenen NMS-Stufe von CoreML. Dabei werden sich überlappende Boxen mit niedrigeren Konfidenzwerten klassenübergreifend unterdrückt, nicht nur innerhalb derselben Klasse. Die Einstellung wird von den eigenen erzeugten NMS-Konfigurationen von Hailo und IMX nicht berücksichtigt. Diese bieten keine klassenunabhängige Option und bleiben unabhängig von diesem Flag klassenabhängig. Bei NMS-freien End-to-End-Exporten (YOLO26, YOLOv10) ist die Option ebenfalls fest eingebunden; dort verhindert sie lediglich, dass dieselbe Erkennung mit mehreren Klassenbezeichnungen erscheint (Duplikate mit IoU=1.0), und unterdrückt keine unterschiedlichen Boxen anhand eines IoU-Schwellenwerts.
batchint1Legt die Batchgröße für die Inferenz des Exportmodells oder die maximale Anzahl von Bildern fest, die das exportierte Modell im Modus predict gleichzeitig verarbeitet. Bei Formaten, deren Exportargumente kein batch enthalten (Edge TPU, IMX500, DEEPX, Hailo, AMD Xilinx), wird Batch 1 exportiert; andere Werte werden abgelehnt.
devicestrNoneGibt 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, TensorRT 11.0 unterstützt DLA jedoch nicht.
verboseboolFalseErhöht den Protokollierungsgrad des TensorRT-Builders während des Exports mit format='engine' auf VERBOSE. Andere Exportformate ignorieren diese Option.
datastrNonePfad zur YAML-Datei des Datensatzes, die für die INT8-Quantisierungskalibrierung unerlässlich ist. Für die Klassifizierung wird stattdessen ein Dataset-Verzeichnis oder der Name eines integrierten Datensatzes verwendet. Ist bei aktivierter INT8-Quantisierung kein Pfad angegeben, wählt Ultralytics bei Bedarf einen aufgabenspezifischen Kalibrierungsdatensatz aus oder verwendet den Standarddatensatz für die Aufgabe des Modells. Ein mit quantize=8 trainierter Prüfpunkt enthält eigene INT8-Wertebereiche und benötigt keine Kalibrierungsdaten.
splitstr'val'Datensatz-Split ('train', 'val' oder 'test'), der zum Erstellen des INT8-Kalibrierungsdatenladers aus data verwendet wird.
fractionfloat, int oder list1.0Für die INT8-Kalibrierung verwendete Teilmenge des Datensatzes: ein Verhältnis, eine Bildanzahl oder Werte aus [train, val, test]. 1 steht für den vollständigen Split; Ganzzahlen über 1 geben die Bildanzahl an. Nur beim optionalen Testeintrag bedeuten 0/0.0, dass keine Daten verwendet werden. Bei Listen mit zwei Einträgen bleibt test vollständig.

Mit diesen Parametern kannst du den Exportprozess an bestimmte Anforderungen anpassen, etwa an die Bereitstellungsumgebung, Hardwarebeschränkungen und Leistungsziele. Die Auswahl des geeigneten Formats und der passenden Einstellungen ist entscheidend, um das beste Gleichgewicht zwischen Modellgröße, Geschwindigkeit und Genauigkeit zu erzielen.

Exportformate#

Die verfügbaren Exportformate für YOLO26 findest du in der Tabelle unten. Mit dem Argument format kannst du in jedes beliebige Format exportieren, z. B. mit format='onnx' oder format='engine'. Vorhersagen oder Validierungen lassen sich direkt mit exportierten Modellen ausführen, z. B. mit yolo predict model=yolo26n.onnx. Nach Abschluss des Exports werden Beispiele zur Verwendung deines Modells angezeigt. Modelle lassen sich auch ohne lokale Einrichtung direkt im Browser auf der Ultralytics Platform exportieren.

FormatArgument formatModellMetadatenArgumente
PyTorch-yolo26n.pt✅-
TorchScripttorchscriptyolo26n.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n.mnn✅imgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n_ncnn_model/✅imgsz, quantize, batch, device
IMX500imxyolo26n_imx_model/✅imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/✅imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/✅imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/✅imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n_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.

Automatische Installation von Exportabhängigkeiten

Für die meisten Formate sind Pakete erforderlich, die nicht mit ultralytics installiert werden. Fehlt ein Paket, wird es beim Export zur Laufzeit mit uv oder pip installiert; unter Linux kommt für Systempakete, etwa Java für IMX, apt zum Einsatz. Der Edge-TPU-Compiler wird ohne apt oder sudo heruntergeladen. Wenn die Umgebung unverändert bleiben soll, beispielsweise in einem Container-Image, CI-Auftrag oder Produktionsdienst, setze YOLO_AUTOINSTALL=False. Der Export prüft weiterhin, ob Pakete fehlen, und meldet dies, verändert die Umgebung jedoch nicht und schlägt fehl, bis die Pakete installiert sind.

export YOLO_AUTOINSTALL=False

Quantisierungsoptionen#

Verwende das Argument quantize, um die Exportgenauigkeit festzulegen. Zeichenfolgenwerte unterscheiden nicht zwischen Groß- und Kleinschreibung, und Ultralytics vereinheitlicht akzeptierte Aliasnamen vor dem Export:

Angeforderte WerteKanonischer WertBedeutung
8, "8", "int8", "w8a8"8INT8-Gewichte und -Aktivierungen
16, "16", "fp16", "w16a16"16FP16-Gewichte und -Aktivierungen
32, "32", "fp32", "w32a32"32FP32-Export; entspricht „unset“, außer bei CoreML-NMS-ML-Programmen, deren Standard FP16 ist
"w8a16""w8a16"INT8-Gewichte mit 16-Bit-Aktivierungen (FP16; INT16 bei LiteRT)
"w8a32""w8a32"INT8-Gewichte mit FP32-Aktivierungen (dynamisches INT8 bei LiteRT, keine Kalibrierung erforderlich)

Die veralteten Flags half=True und int8=True werden mit Deprecation-Warnungen weiterhin akzeptiert und an quantize=16 und quantize=8 weitergeleitet.

Nicht jedes Exportformat unterstützt jede Genauigkeit. Explizite Anforderungen an quantize führen entweder zu einem Export mit der angegebenen Genauigkeit oder schlagen vor dem Export fehl:

FormatFP32 (32/nicht gesetzt)FP16 (16)INT8 (8)W8A16 ("w8a16")Hinweise
PyTorch✅Nicht zutreffendNicht zutreffendNicht zutreffendNatives Trainings-/Checkpoint-Format.
TorchScript✅✅ nur GPU❌❌Für den FP16-TorchScript-Export ist device=0 erforderlich; der CPU-Export erfolgt in FP32.
ONNX✅✅✅❌Für INT8 werden die statische Quantisierung von ONNX Runtime und Kalibrierungsdaten verwendet.
OpenVINO✅✅✅❌Für INT8 wird die Quantisierung nach dem Training mit NNCF verwendet.
TensorRT✅✅✅❌Für INT8 werden repräsentative Kalibrierungsdaten benötigt.
CoreML✅¹✅✅✅CoreML INT8 ist eine Gewichtsquantisierung; W8A16 verwendet INT8-Gewichte mit FP16-Aktivierungen. ¹ Nicht konfigurierte NMS-ML-Programme verwenden standardmäßig FP16, und Segmentierungs-/Pose-Exporte von nms=True sind immer FP16.
Core AI✅✅❌❌Standardmäßig FP32 oder ein FP16-.aimodel-Asset mit quantize=16; kein INT8-Pfad.
TF SavedModel✅❌✅❌Beim INT8-Export wird die TensorFlow-Kalibrierung verwendet.
TF GraphDef✅❌❌❌Keine Umwandlung der Genauigkeit beim Export.
Edge TPU❌❌✅ automatisch❌Für Edge TPU ist INT8 erforderlich; die Option wird automatisch aktiviert, wenn sie nicht gesetzt ist.
LiteRT✅❌✅✅Bei statischem INT8 (8) und "w8a16" (INT8-Gewichte + INT16-Aktivierungen) werden Kalibrierungsdaten verwendet; außerdem wird dynamisches INT8 mit "w8a32" unterstützt (keine Kalibrierung erforderlich). quantize=16 ist kein eigenständiger Export; ein FP32-Modell wird zur Laufzeit über den GPU-Delegaten in FP16 ausgeführt.
PaddlePaddle✅❌❌❌Keine Umwandlung der Genauigkeit beim Export.
MNN✅✅✅❌INT8 ist eine Gewichtsquantisierung, die bei der MNN-Konvertierung erfolgt.
NCNN✅✅❌❌Laufzeitformat für Mobilgeräte und eingebettete Systeme.
IMX500❌❌✅ automatisch❌Für IMX500 ist eine Quantisierung erforderlich; INT8 wird automatisch aktiviert, wenn die Option nicht gesetzt ist.
RKNN❌✅ abhängig vom Chip✅❌RK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B unterstützen FP16 oder INT8; Varianten von RV1103/RV1106 unterstützen nur INT8.
ExecuTorch✅❌❌❌Keine Umwandlung der Genauigkeit beim Export.
Axelera❌❌✅ automatisch❌Für den Axelera-Export ist INT8 erforderlich; die Option wird automatisch aktiviert, wenn sie nicht gesetzt ist.
DEEPX❌❌✅ automatisch❌Für den DEEPX-Export ist INT8 erforderlich; die Option wird automatisch aktiviert, wenn sie nicht gesetzt ist.
Qualcomm QNN❌❌❌✅ automatischDer QNN-HTP-Export ist fest auf INT8-Gewichte mit 16-Bit-Aktivierungen eingestellt.
Hailo❌❌✅ automatisch❌Für den Hailo-Export ist INT8 erforderlich; die Option wird automatisch aktiviert, wenn sie nicht gesetzt ist.
Huawei Ascend❌✅ automatisch❌❌Ascend-AI-Core-Faltungen akzeptieren nur FP16-/INT8-Eingaben, daher kompiliert ATC in FP16; die Option wird automatisch aktiviert, wenn sie nicht gesetzt ist.
AMD Xilinx❌❌✅ automatisch❌Für den AMD-Xilinx-Export ist Vitis AI INT8 (VINT8) erforderlich; die Option wird automatisch aktiviert, wenn sie nicht festgelegt ist.

Stelle für INT8- und W8A16-Exporte repräsentative Kalibrierungsdaten mit data bereit, beispielsweise data="coco8.yaml", sofern die Zielintegration kein Standardverhalten oder eine automatische Aktivierung dokumentiert. Das LiteRT-Verfahren "w8a32" (dynamisches INT8) benötigt keine Kalibrierungsdaten.

Quantisierungsbewusstes Training#

Bei den obigen INT8-Exporten kommt die Quantisierung nach dem Training (PTQ) zum Einsatz: Die Wertebereiche werden bei einem einzigen Kalibrierungsdurchlauf über data ermittelt. Beim quantisierungsbewussten Training (QAT) werden stattdessen durch Feinabstimmung mit Fake-Quantisierung im Trainingsablauf Gewichte gelernt, die INT8 tolerieren. Dadurch lässt sich der Genauigkeitsverlust ausgleichen, der allein durch die Kalibrierung entsteht. Übergib quantize=8 an train, um einen vortrainierten Checkpoint feinabzustimmen, und exportiere ihn anschließend wie gewohnt:

Beispiel
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco.yaml",
    quantize=8,
    epochs=5,
    batch=64,
    optimizer="AdamW",
    lr0=0.00001,
    lrf=0.1,
    warmup_epochs=0.5,
    cos_lr=True,
    mosaic=0.0,
)
model.export(format="engine", quantize=8)  # # Die Wertebereiche werden mit dem Checkpoint gespeichert; Kalibrierungsdaten sind nicht erforderlich.

Verwende beim Feinabstimmen eines vortrainierten Checkpoints eine niedrige Lernrate. QAT kann die Genauigkeit zunächst verringern, und der Nutzen gegenüber der Quantisierung nach dem Training hängt vom Modell, Datensatz und Trainingsbudget ab. Vergleiche das exportierte Modell sowohl mit dem ursprünglichen Checkpoint als auch mit einem nach dem Training quantisierten Export. Werte für Fake-Quantisierung während des Trainings belegen nicht die Genauigkeit im Einsatz.

Wie viel sich QAT lohnt, hängt davon ab, wie gut die Kalibrierung des Export-Backends mit dem Modell funktioniert. Die folgenden Werte zeigen mAP50-95 auf COCO val2017, gemessen mit TensorRT-10.16-Engines bei imgsz=640 und Batchgröße 1. Jeder QAT-Checkpoint wurde mit epochs=20 patience=3 trainiert:

ModellFP32-EnginePTQ-INT8-EngineQAT-INT8-Engine
yolo26n0.40320.39340.3935
yolo26s0.47940.44120.4711
yolo26m0.52690.46960.5137
yolo26l0.54400.48890.5307
yolo26x0.57010.51380.5527

QAT kostet über den gesamten Bereich 0,008 bis 0,017 mAP50-95 gegenüber FP32, während die Quantisierung nach dem Training bei yolo26n 0,010 und bei den größeren Modellen 0,038 bis 0,057 kostet. QAT bringt beim kleinsten Modell, bei dem die Kalibrierung bereits gut funktioniert, also fast keinen Vorteil; bei den übrigen Modellen beträgt der Vorteil 0,030 bis 0,044. Bei einem anderen Datensatz, Exportformat oder einer anderen TensorRT-Version sind andere Werte zu erwarten. Miss daher selbst nach.

Für QAT-Modelle ist compile=False erforderlich; die quantisierten Module von ModelOpt unterstützen torch.compile nicht.

Die abschließenden Ausgabefaltungen des Heads bleiben absichtlich im Gleitkommaformat, um den Genauigkeitsverlust durch INT8 zu begrenzen; TensorRT aktiviert FP16-Mischpräzision für nicht quantisierte Layer. QAT läuft über NVIDIA TensorRT Model Optimizer, der beim ersten Einsatz automatisch installiert wird und zum Laden des resultierenden Checkpoints ebenfalls installiert sein muss. Die Wertebereiche werden mit dem Checkpoint gespeichert, und Exporte mit onnx und engine geben sie als Q/DQ-Knoten aus; andere Formate greifen stattdessen auf die Kalibrierung zurück und lehnen einen QAT-Checkpoint ab.

Wie geht es weiter?#

In der Integrationsanleitung für dein Bereitstellungsziel – etwa für ONNX, TensorRT, CoreML und weitere Formate in der vollständigen Integrationsübersicht – erfährst du, wie du das exportierte Modell ausführst.

Häufig gestellte Fragen#

  • Mit Ultralytics lässt sich ein YOLO26-Modell unkompliziert ins ONNX-Format exportieren. Dafür stehen sowohl Python- als auch CLI-Verfahren zur Verfügung.

    Beispiel
    from ultralytics import YOLO
    
    # Ein Modell laden
    model = YOLO("yolo26n.pt")  # Ein offizielles Modell laden
    model = YOLO("path/to/best.pt")  # Ein benutzerdefiniert trainiertes Modell laden
    
    # Modell exportieren
    model.export(format="onnx")

    Weitere Informationen zum Ablauf, einschließlich erweiterter Optionen wie dem Umgang mit unterschiedlichen Eingabegrößen, findest du in der ONNX-Integrationsanleitung.

  • Der Export von Modellen mit TensorRT bringt deutliche Leistungsverbesserungen. Mit TensorRT exportierte YOLO26-Modelle können eine bis zu fünffache GPU-Beschleunigung erreichen und eignen sich daher ideal für Echtzeit-Inferenzanwendungen.

    • Vielseitigkeit: Optimiere Modelle für eine bestimmte Hardwarekonfiguration.
    • Geschwindigkeit: Erziele durch fortschrittliche Optimierungen eine schnellere Inferenz.
    • Kompatibilität: Integriere Modelle nahtlos in NVIDIA-Hardware.

    Weitere Informationen zur Integration von TensorRT findest du in der TensorRT-Integrationsanleitung.

  • Die INT8-Quantisierung ist eine hervorragende Möglichkeit, das Modell zu komprimieren und die Inferenz zu beschleunigen, insbesondere auf Edge-Geräten. So aktivierst du die INT8-Quantisierung:

    Beispiel
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")  # Ein Modell laden
    model.export(format="onnx", quantize=8, data="coco8.yaml")

    Die INT8-Quantisierung kann auf Formate wie ONNX, TensorRT, OpenVINO, CoreML, Rockchip RKNN und AMD Xilinx angewendet werden. Für optimale Quantisierungsergebnisse gib über den Parameter data einen repräsentativen Datensatz an. Unter Quantisierungsoptionen findest du die akzeptierten Werte für quantize und die unterstützten Formate.

  • Eine dynamische Eingabegröße ermöglicht dem exportierten Modell, Bilder mit unterschiedlichen Abmessungen zu verarbeiten. Das sorgt für Flexibilität und eine effiziente Verarbeitung in verschiedenen Anwendungsfällen. Wenn du in Formate wie ONNX oder TensorRT exportierst, kann sich das Modell mit aktivierter dynamischer Eingabegröße nahtlos an unterschiedliche Eingabeformen anpassen.

    Aktiviere diese Funktion beim Export mit dem Flag dynamic=True:

    Beispiel
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="onnx", dynamic=True)

    Eine dynamische Eingabegröße ist besonders nützlich für Anwendungen, bei denen die Eingabeabmessungen variieren können, beispielsweise bei der Videoverarbeitung oder bei der Verarbeitung von Bildern aus verschiedenen Quellen.

  • PyTorch-Modelle und dynamische Exporte verwenden standardmäßig Padding auf das kleinste Rechteck, während statische Exporte auf die vollständige Größe imgsz auffüllen. Dadurch können sich Erkennungen nahe dem Konfidenzschwellwert unterscheiden. Verwende rect=False für die native Inferenz, um Ergebnisse wie bei einem statischen Export zu erhalten, oder exportiere mit dynamic=True, sofern unterstützt.

  • Für die Optimierung der Modellleistung ist es entscheidend, die Exportargumente zu verstehen und richtig zu konfigurieren:

    • format: Zielformat des exportierten Modells (z. B. onnx, torchscript, saved_model).
    • imgsz: Gewünschte Bildgröße für die Modelleingabe (z. B. 640 oder (height, width)).
    • quantize: Quantisierungsgenauigkeit, z. B. 8/"int8", 16/"fp16", 32/"fp32" oder die unterstützten Verfahren mit gemischter Gewichts-/Aktivierungsgenauigkeit "w8a16" und "w8a32" (dynamisches INT8 bei LiteRT). Weitere Informationen findest du unter Quantisierungsoptionen.
    • dynamic: Akzeptiert variable Eingabegrößen bei Formaten, die dynamische Formen unterstützen, etwa ONNX, OpenVINO und TensorRT.
    • nms: Wählt Roh-Ausgaben für externe NMS (None), integrierte NMS (True) oder den NMS-freien Head (False) aus.
    • device: Gerät, auf dem das Modell während des Exports nachverfolgt wird, z. B. cpu oder 0 für die erste CUDA-GPU; FP16-TorchScript erfordert eine GPU.

    Für die Bereitstellung auf bestimmten Hardwareplattformen solltest du spezialisierte Exportformate verwenden, etwa TensorRT für NVIDIA-GPUs, CoreML für Apple-Geräte oder Edge TPU für Google-Coral-Geräte.

  • Wenn du ein YOLO-Modell in Formate wie ONNX oder TensorRT exportierst, hängt die Struktur des Ausgabetensors von der Modellaufgabe ab. Für eigene Inferenzimplementierungen ist es wichtig, diese Ausgaben zu verstehen.

    Für YOLO26-Erkennungsmodelle (z. B. yolo26n.pt), die mit nms=False exportiert werden, erzeugen unterstützte Formate eine NMS-freie Ausgabe mit der Form (batch_size, max_detections, 6) und [x1, y1, x2, y2, confidence, class_id] Werten. Bei der Standardeinstellung max_det=300 ist dies üblicherweise (batch_size, 300, 6). Einige Formate mit Einschränkungen greifen automatisch auf das herkömmliche Ausgabelayout zurück, wenn Operatoren für die End-to-End-Verarbeitung nicht unterstützt werden.

    Standardmäßig (nms=None) exportieren Erkennungsmodelle, einschließlich YOLO26, rohe One-to-many-Vorhersagen: Die Ausgabe ist üblicherweise ein einzelner Tensor mit der Form (batch_size, 4 + num_classes, num_predictions), dessen Kanäle die Boxkoordinaten und die Bewertungen pro Klasse darstellen. num_predictions hängt von der Eingabeauflösung beim Export ab und kann dynamisch sein. Im Leitfaden zur End-to-End-Erkennung erfährst du, welche Formate die End-to-End-Ausgabe beibehalten.

    Bei Segmentierungsmodellen (z. B. yolo26n-seg.pt) erhältst du üblicherweise zwei Ausgaben: Der erste Tensor hat die Form (batch_size, 4 + num_classes + mask_dim, num_predictions) (Boxen, Klassenbewertungen und Maskenkoeffizienten), der zweite Tensor hat die Form (batch_size, mask_dim, proto_h, proto_w) und enthält Maskenprototypen, die zusammen mit den Koeffizienten zur Erzeugung von Instanzmasken verwendet werden. Die Größen hängen von der Eingabeauflösung beim Export ab und können dynamisch sein.

    Bei Posenmodellen (z. B. yolo26n-pose.pt) hat der Ausgabetensor üblicherweise die Form (batch_size, 4 + num_classes + keypoint_dims, num_predictions). keypoint_dims hängt von der Posenspezifikation ab (z. B. von der Anzahl der Schlüsselpunkte und davon, ob Konfidenzwerte enthalten sind), während num_predictions von der Eingabeauflösung beim Export abhängt und dynamisch sein kann.

    Die Beispiele in den ONNX-Inferenzbeispielen veranschaulichen, wie du diese Ausgaben für jeden Modelltyp verarbeiten kannst.

  • Ultralytics bietet derzeit keine dedizierte C++-Inferenz-API für YOLO-Modelle an. Für C++-Bereitstellungen exportierst du das Modell in ein Laufzeitformat wie ONNX, TensorRT, TorchScript oder MNN und lädst das exportierte Artefakt anschließend mit der nativen C++-API dieser Laufzeitumgebung.

    Exportiere beispielsweise ein Erkennungsmodell mit yolo export model=yolo26n.pt format=onnx und führe die Datei .onnx mit ONNX Runtime C++ aus. Oder exportiere es mit format=engine und führe die TensorRT-Engine in einer TensorRT-C++-Anwendung aus. Wenn du eine eigene C++-Nachverarbeitung verwendest, muss das Layout des Ausgabetensors zu deiner Aufgabe und den Exporteinstellungen passen. Standardmäßige YOLO26-Erkennungsexporte liefern rohe Vorhersagetensoren, für die eine externe NMS erforderlich ist. Exportiere mit nms=False, um NMS-freie Erkennungen mit der Form (batch, max_det, 6) zu erhalten, oder mit nms=True, um NMS in unterstützte Formate einzubetten.

  • Beim Export mit quantize=16 (FP16) oder quantize=8 (INT8) werden die meisten Tensoren in eine niedrigere Genauigkeit umgewandelt, um die Modellgröße zu reduzieren und die Leistung zu verbessern. Ist jedoch nms=False aktiviert, wird die Nachverarbeitung (einschließlich der Klassenindizes) direkt in den exportierten Graphen eingebettet.

    Der Tensor output0 enthält Klassenindizes, die intern als Gleitkommazahlen dargestellt werden. Aufgrund der begrenzten Mantissenpräzision kann FP16 ganzzahlige Werte über 2048 nicht zuverlässig darstellen. Um möglichen Präzisionsverlust oder falsche Klassen-IDs zu vermeiden, bleibt output0 absichtlich im FP32-Format.

    Wenn du vollständige FP16-Ausgaben benötigst, exportiere mit nms=None auf einer GPU und führe die Nachverarbeitung extern durch. FP16-ONNX-Exporte auf der CPU behalten unabhängig davon FP32-Eingaben und -Ausgaben bei; nur der interne Graph wird umgewandelt.

Kommentare