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
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
-
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.
-
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.
-
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.
-
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.
-
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.
-
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")
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()
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
Utilizzo della traccia
Il tracciamento degli oggetti con il modello YOLO-World su un video/immagine viene semplificato come segue:
Esempio
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
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.
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:
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:
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)