Modell Vorhersage mit Ultralytics YOLO
Einführung
In der Welt des maschinellen Lernens und der Computer Vision wird der Prozess, aus visuellen Daten einen Sinn zu machen, als "Inferenz" oder "Vorhersage" bezeichnet. Ultralytics YOLOv8 bietet eine leistungsstarke Funktion, den so genannten Vorhersagemodus, der für hochleistungsfähige Echtzeit-Inferenzen aus einer Vielzahl von Datenquellen zugeschnitten ist.
Pass auf: Wie man die Ergebnisse aus dem Ultralytics YOLOv8 Modell für eigene Projekte extrahiert.
Anwendungen in der realen Welt
Herstellung | Sport | Sicherheit |
---|---|---|
Erkennung von Fahrzeugersatzteilen | Fußballspieler-Erkennung | Erkennung von Personenstürzen |
Warum Ultralytics YOLO für Schlussfolgerungen nutzen?
Hier erfährst du, warum du den Vorhersagemodus von YOLOv8 für deine verschiedenen Schlussfolgerungen in Betracht ziehen solltest:
- Vielseitigkeit: Du kannst Rückschlüsse auf Bilder, Videos und sogar Live-Streams ziehen.
- Leistung: Entwickelt für Echtzeit-Hochgeschwindigkeitsverarbeitung ohne Abstriche bei der Genauigkeit.
- Benutzerfreundlichkeit: Intuitive Schnittstellen Python und CLI für schnellen Einsatz und Tests.
- Hochgradig anpassbar: Verschiedene Einstellungen und Parameter, um das Inferenzverhalten des Modells auf deine spezifischen Anforderungen abzustimmen.
Hauptmerkmale des Vorhersagemodus
YOLOv8Der Prädiktionsmodus ist robust und vielseitig und bietet folgende Funktionen:
- Kompatibilität mit mehreren Datenquellen: Egal, ob deine Daten in Form von einzelnen Bildern, einer Sammlung von Bildern, Videodateien oder Echtzeit-Videostreams vorliegen, mit dem Predict-Modus bist du bestens gerüstet.
- Streaming-Modus: Verwende die Streaming-Funktion, um einen speichereffizienten Generator von
Results
Objekte. Aktiviere dies durch die Einstellungstream=True
in der Aufrufmethode des Prädiktors. - Stapelverarbeitung: Die Möglichkeit, mehrere Bilder oder Videoframes in einem einzigen Stapel zu verarbeiten, um die Inferenzzeit weiter zu verkürzen.
- Integrationsfreundlich: Dank der flexiblen API ist die Integration in bestehende Datenpipelines und andere Softwarekomponenten ganz einfach.
Ultralytics YOLO Modelle geben entweder eine Python Liste von Results
Objekte oder ein speichereffizienter Python Generator von Results
Objekte, wenn stream=True
wird während der Inferenz an das Modell übergeben:
Vorhersage
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n.pt") # pretrained YOLOv8n model
# Run batched inference on a list of images
results = model(["im1.jpg", "im2.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 disk
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n.pt") # pretrained YOLOv8n model
# Run batched inference on a list of images
results = model(["im1.jpg", "im2.jpg"], stream=True) # return a generator of Results objects
# Process results generator
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 disk
Inferenz-Quellen
YOLOv8 kann verschiedene Arten von Eingangsquellen für Inferenzen verarbeiten, wie in der folgenden Tabelle dargestellt. Zu den Quellen gehören statische Bilder, Videostreams und verschiedene Datenformate. In der Tabelle ist auch angegeben, ob jede Quelle im Streaming-Modus mit dem Argument stream=True
✅. Der Streaming-Modus ist vorteilhaft für die Verarbeitung von Videos oder Live-Streams, da er einen Generator von Ergebnissen erzeugt, anstatt alle Bilder in den Speicher zu laden.
Tipp
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, stream=True
verwendet einen Generator, der nur die Ergebnisse des aktuellen Frames oder Datenpunkts im Speicher hält, was den Speicherverbrauch erheblich reduziert und Out-of-Memory-Probleme verhindert.
Quelle | Beispiel | Typ | Anmerkungen |
---|---|---|---|
Bild | 'image.jpg' |
str oder Path |
Einzelne Bilddatei. |
URL | 'https://ultralytics.com/images/bus.jpg' |
str |
URL zu einem Bild. |
Bildschirmfoto | 'screen' |
str |
Erstelle einen Screenshot. |
PIL | Image.open('im.jpg') |
PIL.Image |
HWC-Format mit RGB-Kanälen. |
OpenCV | cv2.imread('im.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, etc. |
Verzeichnis ✅ | 'path/' |
str oder Path |
Pfad zu einem Verzeichnis, das Bilder oder Videos enthält. |
glob ✅ | 'path/*.jpg' |
str |
Glob-Muster, um mehrere Dateien abzugleichen. Verwende das * Zeichen als Platzhalter. |
YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' |
str |
URL zu einem YouTube-Video. |
Strom ✅ | '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 werden bei Batch-Größe 8 ausgeführt. |
Im Folgenden findest du Codebeispiele für die Verwendung der einzelnen Quellentypen:
Quellen für Vorhersagen
Führe eine Inferenz für eine Bilddatei durch.
Führe eine Inferenz auf den aktuellen Bildschirminhalt als Screenshot durch.
Führe Inferenzen für ein Bild oder Video durch, das per URL gehostet wird.
Führe eine Inferenz für ein Bild durch, das mit der Python Imaging Library (PIL) geöffnet wurde.
Führe Inferenzen auf einem mit OpenCV gelesenen Bild durch.
Führe eine Inferenz auf ein Bild durch, das als Numpy-Array dargestellt wird.
import numpy as np
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")
# Create a random numpy array of HWC shape (640, 640, 3) with values in range [0, 255] and type uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype="uint8")
# Run inference on the source
results = model(source) # list of Results objects
Führe Inferenzen auf einem Bild durch, das als PyTorch tensor dargestellt wird.
import torch
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")
# Create a random torch tensor of BCHW shape (1, 3, 640, 640) with values in range [0, 1] and type float32
source = torch.rand(1, 3, 640, 640, dtype=torch.float32)
# Run inference on the source
results = model(source) # list of Results objects
Führe Inferenzen für eine Sammlung von Bildern, URLs, Videos und Verzeichnissen durch, die in einer CSV-Datei aufgelistet sind.
Führe eine Inferenz für eine Videodatei durch. Durch die Verwendung von stream=True
kannst du einen Generator für Ergebnisobjekte erstellen, um den Speicherbedarf zu reduzieren.
Führe die Inferenz für alle Bilder und Videos in einem Verzeichnis durch. Um auch Bilder und Videos in Unterverzeichnissen zu erfassen, verwende ein glob-Muster, d.h. path/to/dir/**/*
.
Inferenz auf alle Bilder und Videos anwenden, die mit einem globalen Ausdruck mit *
Zeichen.
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")
# Define a glob search for all JPG files in a directory
source = "path/to/dir/*.jpg"
# OR define a recursive glob search for all JPG files including subdirectories
source = "path/to/dir/**/*.jpg"
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Führe eine Inferenz auf ein YouTube-Video durch. Durch die Verwendung stream=True
kannst du einen Generator für Ergebnisobjekte erstellen, um den Speicherbedarf für lange Videos zu reduzieren.
Führe Inferenzen für entfernte Streaming-Quellen durch, die RTSP-, RTMP-, TCP- und IP-Adressprotokolle verwenden. Wenn mehrere Streams in einer *.streams
Textdatei, dann wird die Batch-Inferenz ausgeführt, d.h. 8 Streams werden mit Batch-Größe 8 ausgeführt, andernfalls werden einzelne Streams mit Batch-Größe 1 ausgeführt.
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")
# Single stream with batch-size 1 inference
source = "rtsp://example.com/media.mp4" # RTSP, RTMP, TCP or IP streaming address
# Multiple streams with batched inference (i.e. batch-size 8 for 8 streams)
source = "path/to/list.streams" # *.streams text file with one streaming address per row
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Argumente für Schlussfolgerungen
model.predict()
akzeptiert mehrere Argumente, die zur Inferenzzeit übergeben werden können, um die Standardeinstellungen zu überschreiben:
Beispiel
Argumente für Schlussfolgerungen:
Argument | Typ | Standard | Beschreibung |
---|---|---|---|
source |
str |
'ultralytics/assets' |
Gibt die Datenquelle für die Inferenz an. Das kann ein Bildpfad, eine Videodatei, ein Verzeichnis, eine URL oder eine Geräte-ID für Live-Feeds sein. Unterstützt eine breite Palette von Formaten und Quellen und ermöglicht so eine flexible Anwendung für verschiedene Arten von Eingaben. |
conf |
float |
0.25 |
Legt die minimale Vertrauensschwelle für Erkennungen fest. Objekte, die mit einer geringeren Konfidenz als dieser Schwelle erkannt werden, werden nicht berücksichtigt. Die Anpassung dieses Wertes kann dazu beitragen, Falschmeldungen zu reduzieren. |
iou |
float |
0.7 |
Intersection Over Union (IoU) Schwellenwert für Non-Maximum Suppression (NMS). Niedrigere Werte führen zu weniger Erkennungen, da überlappende Kästchen eliminiert werden, was nützlich ist, um Duplikate zu reduzieren. |
imgsz |
int or tuple |
640 |
Legt die Bildgröße für die Inferenz fest. Kann eine einzelne ganze Zahl sein 640 für quadratische Größenänderungen oder ein (Höhe, Breite) Tupel. Die richtige Größenbestimmung kann die Erkennungsgenauigkeit und die Verarbeitungsgeschwindigkeit verbessern. |
half |
bool |
False |
Ermöglicht die Inferenz mit halber Genauigkeit (FP16), was die Modellinferenz auf unterstützten GPUs mit minimalen Auswirkungen auf die Genauigkeit beschleunigen kann. |
device |
str |
None |
Gibt das Gerät für die Inferenz an (z.B., cpu , cuda:0 oder 0 ). Ermöglicht die Auswahl zwischen CPU, einem bestimmten GPU oder anderen Rechengeräten für die Modellausführung. |
max_det |
int |
300 |
Maximal zulässige Anzahl von Erkennungen pro Bild. Begrenzt die Gesamtzahl der Objekte, die das Modell in einer einzigen Schlussfolgerung erkennen kann, um übermäßige Ausgaben in dichten Szenen zu verhindern. |
vid_stride |
int |
1 |
Frame Stride für Videoeingänge. Ermöglicht das Überspringen von Bildern in Videos, um die Verarbeitung auf Kosten der zeitlichen Auflösung zu beschleunigen. Bei einem Wert von 1 wird jedes Bild verarbeitet, bei höheren Werten werden Bilder übersprungen. |
stream_buffer |
bool |
False |
Legt fest, ob bei der Verarbeitung von Videostreams alle Bilder gepuffert werden sollen (True ), oder ob das Modell den letzten Frame zurückgeben soll (False ). Nützlich für Echtzeitanwendungen. |
visualize |
bool |
False |
Aktiviert die Visualisierung von Modellmerkmalen während der Inferenz und gibt Einblicke in das, was das Modell "sieht". Nützlich für die Fehlersuche und Modellinterpretation. |
augment |
bool |
False |
Ermöglicht die Test-Time-Augmentation (TTA) für Vorhersagen, was die Robustheit der Erkennung auf Kosten der Schlussfolgerungsgeschwindigkeit verbessern kann. |
agnostic_nms |
bool |
False |
Ermöglicht die klassenunabhängige Non-Maximum Suppression (NMS), die überlappende Boxen verschiedener Klassen zusammenführt. Nützlich in Szenarien mit mehreren Klassen, in denen sich die Klassen häufig überschneiden. |
classes |
list[int] |
None |
Filtert Vorhersagen auf eine Reihe von Klassen-IDs. Nur Erkennungen, die zu den angegebenen Klassen gehören, werden zurückgegeben. Nützlich, um sich bei Erkennungsaufgaben mit mehreren Klassen auf relevante Objekte zu konzentrieren. |
retina_masks |
bool |
False |
Verwendet hochauflösende Segmentierungsmasken, falls im Modell vorhanden. Dies kann die Qualität der Masken für Segmentierungsaufgaben verbessern, da sie feinere Details liefern. |
embed |
list[int] |
None |
Legt die Ebenen fest, aus denen Merkmalsvektoren oder Einbettungen extrahiert werden sollen. Nützlich für nachgelagerte Aufgaben wie Clustering oder Ähnlichkeitssuche. |
Argumente für die Visualisierung:
Argument | Typ | Standard | Beschreibung |
---|---|---|---|
show |
bool |
False |
Wenn True zeigt die kommentierten Bilder oder Videos in einem Fenster an. Nützlich für sofortiges visuelles Feedback während der Entwicklung oder Prüfung. |
save |
bool |
False oder True |
Enables saving of the annotated images or videos to file. Useful for documentation, further analysis, or sharing results. Defaults to True when using CLI & False when used in Python. |
save_frames |
bool |
False |
Bei der Verarbeitung von Videos werden einzelne Bilder als Bilder gespeichert. Das ist nützlich, um bestimmte Bilder zu extrahieren oder um eine detaillierte Bild-für-Bild-Analyse durchzuführen. |
save_txt |
bool |
False |
Speichert die Erkennungsergebnisse in einer Textdatei, die dem Format [class] [x_center] [y_center] [width] [height] [confidence] . Nützlich für die Integration mit anderen Analysetools. |
save_conf |
bool |
False |
Enthält Konfidenzwerte in den gespeicherten Textdateien. Erhöht die Detailgenauigkeit bei der Nachbearbeitung und Analyse. |
save_crop |
bool |
False |
Speichert abgeschnittene Bilder von Erkennungen. Nützlich für die Erweiterung von Datensätzen, die Analyse oder die Erstellung gezielter Datensätze für bestimmte Objekte. |
show_labels |
bool |
True |
Zeigt Beschriftungen für jede Erkennung in der visuellen Ausgabe an. Ermöglicht ein sofortiges Verständnis der erkannten Objekte. |
show_conf |
bool |
True |
Zeigt die Konfidenzwerte für jede Erkennung neben der Bezeichnung an. Gibt einen Einblick in die Sicherheit des Modells für jede Erkennung. |
show_boxes |
bool |
True |
Zeichnet Begrenzungsrahmen um erkannte Objekte. Unverzichtbar für die visuelle Identifizierung und Lokalisierung von Objekten in Bildern oder Videoframes. |
line_width |
None oder int |
None |
Legt die Linienbreite von Begrenzungsrahmen fest. Wenn None Die Linienbreite wird automatisch an die Bildgröße angepasst. Bietet visuelle Anpassungen für mehr Klarheit. |
Bild- und Videoformate
YOLOv8 unterstützt verschiedene Bild- und Videoformate, wie in ultralytics/data/utils .py angegeben. In den folgenden Tabellen findest du die gültigen Suffixe und Beispielvorhersagebefehle.
Bilder
Die folgende Tabelle enthält gültige Ultralytics Bildformate.
Bild-Suffixe | Beispiel Predict-Befehl | Referenz |
---|---|---|
.bmp |
yolo predict source=image.bmp |
Microsoft BMP Dateiformat |
.dng |
yolo predict source=image.dng |
Adobe DNG |
.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 |
.pfm |
yolo predict source=image.pfm |
Portable FloatMap |
Videos
Die folgende Tabelle enthält gültige Ultralytics Videoformate.
Video Suffixe | Beispiel Predict-Befehl | Referenz |
---|---|---|
.asf |
yolo predict source=video.asf |
Erweiterte Systeme 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 Teil 14 |
.mkv |
yolo predict source=video.mkv |
Matroska |
.mov |
yolo predict source=video.mov |
QuickTime Dateiformat |
.mp4 |
yolo predict source=video.mp4 |
MPEG-4 Teil 14 - Wikipedia |
.mpeg |
yolo predict source=video.mpeg |
MPEG-1 Teil 2 |
.mpg |
yolo predict source=video.mpg |
MPEG-1 Teil 2 |
.ts |
yolo predict source=video.ts |
MPEG-Transportstrom |
.wmv |
yolo predict source=video.wmv |
Windows Media Video |
.webm |
yolo predict source=video.webm |
WebM Projekt |
Mit Ergebnissen arbeiten
Alle Ultralytics predict()
Aufrufe geben eine Liste von Results
Gegenstände:
Ergebnisse
Results
Objekte haben die folgenden Attribute:
Attribut | Typ | Beschreibung |
---|---|---|
orig_img |
numpy.ndarray |
Das Originalbild als Numpy-Array. |
orig_shape |
tuple |
Die ursprüngliche Bildform im Format (Höhe, Breite). |
boxes |
Boxes, optional |
Ein Boxes-Objekt, das die Boundingboxen der Erkennung enthält. |
masks |
Masks, optional |
Ein Masken-Objekt, das die Erkennungsmasken enthält. |
probs |
Probs, optional |
Ein Probs-Objekt, das die Wahrscheinlichkeiten der einzelnen Klassen für die Klassifizierungsaufgabe enthält. |
keypoints |
Keypoints, optional |
Ein Keypoints-Objekt, das die erkannten Keypoints für jedes Objekt enthält. |
obb |
OBB, optional |
Ein OBB-Objekt, das orientierte Begrenzungsrahmen enthält. |
speed |
dict |
Ein Wörterbuch der Vorverarbeitungs-, Ableitungs- und Nachverarbeitungsgeschwindigkeiten in Millisekunden pro Bild. |
names |
dict |
Ein Wörterbuch mit Klassennamen. |
path |
str |
Der Pfad zur Bilddatei. |
Results
Objekte haben die folgenden Methoden:
Methode | Rückgabe Typ | Beschreibung |
---|---|---|
update() |
None |
Aktualisiere die Boxen, Masken und Probs-Attribute des Ergebnisobjekts. |
cpu() |
Results |
Gibt eine Kopie des Ergebnisobjekts mit allen Tensoren auf CPU zurück. |
numpy() |
Results |
Gibt eine Kopie des Results-Objekts mit allen Tensoren als Numpy-Arrays zurück. |
cuda() |
Results |
Gibt eine Kopie des Ergebnisobjekts mit allen Tensoren auf GPU zurück. |
to() |
Results |
Gibt eine Kopie des Results-Objekts mit Tensoren auf dem angegebenen Gerät und dtype zurück. |
new() |
Results |
Gibt ein neues Ergebnisobjekt mit demselben Bild, Pfad und Namen zurück. |
plot() |
numpy.ndarray |
Stellt die Erkennungsergebnisse dar. Gibt ein Numpy-Array mit dem kommentierten Bild zurück. |
show() |
None |
Zeige kommentierte Ergebnisse auf dem Bildschirm an. |
save() |
None |
Speichere die kommentierten Ergebnisse in einer Datei. |
verbose() |
str |
Gib für jede Aufgabe einen Log-String zurück. |
save_txt() |
None |
Speichere die Vorhersagen in einer txt-Datei. |
save_crop() |
None |
Ausgeschnittene Vorhersagen speichern in save_dir/cls/file_name.jpg . |
tojson() |
str |
Konvertiere das Objekt in das JSON-Format. |
Weitere Einzelheiten findest du in der Results
Klassendokumentation.
Boxen
Boxes
Objekt kann verwendet werden, um Boundingboxen zu indizieren, zu bearbeiten und in verschiedene Formate zu konvertieren.
Boxen
Hier ist eine Tabelle für die Boxes
Methoden und Eigenschaften der Klasse, einschließlich ihres Namens, Typs und ihrer Beschreibung:
Name | Typ | Beschreibung |
---|---|---|
cpu() |
Methode | Verschiebe das Objekt in den Speicher CPU . |
numpy() |
Methode | Wandle das Objekt in ein Numpy-Array um. |
cuda() |
Methode | Verschiebe das Objekt in den Speicher CUDA . |
to() |
Methode | Verschiebe das Objekt an das angegebene Gerät. |
xyxy |
Eigenschaft (torch.Tensor ) |
Gib die Felder 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 ) |
Gibt die Boxen im xyxy-Format zurück, normalisiert auf die ursprüngliche Bildgröße. |
xywhn |
Eigenschaft (torch.Tensor ) |
Gibt die Boxen im xywh-Format zurück, normalisiert auf die ursprüngliche Bildgröße. |
Weitere Einzelheiten findest du in der Boxes
Klassendokumentation.
Masken
Masks
Objekt kann zum Indizieren, Manipulieren und Umwandeln von Masken in Segmente verwendet werden.
Masken
Hier ist eine Tabelle für die Masks
Methoden und Eigenschaften der Klasse, einschließlich ihres Namens, Typs und ihrer Beschreibung:
Name | Typ | Beschreibung |
---|---|---|
cpu() |
Methode | Gibt die Masken tensor auf CPU Speicher zurück. |
numpy() |
Methode | Gibt die Masken tensor als Numpy-Array zurück. |
cuda() |
Methode | Gibt die Masken tensor auf GPU Speicher zurück. |
to() |
Methode | Gibt die Masken tensor mit dem angegebenen Gerät und dtype zurück. |
xyn |
Eigenschaft (torch.Tensor ) |
Eine Liste von normalisierten Segmenten, die als Tensoren dargestellt werden. |
xy |
Eigenschaft (torch.Tensor ) |
Eine Liste von Segmenten in Pixelkoordinaten, die als Tensoren dargestellt werden. |
Weitere Einzelheiten findest du in der Masks
Klassendokumentation.
Keypoints
Keypoints
Objekt kann zum Indizieren, Manipulieren und Normalisieren von Koordinaten verwendet werden.
Keypoints
Hier ist eine Tabelle für die Keypoints
Methoden und Eigenschaften der Klasse, einschließlich ihres Namens, Typs und ihrer Beschreibung:
Name | Typ | Beschreibung |
---|---|---|
cpu() |
Methode | Gibt die Keypoints tensor auf CPU zurück. |
numpy() |
Methode | Gibt die Keypoints tensor als Numpy-Array zurück. |
cuda() |
Methode | Gibt die Keypoints tensor auf GPU zurück. |
to() |
Methode | Gibt die Keypoints tensor mit dem angegebenen Gerät und dtype zurück. |
xyn |
Eigenschaft (torch.Tensor ) |
Eine Liste von normalisierten 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 die Konfidenzwerte der Keypoints zurück, falls vorhanden, sonst keine. |
Weitere Einzelheiten findest du in der Keypoints
Klassendokumentation.
Probs
Probs
Objekt kann index, get verwendet werden top1
und top5
Indizes und Punktzahlen der Klassifizierung.
Probs
Hier ist eine Tabelle mit einer Zusammenfassung der Methoden und Eigenschaften für die Probs
Klasse:
Name | Typ | Beschreibung |
---|---|---|
cpu() |
Methode | Gibt eine Kopie der Probs tensor auf CPU zurück. |
numpy() |
Methode | Gibt eine Kopie der Probs tensor als Numpy-Array zurück. |
cuda() |
Methode | Gibt eine Kopie der Probs tensor auf GPU zurück. |
to() |
Methode | Gibt eine Kopie der probs tensor mit dem angegebenen Gerät und dtype zurück. |
top1 |
Eigenschaft (int ) |
Index der Top 1 Klasse. |
top5 |
Eigenschaft (list[int] ) |
Indizes der Top 5 Klassen. |
top1conf |
Eigenschaft (torch.Tensor ) |
Vertrauen in die Top 1 Klasse. |
top5conf |
Eigenschaft (torch.Tensor ) |
Vertraulichkeiten der Top 5 Klassen. |
Weitere Einzelheiten findest du in der Probs
Klassendokumentation.
OBB
OBB
Objekt kann verwendet werden, um orientierte Begrenzungsrahmen zu indizieren, zu bearbeiten und in verschiedene Formate zu konvertieren.
OBB
Hier ist eine Tabelle für die OBB
Methoden und Eigenschaften der Klasse, einschließlich ihres Namens, Typs und ihrer Beschreibung:
Name | Typ | Beschreibung |
---|---|---|
cpu() |
Methode | Verschiebe das Objekt in den Speicher CPU . |
numpy() |
Methode | Wandle das Objekt in ein Numpy-Array um. |
cuda() |
Methode | Verschiebe das Objekt in den Speicher CUDA . |
to() |
Methode | Verschiebe das Objekt an 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 gedrehten Boxen im xywhr-Format zurück. |
xyxyxyxy |
Eigenschaft (torch.Tensor ) |
Gibt die gedrehten Boxen im Format xyxyxyxy zurück. |
xyxyxyxyn |
Eigenschaft (torch.Tensor ) |
Gibt die gedrehten Boxen im Format xyxyxyxy zurück, normalisiert auf die Bildgröße. |
Weitere Einzelheiten findest du in der OBB
Klassendokumentation.
Ergebnisse ausdrucken
Die plot()
Methode in Results
Objekte erleichtert die Visualisierung von Vorhersagen, indem die erkannten Objekte (z. B. Bounding Boxes, Masken, Keypoints und Wahrscheinlichkeiten) über das Originalbild gelegt werden. Diese Methode gibt das kommentierte Bild als NumPy-Array zurück, sodass es einfach angezeigt oder gespeichert werden kann.
Plotten
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")
# Run inference on 'bus.jpg'
results = model(["bus.jpg", "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")
plot()
Parameter der Methode
Die plot()
Methode unterstützt verschiedene Argumente, um die Ausgabe anzupassen:
Argument | Typ | Beschreibung | Standard |
---|---|---|---|
conf |
bool |
Füge die Werte für die Aufdeckungswahrscheinlichkeit hinzu. | True |
line_width |
float |
Linienbreite der Begrenzungsrahmen. 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 |
Name der Schriftart für Textanmerkungen. | 'Arial.ttf' |
pil |
bool |
Gibt das Bild als PIL Image Objekt zurück. | False |
img |
numpy.ndarray |
Alternatives Bild zum Plotten. Verwendet das Originalbild, wenn None . |
None |
im_gpu |
torch.Tensor |
GPU-Beschleunigtes Bild für schnelleres Plotten der Maske. Form: (1, 3, 640, 640). | None |
kpt_radius |
int |
Radius für gezeichnete Keypoints. | 5 |
kpt_line |
bool |
Verbinde die Eckpunkte mit Linien. | True |
labels |
bool |
Füge Klassenbeschriftungen in Anmerkungen ein. | True |
boxes |
bool |
Überlagere die Begrenzungsrahmen auf dem Bild. | True |
masks |
bool |
Überlagere Masken auf dem Bild. | True |
probs |
bool |
Schließe Klassifizierungswahrscheinlichkeiten ein. | True |
show |
bool |
Zeige das kommentierte Bild direkt mit dem Standard-Bildbetrachter an. | False |
save |
bool |
Speichern Sie das kommentierte Bild in einer Datei, die durch filename . |
False |
filename |
str |
Pfad und Name der Datei, in der das kommentierte Bild gespeichert wird, wenn save ist True . |
None |
color_mode |
str |
Gib den Farbmodus an, z. B. "Instanz" oder "Klasse". | 'class' |
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. Threadsichere Inferenz garantiert, dass die Vorhersagen der einzelnen Threads isoliert sind und sich nicht gegenseitig beeinflussen. So werden Wettlaufsituationen vermieden und konsistente und zuverlässige Ergebnisse sichergestellt.
Wenn du YOLO Modelle in einer Multi-Thread-Anwendung verwendest, ist es wichtig, dass du für jeden Thread ein eigenes Modellobjekt instanziierst oder einen Thread-lokalen Speicher verwendest, um Konflikte zu vermeiden:
Thread-sichere Inferenz
Instanziere ein einzelnes Modell innerhalb jedes Threads für eine thread-sichere Inferenz:
from threading import Thread
from ultralytics import YOLO
def thread_safe_predict(image_path):
"""Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
local_model = YOLO("yolov8n.pt")
results = local_model.predict(image_path)
# Process results
# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("image1.jpg",)).start()
Thread(target=thread_safe_predict, args=("image2.jpg",)).start()
Einen detaillierten Einblick in die thread-sichere Inferenz mit YOLO Modellen und eine Schritt-für-Schritt-Anleitung findest du in unserem YOLO Leitfaden zur thread-sicheren Inferenz. In diesem Leitfaden findest du alle notwendigen Informationen, um häufige Fallstricke zu vermeiden und sicherzustellen, dass deine Multi-Thread-Inferenz reibungslos funktioniert.
Streaming Quelle for
-Schleife
Hier ist ein Python Skript, das OpenCV (cv2
) und YOLOv8 , um die Inferenz auf Videobilder anzuwenden. Dieses Skript setzt voraus, dass du die notwendigen Pakete bereits installiert hast (opencv-python
und ultralytics
).
Streaming for-loop
import cv2
from ultralytics import YOLO
# Load the YOLOv8 model
model = YOLO("yolov8n.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 YOLOv8 inference on the frame
results = model(frame)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the annotated frame
cv2.imshow("YOLOv8 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 für jedes Einzelbild des Videos Vorhersagen durch, visualisiert die Ergebnisse und zeigt sie in einem Fenster an. Die Schleife kann durch Drücken von "q" beendet werden.
FAQ
Was ist Ultralytics YOLOv8 und der Vorhersagemodus für Echtzeit-Schlussfolgerungen?
Ultralytics YOLOv8 ist ein modernes Modell für die Erkennung, Segmentierung und Klassifizierung von Objekten in Echtzeit. Im Prädiktionsmodus können Nutzerinnen und Nutzer Hochgeschwindigkeitsinferenzen für verschiedene Datenquellen wie Bilder, Videos und Live-Streams durchführen. Es ist auf Leistung und Vielseitigkeit ausgelegt und bietet auch Stapelverarbeitungs- und Streaming-Modi. Weitere Informationen zu den Funktionen findest du unter Ultralytics YOLOv8 predict mode.
Wie kann ich mit Ultralytics YOLOv8 aus verschiedenen Datenquellen Schlüsse ziehen?
Ultralytics YOLOv8 kann eine breite Palette von Datenquellen verarbeiten, darunter einzelne Bilder, Videos, Verzeichnisse, URLs und Streams. Du kannst die Datenquelle in der model.predict()
rufen. 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 Inferenzquellen in der Dokumentation.
Wie kann ich die Geschwindigkeit und den Speicherverbrauch von YOLOv8 optimieren?
Um die Inferenzgeschwindigkeit zu optimieren und den Speicher effizient zu verwalten, kannst du den Streaming-Modus verwenden, indem du die stream=True
in der Aufrufmethode des Prädiktors. Der Streaming-Modus erzeugt einen speichereffizienten Generator von Results
Objekte, anstatt alle Bilder 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 Streaming-Modus.
Welche Argumente für Schlussfolgerungen unterstützt Ultralytics YOLOv8 ?
Die model.predict()
Methode in YOLOv8 unterstützt verschiedene Argumente wie conf
, iou
, imgsz
, device
und mehr. Mit diesen Argumenten kannst du den Schlussfolgerungsprozess anpassen und Parameter wie Vertrauensschwellen, Bildgröße und das für die Berechnung verwendete Gerät festlegen. Ausführliche Beschreibungen dieser Argumente findest du in der Schlussfolgerungsargumente Abschnitt.
Wie kann ich die Ergebnisse der YOLOv8 Vorhersagen visualisieren und speichern?
Nachdem du die Inferenz mit YOLOv8 durchgeführt hast, wird die Results
Objekte enthalten Methoden zum Anzeigen und Speichern von Bildern mit Anmerkungen. Du kannst Methoden verwenden wie result.show()
und result.save(filename="result.jpg")
um die Ergebnisse zu visualisieren und zu speichern. Eine umfassende Liste dieser Methoden findest du in der Mit Ergebnissen arbeiten Abschnitt.