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 :
- 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".
- Une ligne par objet : chaque ligne du fichier texte correspond à une instance d’objet dans l’image.
- 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- 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 unValueErrorlors 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 🚀 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.zipLes 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.
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: personnames 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#
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 :
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 :
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| Argument | Type | Valeur par défaut | Description |
|---|---|---|---|
data | str | requis | Chemin vers le répertoire contenant les images cibles à annoter ou à segmenter. |
det_model | str | 'yolo26x.pt' | Chemin du modèle de détection YOLO pour la détection initiale des objets. |
sam_model | str | 'sam_b.pt' | Chemin du modèle SAM pour la segmentation (prend en charge les poids SAM, SAM 2, MobileSAM et SAM 3). |
device | str | '' | Périphérique de calcul (par ex. « cuda:0 », « cpu » ou « » pour la détection automatique du périphérique). |
conf | float | 0.25 | Seuil de confiance de la détection YOLO pour filtrer les détections peu fiables. |
iou | float | 0.45 | Seuil IoU pour la suppression non maximale afin de filtrer les boîtes qui se chevauchent. |
imgsz | int | 640 | Taille d'entrée pour redimensionner les images (doit être un multiple de 32). |
max_det | int | 300 | Nombre maximal de détections par image pour optimiser l'utilisation de la mémoire. |
classes | list[int] | None | Liste des indices de classes à détecter (par ex. [0, 1] pour personne et vélo). |
output_dir | str | None | Ré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.
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.zipVeille à 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_annotatecomme 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.
La conversion des annotations au format COCO vers le format YOLO est simple avec les outils Ultralytics. Tu peux utiliser la fonction
convert_cocodu moduleultralytics.data.converter: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.