Meet YOLO26: next-gen vision AI.

Link to this sectionModè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 (Open-Vocabulary Detection). Cette innovation permet la détection de tout objet dans une image à partir de textes descriptifs. En réduisant considérablement les demandes de calcul tout en préservant des performances compétitives, YOLO-World devient un outil polyvalent pour de nombreuses applications basées sur la vision.



Watch: YOLO World training workflow on custom dataset

Vue d'ensemble de l'architecture du modèle YOLO-World

Link to this sectionPrésentation#

YOLO-World relève les défis rencontrés par les modèles de détection traditionnels à vocabulaire ouvert, qui reposent souvent sur des modèles Transformer lourds nécessitant des ressources de calcul importantes. 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 avec des capacités de détection à vocabulaire ouvert, en employant la modélisation langage-vision et un pré-entraînement sur des jeux de données étendus pour exceller dans l'identification d'une large gamme d'objets dans des scénarios zéro-shot avec une efficacité inégalée.

Link to this sectionFonctionnalités clés#

  1. Solution en temps réel : En exploitant la vitesse de calcul des CNN, YOLO-World offre une solution de détection rapide à vocabulaire ouvert, répondant aux besoins des industries en quête de résultats immédiats.

  2. Efficacité et performance : YOLO-World réduit les besoins en calcul et en ressources sans sacrifier les performances, offrant une alternative robuste à des modèles comme SAM, mais à une fraction du coût de calcul, permettant des applications en temps réel.

  3. Inférence avec vocabulaire hors ligne : YOLO-World introduit une stratégie de "détection par prompt" (prompt-then-detect), utilisant un vocabulaire hors ligne pour accroître encore l'efficacité. Cette approche permet d'utiliser des prompts personnalisés calculés a priori, incluant des légendes ou des catégories, pour être encodés et stockés en tant qu'embeddings de vocabulaire hors ligne, simplifiant ainsi le processus de détection.

  4. Propulsé par YOLOv8 : Construit sur Ultralytics YOLOv8, YOLO-World tire parti des dernières avancées en détection d'objets en temps réel pour faciliter la détection à vocabulaire ouvert avec une précision et une vitesse inégalées.

  5. Excellence des benchmarks : YOLO-World surpasse les détecteurs à vocabulaire ouvert existants, y compris les séries MDETR et GLIP, en termes de vitesse et d'efficacité sur les benchmarks standards, démontrant la capacité supérieure de YOLOv8 sur un seul GPU NVIDIA V100.

  6. Applications polyvalentes : L'approche innovante de YOLO-World ouvre de nouvelles possibilités pour une multitude de tâches de vision, offrant des améliorations de vitesse de plusieurs ordres de grandeur par rapport aux méthodes existantes.

Link to this sectionModè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 divers modes de fonctionnement tels que l'Inférence, la Validation, l'Entraînement et l'Exportation, signalés par ✅ pour les modes pris en charge et ❌ pour les modes non pris en charge.

Remarque

Tous les poids YOLOv8-World ont été directement migrés depuis le dépôt officiel YOLO-World, soulignant leurs excellentes contributions.

Type de modèlePoids pré-entraînésTâches prises en chargeInférenceValidationEntraînementExporter (Export)
YOLOv8s-worldyolov8s-world.ptDétection d'objets
YOLOv8s-worldv2yolov8s-worldv2.ptDétection d'objets
YOLOv8m-worldyolov8m-world.ptDétection d'objets
YOLOv8m-worldv2yolov8m-worldv2.ptDétection d'objets
YOLOv8l-worldyolov8l-world.ptDétection d'objets
YOLOv8l-worldv2yolov8l-worldv2.ptDétection d'objets
YOLOv8x-worldyolov8x-world.ptDétection d'objets
YOLOv8x-worldv2yolov8x-worldv2.ptDétection d'objets

Link to this sectionTransfert Zero-shot sur le jeu de données COCO#

Performance
Type de modèlemAPmAP50mAP75
yolov8s-world37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-world42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-world45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-world47.063.051.2
yolov8x-worldv247.162.851.4

Link to this sectionExemples d'utilisation#

Les modèles YOLO-World sont faciles à intégrer dans tes applications Python. Ultralytics fournit une API Python conviviale et des commandes CLI pour rationaliser le développement.



Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀

Link to this sectionUtilisation pour l'entraînement#

Astuce

Nous recommandons vivement d'utiliser le modèle yolov8-worldv2 pour l'entraînement personnalisé, car il prend en charge l'entraînement déterministe et permet également d'exporter facilement vers d'autres formats comme onnx/tensorrt.

La détection d'objets est simple avec la méthode train, comme illustré ci-dessous :

Exemple

Les modèles pré-entraînés PyTorch *.pt 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")

Link to this sectionUtilisation pour la prédiction#

La détection d'objets est simple avec la méthode predict, comme illustré ci-dessous :

Exemple
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()

Ce snippet démontre la simplicité de charger un modèle pré-entraîné et d'exécuter une prédiction sur une image.

Link to this sectionUtilisation pour la validation#

La validation du modèle sur un jeu de données est simplifiée comme suit :

Exemple
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")

Link to this sectionUtilisation pour le suivi#

Le suivi d'objets avec le modèle YOLO-World sur une vidéo ou des images est simplifié comme suit :

Exemple
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")
Remarque

Les modèles YOLO-World fournis par Ultralytics sont pré-configurés avec les catégories du jeu de données COCO dans le cadre de leur vocabulaire hors ligne, améliorant l'efficacité pour une application 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 nécessiter de configuration ou de personnalisation supplémentaire.

Link to this sectionDéfinir des prompts#

Vue d'ensemble des noms de classes de prompt YOLO-World

Le framework YOLO-World permet la spécification dynamique des classes via des prompts personnalisés, donnant aux utilisateurs les moyens d'adapter le modèle à leurs 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 partie initialement des données d'entraînement. En définissant des prompts personnalisés, tu peux essentiellement guider l'attention du modèle vers les objets d'intérêt, améliorant la pertinence et la précision des résultats de détection.

Par exemple, si ton application nécessite uniquement de détecter les objets 'person' (personne) et 'bus', tu peux spécifier ces classes directement :

Exemple
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()
Classe d'arrière-plan

Certains utilisateurs ont découvert que l'ajout d'une chaîne vide "" en tant que 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 le 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. Ce faisant, tu crées une version du modèle YOLO-World spécialisée pour ton cas d'utilisation spécifique. Ce processus intègre tes définitions de classes personnalisées directement dans le fichier du modèle, le rendant prêt à l'emploi avec tes classes spécifiées sans ajustements supplémentaires. Suis ces étapes pour enregistrer et charger ton modèle YOLO-World personnalisé :

Exemple

Charge d'abord un modèle YOLO-World, définis les classes personnalisées pour celui-ci et 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 l'enregistrement, le modèle custom_yolov8s.pt se comporte comme n'importe quel autre modèle YOLOv8 pré-entraîné, mais avec une différence clé : 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 de détection et l'efficacité pour tes scénarios d'application spécifiques.

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()

Link to this sectionAvantages de l'enregistrement avec un vocabulaire personnalisé#

  • Efficacité : Rationalise le processus de détection en se concentrant sur les objets pertinents, réduisant la surcharge de calcul et accélérant l'inférence.
  • Flexibilité : Permet une adaptation facile du modèle à de nouvelles tâches de détection ou de niche sans avoir besoin d'un réentraînement approfondi ou d'une collecte de données.
  • Simplicité : Simplifie le déploiement en éliminant le besoin de spécifier à plusieurs reprises des classes personnalisées lors de l'exécution, rendant le modèle directement utilisable avec son vocabulaire intégré.
  • Performance : Améliore la précision de la détection pour les classes spécifiées en concentrant l'attention et les ressources du modèle sur la reconnaissance des objets définis.

Cette approche fournit un moyen puissant de personnaliser des modèles de détection d'objets à la pointe de la technologie pour des tâches spécifiques, rendant l'IA avancée plus accessible et applicable à une gamme plus large d'applications pratiques.

Link to this sectionReproduire les résultats officiels à partir de zéro (Expérimental)#

Link to this sectionPréparer les jeux de données#

  • Données d'entraînement
Jeu de donnéesTypeÉchantillonsBoîtesFichiers d'annotation
Objects365v1Détection609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Données de validation
Jeu de donnéesTypeFichiers d'annotation
LVIS minivalDétectionminival.txt

Link to this sectionLancer l'entraînement à partir de zéro#

Remarque

WorldTrainerFromScratch est hautement personnalisé pour permettre l'entraînement des modèles yolo-world sur des jeux de données de détection et de grounding simultanément. Pour plus de détails, consulte ultralytics.model.yolo.world.train_world.py.

Exemple
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch

# Option 1: Use Python dictionary
data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="flickr30k/images",
                json_file="flickr30k/final_flickr_separateGT_train.json",
            ),
            dict(
                img_path="GQA/images",
                json_file="GQA/final_mixed_train_no_coco.json",
            ),
        ],
    ),
    val=dict(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,
)

Link to this sectionCitations et remerciements#

Nous exprimons notre gratitude au Tencent AILab Computer Vision Center pour leurs travaux pionniers dans la détection d'objets en vocabulaire ouvert en temps réel avec YOLO-World :

Citation
@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 aller plus loin, l'article original sur YOLO-World est disponible sur arXiv. Le code source du projet et des ressources supplémentaires sont accessibles via leur répertoire GitHub. Nous apprécions leur engagement à faire progresser le domaine et à partager leurs précieuses connaissances avec la communauté.

Link to this sectionFAQ#

Link to this sectionQu'est-ce que le modèle YOLO-World et comment fonctionne-t-il ?#

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 en vocabulaire ouvert en identifiant des objets au sein d'une image à partir de textes descriptifs. En utilisant la modélisation vision-langage et le pré-entraînement sur de grands jeux de données, YOLO-World atteint une grande 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 diverses industries.

Link to this sectionComment YOLO-World gère-t-il l'inférence avec des invites personnalisées ?#

YOLO-World prend en charge une stratégie de « prompt-then-detect » (inviter puis détecter), qui utilise un vocabulaire hors ligne pour améliorer l'efficacité. Les invites personnalisées, comme des légendes ou des catégories d'objets spécifiques, sont pré-encodées et stockées en tant qu'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 invites dans le modèle pour l'adapter à des tâches de détection spécifiques, comme illustré ci-dessous :

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()

Link to this sectionPourquoi choisir YOLO-World plutôt que les modèles traditionnels de détection à vocabulaire ouvert ?#

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 faible exigence en ressources : YOLO-World maintient des performances élevées tout en réduisant considérablement les besoins en calcul et en ressources.
  • Invites personnalisables : Le modèle prend en charge la définition d'invites dynamiques, permettant aux utilisateurs de spécifier des classes de détection personnalisées sans réentraînement.
  • Excellence des benchmarks : Il surpasse les autres détecteurs à vocabulaire ouvert comme MDETR et GLIP en termes de vitesse et d'efficacité sur les benchmarks standards.

Link to this sectionComment entraîner un modèle YOLO-World sur mon propre jeu de données ?#

L'entraînement d'un modèle YOLO-World sur ton jeu de données est simple grâce à l'API Python fournie ou aux commandes CLI. Voici comment commencer l'entraînement en utilisant 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 en utilisant la CLI :

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

Link to this sectionQuels sont les modèles YOLO-World pré-entraînés disponibles et quelles tâches prennent-ils en charge ?#

Ultralytics propose plusieurs modèles YOLO-World pré-entraînés prenant en charge diverses tâches et modes de fonctionnement :

Type de modèlePoids pré-entraînésTâches prises en chargeInférenceValidationEntraînementExporter (Export)
YOLOv8s-worldyolov8s-world.ptDétection d'objets
YOLOv8s-worldv2yolov8s-worldv2.ptDétection d'objets
YOLOv8m-worldyolov8m-world.ptDétection d'objets
YOLOv8m-worldv2yolov8m-worldv2.ptDétection d'objets
YOLOv8l-worldyolov8l-world.ptDétection d'objets
YOLOv8l-worldv2yolov8l-worldv2.ptDétection d'objets
YOLOv8x-worldyolov8x-world.ptDétection d'objets
YOLOv8x-worldv2yolov8x-worldv2.ptDétection d'objets

Link to this sectionComment puis-je reproduire les résultats officiels de YOLO-World à partir de zéro ?#

Pour reproduire les résultats officiels à partir de zéro, tu dois préparer les jeux de données et lancer l'entraînement en utilisant le code fourni. La procédure d'entraînement implique la création d'un dictionnaire de données et l'exécution de la méthode train avec 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)

Commentaires