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

Panoramica#
YOLO-World affronta le sfide dei tradizionali modelli di rilevamento a vocabolario aperto, che spesso si basano su ingombranti modelli Transformer che richiedono notevoli 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 il modellamento visione-linguaggio e il pre-addestramento 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 per il rilevamento a vocabolario aperto, adatta ai settori che necessitano 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, ma con 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 a priori, inclusi didascalie o categorie, da codificare e memorizzare come embedding del vocabolario offline, ottimizzando il processo di rilevamento.
-
Basato su YOLOv8: costruito su Ultralytics YOLOv8, YOLO-World sfrutta i più recenti progressi nel rilevamento di oggetti in tempo reale per facilitare il rilevamento a vocabolario aperto con accuratezza e velocità senza pari.
-
Eccellenza nei benchmark: YOLO-World supera i rilevatori a vocabolario aperto esistenti, incluse le serie MDETR e GLIP, in termini di velocità ed efficienza sui 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 artificiale, offrendo miglioramenti della velocità di diversi ordini di grandezza rispetto ai metodi esistenti.
Modelli disponibili, attività supportate e modalità operative#
Questa sezione descrive in dettaglio i modelli disponibili con i relativi pesi pre-addestrati, le attività supportate e la compatibilità con varie modalità operative, come Inferenza, Convalida, Addestramento ed Esportazione, indicate da ✅ per le modalità supportate e ❌ per quelle non supportate.
Tutti i pesi YOLOv8-World sono stati migrati direttamente dal repository ufficiale YOLO-World, valorizzandone gli eccellenti contributi.
| Tipo di modello | Pesi preaddestrati | Attività supportate | Addestramento | Convalida | Inferenza | Esportazione |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Rilevamento degli oggetti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Rilevamento degli oggetti | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Rilevamento degli oggetti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Rilevamento degli oggetti | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Rilevamento degli oggetti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Rilevamento degli oggetti | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Rilevamento degli oggetti | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Rilevamento degli 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 mette a disposizione una API Python e comandi CLI intuitivi per semplificare lo sviluppo.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Utilizzo dell'addestramento#
Ti consigliamo vivamente di usare yolov8-worldv2 per l'addestramento personalizzato, perché supporta l'addestramento deterministico ed esporta più facilmente in formati come ONNX e TensorRT.
Il rilevamento di oggetti è semplice con il metodo train, come illustrato di seguito:
I modelli *.pt preaddestrati con PyTorch, 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 della previsione#
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 frammento mostra quanto sia semplice caricare un modello pretrained ed eseguire una previsione su un'immagine.
Utilizzo della validazione#
La convalida 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 del tracking#
Il tracciamento degli oggetti con il modello YOLO-World su un video o immagini è semplificato 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 sono preconfigurati con le categorie del dataset COCO come parte del vocabolario offline, migliorando l'efficienza per l'uso immediato. 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 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 originariamente 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 l'accuratezza 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
# 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 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 è ancora del tutto chiaro:
model.set_classes(["person", "bus", ""])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. Questo processo incorpora direttamente nel file del modello le definizioni delle tue classi personalizzate, 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
# 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 fondamentale: ora è ottimizzato per rilevare solo le classi che hai definito. Questa personalizzazione può migliorare significativamente le prestazioni e l'efficienza del rilevamento negli scenari specifici della tua applicazione.
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 il sovraccarico computazionale e accelerando l'inferenza.
- Flessibilità: consente di adattare facilmente il modello ad attività di rilevamento nuove o di nicchia senza dover ricorrere a un riaddestramento esteso o alla raccolta di dati.
- Semplicità: semplifica la distribuzione eliminando la necessità di specificare ripetutamente le classi personalizzate durante l'esecuzione, rendendo il modello direttamente utilizzabile con il vocabolario incorporato.
- Prestazioni: migliora l'accuratezza del rilevamento per le classi specificate concentrando l'attenzione e le risorse del modello sul riconoscimento degli oggetti definiti.
Questo approccio offre un metodo efficace per personalizzare i modelli di rilevamento di oggetti all'avanguardia 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 | Detection | 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 | Detection | minival.txt |
Avvia l'addestramento da zero#
WorldTrainerFromScratch è altamente personalizzato per consentire l'addestramento dei modelli yolo-world contemporaneamente 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
# 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 ringraziamenti#
Esprimiamo la nostra sincera gratitudine al Tencent AILab Computer Vision Center per il suo 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 approfondire, il paper originale di YOLO-World è disponibile su arXiv. Il codice sorgente del progetto e ulteriori risorse sono disponibili tramite il relativo repository GitHub. Apprezziamo il loro impegno nel promuovere il settore e nel condividere preziose conoscenze con la comunità.
FAQ#
Il modello YOLO-World è un approccio avanzato e in tempo reale al rilevamento di oggetti, basato sul framework Ultralytics YOLOv8. Eccelle nelle attività di rilevamento a vocabolario aperto identificando gli oggetti all'interno di un'immagine sulla base di testi descrittivi. Utilizzando il modellamento visione-linguaggio e il pre-addestramento su dataset di grandi dimensioni, YOLO-World raggiunge elevata efficienza e prestazioni con requisiti computazionali significativamente ridotti, 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 pre-codificati e memorizzati come embedding del vocabolario offline. Questo approccio semplifica il processo di rilevamento senza la necessità di riaddestrare il modello. Puoi impostare dinamicamente questi prompt all'interno del modello per adattarlo ad attività di rilevamento specifiche, 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 a vocabolario aperto:
- Prestazioni in tempo reale: sfrutta la velocità computazionale delle CNN per offrire un rilevamento rapido ed efficiente.
- Efficienza e bassi requisiti di risorse: YOLO-World mantiene prestazioni elevate riducendo significativamente i requisiti computazionali e di risorse.
- Prompt personalizzabili: il modello supporta l'impostazione dinamica dei prompt, consentendo di specificare classi di rilevamento personalizzate senza riaddestrarlo.
- Eccellenza nei benchmark: supera altri rilevatori a vocabolario aperto come MDETR e GLIP sia in velocità sia in efficienza sui benchmark standard.
L'addestramento di un modello YOLO-World sul tuo dataset è semplice tramite l'API Python o i comandi CLI forniti. Ecco come avviare l'addestramento usando 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 usando la CLI:
yolo train model=yolov8s-worldv2.pt data=coco8.yaml epochs=100 imgsz=640Ultralytics offre diversi modelli YOLO-World preaddestrati che supportano varie attività e modalità operative:
Tipo di modello Pesi preaddestrati Attività supportate Addestramento Convalida Inferenza Esportazione YOLOv8s-world yolov8s-world.pt Rilevamento degli oggetti ✅ ✅ ✅ ❌ YOLOv8s-worldv2 yolov8s-worldv2.pt Rilevamento degli oggetti ✅ ✅ ✅ ✅ YOLOv8m-world yolov8m-world.pt Rilevamento degli oggetti ✅ ✅ ✅ ❌ YOLOv8m-worldv2 yolov8m-worldv2.pt Rilevamento degli oggetti ✅ ✅ ✅ ✅ YOLOv8l-world yolov8l-world.pt Rilevamento degli oggetti ✅ ✅ ✅ ❌ YOLOv8l-worldv2 yolov8l-worldv2.pt Rilevamento degli oggetti ✅ ✅ ✅ ✅ YOLOv8x-world yolov8x-world.pt Rilevamento degli oggetti ✅ ✅ ✅ ❌ YOLOv8x-worldv2 yolov8x-worldv2.pt Rilevamento degli oggetti ✅ ✅ ✅ ✅ Per riprodurre da zero i risultati ufficiali, devi preparare i dataset e avviare l'addestramento utilizzando 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)