Zum Inhalt springen

Modell Vorhersage mit Ultralytics YOLO

Ultralytics YOLO Ökosystem und Integrationen

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
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 Einstellung stream=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=Falsewerden 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 Argument 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.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define path to the image file
source = 'path/to/image.jpg'

# Run inference on the source
results = model(source)  # list of Results objects

Führe eine Inferenz auf den aktuellen Bildschirminhalt als Screenshot durch.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define current screenshot as source
source = 'screen'

# Run inference on the source
results = model(source)  # list of Results objects

Führe Inferenzen für ein Bild oder Video durch, das per URL gehostet wird.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define remote image or video URL
source = 'https://ultralytics.com/images/bus.jpg'

# Run inference on the source
results = model(source)  # list of Results objects

Führe eine Inferenz für ein Bild durch, das mit der Python Imaging Library (PIL) geöffnet wurde.

from PIL import Image
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Open an image using PIL
source = Image.open('path/to/image.jpg')

# Run inference on the source
results = model(source)  # list of Results objects

Führe Inferenzen auf einem mit OpenCV gelesenen Bild durch.

import cv2
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Read an image using OpenCV
source = cv2.imread('path/to/image.jpg')

# Run inference on the source
results = model(source)  # list of Results objects

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.

import torch
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define a path to a CSV file with images, URLs, videos and directories
source = 'path/to/file.csv'

# Run inference on the source
results = model(source)  # list of Results objects

Führe eine Inferenz für eine Videodatei durch. Durch die Verwendung von stream=Truekannst du einen Generator für Ergebnisobjekte erstellen, um den Speicherbedarf zu reduzieren.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define path to video file
source = 'path/to/video.mp4'

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

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/**/*.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define path to directory containing images and videos for inference
source = 'path/to/dir'

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

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=Truekannst du einen Generator für Ergebnisobjekte erstellen, um den Speicherbedarf für lange Videos zu reduzieren.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Define source as YouTube video URL
source = 'https://youtu.be/LNwODJXcvt4'

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

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

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Run inference on 'bus.jpg' with arguments
model.predict('bus.jpg', save=True, imgsz=320, conf=0.5)

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 einer CPU, einem bestimmten Grafikprozessor oder anderen Recheneinheiten 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 Truezeigt 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 Ermöglicht das Speichern der kommentierten Bilder oder Videos in einer Datei. Nützlich für die Dokumentation, weitere Analysen oder das Teilen von Ergebnissen.
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 or int None Legt die Linienbreite von Begrenzungsrahmen fest. Wenn NoneDie 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

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Run inference on an image
results = model('bus.jpg')  # list of 1 Results object
results = model(['bus.jpg', 'zidane.jpg'])  # list of 2 Results objects

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 im CPU-Speicher zurück.
numpy() Results Gibt eine Kopie des Results-Objekts mit allen Tensoren als Numpy-Arrays zurück.
cuda() Results Gibt eine Kopie des Results-Objekts mit allen Tensoren im GPU-Speicher 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

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.boxes)  # print the Boxes object containing the detection bounding boxes

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 CPU-Speicher.
numpy() Methode Wandle das Objekt in ein Numpy-Array um.
cuda() Methode Verschiebe das Objekt in den CUDA Speicher.
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

from ultralytics import YOLO

# Load a pretrained YOLOv8n-seg Segment model
model = YOLO('yolov8n-seg.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.masks)  # print the Masks object containing the detected instance masks

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 im CPU-Speicher zurück.
numpy() Methode Gibt die Masken tensor als Numpy-Array zurück.
cuda() Methode Gibt die Masken tensor im 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

from ultralytics import YOLO

# Load a pretrained YOLOv8n-pose Pose model
model = YOLO('yolov8n-pose.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.keypoints)  # print the Keypoints object containing the detected 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 im CPU-Speicher zurück.
numpy() Methode Gibt die Keypoints tensor als Numpy-Array zurück.
cuda() Methode Gibt die Keypoints tensor im GPU-Speicher 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

from ultralytics import YOLO

# Load a pretrained YOLOv8n-cls Classify model
model = YOLO('yolov8n-cls.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.probs)  # print the Probs object containing the detected class probabilities

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 im CPU-Speicher zurück.
numpy() Methode Gibt eine Kopie der Probs tensor als Numpy-Array zurück.
cuda() Methode Gibt eine Kopie der Probs tensor im GPU-Speicher 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

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO('yolov8n-obb.pt')

# Run inference on an image
results = model('bus.jpg')  # results list

# View results
for r in results:
    print(r.obb)  # print the OBB object containing the oriented detection bounding boxes

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 CPU-Speicher.
numpy() Methode Wandle das Objekt in ein Numpy-Array um.
cuda() Methode Verschiebe das Objekt in den CUDA Speicher.
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

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 ultralytics import YOLO
from threading import Thread

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.



Erstellt 2023-11-12, Aktualisiert 2024-05-03
Autoren: glenn-jocher (18), UltralyticsAssistant (1), Burhan-Q (1), plashchynski (1), tensorturtle (1), AyushExel (1), Laughing-q (1)

Kommentare