Vai al contenuto

Predizione del modello con Ultralytics YOLO

Ecosistema e integrazioni 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
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 impostando stream=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, devicee 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.



📅 Creato 1 anno fa ✏️ Aggiornato 5 giorni fa

Commenti