Vai al contenuto

YOLO-Modello Mondiale

Il modello YOLO-World Model introduce un sistema avanzato, in tempo reale, per la gestione del traffico. Ultralytics YOLOv8-basato su un approccio in tempo reale per le attivitĂ  di rilevamento del vocabolario aperto. Questa innovazione consente di rilevare qualsiasi oggetto all'interno di un'immagine sulla base di testi descrittivi. Riducendo in modo significativo i requisiti computazionali, pur mantenendo prestazioni competitive, YOLO-World si rivela uno strumento versatile per numerose applicazioni basate sulla visione.



Guarda: YOLO Flusso di formazione mondiale su un set di dati personalizzato

YOLO-Panoramica dell'architettura del World Model

Panoramica

YOLO-World affronta le sfide dei tradizionali modelli di rilevamento dei vocabolari aperti, che spesso si basano su ingombranti modelli di trasformatori che richiedono ingenti risorse computazionali. La dipendenza di questi modelli da categorie di oggetti predefinite limita inoltre la loro utilitĂ  in scenari dinamici. YOLO-World rivitalizza il framework YOLOv8 con funzionalitĂ  di rilevamento del vocabolario aperto, impiegando la modellazione del linguaggio di visione e il pre-training su ampi set di dati per eccellere nell'identificazione di un'ampia gamma di oggetti in scenari a scatto zero con un'efficienza senza pari.

Caratteristiche principali

  1. Soluzione in tempo reale: Sfruttando la velocitĂ  di calcolo delle CNN, YOLO-World offre una soluzione rapida per l'individuazione di vocabolari aperti, che soddisfa le industrie che hanno bisogno di risultati immediati.

  2. Efficienza e prestazioni: YOLO-World riduce i requisiti di calcolo 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 di "prompt-then-detect", utilizzando un vocabolario offline per migliorare ulteriormente l'efficienza. Questo approccio consente di utilizzare suggerimenti personalizzati calcolati apriori, tra cui didascalie o categorie, da codificare e memorizzare come incorporazioni di vocabolario offline, semplificando il processo di rilevamento.

  4. Alimentato da YOLOv8: Costruito su Ultralytics YOLOv8, YOLO-World sfrutta i piĂą recenti progressi nel rilevamento degli oggetti in tempo reale per facilitare il rilevamento del vocabolario aperto con una precisione e una velocitĂ  senza precedenti.

  5. Eccellenza nei benchmark: YOLO World supera i rilevatori di vocabolari aperti esistenti, come MDETR e la serie GLIP, in termini di velocitĂ  ed efficienza su benchmark standard, dimostrando la superioritĂ  di YOLOv8 su un singolo NVIDIA V100 GPU.

  6. Applicazioni versatili: YOLO-L'approccio innovativo di World apre 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 illustra i modelli disponibili con i loro pesi specifici pre-addestrati, i compiti che supportano e la loro compatibilità con varie modalità operative come Inferenza, Convalida, Formazione 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 AttivitĂ  supportate Inferenza Convalida Formazione Esportazione
YOLOv8s-Mondo yolov8s-world.pt Rilevamento degli oggetti ✅ ✅ ✅ ❌
YOLOv8s-Mondov2 yolov8s-worldv2.pt Rilevamento degli oggetti âś… âś… âś… âś…
YOLOv8m-Mondo yolov8m-world.pt Rilevamento degli oggetti ✅ ✅ ✅ ❌
YOLOv8m-Mondov2 yolov8m-worldv2.pt Rilevamento degli oggetti âś… âś… âś… âś…
YOLOv8l-Mondo yolov8l-world.pt Rilevamento degli oggetti ✅ ✅ ✅ ❌
YOLOv8l-Mondov2 yolov8l-worldv2.pt Rilevamento degli oggetti âś… âś… âś… âś…
YOLOv8x-Mondo yolov8x-world.pt Rilevamento degli oggetti ✅ ✅ ✅ ❌
YOLOv8x-Mondov2 yolov8x-worldv2.pt Rilevamento degli oggetti âś… âś… âś… âś…

Trasferimento a colpo zero su set di dati COCO

Tipo di modello mAP mAP50 mAP75
yolov8s-Mondo 37.4 52.0 40.6
yolov8s-Mondov2 37.7 52.2 41.0
yolov8m-Mondo 42.0 57.0 45.6
yolov8m-Mondov2 43.0 58.4 46.8
yolov8l-Mondo 45.7 61.3 49.8
yolov8l-Mondov2 45.8 61.3 49.8
yolov8x-Mondo 47.0 63.0 51.2
yolov8x-Mondov2 47.1 62.8 51.4

Esempi di utilizzo

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

Utilizzo del treno

Suggerimento

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

Il rilevamento degli oggetti è semplice con la funzione train come illustrato di seguito:

Esempio

PyTorch preaddestrato *.pt modelli e configurazione *.yaml possono essere passati ai file 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 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

Prevedere l'utilizzo

Il rilevamento degli oggetti è semplice con la funzione 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()
# 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 set di dati viene 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 del tracciato

Il tracciamento degli oggetti con il modello YOLO-World su un video/immagine viene 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/file.mp4"

Nota

I modelli YOLO-World forniti da Ultralytics sono preconfigurati con le categorie del set di dati COCO come parte del loro vocabolario offline, migliorando l'efficienza per un'applicazione immediata. Questa integrazione permette ai modelli YOLOv8-World di riconoscere e prevedere direttamente le 80 categorie standard definite nel dataset COCO senza richiedere ulteriori configurazioni o personalizzazioni.

Imposta i messaggi

YOLO-Panoramica dei nomi delle classi del prompt mondiale

Il framework YOLO-World consente di specificare dinamicamente le classi attraverso messaggi personalizzati, consentendo agli utenti di adattare il modello alle loro esigenze specifiche senza doverlo riqualificare. Questa funzione è particolarmente utile per adattare il modello a nuovi domini o a compiti specifici che non facevano originariamente parte dei dati di addestramento. Impostando suggerimenti personalizzati, gli utenti possono essenzialmente guidare l'attenzione del modello verso gli oggetti di interesse, migliorando la rilevanza e l'accuratezza dei risultati del rilevamento.

Ad esempio, se la tua applicazione richiede solo il rilevamento di oggetti "persona" e "autobus", 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 le 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 classi personalizzate direttamente nel file del modello, rendendolo pronto all'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 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 preaddestrato di YOLOv8 , 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 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 risparmio con il vocabolario personalizzato

  • Efficienza: Semplifica il processo di rilevamento concentrandosi sugli oggetti rilevanti, riducendo l'overhead computazionale e accelerando l'inferenza.
  • FlessibilitĂ : Permette di adattare facilmente il modello a compiti di rilevamento nuovi o di nicchia, senza la necessitĂ  di un'estesa riqualificazione o di una raccolta di dati.
  • SemplicitĂ : Semplifica la distribuzione eliminando la necessitĂ  di specificare ripetutamente le 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 potente mezzo per personalizzare i modelli di rilevamento degli oggetti all'avanguardia per compiti specifici, rendendo l'IA avanzata piĂą accessibile e applicabile a una piĂą ampia gamma di applicazioni pratiche.

Riproduci i risultati ufficiali da zero (Sperimentale)

Preparare i set di dati

  • Dati del treno
Set di dati Tipo Campioni Scatole File di annotazione
Oggetti365v1 Rilevamento 609k 9621k objects365_train.json
GQA Messa a terra 621k 3681k final_mixed_train_no_coco.json
Flickr30k Messa a terra 149k 641k final_flickr_separateGT_train.json
  • Dati di valore
Set di dati Tipo File di annotazione
LVIS minival Rilevamento minival.txt

Avviare la formazione da zero

Nota

WorldTrainerFromScratch è altamente personalizzato per consentire l'addestramento di modelli yolo-world su entrambi i set di dati di rilevamento e di messa a terra contemporaneamente. 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

data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="../datasets/flickr30k/images",
                json_file="../datasets/flickr30k/final_flickr_separateGT_train.json",
            ),
            dict(
                img_path="../datasets/GQA/images",
                json_file="../datasets/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 ringraziamenti

Ringraziamo il Tencent AILab Computer Vision Center per il suo lavoro pionieristico nel rilevamento in tempo reale di oggetti 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 ulteriori informazioni, il documento originale di YOLO-World è disponibile su arXiv. Il codice sorgente del progetto e altre risorse 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 comunità.

DOMANDE FREQUENTI

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

Il modello YOLO-World è un approccio avanzato di rilevamento degli oggetti in tempo reale basato sul framework Ultralytics YOLOv8 framework. Eccelle nei compiti di Open-Vocabulary Detection identificando gli oggetti all'interno di un'immagine sulla base di testi descrittivi. Utilizzando la modellazione del linguaggio di visione e il pre-training su ampi set di dati, YOLO-World raggiunge un'elevata efficienza e prestazioni con requisiti computazionali significativamente ridotti, rendendolo ideale per applicazioni in tempo reale in diversi settori.

Come fa YOLO-World a gestire l'inferenza con i prompt personalizzati?

YOLO-World supporta la strategia "prompt-then-detect", che utilizza un vocabolario offline per migliorare l'efficienza. I suggerimenti personalizzati, come le didascalie o le categorie specifiche di oggetti, sono pre-codificati e memorizzati come embedding del vocabolario offline. Questo approccio semplifica il processo di rilevamento senza bisogno di riaddestramento. Puoi impostare dinamicamente questi suggerimenti 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é scegliere YOLO-World rispetto ai tradizionali modelli di rilevamento dei vocabolari aperti?

YOLO-World offre diversi vantaggi rispetto ai tradizionali modelli di rilevamento dei vocabolari aperti:

  • Prestazioni in tempo reale: Sfrutta la velocitĂ  di calcolo delle CNN per offrire un rilevamento rapido ed efficiente.
  • Efficienza e basso fabbisogno di risorse: YOLO-World mantiene prestazioni elevate riducendo in modo significativo i requisiti di calcolo e di risorse.
  • Prompt personalizzabili: Il modello supporta l'impostazione dinamica dei prompt, consentendo agli utenti di specificare classi di rilevamento personalizzate senza doverle riqualificare.
  • Eccellenza nei benchmark: Supera altri rilevatori di vocabolari aperti come MDETR e GLIP sia per velocitĂ  che per efficienza su benchmark standard.

Come faccio ad addestrare un modello YOLO-World sul mio set di dati?

L'addestramento di un modello YOLO-World sul tuo set di dati è semplice attraverso le API Python 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 CLI:

yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640

Quali sono i modelli preaddestrati disponibili su YOLO-World e le attivitĂ  supportate?

Ultralytics offre diversi modelli preaddestrati YOLO-World che supportano diverse attivitĂ  e modalitĂ  operative:

Tipo di modello Pesi pre-addestrati AttivitĂ  supportate Inferenza Convalida Formazione Esportazione
YOLOv8s-Mondo yolov8s-world.pt Rilevamento degli oggetti ✅ ✅ ✅ ❌
YOLOv8s-Mondov2 yolov8s-worldv2.pt Rilevamento degli oggetti âś… âś… âś… âś…
YOLOv8m-Mondo yolov8m-world.pt Rilevamento degli oggetti ✅ ✅ ✅ ❌
YOLOv8m-Mondov2 yolov8m-worldv2.pt Rilevamento degli oggetti âś… âś… âś… âś…
YOLOv8l-Mondo yolov8l-world.pt Rilevamento degli oggetti ✅ ✅ ✅ ❌
YOLOv8l-Mondov2 yolov8l-worldv2.pt Rilevamento degli oggetti âś… âś… âś… âś…
YOLOv8x-Mondo yolov8x-world.pt Rilevamento degli oggetti ✅ ✅ ✅ ❌
YOLOv8x-Mondov2 yolov8x-worldv2.pt Rilevamento degli oggetti âś… âś… âś… âś…

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

Per riprodurre i risultati ufficiali da zero, devi preparare i set di dati e avviare la formazione utilizzando il codice fornito. La procedura di addestramento prevede la creazione di un dizionario di dati e l'esecuzione del programma 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": "../datasets/flickr30k/images",
                "json_file": "../datasets/flickr30k/final_flickr_separateGT_train.json",
            },
            {
                "img_path": "../datasets/GQA/images",
                "json_file": "../datasets/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 2024-02-14, Aggiornato 2024-07-04
Autori: glenn-jocher (9), RizwanMunawar (3), Burhan-Q (1), Laughing-q (4)

Commenti