Previsione del modello con Ultralytics YOLO
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 |
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 impostandostream=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=False
I 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 | Esempio | 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.
Esegui un'inferenza sul contenuto della schermata corrente come screenshot.
Esegui un'inferenza su un'immagine o un video ospitato in remoto tramite URL.
Esegui un'inferenza su un'immagine aperta con Python Imaging Library (PIL).
Esegui l'inferenza su un'immagine letta con OpenCV.
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.
Esegui l'inferenza su un file video. Utilizzando stream=True
puoi creare un generatore di oggetti Risultati per ridurre l'utilizzo della memoria.
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/**/*
.
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.
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
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 scegliere tra CPU, uno specifico GPU o altri dispositivi di calcolo per l'esecuzione del modello. |
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 True visualizza 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 o True |
Enables saving of the annotated images or videos to file. Useful for documentation, further analysis, or sharing results. Defaults to True when using CLI & False when used in Python. |
save_frames |
bool |
False |
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 o int |
None |
Specifica la larghezza della linea delle caselle di delimitazione. Se None La 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 |
Microsoft Formato file 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
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 di 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 nella memoria di 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
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 di CPU . |
numpy() |
Metodo | Converte l'oggetto in un array numpy. |
cuda() |
Metodo | Sposta l'oggetto nella memoria di 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
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 di CPU . |
numpy() |
Metodo | Restituisce le maschere tensor come array numpy. |
cuda() |
Metodo | Restituisce le maschere tensor sulla memoria di 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
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 di CPU . |
numpy() |
Metodo | Restituisce i punti chiave tensor come array numpy. |
cuda() |
Metodo | Restituisce i punti chiave tensor sulla memoria di 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
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 di CPU . |
numpy() |
Metodo | Restituisce una copia dei probi tensor come array numpy. |
cuda() |
Metodo | Restituisce una copia dei probi tensor sulla memoria di 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
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 di CPU . |
numpy() |
Metodo | Converte l'oggetto in un array numpy. |
cuda() |
Metodo | Sposta l'oggetto nella memoria di 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 |
GPU-Immagine accelerata 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 |
color_mode |
str |
Specifica la modalità di colore, ad esempio "istanza" o "classe". | 'class' |
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 threading import Thread
from ultralytics import YOLO
def thread_safe_predict(image_path):
"""Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
local_model = YOLO("yolov8n.pt")
results = local_model.predict(image_path)
# Process results
# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("image1.jpg",)).start()
Thread(target=thread_safe_predict, args=("image2.jpg",)).start()
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".
DOMANDE FREQUENTI
Che cos'è Ultralytics YOLOv8 e la sua modalità di previsione per l'inferenza in tempo reale?
Ultralytics YOLOv8 è un modello all'avanguardia per il rilevamento, la segmentazione e la classificazione degli oggetti in tempo reale. La sua modalità di previsione consente agli utenti di eseguire inferenze ad alta velocità su varie fonti di dati come immagini, video e flussi live. Progettato per garantire prestazioni e versatilità, offre anche modalità di elaborazione batch e di streaming. Per maggiori dettagli sulle sue caratteristiche, dai un'occhiata a Ultralytics YOLOv8 modalità di predizione.
Come posso eseguire l'inferenza utilizzando Ultralytics YOLOv8 su diverse fonti di dati?
Ultralytics YOLOv8 può elaborare un'ampia gamma di fonti di dati, tra cui singole immagini, video, directory, URL e flussi. Puoi specificare l'origine dei dati nel campo model.predict()
chiamata. Ad esempio, usa 'image.jpg'
per un'immagine locale o 'https://ultralytics.com/images/bus.jpg'
per un URL. Dai un'occhiata agli esempi dettagliati per i vari fonti di inferenza nella documentazione.
Come posso ottimizzare la velocità di inferenza di YOLOv8 e l'utilizzo della memoria?
Per ottimizzare la velocità di inferenza e gestire la memoria in modo efficiente, puoi utilizzare la modalità streaming impostando stream=True
nel metodo di chiamata del predittore. La modalità streaming genera un generatore efficiente in termini di memoria di Results
invece di caricare tutti i fotogrammi in memoria. Per elaborare video lunghi o grandi insiemi di dati, la modalità streaming è particolarmente utile. Per saperne di più modalità streaming.
Quali argomenti di inferenza supporta Ultralytics YOLOv8 ?
Il model.predict()
in YOLOv8 supporta vari argomenti come conf
, iou
, imgsz
, device
e altro ancora. Questi argomenti ti permettono di personalizzare il processo di inferenza, impostando parametri come le soglie di confidenza, le dimensioni dell'immagine e il dispositivo utilizzato per il calcolo. Le descrizioni dettagliate di questi argomenti sono disponibili nella sezione argomenti di inferenza sezione.
Come posso visualizzare e salvare i risultati delle previsioni di YOLOv8 ?
Dopo aver eseguito l'inferenza con YOLOv8, il Results
contengono metodi per visualizzare e salvare le immagini annotate. Puoi utilizzare metodi come result.show()
e result.save(filename="result.jpg")
per visualizzare e salvare i risultati. Per un elenco completo di questi metodi, fai riferimento alla sezione lavorare con i risultati sezione.