Modello YOLO-World#
Il modello YOLO-World introduce un approccio avanzato in tempo reale basato su Ultralytics YOLOv8 per le attività di rilevamento a vocabolario aperto. Questa innovazione consente di rilevare qualsiasi oggetto in un'immagine sulla base di testi descrittivi. Riducendo notevolmente i requisiti computazionali e mantenendo prestazioni competitive, YOLO-World si afferma come uno strumento versatile per numerose applicazioni basate sulla visione.
Guarda: Workflow di addestramento di YOLO World su un dataset personalizzato

Panoramica#
YOLO-World affronta le sfide dei tradizionali modelli di rilevamento a vocabolario aperto, che spesso si basano su ingombranti modelli Transformer che richiedono ingenti risorse computazionali. La dipendenza di questi modelli da categorie di oggetti predefinite ne limita inoltre l'utilità negli scenari dinamici. YOLO-World rinnova il framework YOLOv8 con funzionalità di rilevamento a vocabolario aperto, utilizzando la modellazione visione-linguaggio e il preaddestramento su dataset estesi per eccellere nell'identificazione di un'ampia varietà di oggetti in scenari zero-shot, con un'efficienza senza pari.
Per le attività a vocabolario aperto che richiedono anche maschere di istanza, prompt visivi o una modalità senza prompt, consulta YOLOE, che mantiene la stessa API set_classes().
Funzionalità principali#
-
Soluzione in tempo reale: sfruttando la velocità computazionale delle CNN, YOLO-World offre una soluzione rapida di rilevamento a vocabolario aperto, adatta ai settori che hanno bisogno di risultati immediati.
-
Efficienza e prestazioni: YOLO-World riduce drasticamente i requisiti computazionali e di risorse senza sacrificare le prestazioni, offrendo un'alternativa solida a modelli come SAM a una frazione del costo computazionale e consentendo applicazioni in tempo reale.
-
Inferenza con vocabolario offline: YOLO-World introduce una strategia "prompt-then-detect", che utilizza un vocabolario offline per migliorare ulteriormente l'efficienza. Questo approccio consente di usare prompt personalizzati calcolati in anticipo, comprese descrizioni o categorie, codificandoli e memorizzandoli come embedding del vocabolario offline, così da snellire il processo di rilevamento.
-
Basato su YOLOv8: sviluppato sulla base di Ultralytics YOLOv8, YOLO-World sfrutta i più recenti progressi nel rilevamento degli oggetti in tempo reale per consentire il rilevamento a vocabolario aperto con accuratezza e velocità senza pari.
-
Eccellenza nei benchmark: YOLO-World supera i rilevatori a vocabolario aperto esistenti, tra cui le serie MDETR e GLIP, in termini di velocità ed efficienza nei benchmark standard, dimostrando le capacità superiori di YOLOv8 su una singola GPU NVIDIA V100.
-
Applicazioni versatili: l'approccio innovativo di YOLO-World apre nuove possibilità per numerose attività di visione, offrendo miglioramenti di velocità di ordini di grandezza rispetto ai metodi esistenti.
Modelli disponibili, attività supportate e modalità operative#
Questa sezione descrive i modelli disponibili con i relativi pesi preaddestrati specifici, le attività supportate e la compatibilità con varie modalità operative, come Inferenza, Validazione, Addestramento ed Esportazione, indicate con ✅ per le modalità supportate e ❌ per quelle non supportate.
Tutti i pesi YOLOv8-World sono stati trasferiti direttamente dal repository ufficiale YOLO-World, a testimonianza degli eccellenti contributi del progetto.
| Tipo di modello | Pesi preaddestrati | Attività supportate | Addestramento | Validazione | Inferenza | Esporta |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Rilevamento di oggetti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Rilevamento di oggetti | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Rilevamento di oggetti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Rilevamento di oggetti | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Rilevamento di oggetti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Rilevamento di oggetti | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Rilevamento di oggetti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Rilevamento di oggetti | ✅ | ✅ | ✅ | ✅ |
Trasferimento zero-shot sul dataset COCO#
| Tipo di modello | mAP | mAP50 | mAP75 |
|---|---|---|---|
| yolov8s-world | 37.4 | 52.0 | 40.6 |
| yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
| yolov8m-world | 42.0 | 57.0 | 45.6 |
| yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
| yolov8l-world | 45.7 | 61.3 | 49.8 |
| yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
| yolov8x-world | 47.0 | 63.0 | 51.2 |
| yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
Esempi d'uso#
I modelli YOLO-World si integrano facilmente nelle tue applicazioni Python. Ultralytics fornisce una API Python e comandi CLI intuitivi per semplificare lo sviluppo.
Guarda: Esempi di utilizzo del modello YOLO-World con Ultralytics | Vocabolario aperto, senza prompt e altro 🚀
Utilizzo dell'addestramento#
Consigliamo vivamente di usare yolov8-worldv2 per l'addestramento personalizzato, perché supporta l'addestramento deterministico e semplifica l'esportazione in formati come ONNX e TensorRT.
Il rilevamento degli oggetti è semplice con il metodo train, come illustrato di seguito:
I modelli *.pt preaddestrati con PyTorch e i file di configurazione *.yaml possono essere passati alla classe YOLOWorld() per creare un'istanza del modello in Python:
from ultralytics import YOLOWorld
# Carica un modello YOLOv8s-worldv2 pretrained
model = YOLOWorld("yolov8s-worldv2.pt")
# Addestra il modello sul dataset di esempio COCO8 per 100 epoche
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Esegui l'inferenza con il modello YOLO-World sull'immagine 'bus.jpg'
results = model("path/to/bus.jpg")Uso di predict#
Il rilevamento degli oggetti è semplice con il metodo predict, come illustrato di seguito:
from ultralytics import YOLOWorld
# Inizializza un modello YOLO-World
model = YOLOWorld("yolov8s-world.pt") # oppure scegli yolov8m/l-world.pt per dimensioni diverse
# Esegui l'inferenza con il modello YOLOv8s-world sull'immagine specificata
results = model.predict("path/to/image.jpg")
# Mostra i risultati
results[0].show()Questo frammento di codice mostra quanto sia semplice caricare un modello preaddestrato ed eseguire una previsione su un'immagine.
Uso di val#
La convalida del modello su un dataset si esegue facilmente come segue:
from ultralytics import YOLO
# Crea un modello YOLO-World
model = YOLO("yolov8s-world.pt") # oppure scegli yolov8m/l-world.pt per dimensioni diverse
# Esegui la convalida del modello sul dataset di esempio COCO8
metrics = model.val(data="coco8.yaml")Tracciamento#
Il tracciamento degli oggetti con il modello YOLO-World su un video o su immagini si esegue facilmente come segue:
from ultralytics import YOLO
# Crea un modello YOLO-World
model = YOLO("yolov8s-world.pt") # oppure scegli yolov8m/l-world.pt per dimensioni diverse
# Esegui il tracking con un modello YOLO-World su un video
results = model.track(source="path/to/video.mp4")I modelli YOLO-World forniti da Ultralytics sono preconfigurati con le categorie del dataset COCO nel vocabolario offline, così da essere più efficienti e pronti all'uso. Questa integrazione consente ai modelli YOLOv8-World di riconoscere e prevedere direttamente le 80 categorie standard definite nel dataset COCO, senza richiedere ulteriori configurazioni o personalizzazioni.
Imposta i prompt#

Il framework YOLO-World consente di specificare dinamicamente le classi tramite prompt personalizzati, permettendoti di adattare il modello alle tue esigenze specifiche senza riaddestrarlo. Questa funzionalità è particolarmente utile per adattare il modello a nuovi domini o ad attività specifiche che inizialmente non facevano parte dei dati di addestramento. Impostando prompt personalizzati, puoi indirizzare l'attenzione del modello verso gli oggetti di interesse, migliorando la pertinenza e la precisione dei risultati del rilevamento.
Ad esempio, se la tua applicazione deve rilevare solo oggetti 'person' e 'bus', puoi specificare direttamente queste classi:
from ultralytics import YOLO
# Inizializza un modello YOLO-World
model = YOLO("yolov8s-world.pt") # oppure scegli yolov8m/l-world.pt
# Definisci classi personalizzate
model.set_classes(["person", "bus"])
# Esegui la previsione delle categorie specificate in un'immagine
results = model.predict("path/to/image.jpg")
# Mostra i risultati
results[0].show()Alcuni utenti hanno riscontrato che aggiungere una stringa vuota "" come classe di sfondo può migliorare le prestazioni di rilevamento in determinati scenari. Questo comportamento sembra dipendere dallo scenario e il meccanismo esatto non è del tutto chiaro:
model.set_classes(["person", "bus", ""])La stringa vuota rimane in model.names come classe a sé stante, anche nei modelli che salvi, quindi le relative rilevazioni restituiscono un'etichetta vuota. Passa classes=[0, 1] al momento della previsione per mantenere solo le tue classi effettive.
Puoi anche salvare un modello dopo aver impostato classi personalizzate. In questo modo crei una versione del modello YOLO-World specializzata per il tuo caso d'uso specifico. Questa procedura incorpora le definizioni delle classi personalizzate direttamente nel file del modello, rendendolo pronto all'uso con le classi specificate senza ulteriori modifiche. Segui questi passaggi per salvare e caricare il tuo modello YOLO-World personalizzato:
Per prima cosa, carica un modello YOLO-World, impostane le classi personalizzate e salvalo:
from ultralytics import YOLO
# Inizializza un modello YOLO-World
model = YOLO("yolov8s-world.pt") # oppure scegli yolov8m/l-world.pt
# Definisci classi personalizzate
model.set_classes(["person", "bus"])
# Salva il modello con il vocabolario offline definito
model.save("custom_yolov8s.pt")Dopo il salvataggio, il modello custom_yolov8s.pt si comporta come qualsiasi altro modello YOLOv8 pretrained, con una differenza fondamentale: ora è ottimizzato per rilevare solo le classi che hai definito. Questa personalizzazione può migliorare notevolmente le prestazioni e l'efficienza del rilevamento nei tuoi specifici scenari applicativi.
from ultralytics import YOLO
# Carica il tuo modello personalizzato
model = YOLO("custom_yolov8s.pt")
# Esegui l'inferenza per rilevare le tue classi personalizzate
results = model.predict("path/to/image.jpg")
# Mostra i risultati
results[0].show()Vantaggi del salvataggio con un vocabolario personalizzato#
- Efficienza: semplifica il processo di rilevamento concentrandosi sugli oggetti pertinenti, riduce il carico computazionale e velocizza l'inferenza.
- Flessibilità: consente di adattare facilmente il modello a nuove attività di rilevamento o ad attività di nicchia, senza dover ricorrere a un riaddestramento esteso o raccogliere altri dati.
- Semplicità: semplifica la distribuzione eliminando la necessità di specificare ripetutamente le classi personalizzate in fase di esecuzione, così il modello può essere usato direttamente con il vocabolario incorporato.
- Prestazioni: migliora la precisione del rilevamento per le classi specificate, concentrando l'attenzione e le risorse del modello sul riconoscimento degli oggetti definiti.
Questo approccio offre un potente metodo per personalizzare i modelli all'avanguardia di rilevamento degli oggetti per attività specifiche, rendendo l'AI avanzata più accessibile e applicabile a una gamma più ampia di applicazioni pratiche.
Riproduci da zero i risultati ufficiali (sperimentale)#
Prepara i dataset#
- Dati di addestramento
| Dataset | Tipo | Campioni | Riquadri | File di annotazione |
|---|---|---|---|---|
| Objects365v1 | Rilevamento | 609k | 9621k | objects365_train.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | Grounding | 149k | 641k | final_flickr_separateGT_train.json |
- Dati di convalida
| Dataset | Tipo | File di annotazione |
|---|---|---|
| LVIS minival | Rilevamento | minival.txt |
Avvia l'addestramento da zero#
WorldTrainerFromScratch è altamente personalizzato per consentire l'addestramento simultaneo dei modelli YOLO-World su dataset di rilevamento e dataset di grounding. Per maggiori dettagli, consulta ultralytics.models.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Opzione 1: usa un dizionario Python
data = {
"train": {
"yolo_data": ["Objects365.yaml"],
"grounding_data": [
{
"img_path": "flickr30k/images",
"json_file": "flickr30k/final_flickr_separateGT_train.json",
},
{
"img_path": "GQA/images",
"json_file": "GQA/final_mixed_train_no_coco.json",
},
],
},
"val": {"yolo_data": ["lvis.yaml"]},
}
# Opzione 2: usa un file YAML (yolo_world_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 = YOLOWorld("yolov8s-worldv2.yaml")
model.train(
data=data, # oppure data="yolo_world_data.yaml" se usi un file YAML
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)Citazioni e ringraziamenti#
Ringraziamo il Tencent AILab Computer Vision Center per il suo lavoro pionieristico nel rilevamento di oggetti in tempo reale con vocabolario aperto con YOLO-World:
@article{cheng2024yolow,
title={YOLO-World: Real-Time Open-Vocabulary Object Detection},
author={Cheng, Tianheng and Song, Lin and Ge, Yixiao and Liu, Wenyu and Wang, Xinggang and Shan, Ying},
journal={arXiv preprint arXiv:2401.17270},
year={2024}
}Per approfondire, il paper originale su YOLO-World è disponibile su arXiv. Il codice sorgente del progetto e altre risorse sono disponibili nel loro repository GitHub. Apprezziamo il loro impegno nel far progredire il settore e nel condividere preziose conoscenze con la community.
Domande frequenti#
Il modello YOLO-World è un approccio avanzato al rilevamento di oggetti in tempo reale basato sul framework Ultralytics YOLOv8. Si distingue nelle attività di rilevamento a vocabolario aperto, identificando gli oggetti in un'immagine sulla base di testi descrittivi. Grazie alla modellazione visione-linguaggio e al pretraining su grandi dataset, YOLO-World raggiunge elevata efficienza e prestazioni con un fabbisogno computazionale notevolmente ridotto, risultando ideale per applicazioni in tempo reale in diversi settori.
YOLO-World supporta una strategia «prompt-then-detect», che utilizza un vocabolario offline per migliorare l'efficienza. I prompt personalizzati, come didascalie o categorie specifiche di oggetti, vengono codificati in anticipo e archiviati come embedding del vocabolario offline. Questo approccio semplifica il processo di rilevamento senza bisogno di riaddestrare il modello. Puoi impostare dinamicamente questi prompt nel modello per adattarlo ad attività di rilevamento specifiche, come illustrato di seguito:
from ultralytics import YOLOWorld # Inizializza un modello YOLO-World model = YOLOWorld("yolov8s-world.pt") # Definisci classi personalizzate model.set_classes(["person", "bus"]) # Esegui una previsione su un'immagine results = model.predict("path/to/image.jpg") # Mostra i risultati results[0].show()YOLO-World offre diversi vantaggi rispetto ai modelli tradizionali di rilevamento a vocabolario aperto:
- Prestazioni in tempo reale: sfrutta la velocità di calcolo delle CNN per offrire un rilevamento rapido ed efficiente.
- Efficienza e basso fabbisogno di risorse: YOLO-World mantiene prestazioni elevate riducendo notevolmente il fabbisogno computazionale e di risorse.
- Prompt personalizzabili: il modello supporta l'impostazione dinamica dei prompt, consentendo agli utenti di specificare classi di rilevamento personalizzate senza riaddestrare il modello.
- Eccellenza nei benchmark: supera altri rilevatori a vocabolario aperto come MDETR e GLIP in termini di velocità ed efficienza sui benchmark standard.
Addestrare un modello YOLO-World sul tuo dataset è semplice grazie all'API Python o ai comandi CLI forniti. Ecco come avviare l'addestramento usando Python:
from ultralytics import YOLOWorld # Carica un modello YOLOv8s-worldv2 pretrained model = YOLOWorld("yolov8s-worldv2.pt") # Addestra il modello sul dataset COCO8 per 100 epoche results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Oppure usando la CLI:
yolo train model=yolov8s-worldv2.pt data=coco8.yaml epochs=100 imgsz=640Ultralytics offre diversi modelli YOLO-World pretrained che supportano varie attività e modalità operative:
Tipo di modello Pesi preaddestrati Attività supportate Addestramento Validazione Inferenza Esporta YOLOv8s-world yolov8s-world.pt Rilevamento di oggetti ✅ ✅ ✅ ❌ YOLOv8s-worldv2 yolov8s-worldv2.pt Rilevamento di oggetti ✅ ✅ ✅ ✅ YOLOv8m-world yolov8m-world.pt Rilevamento di oggetti ✅ ✅ ✅ ❌ YOLOv8m-worldv2 yolov8m-worldv2.pt Rilevamento di oggetti ✅ ✅ ✅ ✅ YOLOv8l-world yolov8l-world.pt Rilevamento di oggetti ✅ ✅ ✅ ❌ YOLOv8l-worldv2 yolov8l-worldv2.pt Rilevamento di oggetti ✅ ✅ ✅ ✅ YOLOv8x-world yolov8x-world.pt Rilevamento di oggetti ✅ ✅ ✅ ❌ YOLOv8x-worldv2 yolov8x-worldv2.pt Rilevamento di oggetti ✅ ✅ ✅ ✅ Per riprodurre da zero i risultati ufficiali, devi preparare i dataset e avviare l'addestramento usando il codice fornito. La procedura di addestramento prevede la creazione di un dizionario dei dati e l'esecuzione del metodo
traincon un trainer personalizzato:from ultralytics import YOLOWorld from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch data = { "train": { "yolo_data": ["Objects365.yaml"], "grounding_data": [ { "img_path": "flickr30k/images", "json_file": "flickr30k/final_flickr_separateGT_train.json", }, { "img_path": "GQA/images", "json_file": "GQA/final_mixed_train_no_coco.json", }, ], }, "val": {"yolo_data": ["lvis.yaml"]}, } model = YOLOWorld("yolov8s-worldv2.yaml") model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)