Predizione del modello con Ultralytics YOLO
Introduzione
Nel mondo del machine learning e della computer vision, il processo di dare un senso ai dati visivi è chiamato 'inferenza' o 'predizione'. Ultralytics YOLO11 offre una potente funzionalità nota come modalità predict che è pensata per l'inferenza in tempo reale ad alte prestazioni su una vasta gamma di sorgenti di dati.
Guarda: Come estrarre gli output dal modello Ultralytics YOLO per progetti personalizzati.
Applicazioni nel mondo reale
Produzione | Sport | Sicurezza |
---|---|---|
Rilevamento di pezzi di ricambio per veicoli | Rilevamento di giocatori di football americano | Rilevamento di cadute di persone |
Perché utilizzare Ultralytics YOLO per l'inferenza?
Ecco perché dovresti considerare la modalità predict di YOLO11 per le tue diverse esigenze di inferenza:
- Versatilità: In grado di effettuare inferenze su immagini, video e persino streaming live.
- Prestazioni: Progettato per l'elaborazione in tempo reale ad alta velocità senza sacrificare la precisione.
- Facilità d'uso: Interfacce intuitive Python e CLI per implementazione e test rapidi.
- Altamente personalizzabile: Diverse impostazioni e parametri per ottimizzare il comportamento di inferenza del modello in base alle tue esigenze specifiche.
Caratteristiche principali della modalità Predict
La modalità predict di YOLO11 è progettata per essere robusta e versatile, e offre:
- Compatibilità con molteplici sorgenti dati: Che i tuoi dati siano sotto forma di singole immagini, raccolte di immagini, file video o flussi video in tempo reale, la modalità predict ti supporta.
- Modalità Streaming: Utilizza la funzionalità di streaming per generare un generatore di oggetti efficiente in termini di memoria
Results
oggetti. Abilita questa opzione impostandostream=True
nel metodo call del predittore. - Elaborazione batch: La capacità di elaborare più immagini o fotogrammi video in un singolo batch, accelerando ulteriormente i tempi di inferenza.
- Facilità di integrazione: Facile integrazione con pipeline di dati esistenti e altri componenti software, grazie alla sua API flessibile.
I modelli Ultralytics YOLO restituiscono un elenco Python di Results
oggetti oppure un generatore Python di Results
oggetti efficiente in termini di memoria quando stream=True
viene passato al modello durante l'inferenza:
Predizione
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # pretrained YOLO11n 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 disk
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # pretrained YOLO11n model
# Run batched inference on a list of images
results = model(["image1.jpg", "image2.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
Sorgenti di inferenza
YOLO11 può elaborare diversi tipi di sorgenti di input per l'inferenza, come mostrato nella tabella seguente. Le sorgenti includono immagini statiche, flussi video e vari formati di dati. La tabella indica anche se ciascuna sorgente può essere utilizzata in modalità streaming con l'argomento stream=True
✅. La modalità streaming è utile per l'elaborazione di video o flussi live in quanto crea un generatore di risultati invece di caricare tutti i fotogrammi in memoria.
Suggerimento
Usa stream=True
per l'elaborazione di video lunghi o set di dati di grandi dimensioni per gestire efficientemente la memoria. Quando stream=False
, i risultati per tutti i frame o punti dati vengono memorizzati in memoria, il che può sommarsi rapidamente e causare errori di memoria insufficiente per input di grandi dimensioni. Al contrario, stream=True
utilizza un generatore, che mantiene in memoria solo i risultati del frame o del punto dati corrente, riducendo significativamente il consumo di memoria e prevenendo problemi di memoria insufficiente.
Sorgente | Esempio | Tipo | Note |
---|---|---|---|
immagine | 'image.jpg' |
str oppure Path |
File immagine singolo. |
URL | 'https://ultralytics.com/images/bus.jpg' |
str |
URL di un'immagine. |
screenshot | 'screen' |
str |
Acquisisci uno screenshot. |
PIL | Image.open('image.jpg') |
PIL.Image |
Formato HWC con canali RGB. |
OpenCV | cv2.imread('image.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 oppure Path |
File CSV contenente percorsi a immagini, video o directory. |
video ✅ | 'video.mp4' |
str oppure Path |
File video in formati come MP4, AVI, ecc. |
directory ✅ | 'path/' |
str oppure Path |
Percorso di una directory contenente immagini o video. |
glob ✅ | 'path/*.jpg' |
str |
Pattern glob per trovare più file. Utilizzare il carattere * come carattere jolly. |
YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' |
str |
URL di un video di YouTube. |
stream ✅ | 'rtsp://example.com/media.mp4' |
str |
URL per protocolli di streaming come RTSP, RTMP, TCP o un indirizzo IP. |
multi-stream ✅ | 'list.streams' |
str oppure Path |
*.streams file di testo con un URL di stream per riga, ovvero 8 stream verranno eseguiti con una dimensione batch di 8. |
webcam ✅ | 0 |
int |
Indice del dispositivo telecamera collegato su cui eseguire l'inferenza. |
Di seguito sono riportati esempi di codice per l'utilizzo di ciascun tipo di sorgente:
Sorgenti di previsione
Esegui l'inferenza su un file immagine.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 l'inferenza sul contenuto corrente dello schermo come screenshot.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Define current screenshot as source
source = "screen"
# Run inference on the source
results = model(source) # list of Results objects
Esegui l'inferenza su un'immagine o un video ospitato da remoto tramite URL.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 l'inferenza su un'immagine aperta con Python Imaging Library (PIL).
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 YOLO11n model
model = YOLO("yolo11n.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
Esegui l'inferenza su un'immagine rappresentata come un array numpy.
import numpy as np
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 l'inferenza su un'immagine rappresentata come un tensor PyTorch.
import torch
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 l'inferenza su una raccolta di immagini, URL, video e directory elencati in un file CSV.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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=True
, puoi creare un generatore di oggetti Results per ridurre l'utilizzo della memoria.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 in una directory. Per acquisire immagini e video anche nelle sottodirectory, utilizza un modello glob, ad esempio path/to/dir/**/*
.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 *
caratteri.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 Results per ridurre l'utilizzo della memoria per i video lunghi.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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
Utilizza la modalità stream per eseguire l'inferenza su flussi video live utilizzando i protocolli RTSP, RTMP, TCP o indirizzo IP. Se viene fornito un singolo flusso, il modello esegue l'inferenza con una dimensione del batch pari a 1. Per più flussi, è possibile utilizzare un .streams
file di testo per eseguire l'inferenza in batch, dove la dimensione del batch è determinata dal numero di flussi forniti (ad esempio, dimensione del batch 8 per 8 flussi).
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Single stream with batch-size 1 inference
source = "rtsp://example.com/media.mp4" # RTSP, RTMP, TCP, or IP streaming address
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Per l'utilizzo di un singolo flusso, la dimensione del batch è impostata su 1 per impostazione predefinita, consentendo un'elaborazione efficiente in tempo reale del feed video.
Per gestire più flussi video contemporaneamente, utilizza un .streams
file di testo contenente le sorgenti di streaming. Il modello eseguirà l'inferenza in batch dove la dimensione del batch è uguale al numero di flussi. Questa configurazione consente l'elaborazione efficiente di più feed contemporaneamente.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Multiple streams with batched inference (e.g., batch-size 8 for 8 streams)
source = "path/to/list.streams" # *.streams text file with one streaming address per line
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Esempio .streams
file di testo:
rtsp://example.com/media1.mp4
rtsp://example.com/media2.mp4
rtmp://example2.com/live
tcp://192.168.1.100:554
...
Ogni riga nel file rappresenta una sorgente di streaming, consentendoti di monitorare ed eseguire l'inferenza su diversi flussi video contemporaneamente.
Puoi eseguire l'inferenza su un dispositivo fotocamera collegato passando l'indice di quella particolare fotocamera a source
.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Run inference on the source
results = model(source=0, 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 YOLO11n model
model = YOLO("yolo11n.pt")
# Run inference on 'bus.jpg' with arguments
model.predict("https://ultralytics.com/images/bus.jpg", save=True, imgsz=320, conf=0.5)
Argomenti di inferenza:
Argomento | Tipo | Predefinito | Descrizione |
---|---|---|---|
source |
str |
'ultralytics/assets' |
Specifica l'origine dati per l'inferenza. Può essere un percorso di immagine, un file video, una directory, un URL o un ID dispositivo per feed live. Supporta una vasta gamma di formati e sorgenti, consentendo un'applicazione flessibile attraverso 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 verranno ignorati. La regolazione di questo valore può aiutare a ridurre i falsi positivi. |
iou |
float |
0.7 |
Soglia Intersection Over Union (IoU) per la Non-Maximum Suppression (NMS). Valori più bassi comportano un minor numero di rilevamenti eliminando le caselle sovrapposte, utile per ridurre i duplicati. |
imgsz |
int oppure tuple |
640 |
Definisce le dimensioni dell'immagine per l'inferenza. Può essere un singolo numero intero 640 per il ridimensionamento quadrato o una tupla (altezza, larghezza). Un dimensionamento appropriato può migliorare il rilevamento accuratezza e la velocità di elaborazione. |
rect |
bool |
True |
Se abilitato, aggiunge un padding minimo al lato più corto dell'immagine finché non è divisibile per lo stride per migliorare la velocità di inferenza. Se disabilitato, aggiunge un padding all'immagine per renderla quadrata durante l'inferenza. |
half |
bool |
False |
Abilita l'inferenza in mezza precisione (FP16), che può accelerare l'inferenza del modello su GPU supportate con un impatto minimo sulla precisione. |
device |
str |
None |
Specifica il dispositivo per l'inferenza (ad esempio, cpu , cuda:0 oppure 0 ). Consente agli utenti di scegliere tra CPU, una GPU specifica o altri dispositivi di calcolo per l'esecuzione del modello. |
batch |
int |
1 |
Specifica la dimensione del batch per l'inferenza (funziona solo quando la sorgente è una directory, un file video o .txt file). Un batch size più grande può fornire una maggiore velocità di elaborazione, riducendo il tempo totale necessario per l'inferenza. |
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 output eccessivi in scene dense. |
vid_stride |
int |
1 |
Frame stride per gli input video. Consente di saltare i frame nei video per accelerare l'elaborazione a scapito della risoluzione temporale. Un valore di 1 elabora ogni frame, valori più alti saltano i frame. |
stream_buffer |
bool |
False |
Determina se mettere in coda i frame in arrivo per i flussi video. Se False , i vecchi frame vengono eliminati per fare spazio ai nuovi frame (ottimizzato per applicazioni in tempo reale). Se True , mette in coda nuovi frame in un buffer, assicurando che nessun frame venga saltato, ma causerà latenza se l'FPS di inferenza è inferiore all'FPS dello stream. |
visualize |
bool |
False |
Attiva la visualizzazione delle caratteristiche del modello durante l'inferenza, fornendo informazioni su ciò che il modello sta "vedendo". Utile per il debug e l'interpretazione del modello. |
augment |
bool |
False |
Abilita l'aumento dei dati in fase di test (TTA) per le previsioni, migliorando potenzialmente la robustezza del rilevamento a scapito della velocità di inferenza. |
agnostic_nms |
bool |
False |
Abilita la Non-Maximum Suppression (NMS) class-agnostic, che unisce le caselle sovrapposte di classi diverse. Utile in scenari di rilevamento multi-classe in cui la sovrapposizione di classi è comune. |
classes |
list[int] |
None |
Filtra le previsioni a un insieme di ID di classe. Verranno restituiti solo i rilevamenti appartenenti alle classi specificate. Utile per concentrarsi sugli oggetti rilevanti nelle attività di rilevamento multi-classe. |
retina_masks |
bool |
False |
Restituisce maschere di segmentazione ad alta risoluzione. Le maschere restituite (masks.data ) corrisponderanno alla dimensione originale dell'immagine se abilitate. Se disabilitate, hanno la dimensione dell'immagine utilizzata durante l'inferenza. |
embed |
list[int] |
None |
Specifica i livelli da cui estrarre vettori di caratteristiche o embeddings. Utile per attività a valle come il clustering o la ricerca di similarità. |
project |
str |
None |
Nome della directory del progetto in cui vengono salvati gli output di previsione se save è abilitato. |
name |
str |
None |
Nome dell'esecuzione della previsione. Utilizzato per creare una sottodirectory all'interno della cartella del progetto, in cui vengono memorizzati gli output di previsione se save è abilitato. |
stream |
bool |
False |
Abilita l'elaborazione efficiente della memoria per video lunghi o numerose immagini restituendo un generatore di oggetti Results invece di caricare tutti i frame in memoria contemporaneamente. |
verbose |
bool |
True |
Controlla se visualizzare i log di inferenza dettagliati nel terminale, fornendo feedback in tempo reale sul processo di previsione. |
Argomenti di visualizzazione:
Argomento | Tipo | Predefinito | Descrizione |
---|---|---|---|
show |
bool |
False |
Se True , visualizza le immagini o i video annotati in una finestra. Utile per un feedback visivo immediato durante lo sviluppo o il test. |
save |
bool |
False or True |
Abilita il salvataggio delle immagini o dei video annotati su file. Utile per la documentazione, ulteriori analisi o la condivisione dei risultati. Impostato su True quando si utilizza la CLI e su False quando si utilizza python. |
save_frames |
bool |
False |
Quando si elaborano video, salva i singoli frame come immagini. Utile per estrarre frame specifici o per un'analisi dettagliata frame per frame. |
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, migliorando il livello di dettaglio disponibile per la post-elaborazione e l'analisi. |
save_crop |
bool |
False |
Salva le immagini ritagliate dei rilevamenti. Utile per l'aumento del dataset, l'analisi o la creazione di dataset mirati per oggetti specifici. |
show_labels |
bool |
True |
Mostra le etichette per ogni rilevamento nell'output visivo, fornendo una comprensione immediata degli oggetti rilevati. |
show_conf |
bool |
True |
Visualizza il punteggio di confidenza per ogni rilevamento accanto all'etichetta, offrendo una panoramica sulla certezza del modello per ogni rilevamento. |
show_boxes |
bool |
True |
Disegna riquadri di delimitazione attorno agli oggetti rilevati, essenziale per l'identificazione visiva e la posizione degli oggetti in immagini o fotogrammi video. |
line_width |
None or int |
None |
Specifica lo spessore della linea dei riquadri di delimitazione. Se None , lo spessore della linea viene regolato automaticamente in base alle dimensioni dell'immagine, fornendo una personalizzazione visiva per una maggiore chiarezza. |
Formati di immagine e video
YOLO11 supporta vari formati di immagine e video, come specificato in ultralytics/data/utils.py. Consultare le tabelle seguenti per i suffissi validi e gli esempi di comandi predict.
Immagini
La tabella seguente contiene i formati immagine Ultralytics validi.
Nota
Le immagini HEIC sono supportate solo per l'inferenza, non per l'addestramento.
Suffissi Immagine | Esempio di Comando Predict | Riferimenti |
---|---|---|
.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 |
Multi Picture Object |
.png |
yolo predict source=image.png |
Portable Network Graphics |
.tif |
yolo predict source=image.tif |
Tag Image File Format |
.tiff |
yolo predict source=image.tiff |
Tag Image File Format |
.webp |
yolo predict source=image.webp |
WebP |
.pfm |
yolo predict source=image.pfm |
Portable FloatMap |
.HEIC |
yolo predict source=image.HEIC |
High Efficiency Image Format |
Video
La tabella seguente contiene i formati video Ultralytics validi.
Suffissi Video | Esempio di Comando Predict | Riferimenti |
---|---|---|
.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 Part 14 |
.mkv |
yolo predict source=video.mkv |
Matroska |
.mov |
yolo predict source=video.mov |
QuickTime File Format |
.mp4 |
yolo predict source=video.mp4 |
MPEG-4 Part 14 - Wikipedia |
.mpeg |
yolo predict source=video.mpeg |
MPEG-1 Part 2 |
.mpg |
yolo predict source=video.mpg |
MPEG-1 Part 2 |
.ts |
yolo predict source=video.ts |
MPEG Transport Stream |
.wmv |
yolo predict source=video.wmv |
Windows Media Video |
.webm |
yolo predict source=video.webm |
WebM Project |
Lavorare con i risultati
Tutte le chiamate Ultralytics predict()
restituiranno un elenco di Results
oggetti:
Risultati
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 inference
Results
gli oggetti hanno i seguenti attributi:
Attributo | Tipo | Descrizione |
---|---|---|
orig_img |
np.ndarray |
L'immagine originale come array numpy. |
orig_shape |
tuple |
La forma originale dell'immagine nel formato (altezza, larghezza). |
boxes |
Boxes, optional |
Un oggetto Boxes contenente i riquadri 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 ciascuna classe per l'attività di classificazione. |
keypoints |
Keypoints, optional |
Un oggetto Keypoints contenente i keypoint rilevati per ciascun oggetto. |
obb |
OBB, optional |
Un oggetto OBB contenente i riquadri di delimitazione orientati. |
speed |
dict |
Un dizionario delle velocità di pre-elaborazione, inferenza e post-elaborazione in millisecondi per immagine. |
names |
dict |
Un dizionario che mappa gli indici delle classi ai nomi delle classi. |
path |
str |
Il percorso del file immagine. |
save_dir |
str, optional |
Directory in cui salvare i risultati. |
Results
Gli oggetti hanno i seguenti metodi:
Metodo | Tipo di ritorno | Descrizione |
---|---|---|
update() |
None |
Aggiorna l'oggetto Results con nuovi dati di rilevamento (box, maschere, probabilità, obb, keypoints). |
cpu() |
Results |
Restituisce una copia dell'oggetto Results con tutti i tensor spostati nella memoria della CPU. |
numpy() |
Results |
Restituisce una copia dell'oggetto Results con tutti i tensor convertiti in array numpy. |
cuda() |
Results |
Restituisce una copia dell'oggetto Results con tutti i tensor spostati nella memoria della GPU. |
to() |
Results |
Restituisce una copia dell'oggetto Results con i tensor spostati nel dispositivo e nel dtype specificati. |
new() |
Results |
Crea un nuovo oggetto Results con gli stessi attributi di immagine, percorso, nomi e velocità. |
plot() |
np.ndarray |
Traccia i risultati del detection su un'immagine RGB di input e restituisce l'immagine annotata. |
show() |
None |
Visualizza l'immagine con i risultati dell'inferenza annotati. |
save() |
str |
Salva l'immagine dei risultati dell'inferenza annotata in un file e restituisce il nome del file. |
verbose() |
str |
Restituisce una stringa di log per ogni task, che descrive in dettaglio i risultati del rilevamento e della classificazione. |
save_txt() |
str |
Salva i risultati del rilevamento in un file di testo e restituisce il percorso del file salvato. |
save_crop() |
None |
Salva le immagini di rilevamento ritagliate nella directory specificata. |
summary() |
List[Dict[str, Any]] |
Converte i risultati dell'inferenza in un dizionario riassuntivo con normalizzazione opzionale. |
to_df() |
DataFrame |
Converte i risultati del rilevamento in un DataFrame Polars. |
to_csv() |
str |
Converte i risultati del rilevamento in formato CSV. |
to_json() |
str |
Converte i risultati del rilevamento in formato JSON. |
Per maggiori dettagli, consultare la Results
documentazione della classe.
Box
Boxes
L'oggetto può essere utilizzato per indicizzare, manipolare e convertire i riquadri di delimitazione in diversi formati.
Box
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 boxes
Ecco una tabella per i Boxes
metodi e le proprietà della classe, inclusi 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 sul dispositivo specificato. |
xyxy |
Proprietà (torch.Tensor ) |
Restituisce i riquadri nel formato xyxy. |
conf |
Proprietà (torch.Tensor ) |
Restituisce i valori di confidenza dei riquadri. |
cls |
Proprietà (torch.Tensor ) |
Restituisce i valori di classe dei riquadri. |
id |
Proprietà (torch.Tensor ) |
Restituisce gli ID di tracciamento dei riquadri (se disponibili). |
xywh |
Proprietà (torch.Tensor ) |
Restituisce i riquadri nel formato xywh. |
xyxyn |
Proprietà (torch.Tensor ) |
Restituisce i riquadri nel formato xyxy normalizzati in base alle dimensioni originali dell'immagine. |
xywhn |
Proprietà (torch.Tensor ) |
Restituisce i riquadri nel formato xywh normalizzati in base alle dimensioni originali dell'immagine. |
Per maggiori dettagli, consultare la Boxes
documentazione della classe.
Maschere
Masks
L'oggetto può essere utilizzato per indicizzare, manipolare e convertire le maschere in segmenti.
Maschere
from ultralytics import YOLO
# Load a pretrained YOLO11n-seg Segment model
model = YOLO("yolo11n-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 masks
Ecco una tabella per i Masks
metodi e le proprietà della classe, inclusi il nome, il tipo e la descrizione:
Nome | Tipo | Descrizione |
---|---|---|
cpu() |
Metodo | Restituisce il tensor delle maschere nella memoria della CPU. |
numpy() |
Metodo | Restituisce il tensor delle maschere come array NumPy. |
cuda() |
Metodo | Restituisce il tensor delle maschere nella memoria della GPU. |
to() |
Metodo | Restituisce il tensor delle maschere con il dispositivo e il dtype specificati. |
xyn |
Proprietà (torch.Tensor ) |
Un elenco di segmenti normalizzati rappresentati come tensor. |
xy |
Proprietà (torch.Tensor ) |
Un elenco di segmenti in coordinate pixel rappresentati come tensor. |
Per maggiori dettagli, consultare la Masks
documentazione della classe.
Punti chiave
Keypoints
L'oggetto può essere utilizzato per indicizzare, manipolare e normalizzare le coordinate.
Punti chiave
from ultralytics import YOLO
# Load a pretrained YOLO11n-pose Pose model
model = YOLO("yolo11n-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 keypoints
Ecco una tabella per i Keypoints
metodi e le proprietà della classe, inclusi il nome, il tipo e la descrizione:
Nome | Tipo | Descrizione |
---|---|---|
cpu() |
Metodo | Restituisce il tensor dei keypoint nella memoria della CPU. |
numpy() |
Metodo | Restituisce il tensor dei keypoint come array NumPy. |
cuda() |
Metodo | Restituisce il tensor dei keypoint nella memoria della GPU. |
to() |
Metodo | Restituisce il tensor dei keypoint con il dispositivo e il dtype specificati. |
xyn |
Proprietà (torch.Tensor ) |
Un elenco di keypoint normalizzati rappresentati come tensor. |
xy |
Proprietà (torch.Tensor ) |
Un elenco di keypoint in coordinate pixel rappresentati come tensor. |
conf |
Proprietà (torch.Tensor ) |
Restituisce i valori di confidenza dei keypoint, se disponibili; altrimenti, None. |
Per maggiori dettagli, consultare la Keypoints
documentazione della classe.
Probabilità
Probs
L'oggetto può essere utilizzato per indicizzare, ottenere top1
e top5
indici e punteggi della classificazione.
Probabilità
from ultralytics import YOLO
# Load a pretrained YOLO11n-cls Classify model
model = YOLO("yolo11n-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 probabilities
Ecco una tabella che riassume i metodi e le proprietà per la Probs
classe:
Nome | Tipo | Descrizione |
---|---|---|
cpu() |
Metodo | Restituisce una copia del tensor probs nella memoria della CPU. |
numpy() |
Metodo | Restituisce una copia del tensor probs come array NumPy. |
cuda() |
Metodo | Restituisce una copia del tensor probs nella memoria della GPU. |
to() |
Metodo | Restituisce una copia del tensor probs con il device e il dtype specificati. |
top1 |
Proprietà (int ) |
Indice della classe top 1. |
top5 |
Proprietà (list[int] ) |
Indici delle prime 5 classi. |
top1conf |
Proprietà (torch.Tensor ) |
Confidenza della classe top 1. |
top5conf |
Proprietà (torch.Tensor ) |
Confidenze delle prime 5 classi. |
Per maggiori dettagli, consultare la Probs
documentazione della classe.
OBB
OBB
L'oggetto può essere utilizzato per indicizzare, manipolare e convertire i bounding box orientati in diversi formati.
OBB
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n-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 boxes
Ecco una tabella per i OBB
metodi e le proprietà della classe, inclusi 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 sul dispositivo specificato. |
conf |
Proprietà (torch.Tensor ) |
Restituisce i valori di confidenza dei riquadri. |
cls |
Proprietà (torch.Tensor ) |
Restituisce i valori di classe dei riquadri. |
id |
Proprietà (torch.Tensor ) |
Restituisce gli ID di tracciamento dei riquadri (se disponibili). |
xyxy |
Proprietà (torch.Tensor ) |
Restituisce i box orizzontali in formato xyxy. |
xywhr |
Proprietà (torch.Tensor ) |
Restituisce i box ruotati in formato xywhr. |
xyxyxyxy |
Proprietà (torch.Tensor ) |
Restituisce i box ruotati in formato xyxyxyxy. |
xyxyxyxyn |
Proprietà (torch.Tensor ) |
Restituisce i box ruotati in formato xyxyxyxy normalizzati in base alle dimensioni dell'immagine. |
Per maggiori dettagli, consultare la OBB
documentazione della classe.
Tracciamento dei risultati
Il plot()
metodo in Results
gli oggetti facilita la visualizzazione delle previsioni sovrapponendo gli oggetti rilevati (come bounding box, maschere, keypoint e probabilità) sull'immagine originale. Questo metodo restituisce l'immagine annotata come un array NumPy, consentendone una facile visualizzazione o salvataggio.
Plotting
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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")
plot()
Parametri del metodo
Il plot()
Il metodo supporta vari argomenti per personalizzare l'output:
Argomento | Tipo | Descrizione | Predefinito |
---|---|---|---|
conf |
bool |
Includi i punteggi di confidenza del rilevamento. | True |
line_width |
float |
Larghezza della linea dei bounding box. Scala con le dimensioni dell'immagine se None . |
None |
font_size |
float |
Dimensione del font del testo. Scala con le dimensioni dell'immagine se None . |
None |
font |
str |
Nome del font per le annotazioni di testo. | 'Arial.ttf' |
pil |
bool |
Restituisce l'immagine come oggetto PIL Image. | False |
img |
np.ndarray |
Immagine alternativa per il plotting. Utilizza l'immagine originale se None . |
None |
im_gpu |
torch.Tensor |
Immagine accelerata tramite GPU per un plotting delle maschere più veloce. Forma: (1, 3, 640, 640). | None |
kpt_radius |
int |
Raggio per i keypoint disegnati. | 5 |
kpt_line |
bool |
Collega i keypoint con delle linee. | True |
labels |
bool |
Includi le etichette di classe nelle annotazioni. | True |
boxes |
bool |
Sovrapponi i bounding box sull'immagine. | True |
masks |
bool |
Sovrapponi le maschere sull'immagine. | True |
probs |
bool |
Includi 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à colore, ad esempio 'instance' o 'class'. | 'class' |
txt_color |
tuple[int, int, int] |
Colore del testo RGB per il bounding box e l'etichetta di classificazione dell'immagine. | (255, 255, 255) |
Inferenza thread-safe
Garantire la thread safety durante l'inferenza è fondamentale quando si eseguono più modelli YOLO in parallelo su diversi thread. L'inferenza thread-safe garantisce che le predizioni di ciascun thread siano isolate e non interferiscano tra loro, evitando race condition e garantendo output coerenti e affidabili.
Quando si utilizzano modelli YOLO in un'applicazione multi-thread, è importante istanziare oggetti modello separati per ciascun thread o impiegare lo storage thread-local per prevenire conflitti:
Inferenza thread-safe
Istanza un singolo modello all'interno di ciascun thread per un'inferenza thread-safe:
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=("yolo11n.pt", "image1.jpg")).start()
Thread(target=thread_safe_predict, args=("yolo11n.pt", "image2.jpg")).start()
Per un'analisi approfondita dell'inferenza thread-safe con i modelli YOLO e istruzioni dettagliate, consulta la nostra Guida all'inferenza thread-safe di YOLO. Questa guida ti fornirà tutte le informazioni necessarie per evitare insidie comuni e garantire che la tua inferenza multi-thread funzioni senza problemi.
Sorgente di streaming for
-loop
Ecco uno script python che utilizza OpenCV (cv2
) e YOLO per eseguire l'inferenza sui frame 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 YOLO model
model = YOLO("yolo11n.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()
Questo script eseguirà predizioni su ciascun frame del video, visualizzerà i risultati e li mostrerà in una finestra. È possibile uscire dal loop premendo 'q'.
FAQ
Cos'è Ultralytics YOLO e la sua modalità predict per l'inferenza in tempo reale?
Ultralytics YOLO è un modello all'avanguardia per il rilevamento di oggetti, la segmentazione e la classificazione in tempo reale. La sua modalità predict consente agli utenti di eseguire inferenze ad alta velocità su varie sorgenti di dati come immagini, video e streaming live. Progettato per prestazioni e versatilità, offre anche modalità di elaborazione batch e streaming. Per maggiori dettagli sulle sue funzionalità, consulta la modalità predict di Ultralytics YOLO.
Come posso eseguire l'inferenza utilizzando Ultralytics YOLO su diverse sorgenti di dati?
Ultralytics YOLO è in grado di elaborare un'ampia gamma di sorgenti dati, tra cui singole immagini, video, directory, URL e stream. È possibile specificare la sorgente dati nel model.predict()
comando. Ad esempio, utilizzare 'image.jpg'
per un'immagine locale o 'https://ultralytics.com/images/bus.jpg'
per un URL. Consultare gli esempi dettagliati per le varie sorgenti di inferenza nella documentazione.
Come posso ottimizzare la velocità di inferenza e l'utilizzo della memoria di YOLO?
Per ottimizzare la velocità di inferenza e gestire la memoria in modo efficiente, è possibile utilizzare la modalità streaming impostando stream=True
nel metodo call del predittore. La modalità streaming genera un generatore di oggetti a basso consumo di memoria Results
invece di caricare tutti i frame in memoria. Per l'elaborazione di video lunghi o set di dati di grandi dimensioni, la modalità streaming è particolarmente utile. Ulteriori informazioni sul modalità streaming.
Quali argomenti di inferenza supporta Ultralytics YOLO?
Il model.predict()
il metodo in YOLO supporta vari argomenti come conf
, iou
, imgsz
, device
e altro ancora. Questi argomenti consentono di personalizzare il processo di inferenza, impostando parametri come le soglie di confidenza, le dimensioni dell'immagine e il dispositivo utilizzato per il calcolo. Descrizioni dettagliate di questi argomenti sono disponibili nella sezione argomenti di inferenza sezione.
Come posso visualizzare e salvare i risultati delle predizioni di YOLO?
Dopo aver eseguito l'inferenza con YOLO, gli Results
oggetti contengono metodi per visualizzare e salvare le immagini annotate. È possibile utilizzare metodi come result.show()
e result.save(filename="result.jpg")
per visualizzare e salvare i risultati. Per un elenco completo di questi metodi, consultare la sezione lavorare con i risultati sezione.