Skip to content

Vue d'ensemble des ensembles de données de segmentation des instances

La segmentation d'instances est une tâche de vision par ordinateur qui implique l'identification et la délimitation d'objets individuels dans une image. Ce guide fournit une vue d'ensemble des formats de jeux de données pris en charge par Ultralytics YOLO pour les tâches de segmentation d'instances, ainsi que des instructions sur la façon de préparer, de convertir et d'utiliser ces jeux de données pour l'entraînement de vos modèles.

Formats de données pris en charge

Ultralytics YOLO format

Le format des étiquettes de l'ensemble de données utilisé pour l'entraînement des modèles de segmentation de YOLO est le suivant :

  1. Un fichier texte par image : Chaque image de l'ensemble de données a 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 nombre entier représentant la classe de l'objet (par exemple, 0 pour une personne, 1 pour une voiture, etc.)
    • Coordonnées de délimitation de l'objet : Les coordonnées de délimitation autour de la zone du masque, normalisées pour être comprises entre 0 et 1.

Le format d'une seule ligne du fichier 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> sont les coordonnées du masque de segmentation de l'objet. Les coordonnées sont séparées par des espaces.

Voici un exemple du format du jeu de données YOLO pour une seule image avec deux objets composés 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 égale.
  • Chaque étiquette de segmentation doit avoir un minimum de 3 points xy: <class-index> <x1> <y1> <x2> <y2> <x3> <y3>

Format YAML du jeu de données

Le cadre Ultralytics utilise un format de fichier YAML pour définir l'ensemble de données et la configuration du modèle pour la formation des modèles de détection. Voici un exemple du format YAML utilisé pour définir un ensemble de données de détection :

# 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: ../datasets/coco8-seg # dataset root dir (absolute or relative; if relative, it's relative to default datasets_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 (80 COCO classes)
names:
    0: person
    1: bicycle
    2: car
    # ...
    77: teddy bear
    78: hair drier
    79: toothbrush

Le train et val précisent les chemins d'accès aux répertoires contenant les images d'apprentissage et de validation, respectivement.

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

Utilisation

Exemple

from ultralytics import YOLO

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

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.pt epochs=100 imgsz=640

Ensembles de données pris en charge

Ultralytics YOLO prend en charge différents ensembles de données pour les tâches de segmentation d'instance. Voici une liste des données les plus couramment utilisées :

  • COCO: un ensemble de données complet pour la détection, la segmentation et le sous-titrage d'objets, comprenant plus de 200 000 images étiquetées dans un large éventail de catégories.
  • COCO8-seg: Un sous-ensemble compact de 8 images de COCO conçu pour tester rapidement l'apprentissage du modèle de segmentation, idéal pour les vérifications CI et la validation du flux de travail dans l'environnement de travail. ultralytics dépôt.
  • COCO128-seg: un ensemble 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.
  • Carparts-seg: ensemble de données spécialisé dans la segmentation des pièces de voiture, idéal pour les applications automobiles. Il comprend une variété de véhicules avec des annotations détaillées des composants individuels de la voiture.
  • Crack-seg: ensemble de données conçu pour la segmentation des fissures dans diverses surfaces. Essentiel pour la maintenance des infrastructures et le contrôle de la qualité, il fournit des images détaillées pour l'entraînement des modèles afin d'identifier les faiblesses structurelles.
  • Package-seg: ensemble de données dédié à la segmentation de différents types de matériaux et de formes d'emballage. Il est particulièrement utile pour la logistique et l'automatisation des entrepôts, car il facilite le développement de systèmes de manutention et de tri des emballages.

Ajouter votre propre jeu de données

Si vous disposez de votre propre ensemble de données et que vous souhaitez l'utiliser pour entraîner des modèles de segmentation avec le format Ultralytics YOLO , assurez-vous qu'il respecte le format spécifié ci-dessus sous "Ultralytics YOLO format". Convertissez vos annotations au format requis et spécifiez les chemins, le nombre de classes et les noms des classes dans le fichier de configuration YAML.

Portage ou conversion des formats d'étiquettes

Format des ensembles de données COCO vers le format YOLO

Vous pouvez facilement convertir les étiquettes du format de données COCO au format YOLO en utilisant 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 être utilisé pour convertir le jeu de données COCO ou tout autre jeu de données au format COCO au format Ultralytics YOLO .

N'oubliez pas de vérifier que l'ensemble de données que vous souhaitez utiliser est compatible avec votre modèle et respecte les conventions de format nécessaires. Des ensembles de données correctement formatés sont essentiels pour former des modèles de détection d'objets performants.

Auto-Annotation

L'auto-annotation est une fonction essentielle qui vous permet de générer un ensemble de données de segmentation à l'aide d'un modèle de détection pré-entraîné. Elle vous permet d'annoter rapidement et avec précision un grand nombre d'images sans avoir à les étiqueter manuellement, ce qui représente un gain de temps et d'efforts.

Générer un ensemble de données de segmentation à l'aide d'un modèle de détection

Pour auto-annoter votre jeu de données à l'aide du cadre Ultralytics , vous pouvez 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="yolo11x.pt", sam_model="sam_b.pt")
Argument Type Défaut Description
data str requis Chemin d'accès au répertoire contenant les images cibles pour l'annotation ou la segmentation.
det_model str 'yolo11x.pt' YOLO chemin du modèle de détection pour la détection initiale de l'objet.
sam_model str 'sam_b.pt' Chemin d'accès au modèle SAM pour la segmentation (supporte les modèles SAM, SAM2 et mobile_sam).
device str '' Dispositif de calcul (par exemple, "cuda:0 ", "cpu" ou " " pour la détection automatique du dispositif).
conf float 0.25 YOLO seuil de confiance de détection pour filtrer les détections faibles.
iou float 0.45 Seuil de référence pour la suppression non maximale afin de filtrer les cases qui se chevauchent.
imgsz int 640 Taille d'entrée pour le redimensionnement des images (doit être un multiple de 32).
max_det int 300 Nombre maximum de détections par image pour une meilleure efficacité de la mémoire.
classes list[int] None Liste des indices de classe à détecter (par ex, [0, 1] pour les personnes et les vélos).
output_dir str None Répertoire de sauvegarde des annotations (par défaut './labels' par rapport au chemin des données).

Le auto_annotate prend le chemin d'accès à vos images, ainsi que des arguments facultatifs pour spécifier les modèles de détection pré-entraînés, à savoir YOLO11, YOLOv8 ou autre modèles et les modèles de segmentation, c'est-à-dire SAM, SAM2 ou MobileSAMle dispositif sur lequel les modèles doivent être exécutés et le répertoire de sortie pour enregistrer les résultats annotés.

En tirant parti de la puissance des modèles pré-entraînés, l'auto-annotation peut réduire de manière significative le temps et les efforts nécessaires à la création d'ensembles de données de segmentation de haute qualité. Cette fonction est particulièrement utile pour les chercheurs et les développeurs qui travaillent 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 des ensembles de données

Avant d'entraîner votre modèle, il est souvent utile de visualiser les annotations de votre jeu de données pour s'assurer 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 des cadres de délimitation, étiquette les objets avec des noms de classe et ajuste la couleur du texte pour une meilleure lisibilité, ce qui vous aide à identifier et à corriger toute erreur d'annotation avant la formation.

Conversion des masques de segmentation au format YOLO

Si vous avez des masques de segmentation au format binaire, vous pouvez les convertir au format de segmentation YOLO en utilisant :

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 dans le format de segmentation YOLO et les enregistre dans le répertoire de sortie spécifié.

FAQ

Quels formats de données Ultralytics YOLO prend-il en charge pour la segmentation des instances ?

Ultralytics YOLO prend en charge plusieurs formats d'ensembles de données pour la segmentation d'instances, le format principal étant son propre format Ultralytics YOLO . Chaque image de votre ensemble de données doit être accompagnée d'un fichier texte contenant des informations sur l'objet segmenté en plusieurs lignes (une ligne par objet), répertoriant l'indice de classe et les coordonnées normalisées de délimitation. Pour obtenir des instructions plus détaillées sur le format de l'ensemble de données YOLO , consultez l'aperçu des ensembles de données de segmentation d'instance.

Comment puis-je convertir les annotations des jeux de données COCO au format YOLO ?

La conversion des annotations au format COCO au format YOLO est très simple à l'aide des outils Ultralytics . Vous pouvez utiliser l'outil convert_coco de la fonction ultralytics.data.converter module :

from ultralytics.data.converter import convert_coco

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

Ce script convertit les annotations de votre jeu de données COCO au format requis YOLO , afin qu'elles soient adaptées à l'entraînement de vos modèles YOLO . Pour plus de détails, reportez-vous à Portage ou conversion des formats d'étiquettes.

Comment préparer un fichier YAML pour l'entraînement des modèles Ultralytics YOLO ?

Pour préparer un fichier YAML pour l'entraînement des modèles YOLO avec Ultralytics, vous devez définir les chemins d'accès aux ensembles de données et les noms des classes. Voici un exemple de configuration YAML :

path: ../datasets/coco8-seg # dataset root dir
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')

names:
    0: person
    1: bicycle
    2: car
    # ...

Veillez à mettre à jour les chemins et les noms de classe en fonction de votre jeu de données. Pour plus d'informations, consultez la section Format YAML du jeu de données.

Qu'est-ce que la fonction d'auto-annotation dans Ultralytics YOLO ?

L'auto-annotation dans Ultralytics YOLO vous permet de générer des annotations de segmentation pour votre ensemble de données à l'aide d'un modèle de détection pré-entraîné. Cela réduit considérablement le besoin d'étiquetage manuel. Vous pouvez utiliser la fonction auto_annotate comme suit :

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.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, consultez la référence sur l'annotation automatique.

📅C réé il y a 1 an ✏️ Mis à jour il y a 8 jours

Commentaires