# 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 :
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 :
- Annotations vidéo :
frame_idspour tracer l'origine des boîtes - Segmentation d'instances :
instance_idspour 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 :
| 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 > 0pour préserver le signal - Utiliser
p < 1.0pour 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
Aucun commentaire pour le moment.