Modèle YOLO-World#
Le modèle YOLO-World introduit une approche avancée en temps réel basée sur Ultralytics YOLOv8 pour les tâches de détection à vocabulaire ouvert. Cette innovation permet de détecter n'importe quel objet dans une image à partir de textes descriptifs. En réduisant considérablement les besoins en calcul tout en conservant des performances compétitives, YOLO-World s'impose comme un outil polyvalent pour de nombreuses applications de vision.
Watch: YOLO World training workflow on custom dataset

Présentation#
YOLO-World relève les défis auxquels sont confrontés les modèles traditionnels de détection à vocabulaire ouvert, qui reposent souvent sur de lourds modèles Transformer nécessitant d'importantes ressources de calcul. La dépendance de ces modèles à des catégories d'objets prédéfinies limite également leur utilité dans des scénarios dynamiques. YOLO-World revitalise le framework YOLOv8 en lui ajoutant des capacités de détection à vocabulaire ouvert, en utilisant la modélisation vision-langage et un pré-entraînement sur de vastes jeux de données pour exceller dans l'identification d'un large éventail d'objets en contexte zero-shot, avec une efficacité inégalée.
Pour les travaux à vocabulaire ouvert qui nécessitent également des masques d'instance, des prompts visuels ou un mode sans prompt, consulte YOLOE, qui conserve la même API set_classes().
Fonctionnalités clés#
-
Solution en temps réel : En exploitant la vitesse de calcul des CNN, YOLO-World fournit une solution rapide de détection à vocabulaire ouvert adaptée aux secteurs qui ont besoin de résultats immédiats.
-
Efficacité et performances : YOLO-World réduit fortement les besoins en calcul et en ressources sans sacrifier les performances, offrant une alternative robuste à des modèles comme SAM, mais pour une fraction du coût de calcul et avec la possibilité d'applications en temps réel.
-
Inférence avec un vocabulaire hors ligne : YOLO-World introduit une stratégie « prompt-then-detect » qui utilise un vocabulaire hors ligne pour améliorer encore l'efficacité. Cette approche permet d'utiliser des prompts personnalisés calculés a priori, notamment des légendes ou des catégories, afin de les encoder et de les stocker sous forme d'embeddings de vocabulaire hors ligne, ce qui rationalise le processus de détection.
-
Propulsé par YOLOv8 : Construit sur Ultralytics YOLOv8, YOLO-World exploite les dernières avancées en matière de détection d'objets en temps réel pour permettre une détection à vocabulaire ouvert avec une précision et une vitesse inégalées.
-
Excellence sur les benchmarks : YOLO-World surpasse les détecteurs à vocabulaire ouvert existants, notamment les séries MDETR et GLIP, en termes de vitesse et d'efficacité sur des benchmarks standard, démontrant les capacités supérieures de YOLOv8 sur un seul GPU NVIDIA V100.
-
Applications polyvalentes : L'approche innovante de YOLO-World ouvre de nouvelles possibilités pour une multitude de tâches de vision, avec des améliorations de vitesse de plusieurs ordres de grandeur par rapport aux méthodes existantes.
Modèles disponibles, tâches prises en charge et modes de fonctionnement#
Cette section détaille les modèles disponibles avec leurs poids préentraînés spécifiques, les tâches qu'ils prennent en charge et leur compatibilité avec différents modes d'utilisation, tels que Inférence, Validation, Entraînement et Exportation, indiqués par ✅ pour les modes pris en charge et ❌ pour les modes non pris en charge.
Tous les poids YOLOv8-World ont été directement migrés depuis le dépôt officiel YOLO-World, mettant en évidence leurs excellentes contributions.
| Type de modèle | Poids préentraînés | Tâches prises en charge | Entraînement | Validation | Inférence | Exportation |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Détection d’objets | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Détection d’objets | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Détection d’objets | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Détection d’objets | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Détection d’objets | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Détection d’objets | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Détection d’objets | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Détection d’objets | ✅ | ✅ | ✅ | ✅ |
Transfert zero-shot sur le jeu de données COCO#
| Type de modèle | mAP | mAP50 | mAP75 |
|---|---|---|---|
| yolov8s-world | 37.4 | 52.0 | 40.6 |
| yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
| yolov8m-world | 42.0 | 57.0 | 45.6 |
| yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
| yolov8l-world | 45.7 | 61.3 | 49.8 |
| yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
| yolov8x-world | 47.0 | 63.0 | 51.2 |
| yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
Exemples d’utilisation#
Les modèles YOLO-World s'intègrent facilement à tes applications Python. Ultralytics fournit une API Python et des commandes CLI conviviales pour simplifier le développement.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Utilisation pour l’entraînement#
Nous te recommandons vivement d'utiliser yolov8-worldv2 pour l'entraînement personnalisé, car il prend en charge l'entraînement déterministe et facilite l'exportation vers des formats tels que ONNX et TensorRT.
La détection d'objets est simple avec la méthode train, comme illustré ci-dessous :
Les modèles *.pt préentraînés avec PyTorch, ainsi que les fichiers de configuration *.yaml, peuvent être transmis à la classe YOLOWorld() pour créer une instance de modèle en 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")Utilisation de Predict#
La détection d'objets est simple avec la méthode predict, comme illustré ci-dessous :
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()Cet extrait montre à quel point il est simple de charger un modèle préentraîné et d'effectuer une prédiction sur une image.
Utilisation de Val#
La validation d'un modèle sur un jeu de données s'effectue comme suit :
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")Utilisation de Track#
Le suivi d'objets avec le modèle YOLO-World sur une vidéo ou des images s'effectue comme suit :
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")Les modèles YOLO-World fournis par Ultralytics sont préconfigurés avec les catégories du jeu de données COCO dans leur vocabulaire hors ligne, ce qui améliore leur efficacité pour une utilisation immédiate. Cette intégration permet aux modèles YOLOv8-World de reconnaître et de prédire directement les 80 catégories standard définies dans le jeu de données COCO, sans configuration ni personnalisation supplémentaires.
Définir les prompts#

Le framework YOLO-World permet de définir dynamiquement les classes au moyen de prompts personnalisés, ce qui te permet d'adapter le modèle à tes besoins spécifiques sans réentraînement. Cette fonctionnalité est particulièrement utile pour adapter le modèle à de nouveaux domaines ou à des tâches spécifiques qui ne faisaient pas initialement partie des données d'entraînement. En définissant des prompts personnalisés, tu peux essentiellement orienter l'attention du modèle vers les objets qui t'intéressent, afin d'améliorer la pertinence et la précision des résultats de détection.
Par exemple, si ton application doit uniquement détecter les objets « person » et « bus », tu peux spécifier directement ces classes :
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()Certains utilisateurs ont constaté que l'ajout d'une chaîne vide "" comme classe d'arrière-plan pouvait améliorer les performances de détection dans certains scénarios. Ce comportement semble dépendre du scénario et son mécanisme exact n'est pas entièrement compris :
model.set_classes(["person", "bus", ""])Tu peux également enregistrer un modèle après avoir défini des classes personnalisées. Tu crées ainsi une version du modèle YOLO-World spécialisée pour ton cas d'utilisation spécifique. Ce processus intègre directement tes définitions de classes personnalisées dans le fichier du modèle, qui est ainsi prêt à être utilisé avec les classes spécifiées, sans autre modification. Suis ces étapes pour enregistrer et charger ton modèle YOLO-World personnalisé :
Commence par charger un modèle YOLO-World, définis ses classes personnalisées, puis enregistre-le :
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")Après son enregistrement, le modèle custom_yolov8s.pt se comporte comme n'importe quel autre modèle YOLOv8 préentraîné, à une différence essentielle près : il est désormais optimisé pour détecter uniquement les classes que tu as définies. Cette personnalisation peut améliorer considérablement les performances et l'efficacité de la détection dans les scénarios propres à ton application.
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()Avantages de l'enregistrement avec un vocabulaire personnalisé#
- Efficacité : Rationalise le processus de détection en se concentrant sur les objets pertinents, ce qui réduit la surcharge de calcul et accélère l'inférence.
- Flexibilité : Permet d'adapter facilement le modèle à de nouvelles tâches de détection ou à des tâches spécialisées, sans réentraînement ni collecte de données importants.
- Simplicité : Simplifie le déploiement en évitant de devoir spécifier à plusieurs reprises les classes personnalisées lors de l'exécution, ce qui rend le modèle directement utilisable avec son vocabulaire intégré.
- Performances : Améliore la précision de détection des classes spécifiées en concentrant l'attention et les ressources du modèle sur la reconnaissance des objets définis.
Cette approche constitue un moyen puissant de personnaliser des modèles de détection d'objets de pointe pour des tâches spécifiques, rendant l'IA avancée plus accessible et applicable à un plus large éventail d'applications concrètes.
Reproduire les résultats officiels depuis zéro (expérimental)#
Préparer les jeux de données#
- Données d'entraînement
| Jeu de données | Type | Échantillons | Boîtes | Fichiers d'annotation |
|---|---|---|---|---|
| Objects365v1 | Détection | 609k | 9621k | objects365_train.json |
| GQA | Ancrage | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | Ancrage | 149k | 641k | final_flickr_separateGT_train.json |
- Données de validation
| Jeu de données | Type | Fichiers d'annotation |
|---|---|---|
| LVIS minival | Détection | minival.txt |
Lancer l'entraînement depuis zéro#
WorldTrainerFromScratch est fortement personnalisé pour permettre l'entraînement simultané de modèles yolo-world sur des jeux de données de détection et d'ancrage. Pour plus de détails, consulte ultralytics.models.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Option 1: Use Python dictionary
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"]},
}
# 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,
)Citations et remerciements#
Nous remercions chaleureusement le Tencent AILab Computer Vision Center pour ses travaux pionniers sur la détection d'objets à vocabulaire ouvert en temps réel avec 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}
}Pour en savoir plus, l'article original sur YOLO-World est disponible sur arXiv. Le code source du projet et des ressources supplémentaires sont accessibles via leur dépôt GitHub. Nous saluons leur engagement à faire progresser le domaine et à partager leurs précieuses connaissances avec la communauté.
FAQ#
Le modèle YOLO-World est une approche avancée de détection d'objets en temps réel basée sur le framework Ultralytics YOLOv8. Il excelle dans les tâches de détection à vocabulaire ouvert en identifiant les objets d'une image à partir de textes descriptifs. Grâce à la modélisation vision-langage et au pré-entraînement sur de vastes jeux de données, YOLO-World atteint une efficacité et des performances élevées avec des besoins en calcul considérablement réduits, ce qui le rend idéal pour les applications en temps réel dans divers secteurs.
YOLO-World offre plusieurs avantages par rapport aux modèles traditionnels de détection à vocabulaire ouvert :
- Performances en temps réel : Il exploite la vitesse de calcul des CNN pour offrir une détection rapide et efficace.
- Efficacité et faibles besoins en ressources : YOLO-World maintient des performances élevées tout en réduisant considérablement les besoins en calcul et en ressources.
- Prompts personnalisables : Le modèle prend en charge la définition dynamique de prompts, ce qui permet de spécifier des classes de détection personnalisées sans réentraînement.
- Excellence sur les benchmarks : Il surpasse d'autres détecteurs à vocabulaire ouvert comme MDETR et GLIP en termes de vitesse et d'efficacité sur des benchmarks standard.
L'entraînement d'un modèle YOLO-World sur ton jeu de données est simple grâce à l'API Python ou aux commandes CLI fournies. Voici comment commencer l'entraînement avec 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)Ou avec la CLI :
yolo train model=yolov8s-worldv2.pt data=coco8.yaml epochs=100 imgsz=640Ultralytics propose plusieurs modèles YOLO-World préentraînés prenant en charge diverses tâches et différents modes de fonctionnement :
Type de modèle Poids préentraînés Tâches prises en charge Entraînement Validation Inférence Exportation YOLOv8s-world yolov8s-world.pt Détection d’objets ✅ ✅ ✅ ❌ YOLOv8s-worldv2 yolov8s-worldv2.pt Détection d’objets ✅ ✅ ✅ ✅ YOLOv8m-world yolov8m-world.pt Détection d’objets ✅ ✅ ✅ ❌ YOLOv8m-worldv2 yolov8m-worldv2.pt Détection d’objets ✅ ✅ ✅ ✅ YOLOv8l-world yolov8l-world.pt Détection d’objets ✅ ✅ ✅ ❌ YOLOv8l-worldv2 yolov8l-worldv2.pt Détection d’objets ✅ ✅ ✅ ✅ YOLOv8x-world yolov8x-world.pt Détection d’objets ✅ ✅ ✅ ❌ YOLOv8x-worldv2 yolov8x-worldv2.pt Détection d’objets ✅ ✅ ✅ ✅ Pour reproduire les résultats officiels à partir de zéro, tu dois préparer les jeux de données et lancer l'entraînement à l'aide du code fourni. La procédure d'entraînement consiste à créer un dictionnaire de données et à exécuter la méthode
trainavec un entraîneur personnalisé :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)
YOLO-World prend en charge une stratégie « prompt-then-detect » qui utilise un vocabulaire hors ligne pour améliorer l'efficacité. Les prompts personnalisés, tels que des légendes ou des catégories d'objets spécifiques, sont pré-encodés et stockés sous forme d'embeddings de vocabulaire hors ligne. Cette approche rationalise le processus de détection sans nécessiter de réentraînement. Tu peux définir dynamiquement ces prompts dans le modèle pour l'adapter à des tâches de détection spécifiques, comme indiqué ci-dessous :