Ultralytics YOLO27:

TensorRT-Export für YOLO26-Modelle#

Die Bereitstellung von Computer-Vision-Modellen in Hochleistungsumgebungen kann ein Format erfordern, das Geschwindigkeit und Effizienz maximiert. Das gilt insbesondere, wenn du dein Modell auf NVIDIA GPUs bereitstellst.

Mit dem TensorRT-Exportformat kannst du deine Ultralytics YOLO26-Modelle für schnelle und effiziente Inferenz auf NVIDIA-Hardware optimieren. Dieser Leitfaden führt dich mit leicht nachvollziehbaren Schritten durch den Konvertierungsprozess und hilft dir, die fortschrittliche Technologie von NVIDIA in deinen Deep-Learning-Projekten optimal zu nutzen.

TensorRT#

NVIDIA TensorRT optimization workflow

TensorRT wurde von NVIDIA entwickelt und ist ein fortschrittliches Software Development Kit (SDK) für schnelle Deep-Learning-Inferenz. Es eignet sich besonders für Echtzeitanwendungen wie die Objekterkennung.

Dieses Toolkit optimiert Deep-Learning-Modelle für NVIDIA GPUs und ermöglicht dadurch schnellere und effizientere Abläufe. TensorRT-Modelle durchlaufen eine TensorRT-Optimierung, die Techniken wie Layer-Fusion, Präzisionskalibrierung (INT8 und FP16), dynamische Tensor-Speicherverwaltung und automatische Kernel-Optimierung umfasst. Durch die Konvertierung von Deep-Learning-Modellen in das TensorRT-Format können Entwickler das Potenzial von NVIDIA GPUs vollständig ausschöpfen.

TensorRT ist für seine Kompatibilität mit verschiedenen Modellenformaten bekannt, darunter TensorFlow, PyTorch und ONNX. Dadurch erhalten Entwickler eine flexible Lösung zur Integration und Optimierung von Modellen aus unterschiedlichen Frameworks. Diese Vielseitigkeit ermöglicht eine effiziente Modellbereitstellung in verschiedenen Hardware- und Softwareumgebungen.

TensorRT-Engines sind hardwarespezifisch und laufzeitspezifisch

TensorRT erstellt und optimiert eine Engine auf der GPU, auf der sie erstellt wird. Erstelle die Engine für die Architektur der Ziel-GPU und stimme die TensorRT/CUDA-Laufzeitumgebung darauf ab. Behandle eine .engine-Datei nicht als portables Modellformat. Für die Bereitstellung am Rand bietet die Ultralytics Platform acht Jetson-Zielauswahlen, für die jeweils der Status von Erstellung und Validierung dokumentiert ist. Alternativ kannst du das Modell lokal auf dem Zielgerät exportieren.

Wichtige Funktionen von TensorRT-Modellen#

TensorRT-Modelle bieten eine Reihe wichtiger Funktionen, die zu ihrer Effizienz und Leistungsfähigkeit bei der schnellen Deep-Learning-Inferenz beitragen:

  • Präzisionskalibrierung: TensorRT unterstützt die Präzisionskalibrierung, sodass Modelle auf bestimmte Genauigkeitsanforderungen abgestimmt werden können. Dazu gehört die Unterstützung von Formaten mit reduzierter Präzision wie INT8 und FP16, die die Inferenzgeschwindigkeit weiter erhöhen können, während akzeptable Genauigkeitswerte erhalten bleiben.

  • Layer-Fusion: Der TensorRT-Optimierungsprozess umfasst die Layer-Fusion, bei der mehrere Layer eines neuronalen Netzes zu einer einzigen Operation zusammengefasst werden. Dadurch werden der Rechenaufwand reduziert und die Inferenzgeschwindigkeit erhöht, da weniger Speicherzugriffe und Berechnungen erforderlich sind.

TensorRT neural network layer fusion optimization

  • Dynamische Tensor-Speicherverwaltung: TensorRT verwaltet die Verwendung des Tensor-Speichers während der Inferenz effizient, reduziert den Speicher-Overhead und optimiert die Speicherzuweisung. Dadurch wird der GPU-Speicher effizienter genutzt.

  • Automatische Kernel-Optimierung: TensorRT wendet eine automatische Kernel-Optimierung an, um für jeden Layer des Modells den am besten optimierten GPU-Kernel auszuwählen. Dieser adaptive Ansatz stellt sicher, dass das Modell die Rechenleistung der GPU vollständig nutzt.

Bereitstellungsoptionen in TensorRT#

Bevor wir uns den Code zum Exportieren von YOLO26-Modellen in das TensorRT-Format ansehen, klären wir zunächst, wo TensorRT-Modelle normalerweise eingesetzt werden.

TensorRT bietet mehrere Bereitstellungsoptionen. Jede davon stellt ein anderes Gleichgewicht zwischen einfacher Integration, Leistungsoptimierung und Flexibilität her:

  • Bereitstellung in TensorFlow: Bei dieser Methode wird TensorRT in TensorFlow integriert, sodass optimierte Modelle in einer vertrauten TensorFlow-Umgebung ausgeführt werden können. Sie eignet sich für Modelle mit einer Mischung aus unterstützten und nicht unterstützten Layern, da TF-TRT diese effizient verarbeiten kann.

NVIDIA TensorRT optimization workflow

  • Eigenständige TensorRT Runtime API: Bietet eine detaillierte Kontrolle und eignet sich ideal für leistungs​​kritische Anwendungen. Sie ist komplexer, ermöglicht aber eine individuelle Implementierung nicht unterstützter Operatoren.

  • NVIDIA Triton Inference Server: Eine Option, die Modelle aus verschiedenen Frameworks unterstützt. Sie eignet sich besonders für Inferenz in der Cloud oder am Rand und bietet Funktionen wie die gleichzeitige Ausführung mehrerer Modelle und die Modellanalyse.

Unterstützte Aufgaben#

Der TensorRT-Export unterstützt alle sieben Ultralytics-Aufgaben. Semantische Segmentierung und Tiefenschätzung sind nur mit YOLO26 verfügbar, der einzigen Modellfamilie, die diese Ausgabeköpfe enthält.

AufgabeYOLOv8YOLO11YOLO26
Erkennen
Segmentieren
Semantisch
Tiefe
Klassifizieren
Pose
OBB

YOLO26-Modelle in TensorRT exportieren#

Du kannst die Ausführungseffizienz verbessern und die Leistung optimieren, indem du YOLO26-Modelle in das TensorRT-Format konvertierst.

Installation#

Führe zur Installation des erforderlichen Pakets folgenden Befehl aus:

Installation
# Install the required package for YOLO26
pip install ultralytics

Ausführliche Anweisungen und bewährte Vorgehensweisen zur Installation findest du in unserem YOLO26-Installationsleitfaden. Falls bei der Installation der für YOLO26 erforderlichen Pakete Probleme auftreten, findest du in unserem Leitfaden zu häufigen Problemen Lösungen und Tipps.

Verwendung#

Bevor du mit den Nutzungsanweisungen beginnst, sieh dir unbedingt die Auswahl an YOLO26-Modellen von Ultralytics an. So kannst du das für deine Projektanforderungen am besten geeignete Modell auswählen.

Das TensorRT-Format unterstützt die Modi Export, Predict und Validate. Für Inferenz und Validierung ist eine NVIDIA GPU erforderlich. Exportiere dein Modell und lade anschließend das exportierte Modell, um Inferenz auszuführen oder seine Genauigkeit zu validieren.

Export
from ultralytics import YOLO

# Load a YOLO26 model
model = YOLO("yolo26n.pt")

# Export the model to TensorRT format
model.export(format="engine")  # creates 'yolo26n.engine'
Vorhersage
from ultralytics import YOLO

# Load the exported TensorRT model
model = YOLO("yolo26n.engine")

# Run inference
results = model("https://ultralytics.com/images/bus.jpg")
Validieren
from ultralytics import YOLO

# Load the exported TensorRT model
model = YOLO("yolo26n.engine")

# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")

Exportargumente#

ArgumentTypStandardwertBeschreibung
formatstr'engine'Zielformat für das exportierte Modell, das die Kompatibilität mit verschiedenen Bereitstellungsumgebungen festlegt.
imgszint oder tuple640Gewünschte Bildgröße für die Modelleingabe. Kann für quadratische Bilder eine Ganzzahl oder für bestimmte Abmessungen ein Tupel (height, width) sein.
quantizeint oder strNoneQuantisierungsgenauigkeit: 16 (FP16) oder 8 (INT8/PTQ; erfordert Kalibrierung data/fraction); 32/nicht gesetzt ist FP32. Ein mit quantize=8 trainierter Checkpoint exportiert INT8 immer aus den darin enthaltenen Bereichen, ohne Kalibrierung. Ersetzt die veralteten Flags half/int8.
dynamicboolFalseErlaubt dynamische Eingabegrößen und erhöht dadurch die Flexibilität beim Umgang mit unterschiedlichen Bildabmessungen.
simplifyboolTrueVereinfacht den Modellgraphen mit onnxslim und kann dadurch Leistung und Kompatibilität verbessern.
opsetintNoneLegt die ONNX-Operationssatzversion für den Zwischenstand des ONNX-Graphen fest. Wenn keine Angabe erfolgt, wird die neueste unterstützte Version verwendet.
workspacefloat oder NoneNoneLegt die maximale Größe des Arbeitsbereichs in GiB für TensorRT-Optimierungen fest und stellt dabei ein Gleichgewicht zwischen Speicherverbrauch und Leistung her. Verwende None, damit TensorRT den Speicher automatisch bis zum Gerätemaximum zuweist.
nmsbool, optionalNoneWähle die Rohausgabe (None, Standard), das eingebettete NMS (True) oder den NMS-freien Kopf (False).
batchint1Legt die Batchgröße für die Inferenz des exportierten Modells oder die maximale Anzahl der Bilder fest, die das exportierte Modell im Modus predict gleichzeitig verarbeitet.
datastrNonePfad zur Dataset-YAML, essenziell für die Quantisierung; bei Klassifikation wird stattdessen ein Dataset-Verzeichnis oder ein integrierter Dataset-Name verwendet. Wenn bei quantize=8 weggelassen, wählt Ultralytics das Standard-Kalibrierungs-Dataset für die Modellaufgabe aus; ein mit quantize=8 trainierter Checkpoint benötigt keines.
fractionfloat, int oder list1.0Kalibrierungs-Teilmenge als Verhältnis, Bildanzahl oder [train, val, test]-Verhältnisse bzw. -Anzahlen. Bei Listen mit zwei Elementen bleibt test vollständig, während 0 übersprungen wird.
devicestrNoneGibt das Gerät für den Export an: GPU (device=0) oder DLA für NVIDIA Jetson (device=dla:0 oder device=dla:1).
Tipp

Stelle sicher, dass du beim Export nach TensorRT eine GPU mit CUDA-Unterstützung verwendest.

JetPack- und DLA-Kompatibilität

TensorRT 11.2.1 unterstützt kein JetPack, einschließlich Thor; verwende die von deinem JetPack-Release unterstützte TensorRT 10.x-Laufzeitumgebung. Für device=dla:0 oder device=dla:1 identifiziert NVIDIA TensorRT 10.7 als das letzte Release mit DLA-Unterstützung. TensorRT 11.0, 11.1 und 11.2 unterstützen DLA nicht.

Weitere Informationen zum Exportvorgang findest du auf der Ultralytics-Dokumentationsseite zum Export.

TensorRT-Export mit INT8-Quantisierung#

Das Exportieren von Ultralytics YOLO-Modellen mit TensorRT und INT8-Präzision führt eine Post-Training-Quantization (PTQ) durch. TensorRT verwendet die Kalibrierung für PTQ, die die Verteilung von Aktivierungen innerhalb jedes Aktivierungstensors misst, während das YOLO-Modell die Inferenz an repräsentativen Eingabedaten verarbeitet, und diese Verteilung dann verwendet, um Skalenwerte für jeden Aktivierungstensor zu schätzen. Jeder Aktivierungstensor, der ein Kandidat für die Quantisierung ist, hat eine zugehörige Skale, die durch einen Kalibrierungsprozess abgeleitet wird. Ein mit quantize=8 durch Quantization-Aware Training feinabgestimmter Checkpoint enthält bereits seine INT8-Bereiche, sodass sein Export diese verwendet und die Kalibrierung überspringt.

TensorRT-11-Quantisierung

TensorRT 11 hat die implizite Quantisierung und die Schnittstelle IInt8Calibrator entfernt. Unter TensorRT 11 und neuer führt Ultralytics die INT8-Quantisierung mit der expliziten Quantisierung von NVIDIA ModelOpt durch. Dabei werden Q/DQ-Knoten vor dem Erstellen einer streng typisierten Engine in den ONNX-Graphen eingefügt. FP16 wird mit der gemischten Präzisionskonvertierung ModelOpt AutoCast angewendet. Die Argumente quantize=8, quantize=16 und data funktionieren auf dieselbe Weise; ModelOpt wird bei der ersten Verwendung automatisch installiert. Unter TensorRT 7–10 wird stattdessen der unten beschriebene Legacy-Kalibrierer verwendet.

Bei der Verarbeitung implizit quantisierter Netzwerke verwendet TensorRT INT8 opportunistisch, um die Ausführungszeit von Layern zu optimieren. Wenn ein Layer mit INT8 schneller ausgeführt wird und seinen Dateneingaben und -ausgaben Quantisierungsskalen zugewiesen sind, wird diesem Layer ein Kernel mit INT8-Präzision zugewiesen. Andernfalls wählt TensorRT für den Kernel je nach schnellerer Ausführung für diesen Layer entweder FP32 oder FP16.

Tipp

Es ist entscheidend, dass für den Export mit INT8-Präzision dasselbe Gerät verwendet wird, auf dem die Gewichte des TensorRT-Modells bereitgestellt und genutzt werden, da die Kalibrierungsergebnisse zwischen Geräten variieren können.

INT8-Export konfigurieren#

Die Argumente, die beim Export eines Ultralytics-YOLO-Modells angegeben werden, beeinflussen die Leistung des exportierten Modells maßgeblich. Sie müssen außerdem anhand der verfügbaren Geräteressourcen ausgewählt werden. Die Standardargumente sollten jedoch für die meisten diskreten NVIDIA GPUs der Ampere-Generation (oder neuer) funktionieren. Für GPU-Exporte wird der Kalibrierungsalgorithmus "MINMAX_CALIBRATION" verwendet, während DLA-Exporte auf NVIDIA Jetson "ENTROPY_CALIBRATION_2" verwenden. Weitere Einzelheiten zu den verfügbaren Optionen findest du im TensorRT Developer Guide. Tests von Ultralytics haben ergeben, dass "MINMAX_CALIBRATION" die beste Wahl für GPU-Exporte ist. Der Algorithmus wird abhängig vom Exportgerät automatisch ausgewählt.

  • workspace : Steuert die Größe (in GiB) der Gerätespeicherzuweisung während der Konvertierung der Modellgewichte.

    • Passe den Wert von workspace an deine Kalibrierungsanforderungen und die verfügbaren Ressourcen an. Ein größerer Wert für workspace kann zwar die Kalibrierungszeit erhöhen, ermöglicht TensorRT aber, einen größeren Bereich an Optimierungsstrategien zu untersuchen, was die Modellleistung und Genauigkeit verbessern kann. Ein kleinerer Wert für workspace kann dagegen die Kalibrierungszeit verkürzen, aber die Optimierungsstrategien einschränken und dadurch die Qualität des quantisierten Modells beeinträchtigen.

    • Der Standardwert ist workspace=None. Damit kann TensorRT den Speicher automatisch zuweisen. Bei manueller Konfiguration muss dieser Wert möglicherweise erhöht werden, wenn die Kalibrierung abstürzt, also ohne Warnung beendet wird.

    • TensorRT meldet beim Export UNSUPPORTED_STATE, wenn der Wert für workspace größer ist als der verfügbare Gerätespeicher. In diesem Fall sollte der Wert für workspace verringert oder auf None gesetzt werden.

    • Wenn workspace auf den Maximalwert gesetzt ist und die Kalibrierung fehlschlägt oder abstürzt, solltest du None für die automatische Speicherzuweisung verwenden oder die Werte für imgsz und batch verringern, um den Speicherbedarf zu reduzieren.

    • Denke daran: Die Kalibrierung für INT8 ist gerätespezifisch. Wenn du für die Kalibrierung eine „High-End“-GPU verwendest, kann dies zu einer schlechten Leistung führen, wenn die Inferenz auf einem anderen Gerät ausgeführt wird.

  • batch : Die maximale Batchgröße, die für die Inferenz verwendet wird. Während der Inferenz können kleinere Batches verwendet werden, größere Batches als der angegebene Wert werden jedoch nicht akzeptiert.

Hinweis

Kleine Batches können zu einer ungenauen Skalierung während der INT8-Kalibrierung führen, da der Prozess an die Daten angepasst wird, die er sieht. Kleine Batches erfassen möglicherweise nicht den gesamten Wertebereich, was zu Problemen bei der abschließenden Kalibrierung führen kann. Eine größere Batchgröße trägt dazu bei, repräsentativere Kalibrierungsergebnisse zu erzielen.

Experimente von NVIDIA führten dazu, dass sie empfehlen, mindestens 500 Kalibrierungsbilder zu verwenden, die für die Daten deines Modells repräsentativ sind, bei INT8-Quantisierungskalibrierung. Dies ist eine Richtlinie und keine strenge Anforderung, und du wirst experimentieren müssen, was erforderlich ist, um für dein Dataset eine gute Leistung zu erzielen. Da die Kalibrierungsdaten für die INT8-Kalibrierung mit TensorRT erforderlich sind, stelle sicher, dass du das Argument data verwendest, wenn du einen Checkpoint exportierst, der nicht mit quantize=8 (Post-Training-Quantization) bei quantize=8 für TensorRT trainiert wurde, und verwende data="my_dataset.yaml", wodurch die Bilder aus der Validierung zum Kalibrieren verwendet werden. Ein mit quantize=8 trainierter Checkpoint überspringt die Kalibrierung, lasse data daher für ihn weg. Wenn für data beim Export nach TensorRT mit INT8-Quantisierung kein Wert übergeben wird, besteht das Standardverhalten darin, eines der "kleinen" Beispieldatasets basierend auf der Modellaufgabe zu verwenden, anstatt einen Fehler auszugeben.

Beispiel
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(
    format="engine",
    dynamic=True,  # (1)!
    batch=8,  # (2)!
    workspace=4,  # (3)!
    quantize=8,
    data="coco.yaml",  # (4)!
)

# Load the exported TensorRT INT8 model
model = YOLO("yolo26n.engine", task="detect")

# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
  1. Exporte mit dynamischen Achsen; dynamic bleibt False, sofern nicht explizit festgelegt. Weitere Informationen findest du unter Exportargumente.
  2. Legt die maximale Batchgröße für das exportierte Modell und die INT8-Kalibrierung auf 8 fest.
  3. Weist dem Konvertierungsprozess 4 GiB Speicher zu, anstatt den gesamten Gerätespeicher zu verwenden.
  4. Verwendet den COCO-Datensatz für die Kalibrierung, insbesondere die für die Validierung verwendeten Bilder (insgesamt 5.000).
Kalibrierungscache

TensorRT erstellt einen Kalibrierungs-.cache, der wiederverwendet werden kann, um den Export künftiger Modellgewichte mit denselben Daten zu beschleunigen. Dies kann jedoch zu einer schlechten Kalibrierung führen, wenn sich die Daten stark unterscheiden oder der Wert batch erheblich geändert wird. Unter diesen Umständen solltest du den vorhandenen .cache umbenennen und in ein anderes Verzeichnis verschieben oder vollständig löschen.

Vorteile der Verwendung von YOLO mit TensorRT INT8#

  • Kleinere Modellgröße: Die Quantisierung von FP32 auf INT8 kann die Modellgröße um den Faktor 4 reduzieren (auf dem Datenträger oder im Speicher). Dadurch werden Downloadzeiten und Speicherbedarf verringert und der Speicherbedarf bei der Bereitstellung eines Modells reduziert.

  • Geringerer Energieverbrauch: Operationen mit reduzierter Präzision für exportierte YOLO-Modelle mit INT8 können im Vergleich zu FP32-Modellen weniger Energie verbrauchen, insbesondere auf batteriebetriebenen Geräten.

  • Höhere Inferenzgeschwindigkeit: TensorRT optimiert das Modell für die Zielhardware, was zu höheren Inferenzgeschwindigkeiten auf GPUs, eingebetteten Geräten und Beschleunigern führen kann.

Hinweis zu Inferenzgeschwindigkeiten

Bei den ersten Inferenzaufrufen eines nach TensorRT INT8 exportierten Modells ist mit längeren Vorverarbeitungs-, Inferenz- und/oder Nachverarbeitungszeiten als gewöhnlich zu rechnen. Dies kann auch auftreten, wenn du imgsz während der Inferenz änderst, insbesondere wenn imgsz nicht dem beim Export angegebenen Wert entspricht (das Export-imgsz ist als TensorRT-„Optimal“-Profil festgelegt).

Nachteile der Verwendung von YOLO mit TensorRT INT8#

  • Verschlechterung von Bewertungsmetriken: Die Verwendung einer geringeren Präzision bedeutet, dass mAP, Precision, Recall oder jede andere zur Bewertung der Modellleistung verwendete Metrik wahrscheinlich etwas schlechter ausfällt. Sigmoid-Layer werden mit höherer Präzision beibehalten, um die Kalibrierung der Scores zu erhalten. INT8 kann jedoch weiterhin Konfidenzwerte verschieben. Wähle den Betriebsschwellenwert daher anhand der F1-Kurve des INT8-Modells selbst. Im Abschnitt Leistungsergebnisse kannst du die Unterschiede bei mAP50 und mAP50-95 vergleichen, wenn du mit INT8 auf einer kleinen Stichprobe verschiedener Geräte exportierst.

  • Längere Entwicklungszeiten: Die Suche nach den „optimalen“ Einstellungen für die INT8-Kalibrierung für einen Datensatz und ein Gerät kann umfangreiche Tests erfordern.

  • Hardwareabhängigkeit: Kalibrierung und Leistungssteigerungen können stark von der Hardware abhängen, und Modellgewichte lassen sich weniger gut übertragen.

Leistung des Ultralytics YOLO TensorRT-Exports#

NVIDIA A100#

Leistung

Getestet mit Ubuntu 22.04.3 LTS, python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1

Beispiele zur Verwendung dieser auf COCO trainierten Modelle mit 80 vortrainierten Klassen findest du in der Dokumentation zur Erkennung.

Hinweis

Für jeden Test werden die Inferenzzeiten für mean, min (am schnellsten) und max (am langsamsten) mit den vortrainierten Gewichten yolov8n.engine angezeigt.

PrecisionEvaluierungstestMittelwert
(ms)
Minimum | Maximum
(ms)
mAPval
50(B)
mAPval
50-95(B)
batchGröße
(Pixel)
FP32Vorhersage0.520.51 | 0.568640
FP32COCOval0.520.520.371640
FP16Vorhersage0.340.34 | 0.418640
FP16COCOval0.330.520.371640
INT8Vorhersage0.280.27 | 0.318640
INT8COCOval0.290.470.331640

Consumer-GPUs#

Erkennungsleistung (COCO)

Getestet mit Windows 10.0.19045, python 3.10.9, ultralytics==8.2.4, tensorrt==10.0.0b6

Hinweis

Für jeden Test werden die Inferenzzeiten für mean, min (am schnellsten) und max (am langsamsten) mit den vortrainierten Gewichten yolov8n.engine angezeigt.

PrecisionEvaluierungstestMittelwert
(ms)
Minimum | Maximum
(ms)
mAPval
50(B)
mAPval
50-95(B)
batchGröße
(Pixel)
FP32Vorhersage1.060.75 | 1.888640
FP32COCOval1.370.520.371640
FP16Vorhersage0.620.75 | 1.138640
FP16COCOval0.850.520.371640
INT8Vorhersage0.520.38 | 1.008640
INT8COCOval0.740.470.331640

Eingebettete Geräte#

Erkennungsleistung (COCO)

Getestet mit JetPack 6.0 (L4T 36.3), Ubuntu 22.04.4 LTS, python 3.10.12, ultralytics==8.2.16, tensorrt==10.0.1

Hinweis

Für jeden Test werden die Inferenzzeiten für mean, min (am schnellsten) und max (am langsamsten) mit den vortrainierten Gewichten yolov8n.engine angezeigt.

PrecisionEvaluierungstestMittelwert
(ms)
Minimum | Maximum
(ms)
mAPval
50(B)
mAPval
50-95(B)
batchGröße
(Pixel)
FP32Vorhersage6.116.10 | 6.298640
FP32COCOval6.170.520.371640
FP16Vorhersage3.183.18 | 3.208640
FP16COCOval3.190.520.371640
INT8Vorhersage2.302.29 | 2.358640
INT8COCOval2.320.460.321640
Info

In unserer Schnellstartanleitung für NVIDIA Jetson mit Ultralytics YOLO erfährst du mehr über Einrichtung und Konfiguration.

Info

In unserer Schnellstartanleitung für NVIDIA DGX Spark mit Ultralytics YOLO erfährst du mehr über Einrichtung und Konfiguration.

Evaluierungsmethoden#

Erweitere die folgenden Abschnitte, um Informationen darüber zu erhalten, wie diese Modelle exportiert und getestet wurden.

Exportkonfigurationen

Unter Exportmodus findest du Einzelheiten zu den Argumenten für die Exportkonfiguration.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)

# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=16)

# TensorRT INT8 with calibration `data` (i.e. COCO, ImageNet, or DOTAv1 for appropriate model task)
out = model.export(
    format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=8, data="coco8.yaml"
)
Predict-Schleife

Weitere Informationen findest du unter Predict-Modus.

import cv2

from ultralytics import YOLO

model = YOLO("yolo26n.engine")
img = cv2.imread("path/to/image.jpg")

for _ in range(100):
    result = model.predict(
        [img] * 8,  # batch=8 of the same image
        verbose=False,
        device="cuda",
    )
Validierungskonfiguration

Unter dem Modus val erfährst du mehr über die Argumente für die Validierungskonfiguration.

from ultralytics import YOLO

model = YOLO("yolo26n.engine")
results = model.val(
    data="data.yaml",  # COCO, ImageNet, or DOTAv1 for appropriate model task
    batch=1,
    imgsz=640,
    verbose=False,
    device="cuda",
)

Bereitstellung exportierter YOLO26-TensorRT-Modelle#

Nachdem du deine Ultralytics-YOLO26-Modelle erfolgreich in das TensorRT-Format exportiert hast, kannst du sie jetzt bereitstellen. Ausführliche Anleitungen zur Bereitstellung deiner TensorRT-Modelle in verschiedenen Umgebungen findest du in den folgenden Ressourcen:

Zusammenfassung#

In dieser Anleitung haben wir uns auf die Konvertierung von Ultralytics-YOLO26-Modellen in das NVIDIA-TensorRT-Modellformat konzentriert. Dieser Konvertierungsschritt ist entscheidend, um die Effizienz und Geschwindigkeit von YOLO26-Modellen zu verbessern und sie dadurch für verschiedene Bereitstellungsumgebungen geeigneter und leistungsfähiger zu machen.

Weitere Informationen zu den Nutzungsdetails findest du in der offiziellen TensorRT-Dokumentation.

Wenn du dich für weitere Ultralytics-YOLO26-Integrationen interessierst, bietet unsere Integrationsübersichtsseite eine umfangreiche Auswahl an informativen Ressourcen und Einblicken.

FAQ#

  • Führe die folgenden Schritte aus, um deine Ultralytics-YOLO26-Modelle für eine optimierte NVIDIA-GPU-Inferenz in das TensorRT-Format zu konvertieren:

    1. Erforderliches Paket installieren:

      pip install ultralytics
    2. Dein YOLO26-Modell exportieren:

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.pt")
      model.export(format="engine")  # creates 'yolo26n.engine'
      
      # Run inference
      model = YOLO("yolo26n.engine")
      results = model("https://ultralytics.com/images/bus.jpg")

    Weitere Informationen findest du in der YOLO26-Installationsanleitung und in der Exportdokumentation.

  • Die Optimierung von YOLO26-Modellen mit TensorRT bietet mehrere Vorteile:

    • Höhere Inferenzgeschwindigkeit: TensorRT optimiert die Modellschichten und verwendet eine Präzisionskalibrierung (INT8 und FP16), um die Inferenz zu beschleunigen, ohne die Genauigkeit wesentlich zu beeinträchtigen.
    • Speichereffizienz: TensorRT verwaltet den Tensor-Speicher dynamisch, reduziert den Verwaltungsaufwand und verbessert die Auslastung des GPU-Speichers.
    • Zusammenführung von Schichten: Mehrere Schichten werden zu einzelnen Operationen zusammengefasst, wodurch die Rechenkomplexität reduziert wird.
    • Automatische Kernel-Optimierung: Für jede Modellschicht werden automatisch optimierte GPU-Kernels ausgewählt, um eine maximale Leistung sicherzustellen.

    Weitere Informationen findest du in der offiziellen TensorRT-Dokumentation von NVIDIA und in unserer ausführlichen TensorRT-Übersicht.

  • Ja, du kannst YOLO26-Modelle mit TensorRT und INT8-Quantisierung exportieren. Dieser Prozess umfasst Post-Training-Quantization (PTQ) und Kalibrierung, es sei denn, der Checkpoint wurde mit quantize=8 (Quantization-Aware Training) trainiert, in welchem Fall die vom Checkpoint mitgeführten Bereiche ohne Kalibrierung exportiert werden:

    1. Mit INT8 exportieren:

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.pt")
      model.export(format="engine", batch=8, workspace=4, quantize=8, data="coco.yaml")
    2. Inferenz ausführen:

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.engine", task="detect")
      result = model.predict("https://ultralytics.com/images/bus.jpg")

    Weitere Informationen findest du im Abschnitt zum Export von TensorRT mit INT8-Quantisierung.

  • Die Bereitstellung von YOLO26-TensorRT-Modellen auf einem NVIDIA Triton Inference Server kann mithilfe der folgenden Ressourcen erfolgen:

    Diese Anleitungen helfen dir dabei, YOLO26-Modelle effizient in verschiedene Bereitstellungsumgebungen zu integrieren.

  • Die Leistungsverbesserungen mit TensorRT können je nach verwendeter Hardware variieren. Hier sind einige typische Vergleichswerte:

    • NVIDIA A100:

      • FP32-Inferenz: ~0.52 ms / Bild
      • FP16-Inferenz: ~0.34 ms / Bild
      • INT8-Inferenz: ~0.28 ms / Bild
      • Eine leichte Verringerung des mAP bei INT8-Präzision, aber eine deutliche Verbesserung der Geschwindigkeit.
    • Verbraucher-GPUs (z. B. RTX 3080):

      • FP32-Inferenz: ~1.06 ms / Bild
      • FP16-Inferenz: ~0.62 ms / Bild
      • INT8-Inferenz: ~0.52 ms / Bild

    Detaillierte Leistungsvergleiche für verschiedene Hardwarekonfigurationen findest du im Abschnitt zur Leistung.

    Umfassendere Einblicke in die TensorRT-Leistung findest du in der Ultralytics-Dokumentation und in unseren Berichten zur Leistungsanalyse.

Kommentare