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-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 lavoro di formazione mondiale su set di dati personalizzati

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 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 rilevamento del vocabolario aperto, impiegando lamodellazione del linguaggio di visione e il pre-training su ampie serie 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 il rilevamento del vocabolario aperto, che soddisfa le industrie che necessitano 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 prompt personalizzati calcolati a priori, tra cui didascalie o categorie, da codificare e memorizzare come embedding del vocabolario offline, semplificando il processo di rilevamento.

  4. Alimentato da YOLOv8: Costruito su Ultralytics YOLOv8YOLO-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, tra cui MDETR e la serie GLIP, in termini di velocità ed efficienza su benchmark standard, dimostrando la capacità superiore 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 preaddestrati, i compiti che supportano e la loro compatibilità con varie modalità operative come Inferenza, Convalida, 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 Attività supportate Inferenza Convalida Formazione Esportazione
YOLOv8s-Mondo yolov8s-world.pt Rilevamento degli oggetti
YOLOv8s-mondov2 yolov8s-mondov2.pt Rilevamento degli oggetti
YOLOv8m-Mondo yolov8m-world.pt Rilevamento degli oggetti
YOLOv8m-mondov2 yolov8m-mondov2.pt Rilevamento degli oggetti
YOLOv8l-Mondo yolov8l-world.pt Rilevamento degli oggetti
YOLOv8l-mondov2 yolov8l-mondov2.pt Rilevamento degli oggetti
YOLOv8x-Mondo yolov8x-world.pt Rilevamento degli oggetti
YOLOv8x-mondov2 yolov8x-mondov2.pt Rilevamento degli oggetti

Trasferimento a colpo zero sul 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 applicazioni Python . Ultralytics fornisce Python API e CLI comandi di facile utilizzo per semplificare lo sviluppo.

Utilizzo del treno

Suggerimento

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

Rilevamento degli oggetti è semplice con l'opzione train come illustrato di seguito:

Esempio

PyTorch preaddestrato *.pt modelli e la configurazione *.yaml possono essere passati al metodo 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 validazione 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 della traccia

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 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 ulteriori configurazioni o personalizzazioni.

Impostazione dei prompt

YOLO-Panoramica dei nomi delle classi del prompt mondiale

Il framework YOLO-World consente di specificare dinamicamente le classi attraverso prompt personalizzati, consentendo agli utenti di adattare il modello alle loro esigenze specifiche senza dover effettuare una nuova formazione. 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 le richieste personalizzate, gli utenti possono essenzialmente guidare l'attenzione del modello verso gli oggetti di interesse, migliorando la pertinenza e l'accuratezza dei risultati del rilevamento.

Ad esempio, se l'applicazione richiede solo il rilevamento di oggetti "persona" e "autobus", è possibile 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()

È anche possibile salvare un modello dopo aver impostato le classi personalizzate. In questo modo si crea una versione del modello YOLO-World specializzata per il caso d'uso specifico. Questo processo incorpora le definizioni delle classi personalizzate direttamente nel file del modello, rendendolo pronto per l'uso con le classi specificate senza ulteriori modifiche. Seguite questi passaggi per salvare e caricare il modello YOLOv8 personalizzato:

Esempio

Per prima cosa carichiamo un modello YOLO-World, impostiamo le classi personalizzate e lo salviamo:

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 e l'efficienza del rilevamento per gli 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à: Consente 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 allo stato dell'arte per compiti specifici, rendendo l'IA avanzata più accessibile e applicabile a una più ampia gamma di applicazioni pratiche.

Riprodurre 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 oggetti365_addestramento.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, consultare il sito 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 letture, 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à.

FAQ

Che cos'è il modello YOLO-World e come funziona?

Il modello YOLO-World è un approccio avanzato per il rilevamento di oggetti in tempo reale basato sul Ultralytics YOLOv8 struttura. 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 grandi insiemi 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 necessità di riqualificazione. È possibile 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 le classi di rilevamento personalizzate senza doverle riqualificare.
  • Eccellenza nei benchmark: Supera altri rilevatori di vocaboli aperti, come MDETR e GLIP, sia per velocità che per efficienza su benchmark standard.

Come si addestra un modello YOLO-World sul mio set di dati?

L'addestramento di un modello YOLO-World sul proprio set di dati è semplice attraverso le API Python 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 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 i compiti supportati?

Ultralytics offre diversi modelli preaddestrati YOLO-World che supportano varie 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-mondov2.pt Rilevamento degli oggetti
YOLOv8m-Mondo yolov8m-world.pt Rilevamento degli oggetti
YOLOv8m-mondov2 yolov8m-mondov2.pt Rilevamento degli oggetti
YOLOv8l-Mondo yolov8l-world.pt Rilevamento degli oggetti
YOLOv8l-mondov2 yolov8l-mondov2.pt Rilevamento degli oggetti
YOLOv8x-Mondo yolov8x-world.pt Rilevamento degli oggetti
YOLOv8x-mondov2 yolov8x-mondov2.pt Rilevamento degli 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 lanciare l'addestramento 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)
📅C reato 10 mesi fa ✏️ Aggiornato 1 mese fa

Commenti