TensorRT-Export für YOLO26-Modelle#
Für den Einsatz von Bildverarbeitungs-Modellen in Umgebungen mit hohen Leistungsanforderungen kann ein Format erforderlich sein, das Geschwindigkeit und Effizienz maximiert. Das gilt besonders, wenn du dein Modell auf NVIDIA-GPUs einsetzt.
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 Schritt für Schritt durch die Konvertierung und hilft dir, die fortschrittliche Technologie von NVIDIA bestmöglich in deinen Deep-Learning-Projekten einzusetzen.
TensorRT#
TensorRT wurde von NVIDIA entwickelt und ist ein fortschrittliches Software-Entwicklungskit (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 sorgt so für schnellere und effizientere Abläufe. TensorRT-Modelle durchlaufen eine TensorRT-Optimierung mit Techniken wie dem Zusammenführen von Schichten, der Präzisionskalibrierung (INT8 und FP16), der dynamischen Verwaltung des Tensorspeichers und der automatischen Kernel-Abstimmung. Durch die Konvertierung von Deep-Learning-Modellen in das TensorRT-Format können Entwickler das Potenzial von NVIDIA-GPUs voll ausschöpfen.
TensorRT ist mit verschiedenen Modellformaten kompatibel, darunter TensorFlow, PyTorch und ONNX. Das bietet Entwicklern eine flexible Lösung für die Integration und Optimierung von Modellen aus unterschiedlichen Frameworks. Diese Vielseitigkeit ermöglicht eine effiziente Modellbereitstellung in verschiedenen Hardware- und Softwareumgebungen.
TensorRT erstellt und optimiert eine Engine auf der GPU, auf der sie gebaut wird. Erstelle die Engine für die Architektur der Bereitstellungs-GPU und verwende eine passende TensorRT-/CUDA-Laufzeitumgebung. Betrachte eine Datei vom Typ .engine nicht als portables Modellformat. Für den Einsatz auf Edge-Geräten bietet die Ultralytics Platform acht Auswahlmöglichkeiten für Jetson-Zielgeräte. Der Status der physischen Erstellung und Validierung ist für jedes Ziel dokumentiert. Alternativ kannst du das Modell lokal auf dem Zielgerät exportieren.
Wichtige Funktionen von TensorRT-Modellen#
TensorRT-Modelle bieten eine Reihe wichtiger Funktionen, die ihre Effizienz und Wirksamkeit bei der schnellen Deep-Learning-Inferenz steigern:
-
Präzisionskalibrierung: TensorRT unterstützt die Präzisionskalibrierung, sodass sich Modelle auf bestimmte Genauigkeitsanforderungen abstimmen lassen. Dazu gehört die Unterstützung für Formate mit geringerer Präzision wie INT8 und FP16, die die Inferenz weiter beschleunigen können, während die Genauigkeit auf einem akzeptablen Niveau bleibt.
-
Zusammenführen von Schichten: Bei der TensorRT-Optimierung werden mehrere Schichten eines neuronalen Netzes zu einer einzigen Operation zusammengefasst. Das verringert den Rechenaufwand und beschleunigt die Inferenz, indem Speicherzugriffe und Berechnungen reduziert werden.
-
Dynamische Verwaltung des Tensorspeichers: TensorRT verwaltet den Speicherbedarf von Tensoren während der Inferenz effizient. Dadurch sinkt der Speicheraufwand und die Speicherzuweisung wird optimiert. Das führt zu einer effizienteren Nutzung des GPU-Speichers.
-
Automatische Kernel-Abstimmung: TensorRT stimmt Kernel automatisch ab und wählt für jede Schicht des Modells den am besten optimierten GPU-Kernel aus. Dieser adaptive Ansatz stellt sicher, dass das Modell die Rechenleistung der GPU voll ausschöpft.
Bereitstellungsoptionen in TensorRT#
Bevor wir uns den Code zum Exportieren von YOLO26-Modellen in das TensorRT-Format ansehen, klären wir zunächst, wofür TensorRT-Modelle üblicherweise verwendet werden.
TensorRT bietet mehrere Bereitstellungsoptionen, die sich jeweils unterschiedlich auf einfache Integration, Leistungsoptimierung und Flexibilität auswirken:
- Einsatz in TensorFlow: Bei dieser Methode wird TensorRT in TensorFlow integriert, sodass optimierte Modelle in einer vertrauten TensorFlow-Umgebung ausgeführt werden können. Das ist nützlich für Modelle mit einer Mischung aus unterstützten und nicht unterstützten Schichten, da TF-TRT diese effizient verarbeiten kann.
-
Eigenständige TensorRT-Laufzeit-API: Bietet eine fein abgestufte Kontrolle und eignet sich ideal für Anwendungen mit hohen Leistungsanforderungen. Sie ist komplexer, ermöglicht aber die benutzerdefinierte Implementierung nicht unterstützter Operatoren.
-
NVIDIA Triton Inference Server: Unterstützt Modelle aus verschiedenen Frameworks. Er eignet sich besonders für Cloud- oder Edge-Inferenz und bietet Funktionen wie die gleichzeitige Ausführung und Analyse von Modellen.
Unterstützte Aufgaben#
Der TensorRT-Export unterstützt alle sieben Ultralytics-Aufgaben. Semantische Segmentierung und Tiefenschätzung sind nur mit YOLO26 verfügbar, da YOLO26 die einzige Modellfamilie mit entsprechenden Ausgabeköpfen ist.
| Aufgabe | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Erkennung | ✅ | ✅ | ✅ |
| Segmentierung | ✅ | ✅ | ✅ |
| Semantik | ❌ | ❌ | ✅ |
| Tiefe | ❌ | ❌ | ✅ |
| Klassifizierung | ✅ | ✅ | ✅ |
| Pose | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
YOLO26-Modelle nach TensorRT exportieren#
Du kannst die Ausführungseffizienz steigern und die Leistung optimieren, indem du YOLO26-Modelle in das TensorRT-Format konvertierst.
Installation#
Führe zum Installieren des erforderlichen Pakets Folgendes aus:
# Install the required package for YOLO26
pip install ultralyticsAusführliche Anweisungen und bewährte Vorgehensweisen zur Installation findest du in unserem Installationsleitfaden für YOLO26. Wenn bei der Installation der erforderlichen Pakete für YOLO26 Probleme auftreten, findest du Lösungen und Tipps in unserem Leitfaden zu häufigen Problemen.
Verwendung#
Bevor du mit den Anwendungshinweisen beginnst, solltest du dir die verschiedenen YOLO26-Modelle von Ultralytics ansehen. So findest du das Modell, das am besten zu den Anforderungen deines Projekts passt.
Das TensorRT-Format unterstützt die Modi Export, Vorhersage und Validierung. Für Inferenz und Validierung ist eine NVIDIA-GPU erforderlich. Exportiere dein Modell und lade anschließend das exportierte Modell, um damit Inferenz auszuführen oder seine Genauigkeit zu validieren.
from ultralytics import YOLO
# Ein YOLO26-Modell laden
model = YOLO("yolo26n.pt")
# Exportiere das Modell im TensorRT-Format
model.export(format="engine") # erstellt 'yolo26n.engine'from ultralytics import YOLO
# Das exportierte TensorRT-Modell laden
model = YOLO("yolo26n.engine")
# Inferenz ausführen
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Das exportierte TensorRT-Modell laden
model = YOLO("yolo26n.engine")
# Die Genauigkeit anhand des COCO8-Datensatzes validieren
metrics = model.val(data="coco8.yaml")Exportargumente#
| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
format | str | 'engine' | Zielformat des exportierten Modells, das die Kompatibilität mit verschiedenen Bereitstellungsumgebungen festlegt. |
imgsz | int oder tuple | 640 | Gewünschte Bildgröße für die Modelleingabe. Kann eine Ganzzahl für quadratische Bilder oder ein Tupel (height, width) für bestimmte Abmessungen sein. |
quantize | int oder str | None | Quantisierungspräzision: 16 (FP16) oder 8 (INT8/PTQ; benötigt Kalibrierung data/fraction); 32/nicht festgelegt entspricht FP32. Ein mit quantize=8 trainierter Checkpoint wird immer mit INT8 und den darin enthaltenen Wertebereichen exportiert, ohne Kalibrierung. Ersetzt die veralteten Flags half/int8. |
dynamic | bool | False | Ermöglicht dynamische Eingabegrößen und sorgt so für mehr Flexibilität beim Umgang mit unterschiedlichen Bildabmessungen. |
simplify | bool | True | Vereinfacht den Modellgraphen mit onnxslim und kann dadurch Leistung und Kompatibilität verbessern. |
opset | int | None | Legt die ONNX-Operatorensatz-Version für den zwischengeschalteten ONNX-Graphen fest. Wenn nichts angegeben ist, wird die neueste unterstützte Version verwendet. |
workspace | float oder None | None | Legt die maximale Workspace-Größe in GiB für TensorRT-Optimierungen fest und schafft damit einen Ausgleich zwischen Speicherbedarf und Leistung. Verwende None, damit TensorRT den Speicher automatisch bis zum Gerätemaximum zuweist. |
nms | bool, optional | None | Wähle die Rohausgabe (None, Standard), eingebettetes NMS (True) oder den NMS-freien Kopf (False). |
batch | int | 1 | Gibt die Batchgröße für die Inferenz des Exportmodells oder die Höchstzahl der Bilder an, die das exportierte Modell gleichzeitig im predict-Modus verarbeiten kann. |
data | str | None | Pfad zur YAML-Datei des Datensatzes, die für die Quantisierung erforderlich ist. Bei der Klassifizierung wird stattdessen ein Datensatzverzeichnis oder der Name eines integrierten Datensatzes angegeben. Wenn der Wert bei quantize=8 weggelassen wird, wählt Ultralytics den standardmäßigen Kalibrierungsdatensatz für die jeweilige Modellaufgabe aus. Ein mit quantize=8 trainierter Checkpoint benötigt keinen Datensatz. |
fraction | float, int oder list | 1.0 | Kalibrierungsteilstichprobe als Verhältnis, Bildanzahl oder [train, val, test]-Verhältnisse/-Anzahlen. Bei Listen mit zwei Elementen bleibt test vollständig erhalten, während 0 es überspringt. |
device | str | None | Gibt das Gerät für den Export an: GPU (device=0), DLA für NVIDIA Jetson (device=dla:0 oder device=dla:1). |
Stelle sicher, dass du für den TensorRT-Export eine GPU mit CUDA-Unterstützung verwendest.
TensorRT 11.2.1 unterstützt JetPack nicht, einschließlich Thor. Verwende die TensorRT-10.x-Laufzeitumgebung, die von deiner JetPack-Version unterstützt wird. Für device=dla:0 oder device=dla:1 gibt NVIDIA TensorRT 10.7 als letzte Version mit DLA-Unterstützung an. 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#
Beim Export von Ultralytics-YOLO-Modellen mit TensorRT und INT8-Präzision kommt die Quantisierung nach dem Training (PTQ) zum Einsatz. TensorRT verwendet für PTQ eine Kalibrierung. Dabei wird die Verteilung der Aktivierungen in jedem Aktivierungstensor erfasst, während das YOLO-Modell mit repräsentativen Eingabedaten Inferenz ausführt. Anschließend wird diese Verteilung verwendet, um Skalierungswerte für jeden Tensor zu schätzen. Für jeden Aktivierungstensor, der quantisiert werden kann, wird mithilfe eines Kalibrierungsverfahrens ein Skalierungswert ermittelt. Ein mit quantize=8 durch quantisierungsbewusstes Training feinabgestimmter Checkpoint enthält bereits seine INT8-Wertebereiche. Beim Export werden diese verwendet und die Kalibrierung übersprungen.
TensorRT 11 hat die implizite Quantisierung und die Schnittstelle IInt8Calibrator entfernt. Ab TensorRT 11 führt Ultralytics die INT8-Quantisierung mit der expliziten Quantisierung von NVIDIA ModelOpt durch. Dabei werden Q/DQ-Knoten in den ONNX-Graph eingefügt, bevor eine streng typisierte Engine erstellt wird. FP16 wird mit der gemischten Präzisionskonvertierung AutoCast von ModelOpt angewendet. Die Argumente quantize=8, quantize=16 und data funktionieren weiterhin wie zuvor. ModelOpt wird beim ersten Einsatz automatisch installiert. Unter TensorRT 7–10 wird stattdessen der unten beschriebene ältere Kalibrator verwendet.
Bei der Verarbeitung implizit quantisierter Netzwerke setzt TensorRT INT8 opportunistisch ein, um die Ausführungszeit von Schichten zu optimieren. Wenn eine Schicht mit INT8 schneller läuft und ihren Dateneingaben und -ausgaben Quantisierungsskalen zugewiesen sind, wird ihr ein Kernel mit INT8-Präzision zugewiesen. Andernfalls wählt TensorRT für den Kernel FP32 oder FP16 – je nachdem, womit die Schicht schneller ausgeführt wird.
Es ist entscheidend, dass du für den Export mit INT8-Präzision dasselbe Gerät verwendest, auf dem die TensorRT-Modellgewichte später bereitgestellt werden sollen, da die Kalibrierungsergebnisse je nach Gerät variieren können.
INT8-Export konfigurieren#
Die Argumente, die du beim Export eines Ultralytics-YOLO-Modells angibst, beeinflussen die Leistung des exportierten Modells erheblich. Du musst sie außerdem an die verfügbaren Geräteressourcen anpassen. 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 bei DLA-Exporten auf NVIDIA Jetson "ENTROPY_CALIBRATION_2" zum Einsatz kommt. Weitere Einzelheiten zu den verfügbaren Optionen findest du im TensorRT-Entwicklerhandbuch. Tests von Ultralytics haben ergeben, dass "MINMAX_CALIBRATION" für GPU-Exporte am besten geeignet ist. Der Algorithmus wird automatisch anhand des Exportgeräts ausgewählt.
-
workspace: Steuert die Größe (in GiB) der Gerätespeicherzuweisung beim Konvertieren der Modellgewichte.-
Passe den Wert von
workspacean deinen Kalibrierungsbedarf und die verfügbaren Ressourcen an. Ein größerer Wert fürworkspacekann zwar die Kalibrierungsdauer erhöhen, ermöglicht TensorRT aber, ein breiteres Spektrum an Optimierungsstrategien zu prüfen. Dadurch können sich die Modellleistung und die Genauigkeit verbessern. Ein kleinerer Wert fürworkspacekann die Kalibrierungsdauer hingegen verkürzen, aber die Optimierungsstrategien einschränken und so die Qualität des quantisierten Modells beeinträchtigen. -
Der Standardwert ist
workspace=None. Damit kann TensorRT den Speicher automatisch zuweisen. Bei manueller Konfiguration musst du diesen Wert möglicherweise erhöhen, falls die Kalibrierung mit einem Absturz endet (ohne Warnung abbricht). -
Wenn der Wert von
workspaceden verfügbaren Gerätespeicher übersteigt, meldet TensorRT beim ExportUNSUPPORTED_STATE. In diesem Fall solltest du den Wert vonworkspaceverringern oder aufNonesetzen. -
Wenn
workspaceauf den Höchstwert eingestellt ist und die Kalibrierung fehlschlägt oder abstürzt, kannst duNonefür die automatische Speicherzuweisung verwenden oder die Werte vonimgszundbatchverringern, um den Speicherbedarf zu reduzieren. -
Beachte: Die Kalibrierung für INT8 ist gerätespezifisch. Wenn du dir für die Kalibrierung eine „High-End“-GPU ausleihst, kann das zu schlechter Leistung führen, wenn die Inferenz auf einem anderen Gerät ausgeführt wird.
-
-
batch: Die maximale Batchgröße für die Inferenz. Mitdynamic=Truekönnen während der Inferenz kleinere Batches verwendet werden, aber die Inferenz akzeptiert keine Batches, die größer sind als der angegebene Wert.
Kleine Batches können bei der INT8-Kalibrierung zu ungenauen Skalierungswerten führen. Der Grund: Der Vorgang passt sich an die vorliegenden Daten an. Kleine Batches erfassen möglicherweise nicht den gesamten Wertebereich, was Probleme bei der abschließenden Kalibrierung verursachen kann. Eine größere Batchgröße sorgt für repräsentativere Kalibrierungsergebnisse.
Auf Grundlage ihrer Versuche empfehlen NVIDIA eine Kalibrierung der INT8-Quantisierung mit mindestens 500 Bildern, die für die Daten deines Modells repräsentativ sind. Das ist eine Richtlinie und keine strikte Vorgabe, und du musst selbst ermitteln, was für gute Ergebnisse mit deinem Datensatz erforderlich ist. Da Kalibrierungsdaten für die INT8-Kalibrierung mit TensorRT erforderlich sind, musst du beim Export eines Checkpoints, der nicht mit quantize=8 (Quantisierung nach dem Training) auf quantize=8 für TensorRT trainiert wurde, das Argument data verwenden. Verwende dazu data="my_dataset.yaml", damit die Bilder aus der Validierung für die Kalibrierung genutzt werden. Bei einem mit quantize=8 trainierten Checkpoint wird die Kalibrierung übersprungen. Lass daher data weg. Wenn beim TensorRT-Export mit INT8-Quantisierung kein Wert für data angegeben wird, verwendet der Export standardmäßig einen der kleinen Beispieldatensätze für die jeweilige Modellaufgabe, anstatt einen Fehler auszugeben.
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)!
)
# Das exportierte TensorRT-INT8-Modell laden
model = YOLO("yolo26n.engine", task="detect")
# Inferenz ausführen
result = model.predict("https://ultralytics.com/images/bus.jpg")- Exportiert das Modell mit dynamischen Achsen, sodass Eingabegrößen von 32 Pixeln bis zum Doppelten des Exportwerts
imgszakzeptiert werden.dynamicbleibtFalse, sofern der Wert nicht ausdrücklich festgelegt wird. Weitere Informationen findest du unter Exportargumente. - Legt die maximale Batchgröße des exportierten Modells und für die INT8-Kalibrierung auf 8 fest.
- Weist dem Konvertierungsprozess 4 GiB Speicher zu, statt das gesamte Gerät dafür zu beanspruchen.
- Verwendet den COCO-Datensatz für die Kalibrierung, genauer gesagt die für die Validierung verwendeten Bilder (insgesamt 5.000).
Vorteile von YOLO mit TensorRT INT8#
-
Geringere Modellgröße: Die Quantisierung von FP32 auf INT8 kann die Modellgröße um das 4-Fache reduzieren (auf dem Datenträger oder im Speicher). Das führt zu kürzeren Downloadzeiten, geringerem Speicherbedarf und einem kleineren Speicherbedarf bei der Bereitstellung eines Modells.
-
Geringerer Stromverbrauch: Operationen mit reduzierter Genauigkeit für exportierte YOLO-Modelle mit INT8 können weniger Strom verbrauchen als FP32-Modelle, insbesondere auf akkubetriebenen Geräten.
-
Höhere Inferenzgeschwindigkeit: TensorRT optimiert das Modell für die Zielhardware und kann so zu einer höheren Inferenzgeschwindigkeit auf GPUs, eingebetteten Geräten und Beschleunigern führen.
Hinweis zur Inferenzgeschwindigkeit
Bei den ersten Inferenzaufrufen mit einem nach TensorRT INT8 exportierten Modell können die Vorverarbeitung, Inferenz und/oder Nachverarbeitung länger als üblich dauern. Das kann auch beim Ändern von imgsz während der Inferenz auftreten, insbesondere wenn imgsz nicht mit der beim Export angegebenen Einstellung übereinstimmt (beim Export ist imgsz als TensorRT-Profil „optimal“ festgelegt).
Nachteile von YOLO mit TensorRT INT8#
-
Verschlechterung der Bewertungsmetriken: Eine geringere Genauigkeit bedeutet, dass
mAP,Precision,Recalloder eine andere Metrik zur Bewertung der Modellleistung wahrscheinlich etwas schlechter ausfallen. Sigmoid-Schichten behalten eine höhere Genauigkeit bei, um die Score-Kalibrierung zu erhalten. INT8 kann jedoch weiterhin Konfidenzwerte verschieben. Wähle daher den Betriebsschwellenwert anhand der F1-Kurve des INT8-Modells selbst. Im Abschnitt Leistungsergebnisse kannst du die Unterschiede beimAP50undmAP50-95vergleichen, wenn du INT8 mit einer kleinen Stichprobe auf verschiedenen Geräten exportierst. -
Längere Entwicklungszeiten: Die „optimalen“ Einstellungen für die INT8-Kalibrierung eines Datensatzes und Geräts zu finden, kann umfangreiche Tests erfordern.
-
Abhängigkeit von der Hardware: Kalibrierung und Leistungssteigerungen können stark von der Hardware abhängen, und die Modellgewichte lassen sich weniger gut übertragen.
Leistung des Ultralytics YOLO-Exports mit TensorRT#
NVIDIA A100#
Getestet mit Ubuntu 22.04.3 LTS, python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1
Unter Dokumentation zur Erkennung findest du Anwendungsbeispiele für diese mit COCO trainierten Modelle, die 80 vortrainierte Klassen umfassen.
Für jeden Test werden die Inferenzzeiten für mean, min (am schnellsten) und max (am langsamsten) mit den vortrainierten Gewichten yolov8n.engine angegeben.
| Precision | Evaluierungstest | Mittelwert (ms) | min. | max. (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | Größe (Pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Vorhersagen | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
| FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Vorhersagen | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
| FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Vorhersagen | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
| INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
Consumer-GPUs#
Getestet mit Windows 10.0.19045, python 3.10.9, ultralytics==8.2.4, tensorrt==10.0.0b6
Für jeden Test werden die Inferenzzeiten für mean, min (am schnellsten) und max (am langsamsten) mit den vortrainierten Gewichten yolov8n.engine angegeben.
| Precision | Evaluierungstest | Mittelwert (ms) | min. | max. (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | Größe (Pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Vorhersagen | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
| FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Vorhersagen | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
| FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Vorhersagen | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
| INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
Eingebettete Geräte#
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
Für jeden Test werden die Inferenzzeiten für mean, min (am schnellsten) und max (am langsamsten) mit den vortrainierten Gewichten yolov8n.engine angegeben.
| Precision | Evaluierungstest | Mittelwert (ms) | min. | max. (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | Größe (Pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Vorhersagen | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
| FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Vorhersagen | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
| FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Vorhersagen | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
| INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
Weitere Informationen zu Einrichtung und Konfiguration findest du in unserer Schnellstartanleitung für NVIDIA Jetson mit Ultralytics YOLO.
Weitere Informationen zu Einrichtung und Konfiguration findest du in unserer Schnellstartanleitung für NVIDIA DGX Spark mit Ultralytics YOLO.
Evaluierungsmethoden#
Klappe die folgenden Abschnitte auf, um zu erfahren, wie diese Modelle exportiert und getestet wurden.
Exportkonfigurationen
Details zu den Argumenten für die Exportkonfiguration findest du unter Exportmodus.
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 mit Kalibrierungs-`data` (d. h. COCO, ImageNet oder DOTAv1 für die jeweilige Modellaufgabe)
out = model.export(
format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=8, data="coco8.yaml"
)Vorhersageschleife
Weitere Informationen findest du unter Vorhersagemodus.
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 desselben Bildes
verbose=False,
device="cuda",
)Validierungskonfiguration
Weitere Informationen zu den Argumenten für die Validierungskonfiguration findest du im Modus val.
from ultralytics import YOLO
model = YOLO("yolo26n.engine")
results = model.val(
data="data.yaml", # COCO, ImageNet oder DOTAv1 für die jeweilige Modellaufgabe
batch=1,
imgsz=640,
verbose=False,
device="cuda",
)Bereitstellung exportierter YOLO26-TensorRT-Modelle#
Nachdem du deine Ultralytics YOLO26-Modelle erfolgreich ins TensorRT-Format exportiert hast, kannst du sie jetzt bereitstellen. Ausführliche Anweisungen zur Bereitstellung deiner TensorRT-Modelle in verschiedenen Umgebungen findest du in den folgenden Ressourcen:
-
Ultralytics mit einem Triton-Server bereitstellen: Unsere Anleitung zur Verwendung von NVIDIA Triton Inference Server (früher TensorRT Inference Server) speziell mit Ultralytics YOLO-Modellen.
-
Tiefe neuronale Netze mit NVIDIA TensorRT bereitstellen: Dieser Artikel erklärt, wie du NVIDIA TensorRT effizient zur Bereitstellung tiefer neuronaler Netze auf GPU-basierten Plattformen einsetzen kannst.
-
KI für NVIDIA-PCs von Anfang bis Ende: Bereitstellung mit NVIDIA TensorRT: Dieser Blogbeitrag erläutert, wie NVIDIA TensorRT zum Optimieren und Bereitstellen von KI-Modellen auf NVIDIA-PCs eingesetzt wird.
-
GitHub-Repository für NVIDIA TensorRT: Das offizielle GitHub-Repository mit dem Quellcode und der Dokumentation für NVIDIA TensorRT.
Zusammenfassung#
In dieser Anleitung haben wir uns auf die Konvertierung von Ultralytics YOLO26-Modellen ins NVIDIA-TensorRT-Format konzentriert. Dieser Konvertierungsschritt ist entscheidend, um die Effizienz und Geschwindigkeit von YOLO26-Modellen zu verbessern und sie so vielseitiger und für unterschiedliche Bereitstellungsumgebungen geeigneter zu machen.
Weitere Informationen zur Verwendung findest du in der offiziellen TensorRT-Dokumentation.
Wenn du mehr über weitere Integrationen von Ultralytics YOLO26 erfahren möchtest, findest du auf unserer Seite mit Integrationsanleitungen zahlreiche informative Ressourcen und Einblicke.
Häufig gestellte Fragen#
Führe die folgenden Schritte aus, um deine Ultralytics YOLO26-Modelle für eine optimierte NVIDIA-GPU-Inferenz ins TensorRT-Format zu konvertieren:
-
Erforderliches Paket installieren:
pip install ultralytics -
YOLO26-Modell exportieren:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="engine") # erstellt 'yolo26n.engine' # Inferenz ausführen model = YOLO("yolo26n.engine") results = model("https://ultralytics.com/images/bus.jpg")
Weitere Details findest du in der YOLO26-Installationsanleitung und in der Exportdokumentation.
-
Die Optimierung von YOLO26-Modellen mit TensorRT bietet mehrere Vorteile:
- Schnellere Inferenz: TensorRT optimiert die Modellschichten und nutzt eine Genauigkeitskalibrierung (INT8 und FP16), um die Inferenz zu beschleunigen, ohne die Genauigkeit wesentlich zu beeinträchtigen.
- Effiziente Speichernutzung: TensorRT verwaltet den Tensor-Speicher dynamisch, verringert den Verwaltungsaufwand und verbessert die Speicherauslastung der GPU.
- Schichtfusion: Fasst mehrere Schichten zu einzelnen Operationen zusammen und verringert so die Rechenkomplexität.
- Automatische Kernel-Abstimmung: Wählt für jede Modellschicht automatisch optimierte GPU-Kernels aus und sorgt so für maximale Leistung.
Weitere Informationen findest du in der offiziellen TensorRT-Dokumentation von NVIDIA und in unserer ausführlichen Übersicht zu TensorRT.
Ja, du kannst YOLO26-Modelle mit TensorRT und INT8-Quantisierung exportieren. Dazu gehören die Quantisierung nach dem Training (PTQ) und die Kalibrierung, es sei denn, der Checkpoint wurde mit
quantize=8(quantisierungsbewusstes Training) trainiert. In diesem Fall werden die im Checkpoint enthaltenen Wertebereiche ohne Kalibrierung exportiert:-
Mit INT8 exportieren:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="engine", batch=8, workspace=4, quantize=8, data="coco.yaml") -
Inferenz ausführen:
from ultralytics import YOLO model = YOLO("yolo26n.engine", task="detect") result = model.predict("https://ultralytics.com/images/bus.jpg")
Weitere Details findest du im Abschnitt TensorRT-Export mit INT8-Quantisierung.
-
Für die Bereitstellung von YOLO26-TensorRT-Modellen auf einem NVIDIA Triton Inference Server kannst du die folgenden Ressourcen nutzen:
- Ultralytics YOLO26 mit Triton Server bereitstellen: Eine Schritt-für-Schritt-Anleitung zur Einrichtung und Verwendung von Triton Inference Server.
- Tiefe neuronale Netze mit NVIDIA TensorRT bereitstellen: Die Anleitung von NVIDIA zur Bereitstellung von Deep-Learning-Modellen mit TensorRT, einschließlich detaillierter Bereitstellungsoptionen und Konfigurationen.
Diese Anleitungen helfen dir, YOLO26-Modelle effizient in verschiedenen Bereitstellungsumgebungen einzubinden.
Die durch TensorRT erzielten Leistungssteigerungen können je nach Modell und verwendeter Hardware variieren. Die folgenden typischen Messwerte mit YOLOv8n veranschaulichen die relativen Verbesserungen durch die jeweilige Genauigkeit:
-
NVIDIA A100:
- FP32-Inferenz: ~0.52 ms / Bild
- FP16-Inferenz: ~0.34 ms / Bild
- INT8-Inferenz: ~0.28 ms / Bild
- Mit INT8 sinkt der mAP leicht, während die Geschwindigkeit deutlich steigt.
-
Consumer-GPUs (z. B. RTX 3080):
- FP32-Inferenz: ~1.06 ms / Bild
- FP16-Inferenz: ~0.62 ms / Bild
- INT8-Inferenz: ~0.52 ms / Bild
Ausführliche Leistungsvergleiche für verschiedene Hardwarekonfigurationen findest du im Leistungsabschnitt.
Ausführlichere Einblicke in die TensorRT-Leistung findest du in der Ultralytics-Dokumentation und in unseren Leistungsanalyseberichten.
-