YOLOE: vedere qualsiasi cosa in tempo reale
Introduzione
YOLOE (Real-Time Seeing Anything) è un nuovo passo avanti nei modelli YOLO a zero scatti e con prompt, progettato per il rilevamento e la segmentazione di vocabolari aperti. A differenza dei precedenti modelli YOLO limitati a categorie fisse, YOLOE utilizza messaggi di testo, immagini o vocabolario interno, consentendo il rilevamento in tempo reale di qualsiasi classe di oggetti. Costruito sulla base di YOLOv10 e ispirato a YOLO, YOLOE raggiunge prestazioni all'avanguardia a zero scatti con un impatto minimo su velocità e precisione.
Stato dell'integrazione di Ultralytics 🚧
L'integrazione di Ultralytics per YOLOE è attualmente in fase di costruzione 🔨. Gli esempi di utilizzo mostrati in questa documentazione funzioneranno una volta completata l'integrazione ✅. Si prega di controllare gli aggiornamenti 🔄 o di seguire il nostro repository GitHub 🚀 per gli ultimi sviluppi.
Rispetto ai modelli YOLO precedenti, YOLOE aumenta significativamente l'efficienza e l'accuratezza. Migliora di +3,5 AP rispetto a YOLO su LVIS, utilizzando solo un terzo delle risorse di addestramento e raggiungendo una velocità di inferenza 1,4 volte superiore. Messo a punto su COCO, YOLOE-v8-large supera YOLOv8 di 0,1 mAP, utilizzando un tempo di addestramento quasi 4 volte inferiore. Questo dimostra l'eccezionale equilibrio tra precisione, efficienza e versatilità di YOLOE. Le sezioni che seguono analizzano l'architettura di YOLOE, i confronti con i benchmark e l'integrazione con il programma Ultralytics Ultralytics.
Panoramica dell'architettura
YOLOE mantiene la struttura standard di YOLO : una spina dorsale convoluzionale (ad esempio, CSP-Darknet) per l'estrazione delle caratteristiche, un collo (ad esempio, PAN-FPN) per la fusione multiscala e una testa di rilevamento disaccoppiata e priva di ancore (come in YOLO11) che predice objectness, classi e box in modo indipendente. YOLOE introduce tre nuovi moduli che consentono il rilevamento di vocaboli aperti:
-
Re-parameterizable Region-Text Alignment (RepRTA): supporta l'individuazione di testi suggeriti affinando le incorporazioni di testo (ad esempio, da CLIP) tramite una piccola rete ausiliaria. Al momento dell'inferenza, questa rete viene inserita nel modello principale, garantendo un overhead pari a zero. In questo modo, YOLOE rileva oggetti arbitrari etichettati con il testo (ad esempio, un "semaforo" non visto) senza penalizzazioni di runtime.
-
Semantic-Activated Visual Prompt Encoder (SAVPE): Consente il rilevamento con sollecitazione visiva tramite un ramo di incorporazione leggero. Data un'immagine di riferimento, SAVPE codifica le caratteristiche semantiche e di attivazione, condizionando il modello a rilevare oggetti visivamente simili: una capacità di rilevamento in una sola volta, utile per loghi o parti specifiche.
-
Contrasto pigro regione-prompt (LRPC): In modalità senza prompt, YOLOE esegue il riconoscimento di set aperti utilizzando embeddings interni addestrati su vocabolari di grandi dimensioni (oltre 1200 categorie da LVIS e Objects365). Senza suggerimenti o codificatori esterni, YOLOE identifica gli oggetti attraverso la ricerca della somiglianza tra gli embeddings, gestendo in modo efficiente ampi spazi di etichette durante l'inferenza.
Inoltre, YOLOE integra la segmentazione delle istanze in tempo reale estendendo la testa di rilevamento con un ramo di predizione della maschera (simile a YOLACT o YOLOv8), aggiungendo un overhead minimo.
In particolare, 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 ri-parametrizzati in una testa YOLO standard, conservando FLOP e velocità identiche (ad esempio, la corrispondenza con YOLO11 esattamente).
Confronto delle prestazioni di YOLOE
YOLOE eguaglia o supera l'accuratezza dei modelli YOLO a set chiuso su benchmark standard come COCO, senza compromettere la velocità o le dimensioni del modello. La tabella seguente confronta YOLOE-L (costruito su YOLO11) con i corrispondenti modelli YOLOv8. YOLOv8 e YOLO11 :
Modello | COCO mAP50-95 | Velocità di inferenza (T4) | Parametri | GFLOP (640px) |
---|---|---|---|---|
YOLOv8 (set chiuso) | 52.9% | 9,06 ms (110 FPS) | 43.7 M | 165.2 B |
YOLO11 (set chiuso) | 53.5% | 6,2 ms (130 FPS) | 26.2 M | 86.9 B |
YOLOE-L (cabina aperta) | 52.6% | 6,2 ms (130 FPS) | 26.2 M | 86.9 B† |
† YOLO11 e YOLOE-L hanno architetture identiche (moduli prompt disabilitati in YOLO11), con conseguente velocità di inferenza identica e stime GFLOP simili.
YOLOE-L raggiunge il 52,6% di mAP, superando YOLOv8(52,9%) con circa il 40% di parametri in meno (26M contro 43,7M). Elabora immagini 640×640 in 6,2 ms (161 FPS) rispetto ai 9,06 ms (110 FPS) di YOLOv8, evidenziando l'efficienza di YOLO11. Inoltre, i moduli a vocabolario aperto di YOLOE non comportano alcun costo di inferenza, a dimostrazione di un design "no free lunch trade-off".
Per le attività a scatto zero e di trasferimento, YOLOE eccelle: su LVIS, YOLOE-small migliora rispetto a YOLO di +3,5 AP utilizzando 3 volte meno risorse di addestramento. Anche la messa a punto di YOLOE-L da LVIS a COCO ha richiesto un tempo di addestramento 4 volte inferiore rispetto a YOLOv8, sottolineando la sua efficienza e adattabilità. YOLOE mantiene inoltre la velocità tipica di YOLO, raggiungendo oltre 300 FPS su una GPU T4 e ~64 FPS su iPhone 12 tramite CoreML, ideale per le implementazioni edge e mobile.
Nota
Condizioni di benchmark: I risultati di YOLOE provengono da modelli pre-addestrati su Objects365, GoldG e LVIS, poi messi a punto o valutati su COCO. Il leggero vantaggio di YOLOE in termini di mAP rispetto a YOLOv8 deriva da un ampio pre-addestramento. Senza questo addestramento in open-vocab, YOLOE è all'altezza di modelli YOLO di dimensioni simili, affermando la sua precisione SOTA e la sua flessibilità open-world senza penalizzazioni delle prestazioni.
Confronto con i modelli precedenti
YOLOE introduce notevoli progressi rispetto ai precedenti modelli YOLO e ai rilevatori di vocaboli aperti:
-
YOLOE vs YOLOv5:
YOLOv5 ha offerto un buon rapporto velocità-accuratezza, ma richiedeva una riqualificazione per le nuove classi e utilizzava teste basate su ancore. Al contrario, YOLOE è privo di ancore e rileva dinamicamente le nuove classi. YOLOE, basandosi sui miglioramenti di YOLOv8, raggiunge un'accuratezza maggiore (52,6% contro il ~50% di YOLOv5 su COCO) e integra la segmentazione delle istanze, a differenza di YOLOv5. -
YOLOE vs YOLOv8:
YOLOE estende YOLOv8e raggiunge un'accuratezza simile o superiore(52,6% di mAP con ~26M parametri contro il 52,9% di YOLOv8 con ~44M parametri). Riduce significativamente il tempo di addestramento grazie a un pre-addestramento più intenso. Il progresso principale è rappresentato dalla capacità di YOLOE di rilevare oggetti non visti (ad esempio,"scooter con uccello" o"simbolo della pace") 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 (~22% di riduzione). YOLOE eredita direttamente questi vantaggi, eguagliando la velocità di inferenza e il numero di parametri di YOLO11(~26M parametri), aggiungendo al contempo il rilevamento e la segmentazione del vocabolario aperto. In scenari chiusi, YOLOE è equivalente a YOLO11, ma aggiunge l'adattabilità per rilevare classi non viste, ottenendo la capacità diYOLO11 + open-world senza compromettere la velocità. -
YOLOE rispetto ai precedenti rilevatori di vocaboli aperti:
I precedenti modelli di vocabolario aperto (GLIP, OWL-ViT, YOLO) si basavano pesantemente sui trasformatori del linguaggio della visione, con conseguente lentezza dell'inferenza. YOLOE li supera in termini di accuratezza a zero scatti (ad esempio, +3,5 AP rispetto a YOLO), mentre funziona 1,4 volte più velocemente con risorse di addestramento significativamente inferiori. Rispetto agli approcci basati su trasformatori (ad esempio, GLIP), YOLOE offre un'inferenza più veloce di ordini di grandezza, colmando efficacemente il divario di accuratezza ed efficienza nel rilevamento degli insiemi aperti.
In sintesi, YOLOE mantiene la rinomata velocità ed efficienza di YOLO, supera i predecessori in termini di accuratezza, integra la segmentazione e introduce un potente rilevamento open-world, rendendolo unico per versatilità e praticità.
Casi d'uso e applicazioni
Il rilevamento e la segmentazione del vocabolario aperto di YOLOE consentono diverse applicazioni al di là dei tradizionali modelli a classe fissa:
-
Rilevamento di oggetti in un mondo aperto:
Ideale per scenari dinamici come la robotica, in cui i robot riconoscono oggetti mai visti prima grazie a suggerimenti, o i sistemi di sicurezza che si adattano rapidamente a nuove minacce (ad esempio, oggetti pericolosi) senza bisogno di riqualificarsi. -
Rilevamento con pochi scatti e con un solo scatto:
Utilizzando suggerimenti visivi (SAVPE), YOLOE apprende rapidamente nuovi oggetti da singole immagini di riferimento, perfette per l'ispezione industriale (identificazione immediata di parti o difetti) o per la sorveglianza personalizzata, consentendo ricerche visive con una configurazione minima. -
Riconoscimento di un ampio vocabolario e di una lunga coda:
Dotato di un vocabolario di oltre 1000 classi, YOLOE eccelle in compiti come il monitoraggio della biodiversità (rilevamento di specie rare), le collezioni museali, l'inventario di vendita al dettaglio o il commercio elettronico, identificando in modo affidabile molte classi senza una formazione estesa per classe. -
Rilevamento e segmentazione interattivi:
YOLOE supporta applicazioni interattive in tempo reale, come il recupero di video/immagini, la realtà aumentata (AR) e l'editing intuitivo delle immagini, guidato da input naturali (testo o messaggi visivi). Gli utenti possono isolare, identificare o modificare dinamicamente gli oggetti con precisione utilizzando maschere di segmentazione. -
Etichettatura automatica dei dati e bootstrapping:
YOLOE facilita la creazione rapida di set di dati fornendo annotazioni iniziali di bounding box e segmentazione, riducendo in modo significativo gli sforzi di etichettatura umana. Particolarmente utile nell'analisi di grandi raccolte multimediali, dove può identificare automaticamente gli oggetti presenti, aiutando a costruire più rapidamente modelli specializzati. -
Segmentazione per qualsiasi oggetto:
Estende le capacità di segmentazione a oggetti arbitrari attraverso suggerimenti - particolarmente utili per l'imaging medico, la microscopia o l'analisi di immagini satellitari- identificando automaticamente e segmentando con precisione le strutture senza modelli specializzati pre-addestrati. A differenza di modelli come SAMYOLOE riconosce e segmenta simultaneamente gli oggetti in modo automatico, aiutando in attività come la creazione di contenuti o la comprensione della scena.
In tutti questi casi d'uso, il vantaggio principale di YOLOE è la versatilità, in quanto 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, ideali per la robotica, la guida autonoma, la difesa e altro ancora.
Suggerimento
Scegliete la modalità di YOLOE in base alle vostre esigenze:
- Modalità a set chiuso: Per compiti a classe fissa (massima velocità e precisione).
- Modalità con prompt: Aggiungete rapidamente nuovi oggetti tramite suggerimenti testuali o visivi.
- Modalità open-set senza prompt: Rilevamento generale di molte categorie (ideale per la catalogazione e la scoperta).
Spesso la combinazione di modalità, come la scoperta senza suggerimenti seguita da suggerimenti mirati, consente di sfruttare appieno il potenziale di YOLOE.
Formazione e inferenza
YOLOE si integra perfettamente con l'APIPython di Ultralytics e con la CLIsimile agli altri modelli YOLO YOLOv8, YOLO). Ecco come iniziare rapidamente:
Stato dell'integrazione di Ultralytics 🚧
L'integrazione di Ultralytics per YOLOE è attualmente in fase di sviluppo 🔨. Gli esempi che seguono mostrano come funzionerà l'API una volta completata l'integrazione ✅.
Formazione e inferenza con YOLOE
from ultralytics import YOLO
# Load pre-trained YOLOE model and train on custom data
model = YOLO("yoloe-s.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 output
In questo caso, YOLOE si comporta come un rilevatore standard per impostazione predefinita, ma passa facilmente a un rilevamento guidato specificando le classi (set_classes
). I risultati contengono caselle di delimitazione, maschere ed etichette.
# Training YOLOE on custom dataset
yolo train model=yoloe-s.pt data=path/to/data.yaml epochs=50 imgsz=640
# Inference with text prompts
yolo predict model=yoloe-s.pt source="test_images/street.jpg" classes="person,bus"
prompt della CLI (classes
) guidano YOLOE in modo simile a quello di Python set_classes
. La richiesta visiva (query basate su immagini) richiede attualmente l'API Python .
Altre attività supportate
- Convalida: Valutare facilmente l'accuratezza con
model.val()
oyolo val
. - Esportazione: Esportazione dei modelli YOLOE (
model.export()
) a ONNX, TensorRT e così via, facilitando la distribuzione. - Tracciamento: YOLOE supporta il tracciamento degli oggetti (
yolo track
) se integrato, utile per tracciare le classi richieste nei video.
Nota
YOLOE include automaticamente maschere di segmentazione nei risultati dell'inferenza (results[0].masks
), semplificando le operazioni di precisione al pixel, come l'estrazione o la misurazione di oggetti, senza bisogno di modelli separati.
Per iniziare
Per configurare rapidamente YOLOE con Ultralytics , procedere come segue:
-
Installazione: Installare o aggiornare il pacchetto Ultralytics :
-
Scarica i pesi YOLOE: I modelli YOLOE pre-addestrati (ad esempio, le varianti YOLOE-v8-S/L e YOLOE-11) sono disponibili nelle release di YOLOE GitHub. È sufficiente scaricare il modello desiderato
.pt
da caricare nella classe Ultralytics YOLO . -
Requisiti hardware:
- Inferenza: GPU consigliataNVIDIA con ≥4-8 GB di VRAM). I modelli di piccole dimensioni vengono eseguiti in modo efficiente su GPU di fascia bassa (ad esempio, Jetson) o CPU a risoluzioni inferiori.
- Formazione: La messa a punto di YOLOE su dati personalizzati richiede in genere una sola GPU. Il pre-training estensivo del vocabolario aperto (LVIS/Objects365) utilizzato dagli autori ha richiesto una notevole quantità di calcoli (8× GPU RTX 4090).
-
Configurazione: Le configurazioni di YOLOE utilizzano i file YAML standard di Ultralytics . Le configurazioni predefinite (ad esempio,
yoloe-s.yaml
) sono in genere sufficienti, ma è possibile modificare la spina dorsale, le classi o le dimensioni dell'immagine secondo le necessità. -
Esecuzione di YOLOE:
- Inferenza rapida (senza fretta):
-
Rilevamento su richiesta (esempio di richiesta di testo):
In Python:
-
Suggerimenti per l'integrazione:
- Nomi delle classi: Le uscite predefinite di YOLOE utilizzano le categorie LVIS; utilizzare
set_classes()
per specificare le proprie etichette. - Velocità: YOLOE non ha spese generali, a meno che non si utilizzino i prompt. I suggerimenti testuali hanno un impatto minimo, quelli visivi un po' di più.
- Inferenza in batch: Supportato direttamente (
model.predict([img1, img2])
). Per le richieste specifiche delle immagini, eseguire le immagini singolarmente.
- Nomi delle classi: Le uscite predefinite di YOLOE utilizzano le categorie LVIS; utilizzare
La documentazione diUltralytics fornisce ulteriori risorse. YOLOE consente di esplorare facilmente le potenti funzionalità open-world all'interno del familiare ecosistema YOLO .
Suggerimento
Suggerimento professionale: Per massimizzare l'accuratezza di YOLOE a colpo zero, è consigliabile effettuare una messa a punto a partire dai punti di controllo forniti, piuttosto che addestrarsi da zero. Per migliorare l'accuratezza del rilevamento, utilizzare parole di suggerimento che corrispondono alle etichette di addestramento comuni (vedere le categorie LVIS).
Citazioni e ringraziamenti
Se YOLOE ha contribuito alla vostra ricerca o al vostro progetto, vi preghiamo di citare l'articolo originale di Ao Wang, Lihao Liu, Hui Chen, Zijia Lin, Jungong Han e Guiguang Ding della Tsinghua University:
Per ulteriori letture, il documento originale di YOLOE è disponibile su arXiv. Il codice sorgente del progetto e le risorse aggiuntive sono accessibili tramite il loro repository GitHub.
FAQ
In cosa si differenzia YOLOE da YOLO?
Sebbene sia YOLOE che YOLO consentano il rilevamento del vocabolario aperto, YOLOE offre diversi vantaggi. YOLOE raggiunge un'accuratezza superiore di +3,5 AP su LVIS, utilizzando 3 volte meno risorse di addestramento e funzionando 1,4 volte più velocemente di YOLO. YOLOE supporta anche tre modalità di prompt (testuale, visivo e vocabolario interno), mentre YOLO si concentra principalmente sui prompt testuali. Inoltre, YOLOE include funzionalità integrate di segmentazione delle istanze, fornendo maschere precise al pixel per gli oggetti rilevati senza costi aggiuntivi.
Posso utilizzare YOLOE come un normale modello YOLO ?
Sì, YOLOE può funzionare esattamente come un modello YOLO standard senza alcuna penalizzazione delle prestazioni. Quando viene utilizzato in modalità closed-set (senza prompt), i moduli a vocabolario aperto di YOLOE vengono ri-parametrizzati nella testina di rilevamento standard, ottenendo velocità e precisione identiche a quelle dei modelli YOLO11 equivalenti. Ciò rende YOLOE estremamente versatile: è possibile utilizzarlo come rilevatore tradizionale per ottenere la massima velocità e passare alla modalità a vocabolario aperto solo quando necessario.
Quali tipi di suggerimenti si possono utilizzare con YOLOE?
YOLOE supporta tre tipi di richieste:
- Richiami di testo: Specificare le classi di oggetti utilizzando il linguaggio naturale (ad esempio, "persona", "semaforo", "scooter per uccelli").
- Suggerimenti visivi: Fornire immagini di riferimento degli oggetti che si desidera rilevare.
- Vocabolario interno: Utilizzate il vocabolario integrato di YOLOE, composto da oltre 1200 categorie, senza bisogno di suggerimenti esterni.
Questa flessibilità consente di adattare YOLOE a vari scenari senza dover riqualificare il modello, rendendolo particolarmente utile per gli ambienti dinamici in cui i requisiti di rilevamento cambiano frequentemente.
Come gestisce YOLOE la segmentazione delle istanze?
YOLOE integra la segmentazione delle istanze direttamente nella sua architettura, estendendo la testa di rilevamento con un ramo di predizione della maschera. Questo approccio è simile a YOLOv8, ma funziona per qualsiasi classe di oggetti richiesta. Le maschere di segmentazione sono automaticamente incluse nei risultati dell'inferenza e sono accessibili tramite results[0].masks
. Questo approccio unificato elimina la necessità di modelli di rilevamento e segmentazione separati, semplificando i flussi di lavoro per le applicazioni che richiedono confini di oggetti precisi al pixel.
Come gestisce YOLOE l'inferenza con i prompt personalizzati?
Come YOLO, YOLOE supporta una strategia di "prompt-then-detect" che utilizza un vocabolario offline per migliorare l'efficienza. I suggerimenti personalizzati, come le didascalie o le categorie specifiche di oggetti, sono pre-codificati e memorizzati come embedding di vocabolario offline. Questo approccio semplifica il processo di rilevamento senza richiedere una nuova formazione. È possibile impostare dinamicamente questi suggerimenti all'interno del modello per adattarlo a compiti di rilevamento specifici:
from ultralytics import YOLO
# Initialize a YOLOE model
model = YOLO("yoloe-s.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()