Modello YOLO-World#
Il modello YOLO-World introduce un approccio avanzato in tempo reale basato su Ultralytics YOLOv8 per attività di rilevamento a vocabolario aperto (Open-Vocabulary Detection). Questa innovazione consente il rilevamento di qualsiasi oggetto all'interno di un'immagine sulla base di testi descrittivi. Riducendo significativamente la richiesta computazionale pur preservando prestazioni competitive, YOLO-World si afferma come uno strumento versatile per numerose applicazioni basate sulla visione.
Watch: YOLO World training workflow on custom dataset

Panoramica#
YOLO-World affronta le sfide incontrate dai tradizionali modelli di rilevamento a vocabolario aperto, che spesso si affidano a ingombranti modelli Transformer che richiedono ingenti risorse computazionali. La dipendenza di questi modelli da categorie di oggetti predefinite ne limita inoltre l'utilità in scenari dinamici. YOLO-World rinnova il framework YOLOv8 con capacità di rilevamento a vocabolario aperto, impiegando la modellazione linguistica della visione e il pre-addestramento su dataset estesi per eccellere nell'identificazione di un'ampia gamma di oggetti in scenari zero-shot con un'efficienza senza pari.
Per il lavoro a vocabolario aperto che richiede anche maschere di istanza, prompt visivi o una modalità senza prompt, consulta YOLOE, che mantiene la stessa API set_classes().
Caratteristiche principali#
-
Soluzione in tempo reale: Sfruttando la velocità computazionale delle CNN, YOLO-World offre una rapida soluzione di open-vocabulary detection, adatta alle industrie che necessitano di risultati immediati.
-
Efficienza e prestazioni: YOLO-World riduce drasticamente i requisiti computazionali e di risorse senza sacrificare le prestazioni, offrendo una valida alternativa a modelli come SAM ma a una frazione del costo computazionale, consentendo applicazioni in tempo reale.
-
Inferenza con vocabolario offline: YOLO-World introduce una strategia "prompt-then-detect", che impiega un vocabolario offline per migliorare ulteriormente l'efficienza. Questo approccio consente l'uso di prompt personalizzati calcolati a priori, inclusi didascalie o categorie, per essere codificati e memorizzati come embedding del vocabolario offline, semplificando il processo di rilevamento.
-
Basato su YOLOv8: Costruito su Ultralytics YOLOv8, YOLO-World sfrutta gli ultimi progressi nel rilevamento di oggetti in tempo reale per facilitare il rilevamento a vocabolario aperto con accuratezza e velocità senza precedenti.
-
Eccellenza nei benchmark: YOLO-World supera i rilevatori open-vocabulary esistenti, incluse le serie MDETR e GLIP, in termini di velocità ed efficienza su benchmark standard, dimostrando la capacità superiore di YOLOv8 su una singola GPU NVIDIA V100.
-
Applicazioni versatili: L'approccio innovativo di YOLO-World sblocca nuove possibilità per una moltitudine di 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 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.
Tutti i pesi di YOLOv8-World sono stati migrati direttamente dal repository ufficiale di YOLO-World, evidenziandone gli eccellenti contributi.
| Tipo di modello | Pesi pre-addestrati | Attività supportate | Addestramento | Validazione | Inferenza | Esportazione |
|---|---|---|---|---|---|---|
| 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 di Utilizzo#
I modelli YOLO-World sono facili da integrare nelle tue applicazioni Python. Ultralytics fornisce un'intuitiva API Python e comandi CLI per semplificare lo sviluppo.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Utilizzo per l'addestramento#
Consigliamo vivamente di usare yolov8-worldv2 per l'addestramento personalizzato poiché supporta l'addestramento deterministico e si esporta più facilmente in formati come ONNX e TensorRT.
Il rilevamento di oggetti è semplice con il metodo train, come illustrato di seguito:
I modelli preaddestrati in PyTorch *.pt così come i file di configurazione *.yaml possono essere passati alla classe YOLOWorld() per creare un'istanza del modello in python:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the YOLO-World model on the 'bus.jpg' image
results = model("path/to/bus.jpg")Utilizzo di Predict#
Il rilevamento di oggetti è semplice con il metodo predict, come illustrato di seguito:
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Execute inference with the YOLOv8s-world model on the specified image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Questo snippet dimostra la semplicità di caricare un modello preaddestrato ed eseguire una previsione su un'immagine.
Utilizzo di Val#
La validazione del modello su un dataset è semplificata come segue:
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Conduct model validation on the COCO8 example dataset
metrics = model.val(data="coco8.yaml")Utilizzo di Track#
Il tracciamento di oggetti con il modello YOLO-World su un video o immagini è ottimizzato come segue:
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Track with a YOLO-World model on a video
results = model.track(source="path/to/video.mp4")I modelli YOLO-World forniti da Ultralytics arrivano preconfigurati con le categorie del dataset COCO come parte del loro vocabolario offline, migliorando l'efficienza per un'applicazione immediata. Questa integrazione consente ai modelli YOLOv8-World di riconoscere e prevedere direttamente le 80 categorie standard definite nel dataset COCO senza richiedere configurazioni o personalizzazioni aggiuntive.
Imposta i prompt#

Il framework YOLO-World consente la specifica dinamica delle classi tramite prompt personalizzati, consentendo di adattare il modello alle proprie esigenze specifiche senza riaddestramento. Questa funzionalità è particolarmente utile per adattare il modello a nuovi domini o compiti specifici che non facevano originariamente parte dei dati di addestramento. Impostando prompt personalizzati, puoi essenzialmente guidare l'attenzione del modello verso gli oggetti di interesse, migliorando la pertinenza e l'accuratezza dei risultati di rilevamento.
Ad esempio, se la tua applicazione richiede solo il rilevamento di oggetti 'person' (persona) e 'bus' (autobus), puoi specificare queste classi direttamente:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or choose yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction for specified categories on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Alcuni utenti hanno scoperto che l'aggiunta di 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 compreso:
model.set_classes(["person", "bus", ""])Puoi anche salvare un modello dopo aver impostato classi personalizzate. Facendo ciò, crei una versione del modello YOLO-World specializzata per il tuo caso d'uso specifico. Questo processo incorpora le definizioni delle tue classi personalizzate direttamente nel file del modello, rendendolo pronto all'uso con le classi specificate senza ulteriori aggiustamenti. Segui questi passaggi per salvare e caricare il tuo modello YOLO-World personalizzato:
Per prima cosa carica un modello YOLO-World, imposta le classi personalizzate per esso e salvalo:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Save the model with the defined offline vocabulary
model.save("custom_yolov8s.pt")Dopo il salvataggio, il modello custom_yolov8s.pt si comporta come qualsiasi altro modello YOLOv8 pre-addestrato ma con una differenza chiave: ora è ottimizzato per rilevare solo le classi che hai definito. Questa personalizzazione può migliorare significativamente le prestazioni e l'efficienza del rilevamento per i tuoi scenari applicativi specifici.
from ultralytics import YOLO
# Load your custom model
model = YOLO("custom_yolov8s.pt")
# Run inference to detect your custom classes
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Vantaggi del salvataggio con vocabolario personalizzato#
- Efficienza: Semplifica il processo di rilevamento concentrandosi sugli oggetti pertinenti, riducendo l'overhead computazionale e accelerando l'inferenza.
- Flessibilità: Consente un facile adattamento del modello a nuove attività di rilevamento di nicchia senza la necessità di un ampio riaddestramento o raccolta dati.
- Semplicità: Semplifica il deployment eliminando la necessità di specificare ripetutamente classi personalizzate in fase di runtime, rendendo il modello direttamente utilizzabile con il suo 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 mezzo potente per personalizzare modelli all'avanguardia di rilevamento di oggetti per compiti specifici, rendendo l'IA avanzata più accessibile e applicabile a una gamma più ampia di applicazioni pratiche.
Riproduci i risultati ufficiali da zero (Sperimentale)#
Prepara i dataset#
- Dati di addestramento
| Dataset | Tipo | Campioni | Box | 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 validazione
| Dataset | Tipo | File di annotazione |
|---|---|---|
| LVIS minival | Rilevamento | minival.txt |
Avvia l'addestramento da zero#
WorldTrainerFromScratch è altamente personalizzato per consentire l'addestramento di modelli yolo-world sia su dataset di rilevamento che su dataset di grounding contemporaneamente. Per maggiori dettagli, vedi ultralytics.models.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Option 1: Use Python dictionary
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"]},
}
# Option 2: Use YAML file (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, # or data="yolo_world_data.yaml" if using YAML file
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)Citazioni e riconoscimenti#
Esprimiamo la nostra gratitudine al Tencent AILab Computer Vision Center per il loro lavoro pionieristico nel rilevamento di oggetti a vocabolario aperto in tempo reale 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 ulteriori letture, il documento originale su YOLO-World è disponibile su arXiv. Il codice sorgente del progetto e risorse aggiuntive sono accessibili tramite il loro repository GitHub. Apprezziamo il loro impegno nel far progredire il campo e nel condividere le loro preziose intuizioni con la community.
FAQ#
Il modello YOLO-World è un approccio avanzato di rilevamento di oggetti in tempo reale basato sul framework Ultralytics YOLOv8. Eccelle nelle attività di rilevamento a vocabolario aperto identificando oggetti all'interno di un'immagine sulla base di testi descrittivi. Utilizzando la modellazione linguistica della visione e il pre-addestramento su grandi dataset, YOLO-World raggiunge un'elevata efficienza e prestazioni con richieste computazionali notevolmente ridotte, rendendolo ideale per applicazioni in tempo reale in vari settori.
YOLO-World supporta una strategia "prompt-then-detect" (chiedi prima e poi rileva), che utilizza un vocabolario offline per migliorare l'efficienza. Prompt personalizzati come didascalie o specifiche categorie di oggetti vengono pre-codificati e memorizzati come embedding di vocabolario offline. Questo approccio semplifica il processo di rilevamento senza la necessità di riaddestramento. Puoi impostare dinamicamente questi prompt all'interno del modello per adattarlo a specifici compiti di rilevamento, come mostrato di seguito:
from ultralytics import YOLOWorld # Initialize a YOLO-World model model = YOLOWorld("yolov8s-world.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()YOLO-World offre diversi vantaggi rispetto ai tradizionali modelli di rilevamento Open-Vocabulary:
- Prestazioni in tempo reale: Sfrutta la velocità computazionale delle CNN per offrire un rilevamento rapido ed efficiente.
- Efficienza e basso requisito di risorse: YOLO-World mantiene prestazioni elevate riducendo significativamente le richieste computazionali e di risorse.
- Prompt personalizzabili: Il modello supporta l'impostazione dinamica dei prompt, consentendoti di specificare classi di rilevamento personalizzate senza riaddestramento.
- Eccellenza nei benchmark: Supera altri rilevatori a vocabolario aperto come MDETR e GLIP sia in termini di velocità che di efficienza nei benchmark standard.
Addestrare un modello YOLO-World sul tuo dataset è semplice tramite l'API Python fornita o i comandi CLI. Ecco come iniziare l'addestramento utilizzando Python:
from ultralytics import YOLOWorld # Load a pretrained YOLOv8s-worldv2 model model = YOLOWorld("yolov8s-worldv2.pt") # Train the model on the COCO8 dataset for 100 epochs results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Oppure utilizzando la CLI:
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640Ultralytics offre molteplici modelli YOLO-World pre-addestrati che supportano varie attività e modalità operative:
Tipo di modello Pesi pre-addestrati Attività supportate Addestramento Validazione Inferenza Esportazione 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 i risultati ufficiali da zero, devi preparare i dataset e avviare l'addestramento utilizzando il codice fornito. La procedura di addestramento prevede la creazione di un dizionario di 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)