Vai al contenuto

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 consente il rilevamento di qualsiasi oggetto all'interno di un'immagine basato su testi descrittivi. Riducendo significativamente le esigenze computazionali pur preservando prestazioni competitive, YOLO-World emerge come uno strumento versatile per numerose applicazioni basate sulla visione.



Guarda: Flusso di lavoro di addestramento di YOLO World su dataset personalizzato

Panoramica dell'architettura del modello YOLO-World

Panoramica

YOLO-World affronta le sfide poste dai modelli tradizionali di rilevamento Open-Vocabulary, che spesso si affidano a complessi 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 rivitalizza il framework YOLOv8 con funzionalità di rilevamento open-vocabulary, impiegando la modellazione visione-linguaggio e il pre-training 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 offre una rapida soluzione di rilevamento a vocabolario aperto, 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 valida 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, tra cui didascalie o categorie, da codificare e memorizzare come incorporamenti di vocabolario offline, semplificando 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 il rilevamento a vocabolario aperto con accuratezza e velocità senza precedenti.

  5. Eccellenza nel benchmarking: YOLO-World supera i rilevatori a vocabolario aperto esistenti, comprese le serie MDETR e GLIP, in termini di velocità ed efficienza sui benchmark standard, dimostrando la capacità superiore di YOLOv8 su una singola GPU NVIDIA V100.

  6. Applicazioni versatili: L'approccio innovativo di YOLO-World apre nuove possibilità per una moltitudine di attività di visione, offrendo miglioramenti di 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 specifici, le attività che supportano e la loro compatibilità con varie modalità operative come Inferenza, Validazione, Addestramento ed Esportazione, 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 di YOLO-World, evidenziando i loro eccellenti contributi.

Tipo di modello Pesi pre-addestrati Task supportati Inferenza Validazione Training 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

Prestazioni

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 API Python e comandi CLI di facile utilizzo per semplificare lo sviluppo.

Utilizzo dell'addestramento

Suggerimento

Raccomandiamo vivamente di utilizzare yolov8-worldv2 modello per il training personalizzato, poiché supporta il training deterministico ed è facile da esportare in altri formati, ad esempio ONNX/TensorRT.

Rilevamento di oggetti è semplice con il train metodo, come illustrato di seguito:

Esempio

PyTorch pre-addestrato *.pt modelli, così come la configurazione *.yaml file possono essere passati alla YOLOWorld() classe 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 YOLOv8n model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
# Load a pretrained YOLOv8s-worldv2 model and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640

Utilizzo della previsione

Il rilevamento di oggetti è semplice con predict metodo, 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()
# Perform object detection using a YOLO-World model
yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640

Questo snippet dimostra la semplicità di caricare un modello pre-addestrato ed eseguire una previsione su un'immagine.

Utilizzo di Val

La convalida del modello su un dataset è semplificata 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")
# Validate a YOLO-World model on the COCO8 dataset with a specified image size
yolo val model=yolov8s-world.pt data=coco8.yaml imgsz=640

Utilizzo della traccia

Il tracciamento degli oggetti con il modello YOLO-World su video/immagini è semplificato 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")
# Track with a YOLO-World model on the video with a specified image size
yolo track model=yolov8s-world.pt imgsz=640 source="path/to/video.mp4"

Nota

I modelli YOLO-World forniti da Ultralytics sono preconfigurati con le categorie del dataset COCO come parte del loro vocabolario offline, migliorando l'efficienza per l'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

Panoramica dei nomi delle classi prompt di YOLO-World

Il framework YOLO-World consente la specifica dinamica delle classi tramite prompt personalizzati, consentendo agli utenti 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 originariamente non facevano parte dei dati di addestramento. Impostando prompt personalizzati, gli utenti possono essenzialmente guidare l'attenzione del modello verso oggetti di interesse, migliorando la pertinenza e l'accuratezza dei risultati di detection.

Ad esempio, se la tua applicazione richiede solo il rilevamento di oggetti 'person' e 'bus', puoi specificare direttamente queste classi:

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()

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 le definizioni delle tue classi personalizzate direttamente nel file del modello, rendendo il modello pronto per l'uso con le classi specificate senza ulteriori modifiche. Segui questi passaggi per salvare e caricare il tuo modello YOLOv8 personalizzato:

Esempio

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 fondamentale: ora è ottimizzato per rilevare solo le classi definite dall'utente. Questa personalizzazione può migliorare significativamente le prestazioni di rilevamento e l'efficienza per i tuoi specifici scenari applicativi.

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 rilevanti, riducendo il sovraccarico computazionale e accelerando l'inferenza.
  • Flessibilità: Consente un facile adattamento del modello a nuove o specifiche attività di rilevamento senza la necessità di un retraining estensivo o di raccolta dati.
  • Semplicità: Semplifica la distribuzione eliminando la necessità di specificare ripetutamente classi personalizzate in fase di esecuzione, rendendo il modello direttamente utilizzabile con il suo 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 fornisce un mezzo efficace per personalizzare modelli di object detection all'avanguardia per compiti specifici, rendendo l'IA avanzata più accessibile e applicabile a una gamma più ampia di applicazioni pratiche.

Riproduzione dei risultati ufficiali da zero (Sperimentale)

Prepara i set di dati

  • Dati di addestramento
Set di dati Tipo Esempi 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 Val
Set di dati Tipo File di annotazione
LVIS minival Rilevamento minival.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 contemporaneamente. Maggiori dettagli sono disponibili su ultralytics.model.yolo.world.train_world.py.

Esempio

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

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"]),
)
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)

Citazioni e riconoscimenti

Estendiamo la nostra gratitudine al Tencent AILab Computer Vision Center per il loro lavoro pionieristico nel rilevamento di oggetti in tempo reale a 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 di YOLO-World è disponibile su arXiv. Il codice sorgente del progetto e le risorse aggiuntive sono accessibili tramite il loro repository GitHub. Apprezziamo il loro impegno nel far progredire il settore e nel condividere le loro preziose intuizioni con la comunità.

FAQ

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

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

In che modo YOLO-World gestisce l'inferenza con prompt personalizzati?

YOLO-World supporta una strategia "prompt-then-detect", che utilizza un vocabolario offline per migliorare l'efficienza. Prompt personalizzati come didascalie o categorie di oggetti specifiche vengono pre-codificati e archiviati come incorporamenti del vocabolario offline. Questo approccio semplifica il processo di detection senza la necessità di un retraining. Puoi impostare dinamicamente questi prompt all'interno del modello per adattarlo a specifiche attività di detection, 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 modelli tradizionali di rilevamento Open-Vocabulary?

YOLO-World offre diversi vantaggi rispetto ai modelli di detection Open-Vocabulary tradizionali:

  • Prestazioni in tempo reale: Sfrutta la velocità di calcolo delle CNN per offrire un rilevamento rapido ed efficiente.
  • Efficienza e bassi requisiti di risorse: YOLO-World mantiene prestazioni elevate riducendo significativamente le esigenze computazionali e di risorse.
  • Prompt Personalizzabili: Il modello supporta l'impostazione dinamica dei prompt, consentendo agli utenti di specificare classi di detection personalizzate senza dover rieseguire il training.
  • Eccellenza nel benchmarking: Supera altri rivelatori a vocabolario aperto come MDETR e GLIP in termini di velocità ed efficienza sui benchmark standard.

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

L'addestramento di 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 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 le loro attività supportate?

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

Tipo di modello Pesi pre-addestrati Task supportati Inferenza Validazione Training 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

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

Per riprodurre i risultati ufficiali da zero, è necessario preparare i set di dati e avviare l'addestramento utilizzando il codice fornito. La procedura di addestramento prevede la creazione di un dizionario di dati e l'esecuzione del train metodo 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)


📅 Creato 1 anno fa ✏️ Aggiornato 2 mesi fa

Commenti