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.

YOLO-Panoramica dell'architettura del World Model



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

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 una singola GPU NVIDIA V100.

  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.models.yolo.world.train_world import WorldTrainerFromScratch
from ultralytics import YOLOWorld

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



Creato 2024-02-14, Aggiornato 2024-05-02
Autori: RizwanMunawar (2), glenn-jocher (3), Burhan-Q (1), Laughing-q (4)

Commenti