Ultralytics YOLO27 :

Présentation des jeux de données de segmentation d’instances#

La segmentation d’instances est une tâche de vision par ordinateur qui consiste à identifier et délimiter les objets individuels présents dans une image. Ce guide présente les formats de jeux de données pris en charge par Ultralytics YOLO pour les tâches de segmentation d’instances, ainsi que les instructions pour préparer, convertir et utiliser ces jeux de données afin d’entraîner tes modèles.

Formats de jeux de données pris en charge#

Format Ultralytics YOLO#

Le format des annotations du jeu de données utilisé pour entraîner les modèles de segmentation YOLO est le suivant :

  1. Un fichier texte par image : chaque image du jeu de données possède un fichier texte correspondant portant le même nom que le fichier image et l’extension ".txt".
  2. Une ligne par objet : chaque ligne du fichier texte correspond à une instance d’objet dans l’image.
  3. Informations sur l’objet par ligne : chaque ligne contient les informations suivantes sur l’instance d’objet :
    • Indice de classe de l’objet : un entier représentant la classe de l’objet (par exemple, 0 pour une personne, 1 pour une voiture, etc.).
    • Coordonnées du polygone de l'objet : les (x, y) points qui délimitent le masque de l'objet, normalisés entre 0 et 1.

Le format d’une ligne unique dans le fichier du jeu de données de segmentation est le suivant :

<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>

Dans ce format, <class-index> est l’indice de la classe de l’objet, et <x1> <y1> <x2> <y2> ... <xn> <yn> correspond aux coordonnées normalisées du polygone du masque de segmentation de l’objet (les valeurs sont exprimées dans [0, 1] par rapport à la largeur et à la hauteur de l’image). Les coordonnées sont séparées par des espaces.

Voici un exemple du format de jeu de données YOLO pour une image unique contenant deux objets composés respectivement d’un segment à 3 points et d’un segment à 5 points.

0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104
Conseil
  • La longueur de chaque ligne ne doit pas nécessairement être identique.
  • Chaque annotation de segmentation doit contenir au moins 3 points (x, y) : <class-index> <x1> <y1> <x2> <y2> <x3> <y3>
  • Chaque objet a besoin d'un polygone. Les lignes au format detect (<class-index> <x_center> <y_center> <width> <height>) n'en contiennent aucun, et un jeu de données de segmentation dont les nombres de boîtes et de polygones diffèrent est rejeté avec un ValueError lors du chargement de ses étiquettes.

Format YAML du jeu de données#

Le framework Ultralytics utilise un format de fichier YAML pour définir la configuration du jeu de données et du modèle afin d’entraîner les modèles de segmentation. Voici un exemple de format YAML utilisé pour définir un jeu de données de segmentation :

ultralytics/cfg/datasets/coco8-seg.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco8-seg ← downloads here (1 MB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)

# Classes
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  4: airplane
  5: bus
  6: train
  7: truck
  8: boat
  9: traffic light
  10: fire hydrant
  11: stop sign
  12: parking meter
  13: bench
  14: bird
  15: cat
  16: dog
  17: horse
  18: sheep
  19: cow
  20: elephant
  21: bear
  22: zebra
  23: giraffe
  24: backpack
  25: umbrella
  26: handbag
  27: tie
  28: suitcase
  29: frisbee
  30: skis
  31: snowboard
  32: sports ball
  33: kite
  34: baseball bat
  35: baseball glove
  36: skateboard
  37: surfboard
  38: tennis racket
  39: bottle
  40: wine glass
  41: cup
  42: fork
  43: knife
  44: spoon
  45: bowl
  46: banana
  47: apple
  48: sandwich
  49: orange
  50: broccoli
  51: carrot
  52: hot dog
  53: pizza
  54: donut
  55: cake
  56: chair
  57: couch
  58: potted plant
  59: bed
  60: dining table
  61: toilet
  62: tv
  63: laptop
  64: mouse
  65: remote
  66: keyboard
  67: cell phone
  68: microwave
  69: oven
  70: toaster
  71: sink
  72: refrigerator
  73: book
  74: clock
  75: vase
  76: scissors
  77: teddy bear
  78: hair drier
  79: toothbrush

# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip

Les champs train, val et test indiquent les images d’entraînement, de validation et de test. Chacun accepte un répertoire, une liste de répertoires ou un fichier *.txt répertoriant un chemin d’image par ligne (les chemins commençant par ./ sont résolus par rapport au fichier *.txt). Un fichier *.txt est utile pour entraîner un modèle sur un sous-ensemble d’un répertoire, ignorer les images non annotées ou combiner des images provenant de plusieurs sources dans une même division.

Chemins d’images dans un fichier `*.txt`
path: datasets/coco8-seg # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
  0: person

names est un dictionnaire de noms de classes. L’ordre des noms doit correspondre à l’ordre des indices de classe des objets dans les fichiers du jeu de données YOLO.

Utilisation#

Exemple
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)

Jeux de données pris en charge#

Ultralytics YOLO prend en charge divers jeux de données pour les tâches de segmentation d'instances. Voici une liste des plus couramment utilisés. La plupart de ces jeux de données sont également hébergés sur Ultralytics Platform, où tu peux parcourir les images et les annotations, consulter les statistiques des jeux de données et les cloner pour l'entraînement dans le cloud.

  • Carparts-seg : un jeu de données spécialisé dans la segmentation de pièces automobiles, idéal pour les applications automobiles. Il comprend différents véhicules avec des annotations détaillées des composants individuels.
  • COCO : un jeu de données complet pour la détection d’objets, la segmentation et le légendage d’images, comprenant plus de 200K images annotées couvrant un large éventail de catégories.
  • COCO8-seg : un sous-ensemble compact de COCO composé de 8 images, conçu pour tester rapidement l’entraînement de modèles de segmentation, idéal pour les vérifications CI et la validation des workflows dans le dépôt ultralytics.
  • COCO128-seg : un jeu de données plus petit pour les tâches de segmentation d’instances, contenant un sous-ensemble de 128 images COCO avec des annotations de segmentation.
  • Crack-seg : un jeu de données adapté à la segmentation de fissures sur différentes surfaces. Essentiel pour la maintenance des infrastructures et le contrôle qualité, il fournit des images détaillées pour entraîner des modèles à identifier les faiblesses structurelles.
  • Package-seg : un jeu de données consacré à la segmentation de différents types et formes de matériaux d’emballage. Il est particulièrement utile pour la logistique et l’automatisation des entrepôts, en contribuant au développement de systèmes de manutention et de tri des colis.

Ajouter ton propre jeu de données#

Si tu possèdes ton propre jeu de données et souhaites l’utiliser pour entraîner des modèles de segmentation au format Ultralytics YOLO, assure-toi qu’il respecte le format spécifié ci-dessus dans la section « Format Ultralytics YOLO ». Convertis tes annotations au format requis et indique les chemins, le nombre de classes et les noms de classes dans le fichier de configuration YAML. Garde images/ et labels/ dans des dossiers distincts au même niveau, avec une structure de sous-dossiers correspondante ; placer les fichiers .txt d’annotations dans le dossier des images peut empêcher le modèle de détecter certaines annotations.

Porter ou convertir des formats d’annotations#

Du format de jeu de données COCO au format YOLO#

Tu peux facilement convertir les annotations du format de jeu de données COCO couramment utilisé au format YOLO à l’aide de l’extrait de code suivant :

Exemple
from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

Cet outil de conversion peut servir à convertir le jeu de données COCO ou tout jeu de données au format COCO au format Ultralytics YOLO.

Pense à vérifier que le jeu de données que tu souhaites utiliser est compatible avec ton modèle et respecte les conventions de format nécessaires. Des jeux de données correctement formatés sont essentiels pour entraîner des modèles de segmentation performants.

Annotation automatique#

L’annotation automatique est une fonctionnalité essentielle qui te permet de générer un jeu de données de segmentation à l’aide d’un modèle de détection préentraîné. Elle te permet d’annoter rapidement et précisément un grand nombre d’images sans étiquetage manuel, ce qui te fait gagner du temps et des efforts.

Générer un jeu de données de segmentation à l’aide d’un modèle de détection#

Pour annoter automatiquement ton jeu de données à l’aide du framework Ultralytics, tu peux utiliser la fonction auto_annotate comme indiqué ci-dessous :

Exemple
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
ArgumentTypeValeur par défautDescription
datastrrequisChemin vers le répertoire contenant les images cibles à annoter ou à segmenter.
det_modelstr'yolo26x.pt'Chemin du modèle de détection YOLO pour la détection initiale des objets.
sam_modelstr'sam_b.pt'Chemin du modèle SAM pour la segmentation (prend en charge les poids SAM, SAM 2, MobileSAM et SAM 3).
devicestr''Périphérique de calcul (par ex. « cuda:0 », « cpu » ou « » pour la détection automatique du périphérique).
conffloat0.25Seuil de confiance de la détection YOLO pour filtrer les détections peu fiables.
ioufloat0.45Seuil IoU pour la suppression non maximale afin de filtrer les boîtes qui se chevauchent.
imgszint640Taille d'entrée pour redimensionner les images (doit être un multiple de 32).
max_detint300Nombre maximal de détections par image pour optimiser l'utilisation de la mémoire.
classeslist[int]NoneListe des indices de classes à détecter (par ex. [0, 1] pour personne et vélo).
output_dirstrNoneRépertoire d'enregistrement des annotations (par défaut : répertoire parent de <data>_auto_annotate_labels).

La fonction auto_annotate prend le chemin vers tes images, ainsi que des arguments facultatifs permettant de spécifier les modèles de détection préentraînés, par exemple YOLO26, YOLO11 ou d’autres modèles, les modèles de segmentation, par exemple SAM, SAM 2, MobileSAM ou SAM 3, le périphérique sur lequel exécuter les modèles et le répertoire de sortie où enregistrer les résultats annotés.

En tirant parti de la puissance des modèles préentraînés, l’annotation automatique peut réduire considérablement le temps et les efforts nécessaires à la création de jeux de données de segmentation de haute qualité. Cette fonctionnalité est particulièrement utile aux chercheurs et aux développeurs travaillant avec de grandes collections d’images, car elle leur permet de se concentrer sur le développement et l’évaluation des modèles plutôt que sur l’annotation manuelle.

Visualiser les annotations du jeu de données#

Avant d’entraîner ton modèle, il est souvent utile de visualiser les annotations de ton jeu de données pour vérifier qu’elles sont correctes. Ultralytics fournit une fonction utilitaire à cet effet :

from ultralytics.data.utils import visualize_image_annotations

label_map = {  # Define the label map with all annotated class labels.
    0: "person",
    1: "car",
}

# Visualize
visualize_image_annotations(
    "path/to/image.jpg",  # Input image path.
    "path/to/annotations.txt",  # Annotation file path for the image.
    label_map,
)

Cette fonction dessine les boîtes englobantes, attribue aux objets leurs noms de classe et ajuste la couleur du texte pour améliorer la lisibilité, ce qui t’aide à identifier et corriger les erreurs d’annotation avant l’entraînement.

Convertir les masques de segmentation au format YOLO#

Si tu possèdes des masques de segmentation au format binaire, tu peux les convertir au format de segmentation YOLO à l’aide de :

from ultralytics.data.converter import convert_segment_masks_to_yolo_seg

# For datasets like COCO with 80 classes
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)

Cet utilitaire convertit les images de masques binaires au format de segmentation YOLO et les enregistre dans le répertoire de sortie indiqué.

FAQ#

  • Ultralytics YOLO prend en charge plusieurs formats de jeux de données pour la segmentation d’instances, le format principal étant son propre format Ultralytics YOLO. Chaque image de ton jeu de données doit disposer d’un fichier texte correspondant contenant les informations sur les objets segmentés sur plusieurs lignes (une ligne par objet), avec l’indice de classe et les coordonnées englobantes normalisées. Pour obtenir des instructions plus détaillées sur le format de jeu de données YOLO, consulte la Présentation des jeux de données de segmentation d’instances.

  • La conversion des annotations au format COCO vers le format YOLO est simple avec les outils Ultralytics. Tu peux utiliser la fonction convert_coco du module ultralytics.data.converter :

    from ultralytics.data.converter import convert_coco
    
    convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

    Ce script convertit les annotations de ton jeu de données COCO au format YOLO requis, afin de les rendre compatibles avec l’entraînement de tes modèles YOLO. Pour plus de détails, consulte Convertir ou adapter les formats d’annotations.

  • Pour préparer un fichier YAML destiné à l’entraînement de modèles YOLO avec Ultralytics, tu dois définir les chemins du jeu de données et les noms de classes. Voici un exemple de configuration YAML :

    # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
    
    # COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
    # Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
    # Example usage: yolo train data=coco8-seg.yaml
    # parent
    # ├── ultralytics
    # └── datasets
    #     └── coco8-seg ← downloads here (1 MB)
    
    # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
    path: coco8-seg # dataset root dir
    train: images/train # train images (relative to 'path') 4 images
    val: images/val # val images (relative to 'path') 4 images
    test: # test images (optional)
    
    # Classes
    names:
      0: person
      1: bicycle
      2: car
      3: motorcycle
      4: airplane
      5: bus
      6: train
      7: truck
      8: boat
      9: traffic light
      10: fire hydrant
      11: stop sign
      12: parking meter
      13: bench
      14: bird
      15: cat
      16: dog
      17: horse
      18: sheep
      19: cow
      20: elephant
      21: bear
      22: zebra
      23: giraffe
      24: backpack
      25: umbrella
      26: handbag
      27: tie
      28: suitcase
      29: frisbee
      30: skis
      31: snowboard
      32: sports ball
      33: kite
      34: baseball bat
      35: baseball glove
      36: skateboard
      37: surfboard
      38: tennis racket
      39: bottle
      40: wine glass
      41: cup
      42: fork
      43: knife
      44: spoon
      45: bowl
      46: banana
      47: apple
      48: sandwich
      49: orange
      50: broccoli
      51: carrot
      52: hot dog
      53: pizza
      54: donut
      55: cake
      56: chair
      57: couch
      58: potted plant
      59: bed
      60: dining table
      61: toilet
      62: tv
      63: laptop
      64: mouse
      65: remote
      66: keyboard
      67: cell phone
      68: microwave
      69: oven
      70: toaster
      71: sink
      72: refrigerator
      73: book
      74: clock
      75: vase
      76: scissors
      77: teddy bear
      78: hair drier
      79: toothbrush
    
    # Download script/URL (optional)
    download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip

    Veille à mettre à jour les chemins et les noms de classes en fonction de ton jeu de données. Pour plus d’informations, consulte la section Format YAML du jeu de données.

  • L’annotation automatique dans Ultralytics YOLO te permet de générer des annotations de segmentation pour ton jeu de données à l’aide d’un modèle de détection préentraîné. Elle réduit considérablement le besoin d’étiquetage manuel. Tu peux utiliser la fonction auto_annotate comme suit :

    from ultralytics.data.annotator import auto_annotate
    
    auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")  # or sam_model="mobile_sam.pt"

    Cette fonction automatise le processus d’annotation, le rendant plus rapide et plus efficace. Pour plus de détails, consulte la référence sur l’annotation automatique.

Commentaires