Modellvorhersage mit Ultralytics YOLO#
Einführung#
In der Welt des machine learning und der computer vision wird der Prozess der Auswertung visueller Daten oft als Inferenz oder Vorhersage bezeichnet. Ultralytics YOLO26 bietet eine leistungsstarke Funktion namens predict mode, die auf eine performante Echtzeit-Inferenz für eine Vielzahl von Datenquellen zugeschnitten ist.
Watch: How to Extract Results from Ultralytics YOLO26 Tasks for Custom Projects 🚀
Anwendungen in der Praxis#
| Fertigung | Sport | Sicherheit |
|---|---|---|
| Erkennung von Fahrzeugersatzteilen | Erkennung von Fußballspielern | Erkennung von Stürzen |
Warum Ultralytics YOLO für die Inferenz verwenden?#
Hier ist, warum du den Predict-Modus von YOLO26 für deine verschiedenen Inferenzanforderungen in Betracht ziehen solltest:
- Vielseitigkeit: Fähigkeit zur Durchführung von Inferenz auf Bildern, Videos und sogar Live-Streams.
- Performance: Entwickelt für High-Speed-Echtzeitverarbeitung ohne Abstriche bei der accuracy.
- Benutzerfreundlichkeit: Intuitive Python- und CLI-Schnittstellen für schnelle Bereitstellung und Tests.
- Hochgradig anpassbar: Verschiedene Einstellungen und Parameter, um das Inferenzverhalten des Modells an deine spezifischen Anforderungen anzupassen.
- Production Ready: Deploye Modelle als Ultralytics Platform inference endpoints mit automatischer Skalierung und Monitoring oder führe die Inferenz lokal aus.
Hauptmerkmale des Predict-Modus#
Der Predict-Modus von YOLO26 ist robust und vielseitig gestaltet und bietet:
- Kompatibilität mit mehreren Datenquellen: Egal ob deine Daten in Form von einzelnen Bildern, einer Bildersammlung, Videodateien oder Echtzeit-Videostreams vorliegen, der Predict-Modus unterstützt sie alle.
- Streaming Mode: Verwende die Streaming-Funktion, um einen speichereffizienten Generator von
Results-Objekten zu erstellen. Aktiviere dies, indem dustream=Truein der Aufrufmethode des Prädiktors festlegst. Im Gegensatz zum Standardverhalten (stream=False), das eine Liste mit allen Ergebnissen zurückgibt, liefertstream=Truedie Ergebnisse nacheinander einzeln zurück, was besonders bei langen Videos und Live-Streams nützlich ist. - Batch-Verarbeitung: Verarbeite mehrere Bilder oder Videobilder in einem einzigen Batch, was die gesamte Inferenzzeit weiter reduziert.
- Integrationsfreundlich: Dank seiner flexiblen API lässt sich das Modell leicht in bestehende Datenpipelines und andere Softwarekomponenten integrieren.
Ultralytics YOLO-Modelle geben entweder eine Python-Liste von Results-Objekten oder einen speichereffizienten Generator von Results-Objekten zurück, wenn stream=True während der Inferenz an das Modell übergeben wird:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # pretrained YOLO26n model
# Run batched inference on a list of images
results = model(["image1.jpg", "image2.jpg"]) # return a list of Results objects
# Process results list
for result in results:
boxes = result.boxes # Boxes object for bounding box outputs
masks = result.masks # Masks object for segmentation masks outputs
keypoints = result.keypoints # Keypoints object for pose outputs
probs = result.probs # Probs object for classification outputs
obb = result.obb # Oriented boxes object for OBB outputs
result.show() # display to screen
result.save(filename="result.jpg") # save to diskInferenz-Quellen#
YOLO26 kann verschiedene Arten von Eingabequellen für die Inferenz verarbeiten, wie in der folgenden Tabelle gezeigt. Zu den Quellen gehören statische Bilder, Videostreams und verschiedene Datenformate. Die Tabelle gibt zudem an, ob die jeweilige Quelle im Streaming-Modus mit dem Argument stream=True ✅ verwendet werden kann. Der Streaming-Modus ist vorteilhaft für die Verarbeitung von Videos oder Live-Streams, da er einen Ergebnisgenerator erstellt, anstatt alle Frames in den Speicher zu laden.
Verwende stream=True für die Verarbeitung langer Videos oder großer Datensätze, um den Speicher effizient zu verwalten. Wenn stream=False, werden die Ergebnisse für alle Frames oder Datenpunkte im Speicher abgelegt, was sich schnell summieren und bei großen Eingaben zu Out-of-Memory-Fehlern führen kann. Im Gegensatz dazu verwendet stream=True einen Generator, der nur die Ergebnisse des aktuellen Frames oder Datenpunkts im Speicher behält, wodurch der Speicherverbrauch erheblich reduziert und Out-of-Memory-Probleme verhindert werden.
| Quelle | Beispiel | Typ | Hinweise |
|---|---|---|---|
| Bild | 'image.jpg' | str oder Path | Einzelne Bilddatei. |
| URL | 'https://ultralytics.com/images/bus.jpg' | str | URL zu einem Bild. |
| Bildschirmfoto | 'screen' | str | Erstelle ein Bildschirmfoto. |
| PIL | Image.open('image.jpg') | PIL.Image | HWC-Format mit RGB-Kanälen. |
| OpenCV | cv2.imread('image.jpg') | np.ndarray | HWC-Format mit BGR-Kanälen uint8 (0-255). |
| NumPy | np.zeros((640,1280,3)) | np.ndarray | HWC-Format mit BGR-Kanälen uint8 (0-255). |
| torch | torch.zeros(16,3,320,640) | torch.Tensor | BCHW-Format mit RGB-Kanälen float32 (0.0-1.0). |
| CSV | 'sources.csv' | str oder Path | CSV-Datei mit Pfaden zu Bildern, Videos oder Verzeichnissen. |
| Video ✅ | 'video.mp4' | str oder Path | Videodatei in Formaten wie MP4, AVI usw. |
| Verzeichnis ✅ | 'path/' | str oder Path | Pfad zu einem Verzeichnis, das Bilder oder Videos enthält. |
| Glob ✅ | 'path/*.jpg' | str | Glob-Muster zum Abgleich mehrerer Dateien. Verwende das Zeichen * als Platzhalter. |
| YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' | str | URL zu einem YouTube-Video. |
| Stream ✅ | 'rtsp://example.com/media.mp4' | str | URL für Streaming-Protokolle wie RTSP, RTMP, TCP oder eine IP-Adresse. |
| Multi-Stream ✅ | 'list.streams' | str oder Path | *.streams-Textdatei mit einer Stream-URL pro Zeile, d. h. 8 Streams laufen mit Batch-Größe 8. |
| Webcam ✅ | 0 | int | Index des angeschlossenen Kamerageräts für die Inferenz. |
Nachfolgend findest du Codebeispiele für die Verwendung der einzelnen Quellentypen:
Führe die Inferenz auf einer Bilddatei aus.
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Define path to the image file
source = "path/to/image.jpg"
# Run inference on the source
results = model(source) # list of Results objectsInferenz-Argumente#
model.predict() akzeptiert mehrere Argumente, die zur Inferenzzeit übergeben werden können, um Standardwerte zu überschreiben:
Feste Form vs. minimales Rechteck (rect)#
Standardmäßig verwendet predict rect=True, was ein Minimalrechteck-Padding (minimum-rectangle) ermöglicht, wann immer dies möglich ist. Das Bild wird so skaliert, dass es in imgsz passt, und nur bis zum nächsten Vielfachen des Strides aufgefüllt, sodass der finale Tensor kleiner sein kann als imgsz. Das Minimalrechteck-Padding wird nur verwendet, wenn alle Bilder im Batch dieselbe Form haben und das Backend dies unterstützt (PyTorch .pt oder dynamisches ONNX / Triton). Andernfalls werden Bilder auf das vollständige imgsz-Ziel aufgefüllt.
Verwende rect=False, um immer auf das vollständige imgsz-Ziel aufzufüllen. Dies wird empfohlen, wenn du eine feste Eingabegröße benötigst, um exportierten Modellen (ONNX, TensorRT usw.) zu entsprechen.
Integer vs. Tupel imgsz
- Ein ganzzahliges
imgsz=640(Integer) wird nach der Stride-Rundung zu einem quadratischen Ziel(640, 640). - Ein Tupel
imgsz=(384, 672)legt ein rechteckiges Ziel fest. Beirect=Trueundauto=Truekann der tatsächliche Tensor kleiner sein als dieses Ziel.
Training vs. Predict/Export
Das Training akzeptiert nur ein einzelnes ganzzahliges imgsz (eine [h, w]-Liste wird auf den größten Wert gezwungen). Predict und Export akzeptieren entweder einen Integer oder ein (height, width)-Tupel.
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Run inference on 'bus.jpg' with arguments
model.predict("https://ultralytics.com/images/bus.jpg", save=True, imgsz=320, conf=0.25)Inferenz-Argumente:
| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
source | str oder int oder None | None | Gibt die Datenquelle für die Inferenz an. Kann ein Bildpfad, eine Videodatei, ein Verzeichnis, eine URL oder eine Geräte-ID für Live-Feeds sein. Falls weggelassen, wird eine Warnung protokolliert und das Modell greift auf die integrierten Demo-Assets zurück (ultralytics/assets oder eine Demo-URL für OBB). Unterstützt eine Vielzahl von Formaten und Quellen, was eine flexible Anwendung über verschiedene Arten von Eingaben hinweg ermöglicht. |
conf | float | 0.25 | Legt den minimalen Konfidenz-Schwellenwert für Erkennungen fest. Objekte, die mit einer Konfidenz unterhalb dieses Schwellenwerts erkannt werden, werden ignoriert. Die Anpassung dieses Wertes kann helfen, falsch-positive Ergebnisse zu reduzieren. |
iou | float | 0.7 | Intersection Over Union (IoU)-Schwellenwert für Non-Maximum Suppression (NMS). Niedrigere Werte führen zu weniger Erkennungen durch das Eliminieren überlappender Boxen, was nützlich ist, um Duplikate zu reduzieren. |
imgsz | int oder tuple | 640 | Letterbox-Ziel. Eine Ganzzahl ergibt ein quadratisches N×N; ein Tupel ergibt (height, width). Bei rect=True kann der tatsächliche Tensor aufgrund von Minimal-Rechteck-Padding kleiner als dieses Ziel sein. Verwende rect=False für eine feste Größe. Siehe Feste Form vs. minimales Rechteck. |
rect | bool | True | Falls True, verwende nach Möglichkeit Minimal-Rechteck-Padding (Batch gleicher Form und unterstütztes Backend). Falls False, padde immer auf das volle imgsz. Siehe Feste Form vs. minimales Rechteck. |
quantize | int oder str | None | Inferenzpräzision: 16/"fp16" aktiviert FP16-Inferenz auf unterstützten GPUs; 32/"fp32"/nicht gesetzt ist FP32. INT8/PTQ-Quantisierung wird während des Exports konfiguriert und dann durch Laden des exportierten Modells verwendet. Ersetzt das veraltete half-Flag. |
device | str | None | Gibt das Gerät für die Inferenz an (z. B. cpu, cuda:0, 0, npu oder npu:0). Ermöglicht Benutzern die Auswahl zwischen CPU, einer spezifischen GPU, Huawei Ascend NPU oder anderen Rechengeräten für die Modellausführung. |
dnn | bool | False | Verwendet bei True das OpenCV-DNN-Modul anstelle der ONNX Runtime für die ONNX-Modellinferenz. |
data | str | None | Pfad zu einem Dataset-YAML (z. B. coco8.yaml), das nur für seine names gelesen wird, und nur dann, wenn das geladene Modell keine eigenen Klassennamen besitzt: ein Export von Drittanbietern oder ein Ultralytics-Export, der von den Metadaten getrennt ist, mit denen er ausgeliefert wurde. Andernfalls gibt ein solches Modell class0, class1 und so weiter aus. |
batch | int | 1 | Gibt die Batch-Größe für die Inferenz an (funktioniert nur, wenn die Quelle ein Verzeichnis, eine Videodatei oder eine .txt-Datei ist). Eine größere Batch-Größe kann einen höheren Durchsatz bieten und die Gesamtdauer für die Inferenz verkürzen. |
max_det | int | 300 | Maximale Anzahl der erlaubten Erkennungen pro Bild. Begrenzt die Gesamtzahl der Objekte, die das Modell in einer einzigen Inferenz erkennen kann, um übermäßige Ausgaben in dichten Szenen zu verhindern. |
vid_stride | int | 1 | Frame-Schrittweite für Videoeingaben. Ermöglicht das Überspringen von Frames in Videos, um die Verarbeitung auf Kosten der zeitlichen Auflösung zu beschleunigen. Ein Wert von 1 verarbeitet jeden Frame, höhere Werte überspringen Frames. |
stream_buffer | bool | False | Bestimmt, ob eingehende Frames für Videostreams in eine Warteschlange eingereiht werden sollen. Falls False, werden alte Frames verworfen, um Platz für neue Frames zu machen (optimiert für Echtzeitanwendungen). Falls True, werden neue Frames in einem Puffer eingereiht, wodurch sichergestellt wird, dass keine Frames übersprungen werden, was jedoch Latenz verursacht, wenn die Inferenz-FPS niedriger ist als die Stream-FPS. |
visualize | bool | False | Speichert eine Klassenaktivierungs-Heatmap neben jeder Vorhersage, die zeigt, welche Pixel die vorhergesagten Klassenergebnisse erhöht haben. Berücksichtigt conf und classes, sodass classes=[0] nur diese Klasse abbildet. Nur für Ultralytics PyTorch Modelle verfügbar. |
augment | bool | False | Aktiviert die Test-Time-Augmentation (TTA) für Vorhersagen, was die Erkennungsrobustheit potenziell auf Kosten der Inferenzgeschwindigkeit verbessert. Nur für Ultralytics PyTorch Modelle verfügbar. |
agnostic_nms | bool | False | Aktiviert die klassenunabhängige Non-Maximum Suppression (NMS), wodurch überlappende Boxen mit niedrigerem Score über verschiedene Klassen hinweg unterdrückt werden und nicht nur innerhalb derselben Klasse. Nützlich in Szenarien mit multiklassen-Erkennung, in denen Klassenüberlappungen häufig vorkommen. Bei End-to-End-Modellen (YOLO26, YOLOv10) verhindert dies lediglich, dass dieselbe Erkennung mit mehreren Klassenlabels angezeigt wird (IoU=1.0-Duplikate), und führt keine IoU-Schwellenwert-basierte Unterdrückung zwischen unterschiedlichen Boxen durch. |
classes | list[int] | None | Filtert Vorhersagen auf eine Menge von Klassen-IDs. Nur Erkennungen, die zu den angegebenen Klassen gehören, werden zurückgegeben. Nützlich, um sich auf relevante Objekte bei Multi-Klassen-Erkennungsaufgaben zu konzentrieren. |
retina_masks | bool | False | Gibt hochauflösende Segmentierungsmasken zurück. Die zurückgegebenen Masken (masks.data) entsprechen der Originalbildgröße, falls aktiviert. Wenn deaktiviert, haben sie die während der Inferenz verwendete Bildgröße. |
embed | list[int] | None | Gibt die Schichten an, aus denen Vektoren oder embeddings extrahiert werden sollen. Verwende model.embed(source) für Embeddings der vorletzten Schicht oder model.predict(source, embed=[layer]), um bestimmte Schichten auszuwählen. Nützlich für nachgeschaltete Aufgaben wie Clustering oder Ähnlichkeitssuche. Nur für Ultralytics PyTorch Modelle verfügbar. |
project | str | None | Name des Projektverzeichnisses, in dem Vorhersageausgaben gespeichert werden, wenn save aktiviert ist. |
name | str | None | Name des Vorhersagelaufs. Wird zum Erstellen eines Unterverzeichnisses im Projektordner verwendet, in dem Vorhersageausgaben gespeichert werden, wenn save aktiviert ist. |
stream | bool | False | Ermöglicht speichereffiziente Verarbeitung für lange Videos oder zahlreiche Bilder, indem ein Generator von Results-Objekten zurückgegeben wird, anstatt alle Frames gleichzeitig in den Speicher zu laden. |
verbose | bool | True | Steuert, ob detaillierte Inferenz-Protokolle im Terminal angezeigt werden, was Echtzeit-Feedback zum Vorhersageprozess bietet. |
compile | bool oder str | False | Aktiviert die PyTorch-2.x-torch.compile-Graphenkompilierung mit backend='inductor'. Akzeptiert True → "default", False → deaktiviert, oder einen String-Modus wie "default", "reduce-overhead", "max-autotune-no-cudagraphs". Fällt bei Nichtunterstützung unter Warnung auf Eager-Modus zurück. |
channels_last | bool | False | Verwendet das Speicherformat channels_last (NHWC) für Faltungen bei der Inferenz, wodurch CUDA Tensor Core GPUs ohne Ergebnisänderung beschleunigt werden. Gilt nur für native PyTorch-Modelle; wird für CPU, MPS und exportierte Formate wie TensorRT und ONNX ignoriert. |
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 die Vorhersage mit der traditionellen NMS-Pipeline ausführen und zusätzlich das Argument iou nutzen. Weitere Einzelheiten findest du im Leitfaden zur End-to-End-Erkennung. |
Visualisierungs-Argumente:
| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
show | bool | False | Falls True, werden die annotierten Bilder oder Videos in einem Fenster angezeigt. Nützlich für unmittelbares visuelles Feedback während der Entwicklung oder des Testens. |
save | bool | False or True | Aktiviert das Speichern der annotierten Bilder oder Videos in Dateien. Nützlich für Dokumentation, weitere Analysen oder zum Teilen von Ergebnissen. Standardmäßig True bei Verwendung der CLI & False bei Verwendung in Python. |
save_frames | bool | False | Beim Verarbeiten von Videos werden einzelne Frames als Bilder gespeichert. Nützlich zum Extrahieren spezifischer Frames oder für detaillierte Frame-für-Frame-Analysen. |
save_txt | bool | False | Speichert Erkennungsergebnisse im Format [class] [x_center] [y_center] [width] [height] [confidence] in einer Textdatei. Nützlich für die Integration mit anderen Analysetools. |
save_conf | bool | False | Schließt Konfidenzwerte in den gespeicherten Textdateien ein. Verbessert die Detailgenauigkeit für die Nachbearbeitung und Analyse. |
save_crop | bool | False | Speichert zugeschnittene Bilder der Erkennungen. Nützlich für Datensatz-Augmentierung, Analyse oder das Erstellen fokussierter Datensätze für bestimmte Objekte. |
show_labels | bool | True | Zeigt Labels für jede Erkennung in der visuellen Ausgabe an. Ermöglicht ein sofortiges Verständnis der erkannten Objekte. |
show_conf | bool | True | Zeigt den Konfidenzwert für jede Erkennung neben dem Label an. Bietet Einblick in die Gewissheit des Modells für jede Erkennung. |
show_boxes | bool | True | Zeichnet Begrenzungsrahmen um erkannte Objekte. Wesentlich für die visuelle Identifizierung und Lokalisierung von Objekten in Bildern oder Videoframes. |
line_width | int or None | None | Gibt die Linienstärke von Bounding Boxes an. Falls None, wird die Linienstärke automatisch basierend auf der Bildgröße angepasst. Bietet visuelle Anpassungsmöglichkeiten für mehr Klarheit. |
Bild- und Videoformate#
YOLO26 unterstützt verschiedene Bild- und Videoformate, wie in ultralytics/data/utils.py angegeben. Siehe die Tabellen unten für gültige Suffixe und Beispiel-Predict-Befehle.
Bilder#
Die unten stehende Tabelle enthält gültige Ultralytics Bildformate.
HEIC/HEIF-Formate erfordern pi-heif, das bei der ersten Verwendung automatisch installiert wird. AVIF wird von Pillow nativ unterstützt.
| Bild-Suffixe | Beispiel-Predict-Befehl | Referenz |
|---|---|---|
.avif | yolo predict source=image.avif | AV1 Image File Format |
.bmp | yolo predict source=image.bmp | Microsoft BMP File Format |
.dng | yolo predict source=image.dng | Adobe DNG |
.heic | yolo predict source=image.heic | High Efficiency Image Format |
.heif | yolo predict source=image.heif | High Efficiency Image Format |
.jp2 | yolo predict source=image.jp2 | JPEG 2000 |
.jpeg | yolo predict source=image.jpeg | JPEG |
.jpg | yolo predict source=image.jpg | JPEG |
.mpo | yolo predict source=image.mpo | Multi Picture Object |
.png | yolo predict source=image.png | Portable Network Graphics |
.tif | yolo predict source=image.tif | Tag Image File Format |
.tiff | yolo predict source=image.tiff | Tag Image File Format |
.webp | yolo predict source=image.webp | WebP |
Videos#
Die unten stehende Tabelle enthält gültige Ultralytics Videoformate.
| Video-Suffixe | Beispiel-Predict-Befehl | Referenz |
|---|---|---|
.asf | yolo predict source=video.asf | Advanced Systems Format |
.avi | yolo predict source=video.avi | Audio Video Interleave |
.gif | yolo predict source=video.gif | Graphics Interchange Format |
.m4v | yolo predict source=video.m4v | MPEG-4 Part 14 |
.mkv | yolo predict source=video.mkv | Matroska |
.mov | yolo predict source=video.mov | QuickTime File Format |
.mp4 | yolo predict source=video.mp4 | MPEG-4 Part 14 - Wikipedia |
.mpeg | yolo predict source=video.mpeg | MPEG-1 Part 2 |
.mpg | yolo predict source=video.mpg | MPEG-1 Part 2 |
.ts | yolo predict source=video.ts | MPEG Transport Stream |
.wmv | yolo predict source=video.wmv | Windows Media Video |
.webm | yolo predict source=video.webm | WebM Project |
Arbeiten mit Ergebnissen#
Alle Ultralytics predict()-Aufrufe geben eine Liste von Results-Objekten zurück:
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")
results = model(
[
"https://ultralytics.com/images/bus.jpg",
"https://ultralytics.com/images/zidane.jpg",
]
) # batch inferenceResults-Objekte haben die folgenden Attribute:
| Attribut | Typ | Beschreibung |
|---|---|---|
orig_img | np.ndarray | Das ursprüngliche Bild als NumPy Array. |
orig_shape | tuple | Die ursprüngliche Bildgröße im Format (Höhe, Breite). |
boxes | Boxes, optional | Ein Boxes Objekt, das die Bounding Boxes der Erkennung enthält. |
masks | Masks, optional | Ein Masks Objekt, das die Erkennungsmasken enthält. |
probs | Probs, optional | Ein Probs Objekt, das die Wahrscheinlichkeiten jeder Klasse für eine Klassifizierungsaufgabe enthält. |
keypoints | Keypoints, optional | Ein Keypoints Objekt, das erkannte Keypoints für jedes Objekt enthält. |
obb | OBB, optional | Ein OBB Objekt, das orientierte Bounding Boxes enthält. |
semantic_mask | SemanticMask, optional | Ein SemanticMask Objekt, das eine dichte klassenbasierte Karte pro Pixel enthält. |
speed | dict | Ein Wörterbuch der Vorverarbeitungs-, Inferenz- und Nachverarbeitungsgeschwindigkeiten in Millisekunden pro Bild. |
names | dict | Ein Wörterbuch, das Klassenindizes Klassennamen zuordnet. |
path | str | Der Pfad zur Bilddatei. |
save_dir | str, optional | Verzeichnis zum Speichern der Ergebnisse. |
Ergebnisse nach Aufgabe#
Welche der folgenden Felder belegt werden, hängt von der Aufgabe deines Modells ab – vergleiche Detektion, Segmentierung, semantische Segmentierung, Tiefenschätzung, Klassifikation, Pose und OBB, falls du dich noch für keine entschieden hast. Jede Vorhersage liefert ein Results-Objekt pro Bild oder Frame. Die oben genannten gemeinsamen Felder sind immer verfügbar, während die aufgabenspezifischen Vorhersagedaten in den Feldern unten gespeichert sind. Koordinaten-, Konfidenz- und Wahrscheinlichkeitstensoren sind torch.float32, es sei denn, es wird Halbprazision verwendet, dann torch.float16. Nach result.numpy() werden Tensoren zu NumPy-Arrays mit passenden NumPy-Dtypes. Instanzmasken sind binäre torch.uint8-Tensoren, während semantische Masken den kleinsten praktischen Integer-Dtype für Klassen-IDs verwenden: torch.uint8, torch.int16 oder torch.int32, je nach Anzahl der Klassen.
| Attribut | Typ | Form | Beschreibung |
|---|---|---|---|
result.boxes | Boxes | (N) | Erkennungsboxen. |
result.boxes.data | torch.float32 | (N,6/7) | Rohe [x1,y1,x2,y2,conf,cls] plus optionale Track-ID. |
result.boxes.xyxy | torch.float32 | (N,4) | xyxy-Pixelboxen. |
result.boxes.conf | torch.float32 | (N,) | Konfidenzwerte. |
result.boxes.cls | torch.float32 | (N,) | Klassen-IDs; zu int casten für Namen. |
Results-Objekte haben die folgenden Methoden:
| Methode | Rückgabetyp | Beschreibung |
|---|---|---|
update() | None | Aktualisiert das Results-Objekt mit neuen Daten wie Boxen, Masken, Probs, OBB, Keypoints oder semantischen Masken. |
cpu() | Results | Gibt eine Kopie des Results-Objekts zurück, bei dem alle Tensoren in den CPU-Speicher verschoben wurden. |
numpy() | Results | Gibt eine Kopie des Results-Objekts zurück, bei dem alle Tensoren in NumPy-Arrays konvertiert wurden. |
cuda() | Results | Gibt eine Kopie des Results-Objekts zurück, bei dem alle Tensoren in den GPU-Speicher verschoben wurden. |
to() | Results | Gibt eine Kopie des Results-Objekts zurück, bei dem die Tensoren auf das angegebene Gerät und den Datentyp verschoben wurden. |
new() | Results | Erstellt ein neues Results-Objekt mit denselben Attributen für Bild, Pfad, Namen und Geschwindigkeit. |
plot() | np.ndarray | Zeichnet Erkennungsergebnisse auf ein Eingabe-BGR-Bild und gibt das annotierte Bild zurück. |
show() | None | Zeigt das Bild mit annotierten Inferenz-Ergebnissen an. |
save() | str | Speichert das Bild mit den annotierten Inferenz-Ergebnissen in einer Datei und gibt den Dateinamen zurück. |
verbose() | str | Gibt einen Protokoll-String für jede Aufgabe zurück, der die Erkennungs- und Klassifizierungsergebnisse detailliert. |
save_txt() | str | Speichert Erkennungsergebnisse in einer Textdatei und gibt den Pfad zur gespeicherten Datei zurück. |
save_crop() | None | Speichert zugeschnittene Erkennungsbilder im angegebenen Verzeichnis. |
summary() | List[Dict[str, Any]] | Konvertiert Inferenz-Ergebnisse in ein zusammengefasstes Wörterbuch mit optionaler Normalisierung. |
to_df() | DataFrame | Konvertiert Erkennungsergebnisse in einen Polars DataFrame. |
to_csv() | str | Konvertiert Erkennungsergebnisse in das CSV-Format. |
to_json() | str | Konvertiert Erkennungsergebnisse in das JSON-Format. |
Weitere Details findest du in der Results-Klassendokumentation.
Bboxen#
Das Boxes-Objekt kann verwendet werden, um Bounding Boxes zu indizieren, zu manipulieren und in verschiedene Formate zu konvertieren.
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.boxes) # print the Boxes object containing the detection bounding boxesHier ist eine Tabelle für die Klassenmethoden und -eigenschaften von Boxes, einschließlich ihres Namens, Typs und ihrer Beschreibung:
| Name | Typ | Beschreibung |
|---|---|---|
cpu() | Methode | Verschiebe das Objekt in den CPU-Speicher. |
numpy() | Methode | Konvertiere das Objekt in ein NumPy-Array. |
cuda() | Methode | Verschiebe das Objekt in den CUDA-Speicher. |
to() | Methode | Verschiebe das Objekt auf das angegebene Gerät. |
xyxy | Eigenschaft (torch.Tensor) | Gib die Boxen im xyxy-Format zurück. |
conf | Eigenschaft (torch.Tensor) | Gib die Konfidenzwerte der Boxen zurück. |
cls | Eigenschaft (torch.Tensor) | Gib die Klassenwerte der Boxen zurück. |
id | Eigenschaft (torch.Tensor) | Gib die Track-IDs der Boxen zurück (falls verfügbar). |
xywh | Eigenschaft (torch.Tensor) | Gib die Boxen im xywh-Format zurück. |
xyxyn | Eigenschaft (torch.Tensor) | Gib die Boxen im xyxy-Format zurück, normalisiert auf die ursprüngliche Bildgröße. |
xywhn | Eigenschaft (torch.Tensor) | Gib die Boxen im xywh-Format zurück, normalisiert auf die ursprüngliche Bildgröße. |
Weitere Details findest du in der Boxes-Klassendokumentation.
Masken#
Das Masks-Objekt kann verwendet werden, um Masken zu indizieren, zu manipulieren und in Segmente zu konvertieren.
from ultralytics import YOLO
# Load a pretrained YOLO26n-seg Segment model
model = YOLO("yolo26n-seg.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.masks) # print the Masks object containing the detected instance masksHier ist eine Tabelle für die Klassenmethoden und -eigenschaften von Masks, einschließlich ihres Namens, Typs und ihrer Beschreibung:
| Name | Typ | Beschreibung |
|---|---|---|
data | Eigenschaft (torch.Tensor) | torch.uint8-Binärmaskentensor mit der Form (N,H,W) und den Werten 0 oder 1. |
cpu() | Methode | Gibt den Masken-Tensor im CPU-Speicher zurück. |
numpy() | Methode | Gibt den Masken-Tensor als NumPy-Array zurück. |
cuda() | Methode | Gibt den Masken-Tensor im GPU-Speicher zurück. |
to() | Methode | Gibt den Masken-Tensor für das angegebene Gerät und den Datentyp zurück. |
xyn | Eigenschaft (list[np.ndarray]) | Eine Liste normalisierter Masken-Polygone. |
xy | Eigenschaft (list[np.ndarray]) | Eine Liste von Masken-Polygonen in Pixel-Koordinaten. |
Weitere Details findest du in der Masks-Klassendokumentation.
SemanticMask#
SemanticMask speichert eine dichte Klassenkarte für semantische Segmentierungsergebnisse. Im Gegensatz zu Masks enthält sie nicht eine binäre Maske pro Objekt und bietet keine Polygon-Helfer.
from ultralytics import YOLO
# Load a pretrained YOLO26n-sem Semantic model
model = YOLO("yolo26n-sem.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.semantic_mask.data) # print the H x W class-ID map| Name | Typ | Beschreibung |
|---|---|---|
data | Eigenschaft (torch.Tensor) | Klassen-ID-Karte mit der Form (H,W). Dtype ist torch.uint8, torch.int16 oder torch.int32, ausgewählt nach Klassenanzahl. |
shape | Eigenschaft (tuple) | Form der Klassenkarte, entspricht normalerweise result.orig_shape. |
cpu() | Methode | Gibt den semantischen Masken-Tensor im CPU-Speicher zurück. |
numpy() | Methode | Gibt den semantischen Masken-Tensor als NumPy-Array zurück. |
cuda() | Methode | Gibt den semantischen Masken-Tensor im GPU-Speicher zurück. |
to() | Methode | Gibt den semantischen Masken-Tensor für das angegebene Gerät und den Datentyp zurück. |
Keypoints#
Das Keypoints-Objekt kann verwendet werden, um Koordinaten zu indizieren, zu manipulieren und zu normalisieren.
from ultralytics import YOLO
# Load a pretrained YOLO26n-pose Pose model
model = YOLO("yolo26n-pose.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.keypoints) # print the Keypoints object containing the detected keypointsHier ist eine Tabelle für die Klassenmethoden und -eigenschaften von Keypoints, einschließlich ihres Namens, Typs und ihrer Beschreibung:
| Name | Typ | Beschreibung |
|---|---|---|
cpu() | Methode | Gibt den Keypoints-Tensor im CPU-Speicher zurück. |
numpy() | Methode | Gibt den Keypoints-Tensor als NumPy-Array zurück. |
cuda() | Methode | Gibt den Keypoints-Tensor im GPU-Speicher zurück. |
to() | Methode | Gibt den Keypoints-Tensor mit dem angegebenen Gerät und Datentyp zurück. |
xyn | Eigenschaft (torch.Tensor) | Eine Liste normalisierter Keypoints, die als Tensoren dargestellt werden. |
xy | Eigenschaft (torch.Tensor) | Eine Liste von Keypoints in Pixelkoordinaten, die als Tensoren dargestellt werden. |
conf | Eigenschaft (torch.Tensor) | Gibt Konfidenzwerte der Keypoints zurück, falls verfügbar, andernfalls None. |
Weitere Details findest du in der Keypoints-Klassendokumentation.
Probs#
Das Probs-Objekt kann verwendet werden, um top1- und top5-Klassifikationsindizes und -scores zu erhalten.
from ultralytics import YOLO
# Load a pretrained YOLO26n-cls Classify model
model = YOLO("yolo26n-cls.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.probs) # print the Probs object containing the detected class probabilitiesHier ist eine Tabelle, die die Methoden und Eigenschaften für die Probs-Klasse zusammenfasst:
| Name | Typ | Beschreibung |
|---|---|---|
cpu() | Methode | Gibt eine Kopie des Probs-Tensors im CPU-Speicher zurück. |
numpy() | Methode | Gibt eine Kopie des Probs-Tensors als NumPy Array zurück. |
cuda() | Methode | Gibt eine Kopie des Probs-Tensors im GPU-Speicher zurück. |
to() | Methode | Gibt eine Kopie des Probs-Tensors mit dem angegebenen Gerät und Datentyp zurück. |
top1 | Eigenschaft (int) | Index der Top-1-Klasse. |
top5 | Eigenschaft (list[int]) | Indizes der Top-5-Klassen. |
top1conf | Eigenschaft (torch.Tensor) | Konfidenz der Top-1-Klasse. |
top5conf | Eigenschaft (torch.Tensor) | Konfidenzen der Top-5-Klassen. |
Weitere Details findest du in der Probs-Klassendokumentation.
OBB#
Das OBB-Objekt kann verwendet werden, um orientierte Bounding Boxes zu indizieren, zu manipulieren und in verschiedene Formate zu konvertieren.
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n-obb.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/boats.jpg") # results list
# View results
for r in results:
print(r.obb) # print the OBB object containing the oriented detection bounding boxesHier ist eine Tabelle für die Klassenmethoden und -eigenschaften von OBB, einschließlich ihres Namens, Typs und ihrer Beschreibung:
| Name | Typ | Beschreibung |
|---|---|---|
cpu() | Methode | Verschiebe das Objekt in den CPU-Speicher. |
numpy() | Methode | Konvertiere das Objekt in ein NumPy-Array. |
cuda() | Methode | Verschiebe das Objekt in den CUDA-Speicher. |
to() | Methode | Verschiebe das Objekt auf das angegebene Gerät. |
conf | Eigenschaft (torch.Tensor) | Gib die Konfidenzwerte der Boxen zurück. |
cls | Eigenschaft (torch.Tensor) | Gib die Klassenwerte der Boxen zurück. |
id | Eigenschaft (torch.Tensor) | Gib die Track-IDs der Boxen zurück (falls verfügbar). |
xyxy | Eigenschaft (torch.Tensor) | Gibt die horizontalen Boxen im xyxy Format zurück. |
xywhr | Eigenschaft (torch.Tensor) | Gibt die rotierten Boxen im xywhr Format zurück. |
xyxyxyxy | Eigenschaft (torch.Tensor) | Gibt die rotierten Boxen im xyxyxyxy Format zurück. |
xyxyxyxyn | Eigenschaft (torch.Tensor) | Gibt die rotierten Boxen im xyxyxyxy Format zurück, normalisiert durch die Bildgröße. |
Weitere Details findest du in der OBB-Klassendokumentation.
Ergebnisse visualisieren#
Die Methode plot() in Results-Objekten erleichtert die Visualisierung von Vorhersagen, indem erkannte Objekte (wie Bounding Boxes, Masken, Keypoints und Wahrscheinlichkeiten) über das Originalbild gelegt werden. Diese Methode gibt das annotierte Bild als NumPy-Array zurück, was eine einfache Anzeige oder Speicherung ermöglicht.
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Run inference on 'bus.jpg'
results = model(["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"]) # results list
# Visualize the results
for i, r in enumerate(results):
# Plot results image
im_bgr = r.plot() # BGR-order numpy array
im_rgb = Image.fromarray(im_bgr[..., ::-1]) # RGB-order PIL image
# Show results to screen (in supported environments)
r.show()
# Save results to disk
r.save(filename=f"results{i}.jpg")Methodenparameter für plot()#
Die Methode plot() unterstützt verschiedene Argumente zur Anpassung der Ausgabe:
| Argument | Typ | Beschreibung | Standard |
|---|---|---|---|
conf | bool | Konfidenzwerte der Erkennung einbeziehen. | True |
line_width | float | Linienstärke von Bounding Boxes. Skaliert mit der Bildgröße, wenn None. | None |
font_size | float | Schriftgröße des Textes. Skaliert mit der Bildgröße, wenn None. | None |
font | str | Schriftname für Textannotationen. | 'Arial.ttf' |
pil | bool | Gibt das Bild als PIL Image Objekt zurück. | False |
img | np.ndarray | torch.Tensor | Alternatives Bild. Tensors müssen zusammenhängende HWC BGR uint8 Tensors sein. | None |
kpt_radius | int | Radius für gezeichnete Keypoints. | 5 |
kpt_line | bool | Verbindet Keypoints mit Linien. | True |
labels | bool | Klassenbeschriftungen in Annotationen einbeziehen. | True |
boxes | bool | Bounding Boxes über das Bild legen. | True |
masks | bool | Masken über das Bild legen. | True |
probs | bool | Klassifizierungswahrscheinlichkeiten einbeziehen. | True |
show | bool | Das annotierte Bild direkt mit dem Standard-Bildbetrachter anzeigen. | False |
save | bool | Speichert das annotierte Bild in einer durch filename angegebenen Datei. | False |
filename | str | Pfad und Name der Datei zum Speichern des annotierten Bildes, wenn save gleich True ist. | None |
color_mode | str | Farbmodus angeben, z. B. 'instance' oder 'class'. | 'class' |
txt_color | tuple[int, int, int] | BGR-Textfarbe für Bounding Box und Bildklassifizierungslabel. | (255, 255, 255) |
Thread-sichere Inferenz#
Die Gewährleistung der Thread-Sicherheit während der Inferenz ist entscheidend, wenn du mehrere YOLO Modelle parallel in verschiedenen Threads ausführst. Thread-sichere Inferenz garantiert, dass die Vorhersagen jedes Threads isoliert sind und sich nicht gegenseitig beeinflussen, wodurch Race Conditions vermieden werden und konsistente sowie zuverlässige Ergebnisse sichergestellt sind.
Bei der Verwendung von YOLO Modellen in einer Multithread-Anwendung ist es wichtig, für jeden Thread separate Modellobjekte zu instanziieren oder thread-lokalen Speicher zu verwenden, um Konflikte zu vermeiden:
Instanziiere ein einzelnes Modell innerhalb jedes Threads für thread-sichere Inferenz:
from threading import Thread
from ultralytics import YOLO
def thread_safe_predict(model, image_path):
"""Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
model = YOLO(model)
results = model.predict(image_path)
# Process results
# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image1.jpg")).start()
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image2.jpg")).start()Einen detaillierten Einblick in die Thread-sichere Inferenz mit YOLO-Modellen und Schritt-für-Schritt-Anleitungen findest du in unserem YOLO Thread-Safe Inference Guide. Dieser Leitfaden bietet dir alle notwendigen Informationen, um häufige Fallstricke zu vermeiden und sicherzustellen, dass deine multithreaded Inferenz reibungslos läuft.
Streaming-Quellen-for-Schleife#
Hier ist ein Python-Skript, das OpenCV (cv2) und YOLO verwendet, um Inferenz auf Video-Frames auszuführen. Dieses Skript setzt voraus, dass du die erforderlichen Pakete (opencv-python und ultralytics) bereits installiert hast.
import cv2
from ultralytics import YOLO
# Load the YOLO model
model = YOLO("yolo26n.pt")
# Open the video file
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)
# Loop through the video frames
while cap.isOpened():
# Read a frame from the video
success, frame = cap.read()
if success:
# Run YOLO inference on the frame
results = model(frame)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the annotated frame
cv2.imshow("YOLO Inference", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Break the loop if the end of the video is reached
break
# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()Dieses Skript führt Vorhersagen auf jedem Frame des Videos durch, visualisiert die Ergebnisse und zeigt sie in einem Fenster an. Die Schleife kann durch Drücken von 'q' beendet werden.
Wie geht es weiter?#
Bereit für den nächsten Schritt über ein vortrainiertes Modell hinaus? Stelle sicher, dass deine Aufgabe zu deinem Problem passt, formatiere deine eigenen Daten mit dem Datasets guide und trainiere dann damit.
FAQ#
Ultralytics YOLO ist ein hochmodernes Modell für Echtzeit-object detection, instance segmentation, semantic segmentation, depth estimation und classification. Sein predict mode ermöglicht Benutzern die Durchführung von Hochgeschwindigkeits-Inferenz auf verschiedenen Datenquellen wie Bildern, Videos und Live-Streams. Entworfen für Performance und Vielseitigkeit, bietet es auch Batch-Verarbeitungs- und Streaming-Modi. Weitere Details zu den Funktionen findest du im Ultralytics YOLO predict mode.
Ultralytics YOLO kann eine Vielzahl von Datenquellen verarbeiten, darunter einzelne Bilder, Videos, Verzeichnisse, URLs und Streams. Du kannst die Datenquelle im
model.predict()-Aufruf angeben. Verwende zum Beispiel'image.jpg'für ein lokales Bild oder'https://ultralytics.com/images/bus.jpg'für eine URL. Schau dir die detaillierten Beispiele für verschiedene inference sources in der Dokumentation an.Um die Inferenzgeschwindigkeit zu optimieren und den Speicher effizient zu verwalten, kannst du den Streaming-Modus verwenden, indem du
stream=Truein der Aufrufmethode des Prädiktors festlegst. Der Streaming-Modus generiert einen speichereffizienten Generator vonResults-Objekten, anstatt alle Frames in den Speicher zu laden. Für die Verarbeitung langer Videos oder großer Datensätze ist der Streaming-Modus besonders nützlich. Erfahre mehr über den streaming mode.Die Methode
model.predict()in YOLO unterstützt verschiedene Argumente wieconf,iou,imgsz,deviceund mehr. Mit diesen Argumenten kannst du den Inferenzprozess anpassen und Parameter wie Konfidenzschwellenwerte, Bildgröße und das für die Berechnung verwendete Gerät festlegen. Detaillierte Beschreibungen dieser Argumente findest du im Abschnitt inference arguments.Verwende
model.embed(source), um Feature-Embeddings aus der vorletzten Schicht zu extrahieren, oder übergebeembed=[layer_index]anmodel.predict(), um spezifische Schichten auszuwählen.from ultralytics import YOLO model = YOLO("yolo26n.pt") source = "https://ultralytics.com/images/bus.jpg" results = model.predict(source) # Results objects embeddings = model.embed(source) # list of torch.Tensor embeddingsNach der Durchführung der Inferenz mit YOLO enthalten die
Results-Objekte Methoden zum Anzeigen und Speichern annotierter Bilder. Du kannst Methoden wieresult.show()undresult.save(filename="result.jpg")verwenden, um die Ergebnisse zu visualisieren und zu speichern. Fehlende übergeordnete Verzeichnisse im Dateinamenpfad werden automatisch erstellt (z. B.result.save("path/to/result.jpg")). Eine vollständige Liste dieser Methoden findest du im Abschnitt working with results.