Vai al contenuto

Previsione del modello con Ultralytics YOLO

Ultralytics YOLO ecosistema e integrazioni

Introduzione

Nel mondo dell'apprendimento automatico e della visione computerizzata, il processo di creazione di un senso dai dati visivi è chiamato "inferenza" o "predizione". Ultralytics YOLOv8 offre una potente funzione nota come modalità di predizione che è stata pensata per un'inferenza ad alte prestazioni e in tempo reale su un'ampia gamma di fonti di dati.



Guarda: Come estrarre gli output dal modello Ultralytics YOLOv8 per i progetti personalizzati.

Applicazioni del mondo reale

Produzione Sport Sicurezza
Rilevamento dei ricambi per veicoli Rilevamento dei giocatori di calcio Rilevamento delle cadute di persone
Rilevamento dei ricambi per veicoli Rilevamento dei giocatori di calcio Rilevamento delle cadute di persone

Perché utilizzare Ultralytics YOLO per l'inferenza?

Ecco perché dovresti prendere in considerazione la modalità di predizione di YOLOv8 per le tue esigenze di inferenza:

  • Versatilità: È in grado di fare inferenze su immagini, video e persino flussi in diretta.
  • Prestazioni: Progettato per un'elaborazione in tempo reale e ad alta velocità senza sacrificare la precisione.
  • Facilità d'uso: interfacce intuitive di Python e CLI per un'implementazione e un test rapidi.
  • Altamente personalizzabile: Diverse impostazioni e parametri per regolare il comportamento del modello di inferenza in base alle tue esigenze specifiche.

Caratteristiche principali della modalità Predict

YOLOv8La modalità di previsione è stata progettata per essere robusta e versatile:

  • Compatibilità con più fonti di dati: Sia che i tuoi dati siano sotto forma di singole immagini, di una raccolta di immagini, di file video o di flussi video in tempo reale, la modalità di previsione ti soddisfa.
  • Modalità di streaming: Utilizza la funzione di streaming per generare un generatore efficiente di memoria di Results oggetti. Abilita questa funzione impostando stream=True nel metodo di chiamata del predittore.
  • Elaborazione batch: La possibilità di elaborare più immagini o fotogrammi video in un unico lotto, velocizzando ulteriormente i tempi di inferenza.
  • Facile da integrare: si integra facilmente con le pipeline di dati esistenti e con altri componenti software, grazie alla sua API flessibile.

Ultralytics YOLO i modelli restituiscono un elenco Python di Results o un generatore di Python efficiente dal punto di vista della memoria di Results oggetti quando stream=True viene passato al modello durante l'inferenza:

Prevedere

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

Fonti di inferenza

YOLOv8 può elaborare diversi tipi di sorgenti di input per l'inferenza, come mostrato nella tabella seguente. Le fonti includono immagini statiche, flussi video e vari formati di dati. La tabella indica anche se ogni sorgente può essere utilizzata in modalità streaming con l'argomento stream=True ✅. La modalità Streaming è vantaggiosa per l'elaborazione di video o flussi live, in quanto crea un generatore di risultati invece di caricare tutti i fotogrammi in memoria.

Suggerimento

Utilizza stream=True per l'elaborazione di video lunghi o di grandi insiemi di dati per gestire in modo efficiente la memoria. Quando stream=FalseI risultati di tutti i fotogrammi o di tutti i punti di dati vengono memorizzati, il che può portare a un rapido accumulo e a errori fuori memoria per input di grandi dimensioni. Al contrario, stream=True utilizza un generatore che mantiene in memoria solo i risultati del fotogramma o del punto dati corrente, riducendo in modo significativo il consumo di memoria e prevenendo i problemi di out-of-memory.

Fonte Argomento Tipo Note
immagine 'image.jpg' str o Path File immagine singolo.
URL 'https://ultralytics.com/images/bus.jpg' str URL di un'immagine.
screenshot 'screen' str Cattura uno screenshot.
PIL Image.open('im.jpg') PIL.Image Formato HWC con canali RGB.
OpenCV cv2.imread('im.jpg') np.ndarray Formato HWC con canali BGR uint8 (0-255).
numpy np.zeros((640,1280,3)) np.ndarray Formato HWC con canali BGR uint8 (0-255).
torch torch.zeros(16,3,320,640) torch.Tensor Formato BCHW con canali RGB float32 (0.0-1.0).
CSV 'sources.csv' str o Path File CSV contenente i percorsi di immagini, video o directory.
video ✅ 'video.mp4' str o Path File video in formati come MP4, AVI, ecc.
directory ✅ 'path/' str o Path Percorso di una directory contenente immagini o video.
glob ✅ 'path/*.jpg' str Schema globale per abbinare più file. Utilizza l'opzione * come carattere jolly.
YouTube ✅ 'https://youtu.be/LNwODJXcvt4' str URL di un video di YouTube.
flusso ✅ 'rtsp://example.com/media.mp4' str URL per i protocolli di streaming come RTSP, RTMP, TCP o un indirizzo IP.
multi-stream ✅ 'list.streams' str o Path *.streams con un URL di flusso per riga, cioè 8 flussi verranno eseguiti con una dimensione di batch pari a 8.

Di seguito sono riportati esempi di codice per l'utilizzo di ciascun tipo di sorgente:

Fonti di previsione

Esegui l'inferenza su un file immagine.

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

Esegui un'inferenza sul contenuto della schermata corrente come screenshot.

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

Esegui un'inferenza su un'immagine o un video ospitato in remoto tramite URL.

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

Esegui un'inferenza su un'immagine aperta con Python Imaging Library (PIL).

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

Esegui l'inferenza su un'immagine letta con OpenCV.

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

Esegue un'inferenza su un'immagine rappresentata come un array numpy.

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

Esegui un'inferenza su un'immagine rappresentata come PyTorch tensor .

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

Esegui un'inferenza su una raccolta di immagini, URL, video e directory elencate in un file CSV.

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

Esegui l'inferenza su un file video. Utilizzando stream=Truepuoi creare un generatore di oggetti Risultati per ridurre l'utilizzo della memoria.

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

Esegui l'inferenza su tutte le immagini e i video presenti in una directory. Per catturare anche le immagini e i video presenti nelle sottodirectory, usa uno schema glob, ad es. 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

Esegui l'inferenza su tutte le immagini e i video che corrispondono a un'espressione glob con * personaggi.

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

Esegui l'inferenza su un video di YouTube. Utilizzando stream=True, puoi creare un generatore di oggetti Risultati per ridurre l'utilizzo della memoria per i video lunghi.

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

Esegui l'inferenza su fonti di streaming remote utilizzando i protocolli RTSP, RTMP, TCP e indirizzo IP. Se vengono forniti più flussi in un *.streams allora verrà eseguita l'inferenza in batch, cioè 8 flussi verranno eseguiti con una dimensione di batch pari a 8, altrimenti i flussi singoli verranno eseguiti con una dimensione di batch pari a 1.

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

Argomenti di inferenza

model.predict() accetta più argomenti che possono essere passati al momento dell'inferenza per sovrascrivere i valori predefiniti:

Esempio

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)

Argomenti di inferenza:

Argomento Tipo Predefinito Descrizione
source str 'ultralytics/assets' Specifica la fonte dei dati per l'inferenza. Può essere un percorso di immagine, un file video, una directory, un URL o un ID di dispositivo per i feed live. Supporta un'ampia gamma di formati e fonti, consentendo un'applicazione flessibile a diversi tipi di input.
conf float 0.25 Imposta la soglia minima di confidenza per i rilevamenti. Gli oggetti rilevati con una confidenza inferiore a questa soglia saranno ignorati. La regolazione di questo valore può aiutare a ridurre i falsi positivi.
iou float 0.7 Soglia di Intersection Over Union (IoU) per la soppressione non massima (NMS). Valori più bassi comportano un minor numero di rilevamenti eliminando le caselle sovrapposte, utili per ridurre i duplicati.
imgsz int or tuple 640 Definisce la dimensione dell'immagine per l'inferenza. Può essere un singolo numero intero 640 per il ridimensionamento quadrato o una tupla (altezza, larghezza). Un dimensionamento corretto può migliorare l'accuratezza del rilevamento e la velocità di elaborazione.
half bool False Abilita l'inferenza a mezza precisione (FP16), che può accelerare l'inferenza del modello sulle GPU supportate con un impatto minimo sulla precisione.
device str None Specifica il dispositivo per l'inferenza (es, cpu, cuda:0 o 0). Permette agli utenti di selezionare una CPU, una GPU specifica o altri dispositivi di calcolo per l'esecuzione dei modelli.
max_det int 300 Numero massimo di rilevamenti consentiti per immagine. Limita il numero totale di oggetti che il modello può rilevare in una singola inferenza, prevenendo un numero eccessivo di risultati in scene dense.
vid_stride int 1 Frame stride per gli ingressi video. Consente di saltare i fotogrammi nei video per velocizzare l'elaborazione a scapito della risoluzione temporale. Un valore di 1 elabora ogni fotogramma, valori più alti saltano i fotogrammi.
stream_buffer bool False Determina se tutti i fotogrammi devono essere bufferizzati quando si elaborano i flussi video (True), oppure se il modello deve restituire il fotogramma più recente (False). Utile per le applicazioni in tempo reale.
visualize bool False Attiva la visualizzazione delle caratteristiche del modello durante l'inferenza, fornendo informazioni su ciò che il modello "vede". Utile per il debug e l'interpretazione del modello.
augment bool False Abilita l'aumento del tempo di test (TTA) per le previsioni, migliorando potenzialmente la robustezza del rilevamento al costo della velocità di inferenza.
agnostic_nms bool False Abilita la soppressione non massimale (NMS), che unisce le caselle sovrapposte di classi diverse. Utile negli scenari di rilevamento multiclasse in cui la sovrapposizione di classi è comune.
classes list[int] None Filtra le previsioni in base a un insieme di ID di classe. Verranno restituiti solo i rilevamenti appartenenti alle classi specificate. Utile per concentrarsi sugli oggetti rilevanti in attività di rilevamento multiclasse.
retina_masks bool False Utilizza maschere di segmentazione ad alta risoluzione se disponibili nel modello. Questo può migliorare la qualità delle maschere per le attività di segmentazione, fornendo dettagli più precisi.
embed list[int] None Specifica i livelli da cui estrarre i vettori di caratteristiche o gli embeddings. Utile per attività a valle come il clustering o la ricerca di somiglianze.

Argomenti di visualizzazione:

Argomento Tipo Predefinito Descrizione
show bool False Se Truevisualizza le immagini o i video annotati in una finestra. Utile per avere un feedback visivo immediato durante lo sviluppo o i test.
save bool False Consente di salvare su file le immagini o i video annotati. Utile per la documentazione, per ulteriori analisi o per condividere i risultati.
save_frames bool False Quando elabora i video, salva i singoli fotogrammi come immagini. È utile per estrarre fotogrammi specifici o per un'analisi dettagliata fotogramma per fotogramma.
save_txt bool False Salva i risultati del rilevamento in un file di testo, seguendo il formato [class] [x_center] [y_center] [width] [height] [confidence]. Utile per l'integrazione con altri strumenti di analisi.
save_conf bool False Include i punteggi di confidenza nei file di testo salvati. Aumenta i dettagli disponibili per la post-elaborazione e l'analisi.
save_crop bool False Salva le immagini ritagliate dei rilevamenti. Utile per aumentare il set di dati, per l'analisi o per creare set di dati mirati per oggetti specifici.
show_labels bool True Visualizza le etichette per ogni rilevamento nell'output visivo. Fornisce una comprensione immediata degli oggetti rilevati.
show_conf bool True Visualizza il punteggio di confidenza per ogni rilevamento accanto all'etichetta. Fornisce informazioni sulla certezza del modello per ogni rilevamento.
show_boxes bool True Disegna dei riquadri di delimitazione intorno agli oggetti rilevati. È essenziale per l'identificazione visiva e la localizzazione degli oggetti nelle immagini o nei fotogrammi video.
line_width None or int None Specifica la larghezza della linea delle caselle di delimitazione. Se NoneLa larghezza della linea viene regolata automaticamente in base alle dimensioni dell'immagine. Fornisce una personalizzazione visiva per la chiarezza.

Formati immagine e video

YOLOv8 supporta diversi formati di immagini e video, come specificato in ultralytics/data/utils .py. Vedi le tabelle seguenti per i suffissi validi e gli esempi di comandi di previsione.

Immagini

La tabella seguente contiene i formati di immagine validi di Ultralytics .

Suffissi immagine Esempio di comando Predict Riferimento
.bmp yolo predict source=image.bmp Formato file Microsoft BMP
.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 Oggetto multi immagine
.png yolo predict source=image.png Grafica di rete portatile
.tif yolo predict source=image.tif Tag Formato file immagine
.tiff yolo predict source=image.tiff Tag Formato file immagine
.webp yolo predict source=image.webp WebP
.pfm yolo predict source=image.pfm Mappa galleggiante portatile

Video

La tabella seguente contiene i formati video validi di Ultralytics .

Suffissi video Esempio di comando Predict Riferimento
.asf yolo predict source=video.asf Formato dei sistemi avanzati
.avi yolo predict source=video.avi Interleave audio-video
.gif yolo predict source=video.gif Formato di interscambio grafico
.m4v yolo predict source=video.m4v MPEG-4 Parte 14
.mkv yolo predict source=video.mkv Matroska
.mov yolo predict source=video.mov Formato file QuickTime
.mp4 yolo predict source=video.mp4 MPEG-4 Parte 14 - Wikipedia
.mpeg yolo predict source=video.mpeg MPEG-1 Parte 2
.mpg yolo predict source=video.mpg MPEG-1 Parte 2
.ts yolo predict source=video.ts Flusso di trasporto MPEG
.wmv yolo predict source=video.wmv Windows Media Video
.webm yolo predict source=video.webm Progetto WebM

Lavorare con i risultati

Tutti Ultralytics predict() restituirà un elenco di Results oggetti:

Risultati

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 gli oggetti hanno i seguenti attributi:

Attributo Tipo Descrizione
orig_img numpy.ndarray L'immagine originale come array numpy.
orig_shape tuple La forma dell'immagine originale in formato (altezza, larghezza).
boxes Boxes, optional Un oggetto Boxes contenente le caselle di delimitazione del rilevamento.
masks Masks, optional Un oggetto Masks contenente le maschere di rilevamento.
probs Probs, optional Un oggetto Probs contenente le probabilità di ogni classe per il compito di classificazione.
keypoints Keypoints, optional Un oggetto Keypoints contenente i punti chiave rilevati per ogni oggetto.
obb OBB, optional Un oggetto OBB contenente caselle di delimitazione orientate.
speed dict Un dizionario delle velocità di preprocesso, inferenza e postprocesso in millisecondi per immagine.
names dict Un dizionario di nomi di classi.
path str Il percorso del file immagine.

Results gli oggetti hanno i seguenti metodi:

Metodo Tipo di ritorno Descrizione
update() None Aggiorna le caselle, le maschere e gli attributi probs dell'oggetto Risultati.
cpu() Results Restituisce una copia dell'oggetto Results con tutti i tensori nella memoria della CPU.
numpy() Results Restituisce una copia dell'oggetto Results con tutti i tensori come array numpy.
cuda() Results Restituisce una copia dell'oggetto Results con tutti i tensori sulla memoria della GPU.
to() Results Restituisce una copia dell'oggetto Results con i tensori sul dispositivo e il tipo di d specificato.
new() Results Restituisce un nuovo oggetto Results con la stessa immagine, lo stesso percorso e gli stessi nomi.
plot() numpy.ndarray Traccia i risultati del rilevamento. Restituisce un array numpy dell'immagine annotata.
show() None Mostra i risultati annotati sullo schermo.
save() None Salva i risultati annotati in un file.
verbose() str Restituisce la stringa di log per ogni attività.
save_txt() None Salva le previsioni in un file txt.
save_crop() None Salva le previsioni ritagliate in save_dir/cls/file_name.jpg.
tojson() str Converte l'oggetto in formato JSON.

Per maggiori dettagli consulta la sezione Results documentazione della classe.

Scatole

Boxes può essere utilizzato per indicizzare, manipolare e convertire i rettangoli di selezione in diversi formati.

Scatole

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

Ecco una tabella per il Boxes metodi e proprietà della classe, compresi il nome, il tipo e la descrizione:

Nome Tipo Descrizione
cpu() Metodo Sposta l'oggetto nella memoria della CPU.
numpy() Metodo Converte l'oggetto in un array numpy.
cuda() Metodo Sposta l'oggetto nella memoria CUDA.
to() Metodo Sposta l'oggetto nel dispositivo specificato.
xyxy Proprietà (torch.Tensor) Restituisce le caselle in formato xyxy.
conf Proprietà (torch.Tensor) Restituisce i valori di confidenza delle caselle.
cls Proprietà (torch.Tensor) Restituisce i valori delle classi delle caselle.
id Proprietà (torch.Tensor) Restituisce gli ID dei binari delle scatole (se disponibili).
xywh Proprietà (torch.Tensor) Restituisce le caselle in formato xywh.
xyxyn Proprietà (torch.Tensor) Restituisce i riquadri in formato xyxy normalizzati rispetto alle dimensioni dell'immagine originale.
xywhn Proprietà (torch.Tensor) Restituisce le caselle in formato xywh normalizzate in base alle dimensioni dell'immagine originale.

Per maggiori dettagli consulta la sezione Boxes documentazione della classe.

Maschere

Masks può essere utilizzato per indicizzare, manipolare e convertire le maschere in segmenti.

Maschere

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

Ecco una tabella per il Masks metodi e proprietà della classe, compresi il nome, il tipo e la descrizione:

Nome Tipo Descrizione
cpu() Metodo Restituisce le maschere tensor sulla memoria della CPU.
numpy() Metodo Restituisce le maschere tensor come array numpy.
cuda() Metodo Restituisce le maschere tensor sulla memoria della GPU.
to() Metodo Restituisce le maschere tensor con il dispositivo e il tipo specificato.
xyn Proprietà (torch.Tensor) Un elenco di segmenti normalizzati rappresentati come tensori.
xy Proprietà (torch.Tensor) Un elenco di segmenti in coordinate pixel rappresentati come tensori.

Per maggiori dettagli consulta la sezione Masks documentazione della classe.

Punti chiave

Keypoints può essere utilizzato per indicizzare, manipolare e normalizzare le coordinate.

Punti chiave

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

Ecco una tabella per il Keypoints metodi e proprietà della classe, compresi il nome, il tipo e la descrizione:

Nome Tipo Descrizione
cpu() Metodo Restituisce i punti chiave tensor sulla memoria della CPU.
numpy() Metodo Restituisce i punti chiave tensor come array numpy.
cuda() Metodo Restituisce i punti chiave tensor sulla memoria della GPU.
to() Metodo Restituisce i punti chiave tensor con il dispositivo e il tipo di d specificato.
xyn Proprietà (torch.Tensor) Un elenco di punti chiave normalizzati rappresentati come tensori.
xy Proprietà (torch.Tensor) Un elenco di punti chiave in coordinate pixel rappresentati come tensori.
conf Proprietà (torch.Tensor) Restituisce i valori di confidenza dei punti chiave se disponibili, altrimenti Nessuno.

Per maggiori dettagli consulta la sezione Keypoints documentazione della classe.

Probi

Probs può essere utilizzato per indicizzare, ottenere top1 e top5 indici e punteggi di classificazione.

Probi

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

Ecco una tabella che riassume i metodi e le proprietà della classe Probs classe:

Nome Tipo Descrizione
cpu() Metodo Restituisce una copia dei probi tensor sulla memoria della CPU.
numpy() Metodo Restituisce una copia dei probi tensor come array numpy.
cuda() Metodo Restituisce una copia dei probi tensor sulla memoria della GPU.
to() Metodo Restituisce una copia dei probi tensor con il dispositivo e il tipo di dtype specificati.
top1 Proprietà (int) Indice della classe top 1.
top5 Proprietà (list[int]) Indici delle 5 classi principali.
top1conf Proprietà (torch.Tensor) Fiducia nella classe top 1.
top5conf Proprietà (torch.Tensor) Confidenze delle prime 5 classi.

Per maggiori dettagli consulta la sezione Probs documentazione della classe.

OBB

OBB può essere utilizzato per indicizzare, manipolare e convertire i rettangoli di selezione orientati in diversi formati.

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

Ecco una tabella per il OBB metodi e proprietà della classe, compresi il nome, il tipo e la descrizione:

Nome Tipo Descrizione
cpu() Metodo Sposta l'oggetto nella memoria della CPU.
numpy() Metodo Converte l'oggetto in un array numpy.
cuda() Metodo Sposta l'oggetto nella memoria CUDA.
to() Metodo Sposta l'oggetto nel dispositivo specificato.
conf Proprietà (torch.Tensor) Restituisce i valori di confidenza delle caselle.
cls Proprietà (torch.Tensor) Restituisce i valori delle classi delle caselle.
id Proprietà (torch.Tensor) Restituisce gli ID dei binari delle scatole (se disponibili).
xyxy Proprietà (torch.Tensor) Restituisce le caselle orizzontali in formato xyxy.
xywhr Proprietà (torch.Tensor) Restituisce le caselle ruotate nel formato xywhr.
xyxyxyxy Proprietà (torch.Tensor) Restituisce le caselle ruotate in formato xyxyxyxy.
xyxyxyxyn Proprietà (torch.Tensor) Restituisce i riquadri ruotati in formato xyxyxyxy normalizzati in base alle dimensioni dell'immagine.

Per maggiori dettagli consulta la sezione OBB documentazione della classe.

Tracciare i risultati

Il plot() metodo in Results facilita la visualizzazione delle previsioni sovrapponendo gli oggetti rilevati (come bounding box, maschere, punti chiave e probabilità) all'immagine originale. Questo metodo restituisce l'immagine annotata come array NumPy, consentendo una facile visualizzazione o salvataggio.

Tracciatura

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() Parametri del metodo

Il plot() supporta diversi argomenti per personalizzare l'output:

Argomento Tipo Descrizione Predefinito
conf bool Includi i punteggi di fiducia del rilevamento. True
line_width float Larghezza della linea dei riquadri di delimitazione. Scala con le dimensioni dell'immagine se None. None
font_size float Dimensione del carattere del testo. Scala con le dimensioni dell'immagine se None. None
font str Nome del carattere per le annotazioni di testo. 'Arial.ttf'
pil bool Restituisce l'immagine come oggetto PIL Image. False
img numpy.ndarray Immagine alternativa per il plottaggio. Utilizza l'immagine originale se None. None
im_gpu torch.Tensor Immagine accelerata dalla GPU per una più rapida tracciatura della maschera. Forma: (1, 3, 640, 640). None
kpt_radius int Raggio per i punti chiave disegnati. 5
kpt_line bool Collega i punti chiave con delle linee. True
labels bool Includi le etichette delle classi nelle annotazioni. True
boxes bool Sovrappone i riquadri di delimitazione all'immagine. True
masks bool Sovrapponi le maschere all'immagine. True
probs bool Includere le probabilità di classificazione. True
show bool Visualizza l'immagine annotata direttamente utilizzando il visualizzatore di immagini predefinito. False
save bool Salva l'immagine annotata in un file specificato da filename. False
filename str Percorso e nome del file in cui salvare l'immagine annotata se save è True. None

Inferenza thread-safe

Garantire la sicurezza dei thread durante l'inferenza è fondamentale quando si eseguono più modelli YOLO in parallelo su diversi thread. L'inferenza thread-safe garantisce che le previsioni di ciascun thread siano isolate e non interferiscano l'una con l'altra, evitando condizioni di gara e assicurando risultati coerenti e affidabili.

Quando si utilizzano i modelli di YOLO in un'applicazione multi-thread, è importante istanziare oggetti modello separati per ogni thread o utilizzare l'archiviazione thread-local per evitare conflitti:

Inferenza thread-safe

Istanziare un singolo modello all'interno di ogni thread per un'inferenza thread-safe:

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()

Per un approfondimento sull'inferenza thread-safe con i modelli di YOLO e per le istruzioni passo-passo, consulta la nostra Guida all'inferenza thread-safe diYOLO . Questa guida ti fornirà tutte le informazioni necessarie per evitare le insidie più comuni e assicurarti che l'inferenza multi-thread funzioni senza problemi.

Fonte di streaming for-loop

Ecco uno script di Python che utilizza OpenCV (cv2) e YOLOv8 per eseguire l'inferenza sui fotogrammi video. Questo script presuppone che tu abbia già installato i pacchetti necessari (opencv-python e 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()

Questo script esegue previsioni su ogni fotogramma del video, visualizza i risultati e li mostra in una finestra. Il ciclo può essere interrotto premendo "q".



Creato 2023-11-12, Aggiornato 2024-05-03
Autori: glenn-jocher (18), UltralyticsAssistant (1), Burhan-Q (1), plashchynski (1), tensorturtle (1), AyushExel (1), Laughing-q (1)

Commenti