Retour à l'accueil

Augmentation Bbox dans Albumentations : formats et erreurs

L'article couvre la configuration des augmentations de boîtes englobantes dans Albumentations pour les tâches de détection. Décrit les formats de coordonnées, les paramètres BboxParams, la liaison des métadonnées et la gestion des erreurs de marquage. Exemples de code pour pipeline avec label_fields.

Augmentation Bbox : guide complet sur Albumentations
Advertisement 728x90

# Augmentation des boîtes englobantes avec Albumentations : Paramètres et gestion des erreurs

Dans les tâches de détection d'objets, les baisses de mAP proviennent souvent non pas de problèmes d'architecture du modèle, mais d'incohérences des boîtes englobantes après les augmentations. Les transformations spatiales exigent une mise à jour synchronisée des coordonnées des objets et de l'image elle-même. Albumentations gère cela de manière fluide grâce à A.BboxParams, qui supporte cinq formats de coordonnées : pascal_voc, albumentations, coco, yolo et cxcywh.

Un coord_format mal adapté peut décaler les boîtes silencieusement sans générer d'erreurs de code. Pour une image 640×480 avec une boîte de (98,345) à (420,462) dans divers formats :

  • pascal_voc : [98, 345, 420, 462]
  • albumentations : [0.153, 0.719, 0.656, 0.962]
  • coco : [98, 345, 322, 117]
  • yolo : [0.405, 0.841, 0.503, 0.244]
  • cxcywh : [259, 403.5, 322, 117]

Construction d'un pipeline de détection

import albumentations as A
import cv2
import numpy as np

train_transform = A.Compose([
    A.RandomCrop(width=450, height=450, p=1.0),
    A.HorizontalFlip(p=0.5),
    A.RandomBrightnessContrast(p=0.2),
], bbox_params=A.BboxParams(
    coord_format='coco',
    label_fields=['class_labels'],
), seed=137)

Les augmentations basées sur les pixels (luminosité, contraste) laissent les boîtes englobantes intactes. Les transformations géométriques (flip, crop, rotation) mettent à jour automatiquement les coordonnées. Voici comment l'appliquer :

Google AdInline article slot
image = cv2.imread("image.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

bboxes = np.array([
    [23, 74, 295, 388],
    [377, 294, 252, 161],
    [333, 421, 49, 49],
], dtype=np.float32)

class_labels = np.array(['dog', 'cat', 'sports ball'])

result = train_transform(image=image, bboxes=bboxes, class_labels=class_labels)

augmented_image = result['image']
augmented_bboxes = result['bboxes']
augmented_labels = result['class_labels']

La bibliothèque filtre automatiquement les boîtes qui sortent des limites ou deviennent trop petites.

Attachement de métadonnées aux boîtes englobantes

Utilisation de label_fields

Passez les classes et données supplémentaires sous forme de tableaux séparés :

bbox_params = A.BboxParams(
    coord_format='pascal_voc',
    label_fields=['class_labels', 'difficult_flags'],
)

result = transform(
    image=image,
    bboxes=bboxes,
    class_labels=['dog', 'cat', 'ball'],
    difficult_flags=[0, 0, 1],
)

Cas d'usage supportés :

Google AdInline article slot
  • Annotations vidéo : frame_ids pour tracer l'origine des boîtes
  • Segmentation d'instances : instance_ids pour lier aux masques
  • Suivi : class_id + track_id dans les champs supplémentaires

Le filtrage synchronise automatiquement tous les tableaux.

Métadonnées intégrées

Pour les données numériques, ajoutez des colonnes au tableau des boîtes :

bboxes = np.array([
    [23, 74, 295, 388, 1, 17],  # + class_id, track_id
    [377, 294, 252, 161, 2, 23],
], dtype=np.float32)

bbox_params = A.BboxParams(coord_format='coco')

A.BboxParams pour le contrôle qualité

Paramètres clés :

Google AdInline article slot

| Paramètre | Description | Valeur par défaut |

|-----------|-------------|-------------------|

| coord_format | Format de coordonnées | Obligatoire |

| label_fields | Métadonnées | [] |

| min_area | Aire minimale en pixels | 0.0 |

| min_visibility | Fraction visible minimale | 0.0 |

| min_width/height | Seuils de taille | 0.0 |

| clip_bboxes_on_input | Rogner avant augmentation | False |

| filter_invalid_bboxes | Supprimer les boîtes invalides | False |

| max_accept_ratio | Ratio d'aspect maximal | None |

Pour des annotations imparfaites :

bbox_params = A.BboxParams(
    coord_format='yolo',
    label_fields=['class_labels'],
    clip_bboxes_on_input=True,
    filter_invalid_bboxes=True,
)

min_visibility=0.3 élimine les boîtes avec trop peu de surface visible après crop. min_area=100 exclut les fragments minuscules.

Stratégies de cropping et pièges courants

RandomCrop peut générer des boîtes avec une aire utilisable nulle. Bonnes pratiques :

  • Définir min_visibility > 0 pour préserver le signal
  • Utiliser p < 1.0 pour les crops afin d'éviter un sur-filtrage
  • Vérifier les distributions de tailles de boîtes avant/après le pipeline

Problèmes courants :

  • Mauvais coord_format (YOLO nécessite 'yolo')
  • label_fields manquants pour les classes
  • Omission de clip/filtre sur des datasets désordonnés
  • Paramètres min_ à zéro entraînent sur des données inutiles

Points clés à retenir

  • coord_format est obligatoire : pascal_voc pour la plupart des datasets, yolo pour Ultralytics
  • label_fields synchronise automatiquement les étiquettes lors du filtrage
  • clip + filter nettoie les annotations avant l'entraînement
  • min_visibility 0.3–0.5 fonctionne le mieux pour les crops
  • Inspectez visuellement les premiers lots après le pipeline

— Editorial Team

Advertisement 728x90

Lire ensuite