Meet YOLO26: next-gen vision AI.

Link to this sectionModello 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 preservando 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

Link to this sectionPanoramica#

YOLO-World affronta le sfide incontrate dai tradizionali modelli di Open-Vocabulary detection, 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à in scenari dinamici. YOLO-World rivitalizza il framework YOLOv8 con capacità di open-vocabulary detection, impiegando modellazione linguistica visiva e pre-addestramento su vasti dataset per eccellere nell'identificazione di un'ampia gamma di oggetti in scenari zero-shot con un'efficienza senza pari.

Link to this sectionCaratteristiche principali#

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

  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, inclusi didascalie o categorie, per essere codificati e memorizzati come embedding del 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 l'open-vocabulary detection con precisione e velocità senza pari.

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

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

Link to this sectionModelli disponibili, attività supportate e modalità operative#

Questa sezione descrive i modelli disponibili con i loro specifici pesi pre-addestrati, le attività che supportano e la loro compatibilità con varie modalità operative come Inferenza, Validazione, Addestramento ed Esportazione, indicate da ✅ per le modalità supportate e ❌ per quelle 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 pre-addestratiAttività supportateInferenzaValidazioneAddestramentoEsportazione
YOLOv8s-worldyolov8s-world.ptObject Detection
YOLOv8s-worldv2yolov8s-worldv2.ptObject Detection
YOLOv8m-worldyolov8m-world.ptObject Detection
YOLOv8m-worldv2yolov8m-worldv2.ptObject Detection
YOLOv8l-worldyolov8l-world.ptObject Detection
YOLOv8l-worldv2yolov8l-worldv2.ptObject Detection
YOLOv8x-worldyolov8x-world.ptObject Detection
YOLOv8x-worldv2yolov8x-worldv2.ptObject Detection

Link to this sectionTrasferimento Zero-shot sul dataset COCO#

Performance
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

Link to this sectionEsempi di Utilizzo#

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



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

Link to this sectionUtilizzo per l'addestramento#

Suggerimento

Consigliamo vivamente di utilizzare il modello yolov8-worldv2 per l'addestramento personalizzato, perché supporta l'addestramento deterministico ed è anche facile da esportare in altri formati, ad esempio onnx/tensorrt.

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

Esempio

Modelli pre-addestrati PyTorch *.pt così come 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")

Link to this sectionUtilizzo di Predict#

Il rilevamento di oggetti è 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 previsione su un'immagine.

Link to this sectionUtilizzo di Val#

La validazione 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")

Link to this sectionUtilizzo di Track#

Il Object tracking 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")
Nota

I modelli YOLO-World forniti da Ultralytics sono pre-configurati 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 ulteriore configurazione o personalizzazione.

Link to this sectionImposta 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 non facevano originariamente parte dei dati di addestramento. Impostando prompt personalizzati, gli utenti possono essenzialmente guidare il focus del modello verso gli oggetti di interesse, migliorando la pertinenza e l'accuratezza dei risultati del rilevamento.

Ad esempio, se la tua applicazione richiede solo il rilevamento di oggetti 'person' (persona) e 'bus' (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 è completamente 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:

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

Link to this sectionVantaggi 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 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.

Link to this sectionRiproduci i risultati ufficiali da zero (Sperimentale)#

Link to this sectionPrepara i dataset#

  • Dati di addestramento
DatasetTipoCampioniBoxFile 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

Link to this sectionAvvia 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 ulteriori 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,
)

Link to this sectionCitazioni e riconoscimenti#

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, 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 settore e nel condividere le loro preziose intuizioni con la community.

Link to this sectionFAQ#

Link to this sectionCos'è 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 gli oggetti all'interno di un'immagine in base a testi descrittivi. Utilizzando la modellazione visione-linguaggio e il pre-addestramento su grandi dataset, YOLO-World ottiene elevata efficienza e prestazioni con richieste computazionali significativamente ridotte, rendendolo ideale per applicazioni in tempo reale in vari settori.

Link to this sectionCome gestisce YOLO-World 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 specifiche di oggetti vengono pre-codificati e archiviati come embedding del 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 specifiche attività 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()

Link to this sectionPerché 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 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.

Link to this sectionCome posso addestrare un modello YOLO-World sul mio dataset?#

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=640

Link to this sectionQuali sono i modelli YOLO-World pre-addestrati disponibili e le attività supportate?#

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

Tipo di modelloPesi pre-addestratiAttività supportateInferenzaValidazioneAddestramentoEsportazione
YOLOv8s-worldyolov8s-world.ptObject Detection
YOLOv8s-worldv2yolov8s-worldv2.ptObject Detection
YOLOv8m-worldyolov8m-world.ptObject Detection
YOLOv8m-worldv2yolov8m-worldv2.ptObject Detection
YOLOv8l-worldyolov8l-world.ptObject Detection
YOLOv8l-worldv2yolov8l-worldv2.ptObject Detection
YOLOv8x-worldyolov8x-world.ptObject Detection
YOLOv8x-worldv2yolov8x-worldv2.ptObject Detection

Link to this sectionCome posso riprodurre i risultati ufficiali di YOLO-World da zero?#

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