Predizione del modello con Ultralytics YOLO#
Introduzione#
Nel mondo del machine learning e della computer vision, il processo di interpretazione dei dati visivi viene spesso chiamato inferenza o predizione. Ultralytics YOLO26 offre una potente funzionalità nota come modalità predict, progettata per l'inferenza in tempo reale ad alte prestazioni su un'ampia gamma di origini dati.
Consulta la anteprima di YOLO27 non rilasciata per gli esempi di inferenza pianificati.
Watch: How to Extract Results from Ultralytics YOLO26 Tasks for Custom Projects 🚀
Applicazioni nel mondo reale#
| Produzione | Sport | Sicurezza |
|---|---|---|
| Rilevamento di ricambi per veicoli | Rilevamento dei giocatori di calcio | Rilevamento delle cadute delle persone |
Perché usare Ultralytics YOLO per l'inferenza?#
Ecco perché dovresti prendere in considerazione la modalità predict di YOLO26 per le tue diverse esigenze di inferenza:
- Versatilità: consente di eseguire l'inferenza su immagini, video e persino stream dal vivo.
- Prestazioni: progettato per l'elaborazione in tempo reale ad alta velocità senza sacrificare l'accuratezza.
- Facilità d'uso: interfacce Python e CLI intuitive per una rapida distribuzione e verifica.
- Altamente personalizzabile: diverse impostazioni e parametri consentono di regolare il comportamento di inferenza del modello in base ai tuoi requisiti specifici.
- Pronto per la produzione: distribuisci i modelli come endpoint di inferenza della Ultralytics Platform con autoscaling e monitoraggio, oppure esegui l'inferenza localmente.
Funzionalità principali della modalità predict#
La modalità predict di YOLO26 è progettata per essere robusta e versatile e offre:
- Compatibilità con più origini dati: che i tuoi dati siano costituiti da singole immagini, raccolte di immagini, file video o stream video in tempo reale, la modalità predict è adatta alle tue esigenze.
- Modalità streaming: usa la funzionalità di streaming per generare un generatore efficiente in termini di memoria di oggetti
Results. Attivala impostandostream=Truenel metodo di chiamata del predittore. A differenza del comportamento predefinito (stream=False), che restituisce un elenco contenente tutti i risultati,stream=Truerestituisce i risultati uno alla volta, risultando particolarmente utile per video lunghi e stream dal vivo. - Elaborazione batch: elabora più immagini o fotogrammi video in un singolo batch, riducendo ulteriormente il tempo totale di inferenza.
- Facile integrazione: integra facilmente il modello con pipeline di dati esistenti e altri componenti software grazie alla sua API flessibile.
I modelli Ultralytics YOLO restituiscono un elenco Python di oggetti Results oppure un generatore efficiente in termini di memoria di oggetti Results quando stream=True viene passato al modello durante l'inferenza:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # pretrained YOLO26n model
# Run batched inference on a list of images
results = model(["image1.jpg", "image2.jpg"]) # return a list of Results objects
# Process results list
for result in results:
boxes = result.boxes # Boxes object for bounding box outputs
masks = result.masks # Masks object for segmentation masks outputs
keypoints = result.keypoints # Keypoints object for pose outputs
probs = result.probs # Probs object for classification outputs
obb = result.obb # Oriented boxes object for OBB outputs
result.show() # display to screen
result.save(filename="result.jpg") # save to diskOrigini dell'inferenza#
YOLO26 può elaborare diversi tipi di origini di input per l'inferenza, come mostrato nella tabella seguente. Le origini includono immagini statiche, stream video e vari formati di dati. La tabella indica anche se ogni origine può essere usata in modalità streaming con l'argomento stream=True ✅. La modalità streaming è utile per elaborare video o stream dal vivo, perché crea un generatore di risultati invece di caricare tutti i fotogrammi in memoria.
Usa stream=True per elaborare video lunghi o dataset di grandi dimensioni e gestire la memoria in modo efficiente. Quando stream=False, i risultati di tutti i fotogrammi o punti dati vengono conservati in memoria, cosa che può accumularsi rapidamente e causare errori di memoria esaurita per input di grandi dimensioni. Al contrario, stream=True utilizza un generatore che mantiene in memoria solo i risultati del fotogramma o punto dati corrente, riducendo significativamente il consumo di memoria e prevenendo i problemi di memoria esaurita.
| Origine | Esempio | Tipo | Note |
|---|---|---|---|
| immagine | 'image.jpg' | str o Path | File di immagine singolo. |
| URL | 'https://ultralytics.com/images/bus.jpg' | str | URL di un'immagine. |
| screenshot | 'screen' | str | Acquisisce 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 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 | Pattern glob per trovare più file. Usa il carattere * come carattere jolly. |
| YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' | str | URL di un video 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 o Path | File di testo *.streams con un URL di stream per riga; ad esempio, 8 stream verranno eseguiti con batch-size 8. |
| webcam ✅ | 0 | int | Indice del dispositivo della fotocamera collegata su cui eseguire l'inferenza. |
Di seguito sono riportati esempi di codice per usare ogni tipo di origine:
Esegui l'inferenza su un file di immagine.
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Define path to the image file
source = "path/to/image.jpg"
# Run inference on the source
results = model(source) # list of Results objectsArgomenti dell'inferenza#
model.predict() accetta più argomenti che possono essere passati al momento dell'inferenza per sovrascrivere i valori predefiniti:
Forma fissa vs rettangolo minimo (rect)#
Per impostazione predefinita, predict usa rect=True, che abilita il padding a rettangolo minimo quando possibile. L'immagine viene ridimensionata per rientrare in imgsz e sottoposta a padding solo fino al multiplo di stride più vicino; pertanto, il tensore finale può essere più piccolo di imgsz. Il padding a rettangolo minimo viene usato solo quando tutte le immagini del batch hanno la stessa forma e il backend lo supporta (.pt PyTorch oppure ONNX / Triton dinamico). In caso contrario, le immagini vengono sottoposte a padding fino alla destinazione completa imgsz.
Usa rect=False per applicare sempre il padding fino alla destinazione imgsz completa. Questa opzione è consigliata quando ti serve una dimensione di input fissa corrispondente ai modelli esportati (ONNX, TensorRT, ecc.).
Intero vs tupla imgsz
- Un valore intero
imgsz=640diventa una destinazione quadrata(640, 640)dopo l'arrotondamento in base allo stride. - Una tupla
imgsz=(384, 672)imposta una destinazione rettangolare. Conrect=Trueeauto=True, il tensore effettivo può essere più piccolo di questa destinazione.
Training vs predict/export
Il training accetta solo un singolo valore intero imgsz (un elenco [h, w] viene convertito nel valore più grande). Predict ed export accettano un valore intero o una tupla (height, width).
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Run inference on 'bus.jpg' with arguments
model.predict("https://ultralytics.com/images/bus.jpg", save=True, imgsz=320, conf=0.25)Argomenti di inferenza:
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
source | str oppure int oppure None | None | Specifica la sorgente dei dati per l'inferenza. Può essere il percorso di un'immagine, un file video, una directory, un URL o l'ID di un dispositivo per i flussi live. Se omesso, viene registrato un avviso e il modello usa gli asset demo integrati (ultralytics/assets oppure un URL demo per OBB). Supporta un'ampia gamma di formati e sorgenti, consentendo applicazioni flessibili su diversi tipi di input. |
conf | float | 0.25 | Imposta la soglia minima di confidenza per le rilevazioni. Gli oggetti rilevati con una confidenza inferiore a questa soglia verranno ignorati. La regolazione di questo valore può contribuire a ridurre i falsi positivi. |
iou | float | 0.7 | Soglia di Intersezione sull'unione (IoU) per la Soppressione non massima (NMS). Valori inferiori producono meno rilevazioni eliminando i riquadri sovrapposti, utile per ridurre i duplicati. |
imgsz | int o tuple | 640 | Destinazione del letterbox. Un numero intero produce un N×N quadrato; una tupla produce (height, width). Con rect=True, il tensore effettivo può essere più piccolo di questa destinazione a causa del padding a rettangolo minimo. Usa rect=False per una dimensione fissa. Consulta Forma fissa vs rettangolo minimo. |
rect | bool | True | Se True, usa il padding a rettangolo minimo quando possibile (batch con la stessa forma e backend supportato). Se False, applica sempre il padding fino a imgsz completo. Consulta Forma fissa vs rettangolo minimo. |
quantize | int o str | None | Precisione di inferenza: 16/"fp16" e 32/"fp32"/non impostato selezionano il calcolo FP16 o FP32 per i modelli PyTorch e TorchScript; gli altri formati calcolano alla precisione selezionata dal loro artefatto e runtime. A 16 OpenVINO esegue comunque l'arrotondamento a FP16 dell'input sul client e lo riporta a FP32, senza modificare la precisione in cui calcola il runtime. La quantizzazione INT8/PTQ viene configurata durante l'export, quindi utilizzata caricando il modello esportato. Sostituisce il flag deprecato half. |
device | str | None | Specifica il dispositivo per l'inferenza (ad esempio cpu, cuda:0, 0, npu o npu:0). Consente di scegliere tra CPU, una GPU specifica, NPU Huawei Ascend o altri dispositivi di calcolo per l'esecuzione del modello. |
dnn | bool | False | Se True, usa il modulo DNN di OpenCV invece di ONNX Runtime per l'inferenza dei modelli ONNX. |
data | str | None | Percorso a un file YAML del dataset (ad esempio coco8.yaml), letto esclusivamente per il suo names e solo quando il modello caricato non contiene nomi di classi propri: un'esportazione di terze parti oppure un'esportazione Ultralytics separata dai metadati forniti con essa. In caso contrario, tale modello restituisce class0, class1 e così via. |
batch | int | 1 | Specifica la dimensione del batch per l'inferenza (funziona solo quando la sorgente è una directory, un file video o un file .txt). Una dimensione del batch maggiore può fornire un throughput superiore, riducendo il tempo totale richiesto per l'inferenza. |
max_det | int | 300 | Numero massimo di rilevazioni consentite per immagine. Limita il numero totale di oggetti che il modello può rilevare in una singola inferenza, evitando output eccessivi nelle scene dense. |
vid_stride | int | 1 | Passo dei fotogrammi per gli input video. Consente di saltare fotogrammi nei video per velocizzare l'elaborazione, a scapito della risoluzione temporale. Un valore pari a 1 elabora ogni fotogramma; valori maggiori saltano dei fotogrammi. |
stream_buffer | bool | False | Determina se accodare i fotogrammi in arrivo per gli stream video. Se False, i fotogrammi meno recenti vengono eliminati per fare spazio a quelli nuovi (ottimizzato per le applicazioni in tempo reale). Se True, i nuovi fotogrammi vengono accodati in un buffer, garantendo che nessun fotogramma venga saltato, ma causando latenza se gli FPS dell'inferenza sono inferiori agli FPS dello stream. |
visualize | bool | False | Salva una mappa di attivazione delle classi accanto a ogni predizione, mostrando quali pixel hanno aumentato i punteggi della classe predetta. Rispetta conf e classes, quindi classes=[0] mappa solo quella classe. Disponibile solo per i modelli PyTorch di Ultralytics. |
augment | bool | False | Abilita l'augmentation al momento del test (TTA) per le predizioni, migliorando potenzialmente la robustezza delle rilevazioni a scapito della velocità di inferenza. Disponibile solo per i modelli PyTorch di Ultralytics. |
agnostic_nms | bool | False | Abilita la soppressione non massimale agnostica rispetto alle classi (NMS), sopprimendo i box sovrapposti con punteggio inferiore tra classi diverse anziché solo all'interno della stessa classe. Utile in scenari di rilevamento multi-classe in cui la sovrapposizione delle classi è comune. Con l'inferenza senza NMS (nms=False su YOLO26 o YOLOv10), questo impedisce solo che lo stesso rilevamento appaia con più etichette di classe (duplicati con IoU=1.0) e non esegue la soppressione basata sulla soglia IoU tra box distinti. |
classes | list[int] | None | Filtra le predizioni in base a un insieme di ID di classe. Verranno restituite solo le rilevazioni appartenenti alle classi specificate. Utile per concentrarsi sugli oggetti rilevanti nelle attività di rilevamento multiclasse. |
retina_masks | bool | False | Restituisce maschere di segmentazione ad alta risoluzione. Se abilitato, le maschere restituite (masks.data) corrisponderanno alle dimensioni dell'immagine originale. Se disabilitato, avranno le dimensioni dell'immagine utilizzata durante l'inferenza. |
embed | list[int] | None | Specifica i layer dai quali estrarre vettori di caratteristiche o embedding. Usa model.embed(source) per gli embedding del penultimo layer oppure model.predict(source, embed=[layer]) per selezionare layer specifici. Utile per attività successive come il clustering o la ricerca per similarità. Disponibile solo per i modelli PyTorch di Ultralytics. |
project | str | None | Nome della directory del progetto in cui vengono salvati gli output delle predizioni se save è abilitato. |
name | str | None | Nome dell'esecuzione della predizione. Viene utilizzato per creare una sottodirectory all'interno della cartella del progetto, in cui vengono archiviati gli output delle predizioni se save è abilitato. |
stream | bool | False | Abilita un'elaborazione efficiente in termini di memoria per video lunghi o numerose immagini, restituendo un generatore di oggetti Results invece di caricare tutti i fotogrammi in memoria contemporaneamente. |
verbose | bool | True | Controlla se visualizzare log dettagliati dell'inferenza nel terminale, fornendo feedback in tempo reale sul processo di predizione. |
compile | bool o str | False | Abilita la compilazione del grafo torch.compile di PyTorch 2.x con backend='inductor'. Accetta True → "default", False → disabilita, oppure una modalità stringa come "default", "reduce-overhead", "max-autotune-no-cudagraphs". Se non è supportata, torna alla modalità eager con un avviso. |
channels_last | bool | None | Usa il formato di memoria channels_last (NHWC) per l'inferenza nativa con PyTorch. None lo abilita automaticamente su CPU x86 Linux e Windows con oneDNN abilitato e PyTorch 1.13 o versioni successive, False lo disabilita e True lo richiede su CPU x86 o dispositivi CUDA supportati. ARM64, MPS, versioni precedenti di PyTorch, CPU senza oneDNN e formati esportati come TensorRT e ONNX rimangono invariati. |
nms | bool, facoltativo | None | Esegue l'inferenza uno-a-molti con NMS per impostazione predefinita (None o True). Imposta False per utilizzare la testa uno-a-uno senza NMS quando disponibile. Consulta la guida al rilevamento end-to-end per i dettagli. |
Argomenti di visualizzazione:
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
show | bool | False | Se True, visualizza le immagini o i video annotati in una finestra. È utile per ottenere un feedback visivo immediato durante lo sviluppo o i test. |
save | bool | False or True | Abilita il salvataggio delle immagini o dei video annotati in file. Utile per la documentazione, ulteriori analisi o la condivisione dei risultati. Il valore predefinito è True usando la CLI e False usando Python. |
save_frames | bool | False | Durante l'elaborazione dei 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 il livello di dettaglio disponibile per la post-elaborazione e l'analisi. |
save_crop | bool | False | Salva immagini ritagliate delle rilevazioni. Utile per l'augmentation del dataset, l'analisi o la creazione di dataset mirati per oggetti specifici. |
show_labels | bool | True | Visualizza le etichette per ogni rilevazione nell'output visivo. Consente di comprendere immediatamente gli oggetti rilevati. |
show_conf | bool | True | Visualizza il punteggio di confidenza per ogni rilevazione accanto all'etichetta. Fornisce informazioni sul grado di certezza del modello per ogni rilevazione. |
show_boxes | bool | True | Disegna riquadri di delimitazione attorno agli oggetti rilevati. È essenziale per l'identificazione visiva e la localizzazione degli oggetti nelle immagini o nei fotogrammi video. |
line_width | int or None | None | Specifica la larghezza della linea dei riquadri di delimitazione. Se None, la larghezza della linea viene regolata automaticamente in base alle dimensioni dell'immagine. Consente una personalizzazione visiva per migliorare la chiarezza. |
Formati di immagini e video#
YOLO26 supporta vari formati di immagini e video, come specificato in ultralytics/data/utils.py. Consulta le tabelle seguenti per le estensioni valide e i comandi di predizione di esempio.
Immagini#
La tabella seguente contiene i formati di immagine Ultralytics validi.
I formati HEIC/HEIF richiedono pi-heif, che viene installato automaticamente al primo utilizzo. AVIF è supportato nativamente da Pillow.
| Estensioni delle immagini | Comando di predizione di esempio | Riferimento |
|---|---|---|
.avif | yolo predict source=image.avif | Formato file immagine AV1 |
.bmp | yolo predict source=image.bmp | Formato file BMP Microsoft |
.dng | yolo predict source=image.dng | Adobe DNG |
.heic | yolo predict source=image.heic | Formato immagine ad alta efficienza |
.heif | yolo predict source=image.heif | Formato immagine ad alta efficienza |
.jp2 | yolo predict source=image.jp2 | JPEG 2000 |
.jpeg | yolo predict source=image.jpeg | JPEG |
.jpg | yolo predict source=image.jpg | JPEG |
.mpo | yolo predict source=image.mpo | Multi Picture Object |
.png | yolo predict source=image.png | Portable Network Graphics |
.tif | yolo predict source=image.tif | Tag Image File Format |
.tiff | yolo predict source=image.tiff | Tag Image File Format |
.webp | yolo predict source=image.webp | WebP |
Video#
La tabella seguente contiene i formati video Ultralytics validi.
| Estensioni dei video | Comando di predizione di esempio | Riferimento |
|---|---|---|
.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 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 | MPEG Transport Stream |
.wmv | yolo predict source=video.wmv | Windows Media Video |
.webm | yolo predict source=video.webm | Progetto WebM |
Utilizzo dei Results#
Tutte le chiamate Ultralytics predict() restituiscono un elenco di oggetti Results:
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")
results = model(
[
"https://ultralytics.com/images/bus.jpg",
"https://ultralytics.com/images/zidane.jpg",
]
) # batch inferenceGli oggetti Results hanno i seguenti attributi:
| Attributo | Tipo | Descrizione |
|---|---|---|
orig_img | np.ndarray | L'immagine originale come array NumPy. |
orig_shape | tuple | La forma dell'immagine originale nel formato (altezza, larghezza). |
boxes | Boxes, optional | Un oggetto Boxes contenente le box di delimitazione dei rilevamenti. |
masks | Masks, optional | Un oggetto Masks contenente le maschere dei rilevamenti. |
probs | Probs, optional | Un oggetto Probs contenente le probabilità di ogni classe per l'attività di classificazione. |
keypoints | Keypoints, optional | Un oggetto Keypoints contenente i keypoint rilevati per ogni oggetto. |
obb | OBB, optional | Un oggetto OBB contenente box di delimitazione orientate. |
semantic_mask | SemanticMask, optional | Un oggetto SemanticMask contenente una mappa densa delle classi per pixel. |
speed | dict | Un dizionario delle velocità di pre-elaborazione, inferenza e post-elaborazione in millisecondi per immagine. |
names | dict | Un dizionario che associa 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. |
Risultati per attività#
I campi che si popolano qui sotto dipendono dal task del tuo modello — confronta detection, segmentation, semantic segmentation, depth estimation, classification, pose e OBB se non ne hai ancora scelto uno. Ciascuna prediction restituisce un oggetto Results per ogni immagine o frame. I campi comuni di cui sopra sono sempre disponibili, mentre i dati di prediction specifici del task sono memorizzati nei campi sottostanti. I tensori di coordinate e confidenza di YOLO sono torch.float32; i tensori di probabilità sono torch.float32 a meno che non venga utilizzata la mezza precisione, nel qual caso sono torch.float16. Dopo result.numpy(), i tensori diventano array NumPy con i corrispondenti dtypes di NumPy. Le maschere di istanza sono tensori binari torch.uint8, mentre le maschere semantiche utilizzano il tipo di dato intero più piccolo possibile per gli ID delle classi: torch.uint8, torch.int16 o torch.int32, a seconda del numero di classi.
| Attributo | Tipo | Forma | Descrizione |
|---|---|---|---|
result.boxes | Boxes | (N) | Box di rilevamento. |
result.boxes.data | torch.float32 | (N,6/7) | [x1,y1,x2,y2,conf,cls] grezzi, oltre all'ID di tracciamento opzionale. |
result.boxes.xyxy | torch.float32 | (N,4) | Box dei pixel xyxy. |
result.boxes.conf | torch.float32 | (N,) | Punteggi di confidenza. |
result.boxes.cls | torch.float32 | (N,) | ID delle classi; converti in int per ottenere i nomi. |
Gli oggetti Results hanno i seguenti metodi:
| Metodo | Tipo restituito | Descrizione |
|---|---|---|
update() | None | Aggiorna l'oggetto Results con nuovi dati come box, maschere, probs, obb, keypoint o maschere semantiche. |
cpu() | Results | Restituisce una copia dell'oggetto Results con tutti i tensori spostati nella memoria CPU. |
numpy() | Results | Restituisce una copia dell'oggetto Results con tutti i tensori convertiti in array NumPy. |
cuda() | Results | Restituisce una copia dell'oggetto Results con tutti i tensori spostati nella memoria GPU. |
to() | Results | Restituisce una copia dell'oggetto Results con i tensori spostati sul dispositivo e con il tipo di dati specificati. |
new() | Results | Crea un nuovo oggetto Results con gli stessi attributi image, path, names e speed. |
plot() | np.ndarray | Traccia i risultati del rilevamento su un'immagine BGR di input e restituisce l'immagine annotata. |
show() | None | Visualizza l'immagine con i risultati dell'inferenza annotati. |
save() | str | Salva in un file l'immagine dei risultati dell'inferenza annotati e restituisce il nome del file. |
verbose() | str | Restituisce una stringa di log per ogni attività, descrivendo in dettaglio gli esiti 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 delle rilevazioni ritagliate nella directory specificata. |
summary() | List[Dict[str, Any]] | Converte i risultati dell'inferenza in un dizionario riepilogativo con normalizzazione opzionale. |
to_df() | DataFrame | Converte i risultati delle rilevazioni in un DataFrame Polars. |
to_csv() | str | Converte i risultati delle rilevazioni in formato CSV. |
to_json() | str | Converte i risultati delle rilevazioni in formato JSON. |
Per maggiori dettagli, consulta la documentazione della classe Results.
Riquadri#
L'oggetto Boxes può essere utilizzato per indicizzare, manipolare e convertire i riquadri delimitatori in diversi formati.
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.boxes) # print the Boxes object containing the detection bounding boxesEcco una tabella dei metodi e delle proprietà della classe Boxes, inclusi nome, tipo e descrizione:
| Nome | Tipo | Descrizione |
|---|---|---|
cpu() | Metodo | Sposta l'oggetto nella memoria 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 delle classi 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 dell'immagine originale. |
xywhn | Proprietà (torch.Tensor) | Restituisce i riquadri nel formato xywh normalizzati in base alle dimensioni dell'immagine originale. |
Per maggiori dettagli, consulta la documentazione della classe Boxes.
Maschere#
L'oggetto Masks può essere utilizzato per indicizzare, manipolare e convertire le maschere in segmenti.
from ultralytics import YOLO
# Load a pretrained YOLO26n-seg Segment model
model = YOLO("yolo26n-seg.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.masks) # print the Masks object containing the detected instance masksEcco una tabella dei metodi e delle proprietà della classe Masks, inclusi nome, tipo e descrizione:
| Nome | Tipo | Descrizione |
|---|---|---|
data | Proprietà (torch.Tensor) | Tensore di maschera binaria torch.uint8 con forma (N,H,W) e valori 0 o 1. |
cpu() | Metodo | Restituisce il tensore delle maschere nella memoria CPU. |
numpy() | Metodo | Restituisce il tensore delle maschere come array NumPy. |
cuda() | Metodo | Restituisce il tensore delle maschere nella memoria GPU. |
to() | Metodo | Restituisce il tensore delle maschere con il dispositivo e il dtype specificati. |
xyn | Proprietà (list[np.ndarray]) | Un elenco di poligoni delle maschere normalizzati. |
xy | Proprietà (list[np.ndarray]) | Un elenco di poligoni delle maschere in coordinate pixel. |
Per maggiori dettagli, consulta la documentazione della classe Masks.
SemanticMask#
SemanticMask memorizza una mappa densa delle classi per i risultati della segmentazione semantica. A differenza di Masks, non contiene una maschera binaria per ogni oggetto e non fornisce helper per i poligoni.
from ultralytics import YOLO
# Load a pretrained YOLO26n-sem Semantic model
model = YOLO("yolo26n-sem.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.semantic_mask.data) # print the H x W class-ID map| Nome | Tipo | Descrizione |
|---|---|---|
data | Proprietà (torch.Tensor) | Mappa degli ID delle classi con forma (H,W). Il dtype è torch.uint8, torch.int16 o torch.int32, selezionato in base al numero di classi. |
shape | Proprietà (tuple) | Forma della mappa delle classi, generalmente corrispondente a result.orig_shape. |
cpu() | Metodo | Restituisce il tensore della maschera semantica nella memoria CPU. |
numpy() | Metodo | Restituisce il tensore della maschera semantica come array NumPy. |
cuda() | Metodo | Restituisce il tensore della maschera semantica nella memoria GPU. |
to() | Metodo | Restituisce il tensore della maschera semantica con il dispositivo e il dtype specificati. |
Punti chiave#
L'oggetto Keypoints può essere utilizzato per indicizzare, manipolare e normalizzare le coordinate.
from ultralytics import YOLO
# Load a pretrained YOLO26n-pose Pose model
model = YOLO("yolo26n-pose.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.keypoints) # print the Keypoints object containing the detected keypointsEcco una tabella dei metodi e delle proprietà della classe Keypoints, inclusi nome, tipo e descrizione:
| Nome | Tipo | Descrizione |
|---|---|---|
cpu() | Metodo | Restituisce il tensore dei keypoint nella memoria CPU. |
numpy() | Metodo | Restituisce il tensore dei keypoint come array NumPy. |
cuda() | Metodo | Restituisce il tensore dei keypoint nella memoria GPU. |
to() | Metodo | Restituisce il tensore dei keypoint con il dispositivo e il dtype specificati. |
xyn | Proprietà (torch.Tensor) | Un elenco di keypoint normalizzati rappresentati come tensori. |
xy | Proprietà (torch.Tensor) | Un elenco di keypoint in coordinate pixel rappresentati come tensori. |
conf | Proprietà (torch.Tensor) | Restituisce i valori di confidenza dei keypoint se disponibili, altrimenti None. |
Per maggiori dettagli, consulta la documentazione della classe Keypoints.
Probs#
L'oggetto Probs può essere utilizzato per ottenere gli indici e i punteggi di classificazione top1 e top5.
from ultralytics import YOLO
# Load a pretrained YOLO26n-cls Classify model
model = YOLO("yolo26n-cls.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.probs) # print the Probs object containing the detected class probabilitiesEcco una tabella riepilogativa dei metodi e delle proprietà della classe Probs:
| Nome | Tipo | Descrizione |
|---|---|---|
cpu() | Metodo | Restituisce una copia del tensore probs nella memoria CPU. |
numpy() | Metodo | Restituisce una copia del tensore probs come array NumPy. |
cuda() | Metodo | Restituisce una copia del tensore probs nella memoria GPU. |
to() | Metodo | Restituisce una copia del tensore probs con il dispositivo e il dtype specificati. |
top1 | Proprietà (int) | Indice della classe principale. |
top5 | Proprietà (list[int]) | Indici delle 5 classi principali. |
top1conf | Proprietà (torch.Tensor) | Confidenza della classe principale. |
top5conf | Proprietà (torch.Tensor) | Confidenze delle 5 classi principali. |
Per maggiori dettagli, consulta la documentazione della classe Probs.
OBB#
L'oggetto OBB può essere utilizzato per indicizzare, manipolare e convertire i riquadri delimitatori orientati in diversi formati.
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n-obb.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/boats.jpg") # results list
# View results
for r in results:
print(r.obb) # print the OBB object containing the oriented detection bounding boxesEcco una tabella dei metodi e delle proprietà della classe OBB, inclusi nome, tipo e descrizione:
| Nome | Tipo | Descrizione |
|---|---|---|
cpu() | Metodo | Sposta l'oggetto nella memoria 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 delle classi dei riquadri. |
id | Proprietà (torch.Tensor) | Restituisce gli ID di tracciamento dei riquadri (se disponibili). |
xyxy | Proprietà (torch.Tensor) | Restituisce i riquadri orizzontali nel formato xyxy. |
xywhr | Proprietà (torch.Tensor) | Restituisce i riquadri ruotati nel formato xywhr. |
xyxyxyxy | Proprietà (torch.Tensor) | Restituisce i riquadri ruotati nel formato xyxyxyxy. |
xyxyxyxyn | Proprietà (torch.Tensor) | Restituisce i riquadri ruotati nel formato xyxyxyxy normalizzati in base alle dimensioni dell'immagine. |
Per maggiori dettagli, consulta la documentazione della classe OBB.
Risultati della visualizzazione#
Il metodo plot() negli oggetti Results facilita la visualizzazione delle predizioni sovrapponendo gli oggetti rilevati (come riquadri delimitatori, maschere, keypoint e probabilità) all'immagine originale. Questo metodo restituisce l'immagine annotata come array NumPy, consentendone facilmente la visualizzazione o il salvataggio.
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Run inference on 'bus.jpg'
results = model(["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"]) # results list
# Visualize the results
for i, r in enumerate(results):
# Plot results image
im_bgr = r.plot() # BGR-order numpy array
im_rgb = Image.fromarray(im_bgr[..., ::-1]) # RGB-order PIL image
# Show results to screen (in supported environments)
r.show()
# Save results to disk
r.save(filename=f"results{i}.jpg")Parametri del metodo plot()#
Il metodo plot() supporta diversi argomenti per personalizzare l'output:
| Argomento | Tipo | Descrizione | Predefinito |
|---|---|---|---|
conf | bool | Includi i punteggi di confidenza delle rilevazioni. | True |
line_width | float | Larghezza delle linee dei riquadri delimitatori. Viene ridimensionata in base alle dimensioni dell'immagine se None. | None |
font_size | float | Dimensione del carattere del testo. Viene ridimensionata in base alle dimensioni dell'immagine se None. | None |
font | str | Nome del carattere per le annotazioni testuali. | 'Arial.ttf' |
pil | bool | Restituisci l'immagine come oggetto PIL Image. | False |
img | np.ndarray | torch.Tensor | Immagine alternativa. I tensori devono essere HWC BGR uint8 contigui. | None |
kpt_radius | int | Raggio dei keypoint disegnati. | 5 |
kpt_line | bool | Collega i keypoint con linee. | True |
labels | bool | Includi le etichette delle classi nelle annotazioni. | True |
boxes | bool | Sovrapponi i riquadri delimitatori all'immagine. | True |
masks | bool | Sovrapponi le maschere all'immagine. | True |
probs | bool | Includi le probabilità di classificazione. | True |
show | bool | Visualizza direttamente l'immagine annotata 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 BGR per il riquadro delimitatore e l'etichetta di classificazione dell'immagine. | (255, 255, 255) |
Inferenza thread-safe#
Garantire la sicurezza dei thread durante l'inferenza è fondamentale quando esegui più modelli YOLO in parallelo su thread diversi. L'inferenza thread-safe garantisce che le predizioni di ogni thread siano isolate e non interferiscano tra loro, evitando race condition e assicurando output coerenti e affidabili.
Quando utilizzi modelli YOLO in un'applicazione multithread, è importante istanziare oggetti modello separati per ogni thread oppure utilizzare l'archiviazione locale al thread per prevenire conflitti:
Istanzia 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(model, image_path):
"""Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
model = YOLO(model)
results = model.predict(image_path)
# Process results
# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image1.jpg")).start()
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image2.jpg")).start()Per un'analisi approfondita dell'inferenza thread-safe con i modelli YOLO e istruzioni dettagliate passo passo, consulta la nostra Guida all'inferenza YOLO thread-safe. Questa guida ti fornirà tutte le informazioni necessarie per evitare le problematiche comuni e garantire che l'inferenza multithread venga eseguita senza problemi.
Ciclo for della sorgente in streaming#
Ecco uno script Python che utilizza OpenCV (cv2) e YOLO per eseguire l'inferenza sui fotogrammi video. Questo script presuppone che tu abbia già installato i pacchetti necessari (opencv-python e ultralytics).
import cv2
from ultralytics import YOLO
# Load the YOLO model
model = YOLO("yolo26n.pt")
# Open the video file
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)
# Loop through the video frames
while cap.isOpened():
# Read a frame from the video
success, frame = cap.read()
if success:
# Run YOLO inference on the frame
results = model(frame)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the annotated frame
cv2.imshow("YOLO Inference", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Break the loop if the end of the video is reached
break
# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()Questo script eseguirà le predizioni su ogni fotogramma del video, visualizzerà i risultati e li mostrerà in una finestra. Puoi uscire dal ciclo premendo 'q'.
E adesso?#
Pronto a passare oltre un modello pretrained? Verifica che il tuo task sia adatto al tuo problema, formatta i tuoi dati con la guida ai dataset, quindi addestra il modello.
FAQ#
Ultralytics YOLO è un modello all'avanguardia per la rilevazione degli oggetti, la segmentazione delle istanze, la segmentazione semantica, la stima della profondità e la classificazione in tempo reale. La sua modalità predict consente di eseguire inferenze ad alta velocità su diverse sorgenti di dati, come immagini, video e flussi live. Progettata per garantire prestazioni e versatilità, offre anche modalità di elaborazione batch e streaming. Per maggiori dettagli sulle sue funzionalità, consulta la modalità predict di Ultralytics YOLO.
Ultralytics YOLO può elaborare un'ampia gamma di sorgenti di dati, incluse immagini singole, video, directory, URL e flussi. Puoi specificare la sorgente di dati nella chiamata
model.predict(). Ad esempio, usa'image.jpg'per un'immagine locale o'https://ultralytics.com/images/bus.jpg'per un URL. Consulta nella documentazione gli esempi dettagliati per varie sorgenti di inferenza.Per ottimizzare la velocità dell'inferenza e gestire la memoria in modo efficiente, puoi utilizzare la modalità streaming impostando
stream=Truenel metodo di chiamata del predictor. La modalità streaming genera un iteratore efficiente in termini di memoria di oggettiResultsinvece di caricare tutti i fotogrammi in memoria. La modalità streaming è particolarmente utile per elaborare video lunghi o dataset di grandi dimensioni. Scopri di più sulla modalità streaming.Il metodo
model.predict()in YOLO supporta diversi argomenti, comeconf,iou,imgsz,devicee altri. 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.Usa
model.embed(source)per estrarre gli embedding delle feature dal penultimo livello oppure passaembed=[layer_index]amodel.predict()per scegliere livelli specifici.from ultralytics import YOLO model = YOLO("yolo26n.pt") source = "https://ultralytics.com/images/bus.jpg" results = model.predict(source) # Results objects embeddings = model.embed(source) # list of torch.Tensor embeddingsDopo aver eseguito l'inferenza con YOLO, gli oggetti
Resultscontengono metodi per visualizzare e salvare le immagini annotate. Puoi utilizzare metodi comeresult.show()eresult.save(filename="result.jpg")per visualizzare e salvare i risultati. Eventuali directory padre mancanti nel percorso del nome file vengono create automaticamente (ad es.,result.save("path/to/result.jpg")). Per un elenco completo di questi metodi, consulta la sezione utilizzo dei risultati.