YOLOE: Vedi tutto in tempo reale#
Introduzione#

YOLOE (Real-Time Seeing Anything) è un nuovo progresso nei modelli YOLO zero-shot con prompt, progettati per il rilevamento e la segmentazione a vocabolario aperto. A differenza dei precedenti modelli YOLO limitati a categorie fisse, YOLOE utilizza prompt di testo, immagine o vocabolario interno, consentendo il rilevamento in tempo reale di qualsiasi classe di oggetti. Basato su YOLOv10 e ispirato a YOLO-World, YOLOE raggiunge prestazioni zero-shot all'avanguardia con un impatto minimo su velocità e precisione.
Watch: How to use Ultralytics YOLOE-26 (New) | Open Vocabulary & Real-Time Seeing Anything 🚀
Rispetto ai modelli YOLO precedenti, YOLOE migliora significativamente l'efficienza e la precisione. Ottimizza +3.5 AP rispetto a YOLO-Worldv2 su LVIS utilizzando solo un terzo delle risorse di addestramento e raggiungendo velocità di inferenza 1,4 volte superiori. Messo a punto su COCO, YOLOE-v8-large supera YOLOv8-L di 0.1 mAP, impiegando quasi 4 volte meno tempo di addestramento. Ciò dimostra lo straordinario equilibrio di YOLOE tra precisione, efficienza e versatilità. Le sezioni seguenti esplorano l'architettura di YOLOE, i confronti nei benchmark e l'integrazione con il framework Ultralytics.
Panoramica dell'architettura#
YOLOE mantiene la struttura YOLO standard: una backbone convoluzionale (es. CSP-Darknet) per l'estrazione delle feature, un neck (es. PAN-FPN) per la fusione multi-scala e una head di rilevamento decoupled e senza anchor (come in YOLOv8/YOLO11) che predice indipendentemente objectness, classi e box. YOLOE introduce tre moduli innovativi che consentono il rilevamento a vocabolario aperto:
-
Re-parameterizable Region-Text Alignment (RepRTA): Supporta il rilevamento guidato da testo perfezionando i vector embeddings (ad esempio, da CLIP) tramite una piccola rete ausiliaria. Durante l'inferenza, questa rete viene incorporata nel modello principale, garantendo un sovraccarico zero. YOLOE rileva così oggetti arbitrari etichettati con testo (ad esempio, un "semaforo" non visto) senza penalizzazioni di runtime.
-
Semantic-Activated Visual Prompt Encoder (SAVPE): Abilita il rilevamento tramite prompt visivi attraverso un ramo di embedding leggero. Data un'immagine di riferimento, SAVPE codifica feature semantiche e di attivazione, condizionando il modello a rilevare oggetti visivamente simili: una capacità di rilevamento one-shot utile per loghi o parti specifiche.
-
Lazy Region-Prompt Contrast (LRPC): In modalità senza prompt, YOLOE esegue il riconoscimento open-set utilizzando embedding interni addestrati su ampi vocabolari (oltre 1200 categorie da LVIS e Objects365). Senza prompt o encoder esterni, YOLOE identifica gli oggetti tramite la similarità degli embedding, gestendo in modo efficiente ampi spazi di etichette durante l'inferenza.
Inoltre, YOLOE integra la segmentazione di istanze in tempo reale estendendo la detection head con un ramo di predizione delle maschere (simile a YOLACT o YOLOv8-Seg), aggiungendo un overhead minimo.
Fondamentalmente, i moduli open-world di YOLOE non introducono alcun costo di inferenza se utilizzati come un normale YOLO a set chiuso. Dopo l'addestramento, i parametri di YOLOE possono essere riparametrati in una testata YOLO standard, preservando FLOP e velocità identici (ad esempio, corrispondendo esattamente a YOLO11).
Modelli disponibili, attività supportate e modalità operative#
Questa sezione descrive in dettaglio i modelli disponibili con i rispettivi pesi pre-addestrati, i task che supportano e la loro compatibilità con varie modalità operative come Inference, Validation, Training e Export, indicate da ✅ per le modalità supportate e ❌ per quelle non supportate.
Modelli con prompt Testuali/Visivi#
| Tipo di modello | Pesi pre-addestrati | Attività supportate | Addestramento | Validazione | Inferenza | Esportazione |
|---|---|---|---|---|---|---|
| YOLOE-11S | yoloe-11s-seg.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-11M | yoloe-11m-seg.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-11L | yoloe-11l-seg.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-v8S | yoloe-v8s-seg.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-v8M | yoloe-v8m-seg.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-v8L | yoloe-v8l-seg.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26N | yoloe-26n-seg.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26S | yoloe-26s-seg.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26M | yoloe-26m-seg.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26L | yoloe-26l-seg.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26X | yoloe-26x-seg.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
Modelli senza Prompt#
| Tipo di modello | Pesi pre-addestrati | Attività supportate | Addestramento | Validazione | Inferenza | Esportazione |
|---|---|---|---|---|---|---|
| YOLOE-11S-PF | yoloe-11s-seg-pf.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-11M-PF | yoloe-11m-seg-pf.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-11L-PF | yoloe-11l-seg-pf.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-v8S-PF | yoloe-v8s-seg-pf.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-v8M-PF | yoloe-v8m-seg-pf.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-v8L-PF | yoloe-v8l-seg-pf.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26N-PF | yoloe-26n-seg-pf.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26S-PF | yoloe-26s-seg-pf.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26M-PF | yoloe-26m-seg-pf.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26L-PF | yoloe-26l-seg-pf.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| YOLOE-26X-PF | yoloe-26x-seg-pf.pt | Segmentazione di istanze | ✅ | ✅ | ✅ | ✅ |
| Modello | dimensione (pixel) | Tipo di prompt | mAPminival 50-95(e2e) | mAPminival 50-95 | mAPr | mAPc | mAPf | params (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|---|---|
| YOLOE-26n-seg | 640 | Testo/Visivo | 23.7 / 20.9 | 24.7 / 21.9 | 20.5 / 17.6 | 24.1 / 22.3 | 26.1 / 22.4 | 4.8 | 6.0 |
| YOLOE-26s-seg | 640 | Testo/Visivo | 29.9 / 27.1 | 30.8 / 28.6 | 23.9 / 25.1 | 29.6 / 27.8 | 33.0 / 29.9 | 13.1 | 21.7 |
| YOLOE-26m-seg | 640 | Testo/Visivo | 35.4 / 31.3 | 35.4 / 33.9 | 31.1 / 33.4 | 34.7 / 34.0 | 36.9 / 33.8 | 27.9 | 70.1 |
| YOLOE-26l-seg | 640 | Testo/Visivo | 36.8 / 33.7 | 37.8 / 36.3 | 35.1 / 37.6 | 37.6 / 36.2 | 38.5 / 36.1 | 32.3 | 88.3 |
| YOLOE-26x-seg | 640 | Testo/Visivo | 39.5 / 36.2 | 40.6 / 38.5 | 37.4 / 35.3 | 40.9 / 38.8 | 41.0 / 38.8 | 69.9 | 196.7 |
Esempi di Utilizzo#
I modelli YOLOE sono facili da integrare nelle tue applicazioni Python. Ultralytics fornisce una Python API intuitiva e comandi CLI per semplificare lo sviluppo.
Utilizzo per l'addestramento#
Fine-Tuning su dataset personalizzato#
Puoi ottimizzare qualsiasi modello YOLOE pre-addestrato sul tuo dataset YOLO personalizzato sia per task di rilevamento che di segmentazione di istanze.
Watch: How to Train YOLOE on Car Parts Segmentation Dataset | Open-Vocabulary Model, Prediction & Export 🚀
Segmentazione di istanze
La messa a punto di un checkpoint pre-addestrato di YOLOE segue principalmente la procedura di addestramento YOLO standard. La differenza chiave consiste nel passare esplicitamente YOLOEPESegTrainer come parametro trainer a model.train():
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPESegTrainer
model = YOLOE("yoloe-26s-seg.pt")
# Fine-tune on your segmentation dataset
results = model.train(
data="coco128-seg.yaml", # Segmentation dataset
epochs=80,
patience=10,
trainer=YOLOEPESegTrainer, # <- Important: use segmentation trainer
)Rilevamento di oggetti
Tutti i modelli YOLOE pre-addestrati eseguono la segmentazione di istanze per impostazione predefinita. Per utilizzare questi checkpoint pre-addestrati nell'addestramento di un modello di rilevamento, inizializza un modello di rilevamento da zero usando la configurazione YAML, quindi carica il checkpoint di segmentazione pre-addetrato della stessa scala. Nota che usiamo YOLOEPETrainer al posto di YOLOEPESegTrainer poiché stiamo addestrando un modello di rilevamento:
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPETrainer
# Initialize a detection model from a config
model = YOLOE("yoloe-26s.yaml")
# Load weights from a pretrained segmentation checkpoint (same scale)
model.load("yoloe-26s-seg.pt")
# Fine-tune on your detection dataset
results = model.train(
data="coco128.yaml", # Detection dataset
epochs=80,
patience=10,
trainer=YOLOEPETrainer, # <- Important: use detection trainer
)Utilizzo di Predict#
YOLOE supporta sia il prompting basato su testo che visivo. L'uso dei prompt è semplice: basta passarli attraverso il metodo predict come mostrato di seguito:
I prompt testuali ti consentono di specificare le classi che desideri rilevare attraverso descrizioni testuali. Il seguente codice mostra come usare YOLOE per rilevare persone e autobus in un'immagine:
from ultralytics import YOLOE
# Initialize a YOLOE model
model = YOLOE("yoloe-26l-seg.pt") # or yoloe-26s/m-seg.pt for different sizes
# Set text prompt to detect person and bus. You only need to do this once after you load the model.
model.set_classes(["person", "bus"])
# Run detection on the given image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Utilizzo di Val#
La validazione del modello su un dataset è semplificata come segue:
from ultralytics import YOLOE
# Create a YOLOE model
model = YOLOE("yoloe-26l-seg.pt") # or yoloe-26s/m-seg.pt for different sizes
# Conduct model validation on the COCO128-seg example dataset
metrics = model.val(data="coco128-seg.yaml")Utilizzo dell'esportazione#
Il processo di esportazione è simile ad altri modelli YOLO, con l'aggiunta della flessibilità di gestire prompt testuali e visivi:
Le classi configurate con set_classes() (o tramite refer_image per i prompt visivi) sono incorporate nei pesi esportati. Una volta esportato, il modello non può più accettare nuovi prompt: la chiamata a set_classes() o il passaggio di visual_prompts=... a predict() su un export caricato falliranno. Per modificare le classi rilevate, riesporta dal checkpoint originale di .pt configurando i nuovi prompt. Il file esportato si comporta come un rilevatore YOLO standard e può anche essere caricato con YOLO() anziché YOLOE().
Gli embedding dei prompt possono essere salvati una sola volta e riutilizzati quando produci esportazioni statiche come ONNX, OpenVINO, TensorRT, CoreML, LiteRT e RKNN. Il profilo NPZ viene caricato dal modello PyTorch originale prima dell'esportazione; non è un input di runtime aggiuntivo e il modello esportato non richiede il file NPZ.
from ultralytics import YOLOE
model = YOLOE("yoloe-26n-seg.pt")
model.set_classes(["person", "bus"])
model.save_prompt_embeddings("person-bus.npz")
# The profile is bound to the source checkpoint and can be reused for later exports.
model = YOLOE("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="onnx")Lo stesso profilo di prompt può anche configurare un modello di sola rilevamento costruito dall'architettura YOLOE corrispondente. Questo rimuove il ramo delle maschere mantenendo le classi promptate:
from ultralytics import YOLOE
model = YOLOE("yoloe-26n.yaml").load("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="rknn", name="rk3588", quantize=16)from ultralytics import YOLOE
# Select yoloe-26s/m-seg.pt for different sizes
model = YOLOE("yoloe-26l-seg.pt")
# Configure the set_classes() before exporting the model
model.set_classes(["person", "bus"])
export_model = model.export(format="onnx")
model = YOLOE(export_model)
# Run detection on the given image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Addestra modelli ufficiali#
Prepara i dataset#
L'addestramento dei modelli YOLOE ufficiali richiede annotazioni di segmentazione per i dati di addestramento; ecco lo script fornito dal team ufficiale che converte i dataset in annotazioni di segmentazione, basato sui modelli SAM2.1. In alternativa, puoi scaricare direttamente il file Processed Segment Annotations fornito nella tabella seguente dal team ufficiale.
- Dati di addestramento
| Dataset | Tipo | Campioni | Box | Annotazioni di rilevamento grezze | Annotazioni di segmentazione processate |
|---|---|---|---|---|---|
| Objects365v1 | Rilevamento | 609k | 9621k | objects365_train.json | objects365_train_segm.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json | final_mixed_train_no_coco_segm.json |
| Flickr30k | Grounding | 149k | 641k | final_flickr_separateGT_train.json | final_flickr_separateGT_train_segm.json |
- Dati di validazione
| Dataset | Tipo | File di annotazione |
|---|---|---|
| LVIS minival | Rilevamento | minival.txt |
Avvio dell'addestramento da zero#
I modelli Visual Prompt sono ottimizzati partendo da modelli Text Prompt ben addestrati.
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOESegTrainerFromScratch
# Option 1: Use Python dictionary
data = {
"train": {
"yolo_data": ["Objects365.yaml"],
"grounding_data": [
{
"img_path": "flickr/full_images/",
"json_file": "flickr/annotations/final_flickr_separateGT_train_segm.json",
},
{
"img_path": "mixed_grounding/gqa/images",
"json_file": "mixed_grounding/annotations/final_mixed_train_no_coco_segm.json",
},
],
},
"val": {"yolo_data": ["lvis.yaml"]},
}
# Option 2: Use YAML file (yoloe_data.yaml)
# train:
# yolo_data:
# - Objects365.yaml
# grounding_data:
# - img_path: flickr/full_images/
# json_file: flickr/annotations/final_flickr_separateGT_train_segm.json
# - img_path: mixed_grounding/gqa/images
# json_file: mixed_grounding/annotations/final_mixed_train_no_coco_segm.json
# val:
# yolo_data:
# - lvis.yaml
model = YOLOE("yoloe-26l-seg.yaml")
model.train(
data=data, # or data="yoloe_data.yaml" if using YAML file
batch=128,
epochs=30,
close_mosaic=2,
optimizer="AdamW",
lr0=2e-3,
warmup_bias_lr=0.0,
weight_decay=0.025,
momentum=0.9,
workers=4,
trainer=YOLOESegTrainerFromScratch,
device="0,1,2,3,4,5,6,7",
)Confronto delle prestazioni di YOLOE#
YOLOE eguaglia o supera la precisione dei modelli YOLO a set chiuso su benchmark standard come COCO e LVIS, senza compromettere la velocità o le dimensioni del modello. La tabella seguente confronta YOLOE-L (basato su YOLO11) e YOLOE26-L (basato su YOLO26) con i corrispondenti modelli a set chiuso:
| Modello | COCO mAP50-95 | LVIS mAP50-95 | Velocità di inferenza (T4) | Parametri | GFLOPs (640px) |
|---|---|---|---|---|---|
| YOLOv8-L (a set chiuso) | 52.9% | - | 9,06 ms (110 FPS) | 43.7 M | 165.2 B |
| YOLO11-L (a set chiuso) | 53.5% | - | 6,2 ms (161 FPS) | 26.2 M | 86.9 B |
| YOLOE-L (open-vocab) | 52.6% | 35.2% | 6,2 ms (161 FPS) | 26.2 M | 86,9 B† |
| YOLOE26-L (open-vocab) | - | 36.8% | 6,2 ms (161 FPS) | 32.3 M | 88,3 B† |
† YOLOE-L condivide l'architettura di YOLO11-L e YOLOE26-L condivide l'architettura di YOLO26-L, con conseguente velocità di inferenza e GFLOP simili.
YOLOE26-L raggiunge il 36,8% LVIS mAP con 32,3M di parametri e 88,3B di FLOP, elaborando immagini 640×640 a 6,2 ms (161 FPS) su GPU T4. Questo migliora il 35,2% LVIS mAP di YOLOE-L mantenendo la stessa velocità di inferenza. Fondamentalmente, i moduli open-vocabulary di YOLOE non comportano alcun costo di inferenza, dimostrando un design a "compromesso a costo zero".
Per i compiti zero-shot, YOLOE26 supera significativamente i precedenti rilevatori open-vocabulary: su LVIS, YOLOE26-S raggiunge il 29,9% mAP, superando YOLO-World-S di +11,4 AP, mentre YOLOE26-L raggiunge il 36,8% mAP, superando YOLO-World-L di +10,0 AP. YOLOE26 mantiene un'inferenza efficiente a 161 FPS su GPU T4, ideale per applicazioni open-vocabulary in tempo reale.
Condizioni di benchmark: i risultati di YOLOE provengono da modelli pre-addestrati su Objects365, GoldG e LVIS, poi rifiniti o valutati su COCO. Il leggero vantaggio di mAP di YOLOE rispetto a YOLOv8 deriva dall'ampio pre-addestramento. Senza questo addestramento open-vocab, YOLOE eguaglia i modelli YOLO di dimensioni simili, confermando la sua accuratezza SOTA e la flessibilità open-world senza penalità di prestazioni.
Confronto con i modelli precedenti#
YOLOE introduce notevoli progressi rispetto ai precedenti modelli YOLO e rilevatori open-vocabulary:
-
YOLOE vs YOLOv5: YOLOv5 offriva un buon equilibrio tra velocità e precisione, ma richiedeva un nuovo addestramento per le nuove classi e utilizzava testate basate su ancore (anchor-based). Al contrario, YOLOE è privo di ancore (anchor-free) e rileva dinamicamente nuove classi. YOLOE, basandosi sui miglioramenti di YOLOv8, raggiunge una maggiore precisione (52,6% rispetto a ~50% di mAP su COCO di YOLOv5) e integra la segmentazione di istanze, a differenza di YOLOv5.
-
YOLOE vs YOLOv8: YOLOE estende l'architettura riprogettata di YOLOv8, ottenendo una precisione simile o superiore (52,6% mAP con ~26M di parametri rispetto a 52,9% con ~44M di parametri di YOLOv8-L). Riduce significativamente il tempo di addestramento grazie a un pre-addestramento più robusto. Il progresso fondamentale è la capacità open-world di YOLOE, che rileva oggetti non visti (ad esempio, "bird scooter" o "peace symbol") tramite prompt, a differenza del design a set chiuso di YOLOv8.
-
YOLOE vs YOLO11: YOLO11 migliora YOLOv8 con una maggiore efficienza e un minor numero di parametri (riduzione di ~22%). YOLOE eredita direttamente questi vantaggi, eguagliando la velocità di inferenza e il numero di parametri di YOLO11 (~26M di parametri), aggiungendo al contempo rilevamento e segmentazione a vocabolario aperto. Negli scenari a set chiuso, YOLOE è equivalente a YOLO11, ma aggiunge in modo cruciale l'adattabilità per rilevare classi non viste, ottenendo YOLO11 + capacità open-world senza compromettere la velocità.
-
YOLOE26 vs YOLOE (basato su YOLO11): YOLOE26 si basa sull'architettura di YOLO26, ereditandone il design end-to-end privo di NMS per un'inferenza più rapida. Su LVIS, YOLOE26-L raggiunge il 36,8% mAP, migliorando rispetto al 35,2% mAP di YOLOE-L. YOLOE26 offre tutte e cinque le scale di modello (N/S/M/L/X) rispetto alle tre di YOLOE (S/M/L), offrendo maggiore flessibilità per diversi scenari di distribuzione.
-
YOLOE26 vs precedenti rilevatori a vocabolario aperto: I precedenti modelli open-vocab (GLIP, OWL-ViT, YOLO-World) facevano ampio affidamento su transformer di visione-linguaggio, portando a un'inferenza lenta. Su LVIS, YOLOE26-S raggiunge il 29,9% mAP (+11.4 AP rispetto a YOLO-World-S) e YOLOE26-L raggiunge il 36,8% mAP (+10.0 AP rispetto a YOLO-World-L), mantenendo un'inferenza in tempo reale a 161 FPS su GPU T4. Rispetto agli approcci basati su transformer (ad es. GLIP), YOLOE26 offre un'inferenza ordini di grandezza più rapida, colmando efficacemente il divario tra precisione ed efficienza nel rilevamento a set aperto.
In sintesi, YOLOE e YOLOE26 mantengono la rinomata velocità ed efficienza di YOLO, superano i predecessori in accuratezza, integrano la segmentazione e introducono un potente rilevamento open-world. YOLOE26 fa progredire ulteriormente l'architettura con l'inferenza end-to-end senza NMS di YOLO26, rendendolo ideale per applicazioni open-vocabulary in tempo reale.
Casi d'uso e applicazioni#
Il rilevamento e la segmentazione open-vocabulary di YOLOE consentono diverse applicazioni oltre ai tradizionali modelli a classe fissa:
-
Rilevamento di oggetti in contesti Open-World: Ideale per scenari dinamici come la robotica, in cui i robot riconoscono oggetti precedentemente non visti utilizzando i prompt, o i sistemi di sicurezza che si adattano rapidamente a nuove minacce (ad esempio, articoli pericolosi) senza riaddestramento.
-
Rilevamento Few-Shot e One-Shot: Utilizzando prompt visivi (SAVPE), YOLOE apprende rapidamente nuovi oggetti da singole immagini di riferimento, perfetto per l'ispezione industriale (identificazione istantanea di parti o difetti) o la videosorveglianza personalizzata, consentendo ricerche visive con una configurazione minima.
-
Riconoscimento a Vocabolario Ampio e Long-Tail: Dotato di un vocabolario di oltre 1000 classi, YOLOE eccelle in task come il monitoraggio della biodiversità (rilevamento di specie rare), collezioni museali, inventario retail o e-commerce, identificando in modo affidabile molte classi senza un estensivo addestramento per singola classe.
-
Rilevamento e segmentazione interattivi: YOLOE supporta applicazioni interattive in tempo reale come il recupero di video/immagini ricercabili, realtà aumentata (AR), e l' editing di immagini intuitivo, guidati da input naturali (testo o prompt visivi). Gli utenti possono isolare, identificare o modificare dinamicamente gli oggetti in modo preciso usando maschere di segmentazione.
-
Etichettatura dati automatizzata e Bootstrapping: YOLOE facilita la rapida creazione di dataset fornendo annotazioni iniziali di bounding box e segmentazione, riducendo significativamente gli sforzi di etichettatura umana. Particolarmente prezioso nell' analisi di grandi raccolte multimediali, dove può identificare automaticamente gli oggetti presenti, aiutando a costruire modelli specializzati più velocemente.
-
Segmentazione per Qualsiasi Oggetto: Estende le capacità di segmentazione a oggetti arbitrari tramite prompt, particolarmente vantaggioso per l'imaging medico, la microscopia o l'analisi di immagini satellitari, identificando e segmentando automaticamente e con precisione strutture senza modelli pre-addestrati specializzati. A differenza di modelli come SAM, YOLOE riconosce e segmenta contemporaneamente e automaticamente gli oggetti, aiutando in task come la creazione di contenuti o la comprensione della scena.
In tutti questi casi d'uso, il vantaggio principale di YOLOE è la versatilità, che fornisce un modello unificato per il rilevamento, il riconoscimento e la segmentazione in scenari dinamici. La sua efficienza garantisce prestazioni in tempo reale su dispositivi con risorse limitate, ideale per la robotica, la guida autonoma, la difesa e oltre.
Scegli la modalità di YOLOE in base alle tue esigenze:
- Modalità a set chiuso: Per compiti a classe fissa (massima velocità e accuratezza).
- Modalità con prompt: Aggiungi rapidamente nuovi oggetti tramite prompt testuali o visivi.
- Modalità open-set senza prompt: Rilevamento generale su molte categorie (ideale per catalogazione e scoperta).
Spesso, combinare le modalità—come la scoperta senza prompt seguita da prompt mirati—sfrutta appieno il potenziale di YOLOE.
Addestramento e inferenza#
YOLOE si integra perfettamente con la Python API di Ultralytics e la CLI, in modo analogo ad altri modelli YOLO (YOLOv8, YOLO-World). Ecco come iniziare rapidamente:
from ultralytics import YOLO
# Load pretrained YOLOE model and train on custom data
model = YOLO("yoloe-26s-seg.pt")
model.train(data="path/to/data.yaml", epochs=50, imgsz=640)
# Run inference using text prompts ("person", "bus")
model.set_classes(["person", "bus"])
results = model.predict(source="test_images/street.jpg")
results[0].save() # save annotated outputIn questo caso, YOLOE si comporta per impostazione predefinita come un rilevatore standard, ma passa facilmente al rilevamento con prompt specificando le classi (set_classes). I risultati contengono riquadri di delimitazione (bounding box), maschere ed etichette.
Altri compiti supportati#
- Validazione: Valuta la precisione facilmente con
model.val()oyolo val. - Esportazione: Esporta i modelli YOLOE (
model.export()) in ONNX, TensorRT, ecc., facilitandone la distribuzione. - Tracciamento: YOLOE supporta il tracciamento di oggetti (
yolo track) quando integrato, utile per tracciare classi guidate da prompt nei video.
YOLOE include automaticamente maschere di segmentazione nei risultati di inferenza (results[0].masks), semplificando task con precisione al pixel come l'estrazione o la misurazione di oggetti senza la necessità di modelli separati.
Iniziare#
Configura rapidamente YOLOE con Ultralytics seguendo questi passaggi:
-
Installazione: Installa o aggiorna il pacchetto Ultralytics:
pip install -U ultralytics -
Download dei Pesi di YOLOE: I modelli YOLOE pre-addestrati (es. YOLOE-v8-S/L, varianti YOLOE-11) sono disponibili tra le release GitHub di YOLOE. Basta scaricare il file
.ptdesiderato per caricarlo nella classe YOLO di Ultralytics. -
Requisiti Hardware:
- Inferenza: GPU consigliata (NVIDIA con VRAM ≥4-8GB). I modelli di piccole dimensioni (small) funzionano in modo efficiente su GPU edge (ad esempio, Jetson) o CPU a risoluzioni inferiori. Per un'inferenza ad alte prestazioni su workstation compatte, consulta la nostra guida NVIDIA DGX Spark.
- Addestramento: Il perfezionamento di YOLOE su dati personalizzati richiede solitamente una sola GPU. L'ampio pre-addestramento open-vocabulary (LVIS/Objects365) utilizzato dagli autori ha richiesto un calcolo sostanziale (8× GPU RTX 4090).
-
Configurazione: Le configurazioni di YOLOE utilizzano file YAML standard di Ultralytics. Le configurazioni predefinite (ad esempio,
yoloe-26s-seg.yaml) sono solitamente sufficienti, ma è possibile modificare la dorsale (backbone), le classi o le dimensioni dell'immagine secondo necessità. -
Esecuzione di YOLOE:
-
Inferenza rapida (senza prompt):
yolo predict model=yoloe-26s-seg-pf.pt source="image.jpg" -
Rilevamento con prompt (esempio di prompt testuale):
from ultralytics import YOLO model = YOLO("yoloe-26s-seg.pt") model.set_classes(["bowl", "apple"]) results = model.predict("kitchen.jpg") results[0].save()
-
-
Suggerimenti per l'integrazione:
- Nomi delle classi: Gli output predefiniti di YOLOE utilizzano categorie LVIS; usa
set_classes()per specificare le tue etichette. - Velocità: YOLOE non ha sovraccarico a meno che non si utilizzino prompt. I prompt testuali hanno un impatto minimo; quelli visivi leggermente di più.
- Comportamento NMS: YOLOE utilizza automaticamente
agnostic_nms=Truedurante la previsione, sopprimendo i riquadri sovrapposti con punteggio inferiore tra diverse classi anziché solo all'interno della stessa classe. Ciò impedisce rilevamenti duplicati quando lo stesso oggetto corrisponde a più categorie nel vasto vocabolario di YOLOE (oltre 1200 classi LVIS). Sui modelli YOLOE-26 end-to-end, impedisce unicamente che lo stesso rilevamento appaia sotto più etichette di classe (duplicati IoU=1.0) e non esegue alcuna soppressione basata sulla soglia IoU tra riquadri distinti. Puoi ignorare questo comportamento passando esplicitamenteagnostic_nms=False. - Inferenza a batch: Supportata direttamente (
model.predict([img1, img2])). Per i prompt specifici per singola immagine, esegui le immagini singolarmente.
- Nomi delle classi: Gli output predefiniti di YOLOE utilizzano categorie LVIS; usa
La documentazione di Ultralytics fornisce ulteriori risorse. YOLOE ti consente di esplorare facilmente potenti funzionalità open-world all'interno del familiare ecosistema YOLO.
Consiglio Pro: Per massimizzare l'accuratezza zero-shot di YOLOE, rifinisci dai checkpoint forniti invece di addestrare da zero. Usa parole di prompt allineate con le etichette di addestramento comuni (vedi categorie LVIS) per migliorare l'accuratezza del rilevamento.
Citazioni e riconoscimenti#
Se YOLOE ha contribuito alla tua ricerca o progetto, ti preghiamo di citare l'articolo originale di Ao Wang, Lihao Liu, Hui Chen, Zijia Lin, Jungong Han, e Guiguang Ding della Tsinghua University:
@misc{wang2025yoloerealtimeseeing,
title={YOLOE: Real-Time Seeing Anything},
author={Ao Wang and Lihao Liu and Hui Chen and Zijia Lin and Jungong Han and Guiguang Ding},
year={2025},
eprint={2503.07465},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2503.07465},
}Per ulteriori letture, il paper originale su YOLOE è disponibile su arXiv. Il codice sorgente del progetto e risorse aggiuntive sono accessibili tramite il loro repository GitHub.
FAQ#
In cosa differisce YOLOE da YOLO-World?#
Sebbene sia YOLOE che YOLO-World consentano il rilevamento a vocabolario aperto, YOLOE offre diversi vantaggi. YOLOE raggiunge una precisione superiore di +3.5 AP su LVIS utilizzando risorse di addestramento inferiori di 3 volte e girando 1,4 volte più velocemente rispetto a YOLO-Worldv2. YOLOE supporta inoltre tre modalità di prompting (testuale, visivo e vocabolario interno), mentre YOLO-World si concentra principalmente sui prompt di testo. Inoltre, YOLOE include funzionalità integrate di segmentazione di istanze, fornendo maschere con precisione al pixel per gli oggetti rilevati senza sovraccarichi aggiuntivi.
Posso usare YOLOE come un normale modello YOLO?#
Sì, YOLOE può funzionare esattamente come un modello YOLO standard senza alcuna penalità di prestazioni. Quando utilizzato in modalità a set chiuso (senza prompt), i moduli open-vocabulary di YOLOE vengono ri-parametrizzati nell'head di rilevamento standard, con velocità e accuratezza identiche ai modelli YOLO11 equivalenti. Questo rende YOLOE estremamente versatile: puoi usarlo come un rilevatore tradizionale per la massima velocità e poi passare alla modalità open-vocabulary solo quando necessario.
Che tipi di prompt posso usare con YOLOE?#
YOLOE supporta tre tipi di prompt:
- Prompt testuali: Specifica le classi di oggetti usando il linguaggio naturale (es. "persona", "semaforo", "monopattino")
- Prompt visivi: Fornisci immagini di riferimento degli oggetti che desideri rilevare
- Vocabolario interno: Usa il vocabolario integrato di YOLOE di oltre 1200 categorie senza prompt esterni
Questa flessibilità ti consente di adattare YOLOE a vari scenari senza riaddestrare il modello, rendendolo particolarmente utile per ambienti dinamici in cui i requisiti di rilevamento cambiano frequentemente.
Come gestisce YOLOE la segmentazione delle istanze?#
YOLOE integra la segmentazione di istanze direttamente nella sua architettura estendendo la testata di rilevamento con un ramo di previsione delle maschere. Questo approccio è simile a YOLOv8-Seg, ma funziona per qualsiasi classe di oggetti guidata da prompt. Le maschere di segmentazione vengono incluse automaticamente nei risultati di inferenza e sono accessibili tramite results[0].masks. Questo approccio unificato elimina la necessità di modelli separati di rilevamento e segmentazione, semplificando i flussi di lavoro per le applicazioni che richiedono confini degli oggetti precisi al pixel.
In che modo YOLOE gestisce l'inferenza con prompt personalizzati?#
Analogamente a YOLO-World, YOLOE supporta una strategia "prompt-then-detect" (prima il prompt, poi il rilevamento) che utilizza un vocabolario offline per migliorare l'efficienza. I prompt personalizzati come didascalie o categorie di oggetti specifici vengono pre-codificati e memorizzati come embedding del vocabolario offline. Questo approccio ottimizza il processo di rilevamento senza richiedere il riaddestramento. Puoi impostare dinamicamente questi prompt all'interno del modello per adattarlo a specifici task di rilevamento:
from ultralytics import YOLO
# Initialize a YOLOE model
model = YOLO("yoloe-26s-seg.pt")
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()