Modello YOLO-World

Il modello YOLO-World introduce un approccio avanzato e in tempo reale basato su Ultralytics YOLOv8 per attività di Open-Vocabulary Detection. Questa innovazione permette di rilevare qualsiasi oggetto all'interno di un'immagine sulla base di descrizioni testuali. Riducendo significativamente le richieste computazionali pur mantenendo prestazioni competitive, YOLO-World emerge come uno strumento versatile per numerose applicazioni basate sulla visione.



Watch: YOLO World training workflow on custom dataset

Panoramica dell'architettura del modello YOLO-World

Panoramica

YOLO-World affronta le sfide incontrate dai modelli tradizionali di Open-Vocabulary detection, che spesso si affidano a ingombranti modelli Transformer che richiedono ampie risorse computazionali. La dipendenza di questi modelli da categorie di oggetti predefinite ne limita inoltre l'utilità in scenari dinamici. YOLO-World rivitalizza il framework YOLOv8 con capacità di open-vocabulary detection, impiegando la vision-language modeling e il pre-addestramento su set di dati estesi per eccellere nell'identificazione di un'ampia gamma di oggetti in scenari zero-shot con un'efficienza senza pari.

Caratteristiche principali

  1. Soluzione in tempo reale: Sfruttando la velocità computazionale delle CNN, YOLO-World fornisce una rapida soluzione di open-vocabulary detection, adatta alle industrie che necessitano di risultati immediati.

  2. Efficienza e prestazioni: YOLO-World riduce drasticamente i requisiti computazionali e di risorse senza sacrificare le prestazioni, offrendo una solida alternativa a modelli come SAM ma a una frazione del costo computazionale, consentendo applicazioni in tempo reale.

  3. 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, da codificare e memorizzare come embedding di vocabolario offline, snellendo il processo di rilevamento.

  4. Basato su YOLOv8: Costruito su Ultralytics YOLOv8, YOLO-World sfrutta gli ultimi progressi nel rilevamento di oggetti in tempo reale per facilitare l'open-vocabulary detection con accuratezza e velocità senza precedenti.

  5. Eccellenza nei benchmark: YOLO-World supera i rilevatori open-vocabulary esistenti, incluse le serie MDETR e GLIP, in termini di velocità ed efficienza nei benchmark standard, mostrando la capacità superiore di YOLOv8 su una singola GPU NVIDIA V100.

  6. Applicazioni versatili: L'approccio innovativo di YOLO-World sblocca nuove possibilità per una moltitudine di attività di visione, offrendo miglioramenti di velocità di vari ordini di grandezza rispetto ai metodi esistenti.

Modelli disponibili, task supportati e modalità operative

Questa sezione descrive in dettaglio i modelli disponibili con i loro specifici pesi pre-addestrati, le attività che supportano e la loro compatibilità con varie modalità operative come Inference, Validation, Training ed Export, indicate con ✅ per le modalità supportate e ❌ per le modalità non supportate.

Nota

Tutti i pesi di YOLOv8-World sono stati migrati direttamente dal repository ufficiale YOLO-World, evidenziando i loro eccellenti contributi.

Tipo di modelloPesi preaddestratiAttività supportateInferenza (Inference)ValidazioneAddestramentoExport
YOLOv8s-worldyolov8s-world.ptRilevamento oggetti
YOLOv8s-worldv2yolov8s-worldv2.ptRilevamento oggetti
YOLOv8m-worldyolov8m-world.ptRilevamento oggetti
YOLOv8m-worldv2yolov8m-worldv2.ptRilevamento oggetti
YOLOv8l-worldyolov8l-world.ptRilevamento oggetti
YOLOv8l-worldv2yolov8l-worldv2.ptRilevamento oggetti
YOLOv8x-worldyolov8x-world.ptRilevamento oggetti
YOLOv8x-worldv2yolov8x-worldv2.ptRilevamento oggetti

Trasferimento Zero-shot sul dataset COCO

Prestazioni
Tipo di modellomAPmAP50mAP75
yolov8s-world37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-world42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-world45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-world47.063.051.2
yolov8x-worldv247.162.851.4

Esempi di utilizzo

I modelli YOLO-World sono facili da integrare nelle tue applicazioni Python. Ultralytics fornisce una Python API intuitiva e CLI commands per snellire lo sviluppo.



Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀

Utilizzo per l'addestramento

Suggerimento

Consigliamo vivamente di utilizzare il modello yolov8-worldv2 per l'addestramento personalizzato, poiché supporta l'addestramento deterministico e facilita anche l'esportazione verso altri formati, come onnx/tensorrt.

Object detection è semplice con il metodo train, come illustrato di seguito:

Esempio

PyTorch pretrained *.pt models as well as configuration *.yaml files can be passed to the YOLOWorld() class to create a model instance 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

L'object detection è semplice con il metodo predict, come illustrato di seguito:

Esempio
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 predizione su un'immagine.

Utilizzo di Val

La validazione del modello su un dataset è snellita come segue:

Esempio
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

Object tracking con il modello YOLO-World su un video/immagini è snellito come segue:

Esempio
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")
Nota

I modelli YOLO-World forniti da Ultralytics arrivano pre-configurati con le categorie del COCO dataset 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 ulteriori impostazioni o personalizzazioni.

Imposta i prompt

Panoramica dei nomi delle classi prompt di YOLO-World

Il framework YOLO-World consente la specifica dinamica delle classi tramite prompt personalizzati, dando agli utenti la possibilità di adattare il modello alle proprie esigenze specifiche senza riaddestramento. Questa funzionalità è particolarmente utile per adattare il modello a nuovi domini o attività specifiche che non facevano originariamente parte dei training data. Impostando prompt personalizzati, puoi essenzialmente guidare l'attenzione del modello verso gli oggetti di interesse, migliorando la rilevanza e l'accuracy dei risultati di rilevamento.

Ad esempio, se la tua applicazione richiede solo di rilevare oggetti 'persona' e 'autobus', puoi specificare queste classi direttamente:

Esempio
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()
Classe di sfondo

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. 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:

Esempio

Carica prima 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 di rilevamento e l'efficienza 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: Snellisce il processo di rilevamento concentrandosi sugli oggetti rilevanti, riducendo il carico computazionale e accelerando l'inferenza.
  • Flessibilità: Consente un facile adattamento del modello a nuove attività di rilevamento o di nicchia senza la necessità di un esteso riaddestramento o raccolta dati.
  • Semplicità: Semplifica la distribuzione eliminando la necessità di specificare ripetutamente classi personalizzate in fase di runtime, rendendo il modello direttamente utilizzabile con il suo vocabolario integrato.
  • 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 fornisce un potente mezzo per personalizzare modelli di object detection all'avanguardia per attività specifiche, 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
DatasetTipoCampioniBoxesFile di annotazione
Objects365v1Rilevamento609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Dati di validazione
DatasetTipoFile di annotazione
LVIS minivalRilevamentominival.txt

Avvia l'addestramento da zero

Nota

WorldTrainerFromScratch è altamente personalizzato per consentire l'addestramento di modelli yolo-world sia su dataset di rilevamento che su dataset di grounding simultaneamente. Per maggiori dettagli, consulta ultralytics.model.yolo.world.train_world.py.

Esempio
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch

# Option 1: Use Python dictionary
data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="flickr30k/images",
                json_file="flickr30k/final_flickr_separateGT_train.json",
            ),
            dict(
                img_path="GQA/images",
                json_file="GQA/final_mixed_train_no_coco.json",
            ),
        ],
    ),
    val=dict(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

Estendiamo 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:

Citazione
@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, l'articolo originale su YOLO-World è disponibile su arXiv. Il codice sorgente del progetto e le risorse aggiuntive possono essere consultati tramite il loro repository GitHub. Apprezziamo il loro impegno nel far progredire il settore e nel condividere le loro preziose intuizioni con la community.

FAQ

Cos'è il modello YOLO-World e come funziona?

Il modello YOLO-World è un approccio avanzato di rilevamento oggetti in tempo reale basato sul framework Ultralytics YOLOv8. Eccelle nelle attività di Open-Vocabulary Detection identificando oggetti all'interno di un'immagine basandosi su testi descrittivi. Utilizzando la modellazione visione-linguaggio e il pre-addestramento su grandi dataset, YOLO-World raggiunge un'elevata efficienza e prestazioni con richieste computazionali significativamente ridotte, rendendolo ideale per applicazioni in tempo reale in vari settori.

Come gestisce YOLO-World l'inferenza con prompt personalizzati?

YOLO-World supporta una strategia di "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 archiviati come embedding di vocabolario offline. Questo approccio semplifica il processo di rilevamento senza la necessità di un riaddestramento. Puoi impostare dinamicamente questi prompt all'interno del modello per adattarlo a compiti di rilevamento specifici, 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()

Perché dovrei scegliere YOLO-World rispetto ai tradizionali modelli di rilevamento Open-Vocabulary?

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 fabbisogno di risorse: YOLO-World mantiene alte prestazioni riducendo significativamente le richieste computazionali e di risorse.
  • Prompt personalizzabili: Il modello supporta l'impostazione dinamica dei prompt, consentendo agli utenti 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.

Come posso addestrare un modello YOLO-World sul mio dataset?

L'addestramento di un modello YOLO-World sul tuo dataset è semplice tramite la Python API fornita o i comandi CLI. Ecco come iniziare 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.yaml data=coco8.yaml epochs=100 imgsz=640

Quali sono i modelli YOLO-World pre-addestrati disponibili e quali compiti supportano?

Ultralytics offre molteplici modelli YOLO-World pre-addestrati che supportano varie attività e modalità operative:

Tipo di modelloPesi preaddestratiAttività supportateInferenza (Inference)ValidazioneAddestramentoExport
YOLOv8s-worldyolov8s-world.ptRilevamento oggetti
YOLOv8s-worldv2yolov8s-worldv2.ptRilevamento oggetti
YOLOv8m-worldyolov8m-world.ptRilevamento oggetti
YOLOv8m-worldv2yolov8m-worldv2.ptRilevamento oggetti
YOLOv8l-worldyolov8l-world.ptRilevamento oggetti
YOLOv8l-worldv2yolov8l-worldv2.ptRilevamento oggetti
YOLOv8x-worldyolov8x-world.ptRilevamento oggetti
YOLOv8x-worldv2yolov8x-worldv2.ptRilevamento oggetti

Come posso riprodurre da zero i risultati ufficiali di YOLO-World?

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 dati e l'esecuzione del metodo train con 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)

Commenti