Modellvorhersage mit Ultralytics YOLO#
Einleitung#
In der Welt des maschinellen Lernens und der Computer Vision wird der Prozess, visuelle Daten zu verstehen, oft als Inferenz oder Vorhersage bezeichnet. Ultralytics YOLO26 bietet eine leistungsstarke Funktion namens predict mode, die für eine leistungsstarke Inferenz in Echtzeit über eine große Bandbreite von Datenquellen hinweg entwickelt wurde.
Sieh dir die unreleased YOLO27 preview für geplante Inferenzbeispiele an.
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 stürzender Personen |
Warum Ultralytics YOLO für die Inferenz verwenden?#
Hier sind einige Gründe, warum du den Vorhersagemodus von YOLO26 für deine verschiedenen Inferenzanforderungen in Betracht ziehen solltest:
- Vielseitigkeit: Inferenz auf Bildern, Videos und sogar Live-Streams möglich.
- Leistung: Für schnelle Verarbeitung in Echtzeit entwickelt, ohne die Genauigkeit zu beeinträchtigen.
- Benutzerfreundlichkeit: Intuitive Python- und CLI-Schnittstellen für schnelle Bereitstellung und Tests.
- Hochgradig anpassbar: Verschiedene Einstellungen und Parameter ermöglichen es, das Inferenzverhalten des Modells an deine spezifischen Anforderungen anzupassen.
- Produktionsbereit: Stelle Modelle als Ultralytics Platform-Inferenzendpunkte mit automatischer Skalierung und Überwachung bereit oder führe die Inferenz lokal aus.
Wichtige Funktionen des Vorhersagemodus#
Der Vorhersagemodus von YOLO26 ist robust und vielseitig ausgelegt und bietet folgende Funktionen:
- Unterstützung mehrerer Datenquellen: Unabhängig davon, ob deine Daten aus einzelnen Bildern, einer Bildersammlung, Videodateien oder Videostreams in Echtzeit bestehen – der Vorhersagemodus ist dafür geeignet.
- Streaming-Modus: Verwende die Streaming-Funktion, um einen speichereffizienten Generator von
Results-Objekten zu erzeugen. Aktiviere ihn, indem dustream=Truein der Aufrufmethode des Predictors setzt. Anders als das Standardverhalten (stream=False), das eine Liste mit allen Ergebnissen zurückgibt, liefertstream=Truedie Ergebnisse einzeln und eignet sich dadurch besonders für lange Videos und Live-Streams. - Stapelverarbeitung: Verarbeite mehrere Bilder oder Videoframes in einem einzigen Stapel und verkürze dadurch die gesamte Inferenzzeit weiter.
- Einfache Integration: Dank der flexiblen API lässt sich der Modus problemlos 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 diskInferenzquellen#
YOLO26 kann, wie in der folgenden Tabelle dargestellt, verschiedene Arten von Eingabequellen für die Inferenz verarbeiten. Dazu gehören statische Bilder, Videostreams und verschiedene Datenformate. Die Tabelle zeigt außerdem, ob jede Quelle mit dem Argument stream=True ✅ im Streaming-Modus verwendet werden kann. Der Streaming-Modus eignet sich für die Verarbeitung von Videos oder Live-Streams, da er einen Generator mit Ergebnissen erstellt, anstatt alle Frames in den Arbeitsspeicher zu laden.
Verwende stream=True zur Verarbeitung langer Videos oder großer Datensätze, um den Arbeitsspeicher effizient zu verwalten. Wenn stream=False verwendet wird, werden die Ergebnisse aller Frames oder Datenpunkte im Arbeitsspeicher gespeichert. Bei großen Eingaben kann sich dies schnell summieren und zu Fehlern wegen nicht ausreichenden Arbeitsspeichers führen. Im Gegensatz dazu verwendet stream=True einen Generator, der nur die Ergebnisse des aktuellen Frames oder Datenpunkts im Arbeitsspeicher hält, wodurch der Speicherverbrauch deutlich sinkt und Probleme durch unzureichenden Arbeitsspeicher verhindert werden.
| Quelle | Beispiel | Typ | Hinweise |
|---|---|---|---|
| image | 'image.jpg' | str oder Path | Einzelne Bilddatei. |
| URL | 'https://ultralytics.com/images/bus.jpg' | str | URL zu einem Bild. |
| screenshot | 'screen' | str | Screenshot aufnehmen. |
| 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. |
| directory ✅ | 'path/' | str oder Path | Pfad zu einem Verzeichnis mit Bildern oder Videos. |
| glob ✅ | 'path/*.jpg' | str | Glob-Muster zum Abgleichen 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; 8 Streams werden beispielsweise mit einer Stapelgröße von 8 ausgeführt. |
| webcam ✅ | 0 | int | Index des verbundenen Kamerageräts, auf dem die Inferenz ausgeführt werden soll. |
Nachfolgend findest du Codebeispiele für die Verwendung der einzelnen Quellentypen:
Inferenz auf einer Bilddatei ausführen.
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 objectsInferenzargumente#
model.predict() akzeptiert mehrere Argumente, die zur Laufzeit der Inferenz übergeben werden können, um Standardwerte zu überschreiben:
Feste Form im Vergleich zu minimalem Rechteck (rect)#
Standardmäßig verwendet predict rect=True, wodurch nach Möglichkeit eine Auffüllung auf ein minimales Rechteck aktiviert wird. Das Bild wird so skaliert, dass es in imgsz passt, und nur bis zum nächsten Vielfachen des Strides aufgefüllt. Dadurch kann der finale Tensor kleiner als imgsz sein. Die Auffüllung auf ein minimales Rechteck wird nur verwendet, wenn alle Bilder im Stapel dieselbe Form haben und das Backend dies unterstützt (PyTorch .pt oder dynamisches ONNX / Triton). Andernfalls werden die Bilder auf das vollständige Ziel imgsz aufgefüllt.
Verwende rect=False, um immer auf das vollständige Ziel imgsz aufzufüllen. Dies wird empfohlen, wenn du eine feste Eingabegröße benötigst, die zu exportierten Modellen (ONNX, TensorRT usw.) passt.
Ganzzahl im Vergleich zu Tupel imgsz
- Eine Ganzzahl
imgsz=640wird nach der Anpassung an den Stride zu einem quadratischen Ziel(640, 640). - Ein Tupel
imgsz=(384, 672)legt ein rechteckiges Ziel fest. Mitrect=Trueundauto=Truekann der tatsächliche Tensor kleiner als dieses Ziel sein.
Training im Vergleich zu predict/export
Das Training akzeptiert nur eine einzelne Ganzzahl imgsz (eine [h, w]-Liste wird auf den größten Wert reduziert). Predict und Export akzeptieren entweder eine Ganzzahl 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)Inferenzargumente:
| Argument | Typ | Standardwert | Beschreibung |
|---|---|---|---|
source | str oder int oder None | None | Gibt die Datenquelle für die Inferenz an. Möglich sind ein Bildpfad, eine Videodatei, ein Verzeichnis, eine URL oder eine Geräte-ID für Live-Feeds. Wenn dieser Wert fehlt, wird eine Warnung protokolliert und das Modell greift auf die integrierten Demo-Ressourcen zurück (ultralytics/assets oder bei OBB eine Demo-URL). Es werden zahlreiche Formate und Quellen unterstützt, sodass eine flexible Anwendung auf verschiedene Eingabetypen möglich ist. |
conf | float | 0.25 | Legt den Mindestkonfidenzschwellwert für Erkennungen fest. Objekte, die mit einer Konfidenz unterhalb dieses Schwellwerts erkannt werden, werden verworfen. Das Anpassen dieses Werts kann helfen, falsch positive Erkennungen zu reduzieren. |
iou | float | 0.7 | Intersection over Union-Schwellwert (IoU) für die Non-Maximum Suppression (NMS). Niedrigere Werte führen zu weniger Erkennungen, da sich überlappende Boxen entfernt werden, was nützlich ist, um Duplikate zu reduzieren. |
imgsz | int oder tuple | 640 | Zielgröße für Letterbox. Eine Ganzzahl ergibt ein quadratisches N×N; ein Tupel ergibt (height, width). Bei rect=True kann der tatsächliche Tensor aufgrund der Auffüllung auf das kleinste Rechteck kleiner als dieses Ziel sein. Verwende rect=False für eine feste Größe. Siehe Feste Form gegenüber kleinstem Rechteck. |
rect | bool | True | Bei True wird nach Möglichkeit eine Auffüllung auf das kleinste Rechteck verwendet (gleichförmiger Batch und unterstütztes Backend). Bei False wird immer auf das vollständige imgsz aufgefüllt. Siehe Feste Form gegenüber kleinstem Rechteck. |
quantize | int oder str | None | Inferenzgenauigkeit: 16/"fp16" und 32/"fp32"/nicht gesetzt wählen FP16- oder FP32-Berechnungen für PyTorch- und TorchScript-Modelle; andere Formate berechnen mit der Genauigkeit, die ihr Artefakt und ihre Laufzeit auswählen. Bei 16 rundet OpenVINO die Eingabe auf dem Client weiterhin auf FP16 und erweitert sie wieder auf FP32, ohne zu ändern, worin die Laufzeit rechnet. Die INT8-/PTQ-Quantisierung wird während des Exports konfiguriert und anschließend durch das 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 die Auswahl zwischen CPU, einer bestimmten GPU, Huawei Ascend NPU oder anderen Rechengeräten für die Modellausführung. |
dnn | bool | False | Wenn True, wird für die Inferenz von ONNX-Modellen das OpenCV-DNN-Modul anstelle von ONNX Runtime verwendet. |
data | str | None | Pfad zu einer Dataset-YAML-Datei (z. B. coco8.yaml), die nur wegen ihres names gelesen wird und nur dann, wenn das geladene Modell keine eigenen Klassennamen enthält: bei einem Export eines Drittanbieters oder einem von den mitgelieferten Metadaten getrennten Ultralytics-Export. Ein solches Modell meldet ansonsten class0, class1 usw. |
batch | int | 1 | Gibt die Batchgröße für die Inferenz an (funktioniert nur, wenn die Quelle ein Verzeichnis, eine Videodatei oder eine .txt-Datei ist). Eine größere Batchgröße kann einen höheren Durchsatz ermöglichen und dadurch die für die Inferenz benötigte Gesamtzeit verkürzen. |
max_det | int | 300 | Maximale Anzahl zulässiger Erkennungen pro Bild. Begrenzt die Gesamtzahl der Objekte, die das Modell bei einer einzelnen Inferenz erkennen kann, und verhindert übermäßig viele Ausgaben in dichten Szenen. |
vid_stride | int | 1 | Bildschritt für Videoeingaben. Ermöglicht das Überspringen von Bildern in Videos, um die Verarbeitung auf Kosten der zeitlichen Auflösung zu beschleunigen. Ein Wert von 1 verarbeitet jedes Bild, höhere Werte überspringen Bilder. |
stream_buffer | bool | False | Legt fest, ob eingehende Bilder für Videostreams in eine Warteschlange eingereiht werden. Bei False werden alte Bilder verworfen, um Platz für neue zu schaffen (optimiert für Echtzeitanwendungen). Bei True werden neue Bilder in einem Puffer eingereiht, sodass keine Bilder übersprungen werden, was jedoch zu Latenz führt, wenn die Inferenz-FPS niedriger als die Stream-FPS ist. |
visualize | bool | False | Speichert neben jeder Vorhersage eine Aktivierungskarte der Klassen, die zeigt, welche Pixel die vorhergesagten Klassenwerte 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 Testzeit-Augmentierung (TTA) für Vorhersagen, wodurch sich die Robustheit der Erkennung möglicherweise auf Kosten der Inferenzgeschwindigkeit verbessert. Nur für Ultralytics-PyTorch-Modelle verfügbar. |
agnostic_nms | bool | False | Aktiviert die klassenagnostische Non-Maximum Suppression (NMS), wodurch überlappende Boxen mit niedrigerem Score über verschiedene Klassen hinweg unterdrückt werden, anstatt nur innerhalb derselben Klasse. Nützlich in Szenarien der Multiklassen-Erkennung, in denen Klassenüberlappungen häufig sind. Bei NMS-freier Inferenz (nms=False auf YOLO26 oder YOLOv10) verhindert dies lediglich, dass dieselbe Erkennung mit mehreren Klassenlabels erscheint (IoU=1.0-Duplikate), und führt keine Schwellenwert-basierte Unterdrückung von IoU zwischen unterschiedlichen Boxen durch. |
classes | list[int] | None | Filtert Vorhersagen auf eine Gruppe von Klassen-IDs. Es werden nur Erkennungen zurückgegeben, die zu den angegebenen Klassen gehören. Nützlich, um sich bei Mehrklassenerkennungsaufgaben auf relevante Objekte zu konzentrieren. |
retina_masks | bool | False | Gibt Segmentierungsmasken mit hoher Auflösung zurück. Die zurückgegebenen Masken (masks.data) entsprechen bei Aktivierung der Größe des Originalbilds. Bei Deaktivierung haben sie die während der Inferenz verwendete Bildgröße. |
embed | list[int] | None | Gibt die Layer an, aus denen Merkmalsvektoren oder Embeddings extrahiert werden sollen. Verwende model.embed(source) für Embeddings des vorletzten Layers oder model.predict(source, embed=[layer]), um bestimmte Layer auszuwählen. Nützlich für nachgelagerte Aufgaben wie Clustering oder Ähnlichkeitssuche. Nur für Ultralytics-PyTorch-Modelle verfügbar. |
project | str | None | Name des Projektverzeichnisses, in dem die Vorhersageausgaben gespeichert werden, wenn save aktiviert ist. |
name | str | None | Name des Vorhersagelaufs. Wird zum Erstellen eines Unterverzeichnisses im Projektordner verwendet, in dem die Vorhersageausgaben gespeichert werden, wenn save aktiviert ist. |
stream | bool | False | Ermöglicht eine speichereffiziente Verarbeitung langer Videos oder zahlreicher Bilder, indem ein Generator von Results-Objekten zurückgegeben wird, anstatt alle Bilder auf einmal in den Speicher zu laden. |
verbose | bool | True | Steuert, ob detaillierte Inferenzprotokolle im Terminal angezeigt werden, und liefert Echtzeitinformationen zum Vorhersageprozess. |
compile | bool oder str | False | Aktiviert die Graphkompilierung mit torch.compile von PyTorch 2.x über backend='inductor'. Akzeptiert True → "default", False → Deaktivierung oder einen Zeichenkettenmodus wie "default", "reduce-overhead", "max-autotune-no-cudagraphs". Bei fehlender Unterstützung wird mit einer Warnung auf den Eager-Modus zurückgefallen. |
channels_last | bool | None | Verwendet das Speicherformat channels_last (NHWC) für native PyTorch-Inferenz. None aktiviert es automatisch auf Linux- und Windows-x86-CPUs mit aktiviertem oneDNN und PyTorch 1.13 oder neuer, False deaktiviert es und True fordert es auf unterstützten x86-CPUs oder CUDA-Geräten an. ARM64, MPS, ältere PyTorch-Versionen, CPUs ohne oneDNN sowie exportierte Formate wie TensorRT und ONNX bleiben unverändert. |
nms | bool, optional | None | Führt standardmäßig One-to-Many-Inferenz mit NMS aus (None oder True). Setze False, um den NMS-freien One-to-One-Kopf zu verwenden, sofern verfügbar. Weitere Details findest du im End-to-End Detection guide. |
Argumente für die Visualisierung:
| Argument | Typ | Standardwert | Beschreibung |
|---|---|---|---|
show | bool | False | Wenn True, werden die annotierten Bilder oder Videos in einem Fenster angezeigt. Dies ist 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 das Teilen von Ergebnissen. Standardmäßig True bei Verwendung der CLI und False bei Verwendung in Python. |
save_frames | bool | False | Speichert bei der Verarbeitung von Videos einzelne Bilder als Dateien. Nützlich zum Extrahieren bestimmter Bilder oder für eine detaillierte Einzelbildanalyse. |
save_txt | bool | False | Speichert Erkennungsergebnisse in einer Textdatei nach dem Format [class] [x_center] [y_center] [width] [height] [confidence]. Nützlich für die Integration mit anderen Analysewerkzeugen. |
save_conf | bool | False | Fügt Konfidenzwerte in die gespeicherten Textdateien ein. Erhöht den für die Nachverarbeitung und Analyse verfügbaren Detailgrad. |
save_crop | bool | False | Speichert zugeschnittene Bilder der Erkennungen. Nützlich für Dataset-Augmentierung, Analysen oder das Erstellen fokussierter Datasets für bestimmte Objekte. |
show_labels | bool | True | Zeigt Labels für jede Erkennung in der visuellen Ausgabe an. Dies ermöglicht ein unmittelbares Verständnis der erkannten Objekte. |
show_conf | bool | True | Zeigt neben dem Label den Konfidenzwert für jede Erkennung an. Dadurch erhältst du Einblick in die Sicherheit des Modells bei jeder Erkennung. |
show_boxes | bool | True | Zeichnet Begrenzungsrahmen um erkannte Objekte. Dies ist für die visuelle Identifizierung und Lokalisierung von Objekten in Bildern oder Videobildern unerlässlich. |
line_width | int or None | None | Gibt die Linienbreite der Begrenzungsboxen an. Bei None wird die Linienbreite automatisch anhand der Bildgröße angepasst. Ermöglicht eine visuelle Anpassung für bessere Übersichtlichkeit. |
Bild- und Videoformate#
YOLO26 unterstützt verschiedene Bild- und Videoformate, wie in ultralytics/data/utils.py angegeben. In den folgenden Tabellen findest du die gültigen Endungen und Beispiele für Vorhersagebefehle.
Bilder#
Die folgende Tabelle enthält gültige Ultralytics-Bildformate.
HEIC/HEIF-Formate erfordern pi-heif, das bei der ersten Verwendung automatisch installiert wird. AVIF wird nativ von Pillow unterstützt.
| Bildendungen | Beispiel für einen Vorhersagebefehl | Referenz |
|---|---|---|
.avif | yolo predict source=image.avif | AV1-Bilddateiformat |
.bmp | yolo predict source=image.bmp | Microsoft-BMP-Dateiformat |
.dng | yolo predict source=image.dng | Adobe DNG |
.heic | yolo predict source=image.heic | Hocheffizientes Bildformat |
.heif | yolo predict source=image.heif | Hocheffizientes Bildformat |
.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 folgende Tabelle enthält gültige Ultralytics-Videoformate.
| Videoendungen | Beispiel für einen Vorhersagebefehl | 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 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-Transportstream |
.wmv | yolo predict source=video.wmv | Windows Media Video |
.webm | yolo predict source=video.webm | WebM-Projekt |
Arbeiten mit Ergebnissen#
Alle Ultralytics-Aufrufe von predict() 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 verfügen über die folgenden Attribute:
| Attribut | Typ | Beschreibung |
|---|---|---|
orig_img | np.ndarray | Das Originalbild als NumPy-Array. |
orig_shape | tuple | Die Form des Originalbilds im Format (Höhe, Breite). |
boxes | Boxes, optional | Ein Boxes-Objekt mit den Begrenzungsrahmen der Erkennungen. |
masks | Masks, optional | Ein Masks-Objekt mit den Erkennungsmasken. |
probs | Probs, optional | Ein Probs-Objekt mit den Wahrscheinlichkeiten jeder Klasse für die Klassifizierungsaufgabe. |
keypoints | Keypoints, optional | Ein Keypoints-Objekt mit den erkannten Schlüsselpunkten für jedes Objekt. |
obb | OBB, optional | Ein OBB-Objekt mit orientierten Begrenzungsrahmen. |
semantic_mask | SemanticMask, optional | Ein SemanticMask-Objekt mit einer dichten Klassenkarte pro Pixel. |
speed | dict | Ein Wörterbuch mit den Geschwindigkeiten der Vorverarbeitung, Inferenz und Nachbearbeitung in Millisekunden pro Bild. |
names | dict | Ein Wörterbuch, das Klassenindizes auf Klassennamen abbildet. |
path | str | Der Pfad zur Bilddatei. |
save_dir | str, optional | Verzeichnis zum Speichern der Ergebnisse. |
Ergebnisse nach Aufgabe#
Welche Felder unten ausgefüllt werden, hängt von der Aufgabe deines Modells ab — vergleiche Objekterkennung, Segmentierung, semantische Segmentierung, Tiefenschätzung, Klassifizierung, Pose und OBB, falls du dich noch für keine entschieden hast. Jede Vorhersage gibt ein Results-Objekt pro Bild oder Frame zurück. Die obigen Standardfelder sind immer verfügbar, während die aufgabenspezifischen Vorhersagedaten in den Feldern unten gespeichert werden. YOLO-Koordinaten- und Konfidenztensoren sind torch.float32; Wahrscheinlichkeitstensoren sind torch.float32, es sei denn, es wird Halauflösung verwendet, dann torch.float16. Nach result.numpy() werden Tensor zu NumPy-Arrays mit passenden NumPy-Datentypen. Instanzmasken sind binäre torch.uint8-Tensoren, während semantische Masken den kleinsten praktischen Ganzzahl-Datentypen 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) | Rohdaten [x1,y1,x2,y2,conf,cls] sowie eine 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; für Namen in int umwandeln. |
Results-Objekte verfügen über die folgenden Methoden:
| Methode | Rückgabetyp | Beschreibung |
|---|---|---|
update() | None | Aktualisiert das Results-Objekt mit neuen Daten wie Boxen, Masken, Wahrscheinlichkeiten, OBB, Schlüsselpunkten oder semantischen Masken. |
cpu() | Results | Gibt eine Kopie des Results-Objekts zurück, bei der alle Tensoren in den CPU-Speicher verschoben wurden. |
numpy() | Results | Gibt eine Kopie des Results-Objekts zurück, bei der alle Tensoren in NumPy-Arrays konvertiert wurden. |
cuda() | Results | Gibt eine Kopie des Results-Objekts zurück, bei der alle Tensoren in den GPU-Speicher verschoben wurden. |
to() | Results | Gibt eine Kopie des Results-Objekts zurück, bei der die Tensoren auf das angegebene Gerät verschoben und in den angegebenen Datentyp konvertiert wurden. |
new() | Results | Erstellt ein neues Results-Objekt mit denselben Attributen für Bild, Pfad, Namen und Geschwindigkeit. |
plot() | np.ndarray | Zeichnet die Erkennungsergebnisse auf einem BGR-Eingabebild ein und gibt das annotierte Bild zurück. |
show() | None | Zeigt das Bild mit den 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 für jede Aufgabe eine Protokollzeichenfolge zurück, in der die Erkennungs- und Klassifizierungsergebnisse detailliert aufgeführt sind. |
save_txt() | str | Speichert die 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 die Inferenz-Ergebnisse in ein zusammengefasstes Dictionary, optional mit Normalisierung. |
to_df() | DataFrame | Konvertiert die Erkennungsergebnisse in einen Polars DataFrame. |
to_csv() | str | Konvertiert die Erkennungsergebnisse in das CSV-Format. |
to_json() | str | Konvertiert die Erkennungsergebnisse in das JSON-Format. |
Weitere Informationen findest du in der Dokumentation der Klasse Results.
Boxen#
Das Boxes-Objekt kann zum Indizieren, Bearbeiten und Konvertieren von Bounding Boxes in verschiedene Formate verwendet werden.
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 mit den Methoden und Eigenschaften der Klasse Boxes, einschließlich Name, Typ und Beschreibung:
| Name | Typ | Beschreibung |
|---|---|---|
cpu() | Methode | Verschiebt das Objekt in den CPU-Speicher. |
numpy() | Methode | Konvertiert das Objekt in ein NumPy-Array. |
cuda() | Methode | Verschiebt das Objekt in den CUDA-Speicher. |
to() | Methode | Verschiebt das Objekt auf das angegebene Gerät. |
xyxy | Eigenschaft (torch.Tensor) | Gibt die Boxen im xyxy-Format zurück. |
conf | Eigenschaft (torch.Tensor) | Gibt die Konfidenzwerte der Boxen zurück. |
cls | Eigenschaft (torch.Tensor) | Gibt die Klassenwerte der Boxen zurück. |
id | Eigenschaft (torch.Tensor) | Gibt die Track-IDs der Boxen zurück, sofern verfügbar. |
xywh | Eigenschaft (torch.Tensor) | Gibt die Boxen im xywh-Format zurück. |
xyxyn | Eigenschaft (torch.Tensor) | Gibt die Boxen im xyxy-Format zurück, normalisiert anhand der ursprünglichen Bildgröße. |
xywhn | Eigenschaft (torch.Tensor) | Gibt die Boxen im xywh-Format zurück, normalisiert anhand der ursprünglichen Bildgröße. |
Weitere Informationen findest du in der Dokumentation der Klasse Boxes.
Masken#
Das Masks-Objekt kann zum Indizieren, Bearbeiten und Konvertieren von Masken in Segmente verwendet werden.
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 mit den Methoden und Eigenschaften der Klasse Masks, einschließlich Name, Typ und Beschreibung:
| Name | Typ | Beschreibung |
|---|---|---|
data | Eigenschaft (torch.Tensor) | Binärer Maskentensor des torch.uint8-Objekts mit der Form (N,H,W) und den Werten 0 oder 1. |
cpu() | Methode | Gibt den Maskentensor im CPU-Speicher zurück. |
numpy() | Methode | Gibt den Maskentensor als NumPy-Array zurück. |
cuda() | Methode | Gibt den Maskentensor im GPU-Speicher zurück. |
to() | Methode | Gibt den Maskentensor mit dem angegebenen Gerät und Datentyp zurück. |
xyn | Eigenschaft (list[np.ndarray]) | Eine Liste normalisierter Maskenpolygone. |
xy | Eigenschaft (list[np.ndarray]) | Eine Liste von Maskenpolygonen in Pixelkoordinaten. |
Weitere Informationen findest du in der Dokumentation der Klasse Masks.
SemanticMask#
Das SemanticMask-Objekt speichert für die Ergebnisse der semantischen Segmentierung eine dichte Klassenkarte. Anders als Masks enthält es keine binäre Maske pro Objekt und stellt keine Hilfsfunktionen für Polygone bereit.
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). Der Datentyp ist torch.uint8, torch.int16 oder torch.int32 und wird anhand der Klassenanzahl ausgewählt. |
shape | Eigenschaft (tuple) | Form der Klassenkarte, die normalerweise result.orig_shape entspricht. |
cpu() | Methode | Gibt den Tensor der semantischen Maske im CPU-Speicher zurück. |
numpy() | Methode | Gibt den Tensor der semantischen Maske als NumPy-Array zurück. |
cuda() | Methode | Gibt den Tensor der semantischen Maske im GPU-Speicher zurück. |
to() | Methode | Gibt den Tensor der semantischen Maske mit dem angegebenen Gerät und Datentyp zurück. |
Keypoints#
Das Keypoints-Objekt kann zum Indizieren, Bearbeiten und Normalisieren von Koordinaten verwendet werden.
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 mit den Methoden und Eigenschaften der Klasse Keypoints, einschließlich Name, Typ und 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 die Konfidenzwerte der Keypoints zurück, sofern verfügbar, andernfalls None. |
Weitere Informationen findest du in der Dokumentation der Klasse Keypoints.
Probs#
Das Probs-Objekt kann verwendet werden, um die Klassifizierungsindizes und -scores top1 und top5 abzurufen.
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 mit einer Zusammenfassung der Methoden und Eigenschaften der Klasse Probs:
| 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 Informationen findest du in der Dokumentation der Klasse Probs.
OBB#
Das OBB-Objekt kann zum Indizieren, Bearbeiten und Konvertieren von orientierten Bounding Boxes in verschiedene Formate verwendet werden.
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 mit den Methoden und Eigenschaften der Klasse OBB, einschließlich Name, Typ und Beschreibung:
| Name | Typ | Beschreibung |
|---|---|---|
cpu() | Methode | Verschiebt das Objekt in den CPU-Speicher. |
numpy() | Methode | Konvertiert das Objekt in ein NumPy-Array. |
cuda() | Methode | Verschiebt das Objekt in den CUDA-Speicher. |
to() | Methode | Verschiebt das Objekt auf das angegebene Gerät. |
conf | Eigenschaft (torch.Tensor) | Gibt die Konfidenzwerte der Boxen zurück. |
cls | Eigenschaft (torch.Tensor) | Gibt die Klassenwerte der Boxen zurück. |
id | Eigenschaft (torch.Tensor) | Gibt die Track-IDs der Boxen zurück, sofern 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 xyxyxyxy-Format zurück. |
xyxyxyxyn | Eigenschaft (torch.Tensor) | Gibt die gedrehten Boxen im xyxyxyxy-Format zurück, normalisiert anhand der Bildgröße. |
Weitere Informationen findest du in der Dokumentation der Klasse OBB.
Ergebnisse darstellen#
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, sodass es einfach angezeigt oder gespeichert werden kann.
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")Parameter der Methode plot()#
Die Methode plot() unterstützt verschiedene Argumente zur Anpassung der Ausgabe:
| Argument | Typ | Beschreibung | Standardwert |
|---|---|---|---|
conf | bool | Erkennungskonfidenzen einbeziehen. | True |
line_width | float | Linienbreite der Bounding Boxes. Wird an die Bildgröße angepasst, wenn None. | None |
font_size | float | Schriftgröße des Textes. Wird an die Bildgröße angepasst, wenn None. | None |
font | str | Schriftname für Textannotationen. | 'Arial.ttf' |
pil | bool | Bild als PIL-Image-Objekt zurückgeben. | False |
img | np.ndarray | torch.Tensor | Alternatives Bild. Tensoren müssen als zusammenhängendes HWC-BGR-uint8 vorliegen. | None |
kpt_radius | int | Radius der eingezeichneten Keypoints. | 5 |
kpt_line | bool | Keypoints mit Linien verbinden. | True |
labels | bool | Klassenbezeichnungen in die Annotationen aufnehmen. | 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 standardmäßigen Bildbetrachter anzeigen. | False |
save | bool | Das annotierte Bild in der durch filename angegebenen Datei speichern. | False |
filename | str | Pfad und Name der Datei, in der das annotierte Bild gespeichert werden soll, wenn save gleich True ist. | None |
color_mode | str | Den Farbmodus angeben, z. B. „instance“ oder „class“. | 'class' |
txt_color | tuple[int, int, int] | BGR-Textfarbe für die Bounding-Box- und Bildklassifizierungsbezeichnung. | (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 stellt sicher, dass die Vorhersagen jedes Threads isoliert sind und sich nicht gegenseitig beeinflussen. Dadurch werden Race Conditions vermieden und konsistente, zuverlässige Ausgaben gewährleistet.
Wenn du YOLO-Modelle in einer Multithreading-Anwendung verwendest, ist es wichtig, für jeden Thread ein eigenes Modellobjekt zu instanziieren oder thread-lokalen Speicher zu verwenden, um Konflikte zu vermeiden:
Instanziiere für eine thread-sichere Inferenz ein einzelnes Modell innerhalb jedes Threads:
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()Eine ausführliche Betrachtung der thread-sicheren Inferenz mit YOLO-Modellen und schrittweise Anleitungen findest du in unserem Leitfaden zur thread-sicheren YOLO-Inferenz. Dieser Leitfaden enthält alle erforderlichen Informationen, um häufige Fehler zu vermeiden und sicherzustellen, dass deine Inferenz mit mehreren Threads reibungslos ausgeführt wird.
Streaming-Quelle for-Schleife#
Hier ist ein Python-Skript, das OpenCV (cv2) und YOLO verwendet, um Inferenz auf Videoframes 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 für jedes Videobild Vorhersagen aus, visualisiert die Ergebnisse und zeigt sie in einem Fenster an. Die Schleife kann durch Drücken von „q“ beendet werden.
Wie geht es weiter?#
Möchtest du über ein vortrainiertes Modell hinausgehen? Bestätige, dass deine Aufgabe zu deinem Problem passt, formatiere deine eigenen Daten mit dem Datenset-Leitfaden und trainiere anschließend damit.
FAQ#
Ultralytics YOLO ist ein hochmodernes Modell für Objekterkennung, Instanzsegmentierung, semantische Segmentierung, Tiefenschätzung und Klassifizierung in Echtzeit. Sein Vorhersagemodus ermöglicht dir eine schnelle Inferenz mit verschiedenen Datenquellen wie Bildern, Videos und Livestreams. Der Modus wurde für Leistung und Vielseitigkeit entwickelt und bietet außerdem Stapelverarbeitung und Streaming-Modi. Weitere Informationen zu den Funktionen findest du im Vorhersagemodus von Ultralytics YOLO.
Ultralytics YOLO kann eine große Bandbreite an Datenquellen verarbeiten, darunter einzelne Bilder, Videos, Verzeichnisse, URLs und Streams. Du kannst die Datenquelle im Aufruf
model.predict()angeben. Verwende beispielsweise'image.jpg'für ein lokales Bild oder'https://ultralytics.com/images/bus.jpg'für eine URL. In der Dokumentation findest du ausführliche Beispiele für verschiedene Inferenzquellen.Um die Inferenzgeschwindigkeit zu optimieren und den Speicher effizient zu verwalten, kannst du den Streaming-Modus verwenden, indem du
stream=Truein der Aufrufmethode des Predictors festlegst. Der Streaming-Modus erzeugt 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. Weitere Informationen findest du im Abschnitt zum Streaming-Modus.Die Methode
model.predict()in YOLO unterstützt verschiedene Argumente wieconf,iou,imgsz,deviceund weitere. Mit diesen Argumenten kannst du den Inferenzprozess anpassen und Parameter wie Konfidenzschwellenwerte, die Bildgröße und das für die Berechnung verwendete Gerät festlegen. Detaillierte Beschreibungen dieser Argumente findest du im Abschnitt Inferenzargumente.Verwende
model.embed(source), um Feature-Embeddings aus der vorletzten Schicht zu extrahieren, oder übergibembed=[layer_index]anmodel.predict(), um bestimmte 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 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 Dateipfad werden automatisch erstellt, z. B.result.save("path/to/result.jpg"). Eine vollständige Liste dieser Methoden findest du im Abschnitt Arbeiten mit Ergebnissen.