Zpět na domů

Augmentace bbox v Albumentations: formáty a chyby

Článek rozebírá nastavení augmentací bounding box v Albumentations pro úlohy detekce. Jsou popsány formáty souřadnic, parametry BboxParams, propojení metadat a zpracování chyb anotace. Příklady kódu pro pipeline s label_fields.

Augmentace bbox: kompletní průvodce Albumentations
Advertisement 728x90

Augmentace bounding box v Albumentations: parametry a zpracování chyb

V úlohách detekce objektů jsou problémy s mAP často spojeny ne s architekturou modelu, ale s nekonzistencí bounding boxů po augmentaci. Prostorové transformace vyžadují synchronní aktualizaci souřadnic objektů a obrazu. Albumentations to zajišťuje prostřednictvím A.BboxParams, podporující pět formátů souřadnic: pascal_voc, albumentations, coco, yolo, cxcywh.

Nesprávný coord_format vede k posunutí boxů bez viditelných chyb v kódu. Pro obraz 640×480 box od (98,345) do (420,462) v různých formátech:

  • 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]

Sestavení pipeline s podporou detekce

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)

Pixelové augmentace (jas, kontrast) neovlivňují bbox. Geometrické (překlopení, oříznutí, otočení) automaticky aktualizují souřadnice. Použití:

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']

Knihovna filtruje boxy, které přesahují hranice nebo jsou příliš malé.

Propojení metadat s bounding box

Prostřednictvím label_fields

Předávejte třídy a další data samostatnými poli:

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],
)

Seznam podporovaných případů:

Google AdInline article slot
  • Videoanotace: frame_ids pro sledování zdroje boxu
  • Instance segmentation: instance_ids pro spojení s maskami
  • Tracking: class_id + track_id v dalších polích

Filtrace synchronizuje všechna pole automaticky.

Vložená metadata

Pro numerická data přidejte sloupce do pole bbox:

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')

Parametry A.BboxParams pro kontrolu kvality

Klíčová nastavení:

Google AdInline article slot

| Parametr | Popis | Výchozí hodnota |

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

| coord_format | Formát souřadnic | Povinný |

| label_fields | Metadata | [] |

| min_area | Min. plocha v pixelech | 0.0 |

| min_visibility | Min. viditelný podíl | 0.0 |

| min_width/height | Rozměry | 0.0 |

| clip_bboxes_on_input | Oříznutí před augmentací | False |

| filter_invalid_bboxes | Odstranění nevalidních | False |

| max_accept_ratio | Max. poměr stran | None |

Pro neideální anotace:

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

min_visibility=0.3 odmítá boxy s malou viditelnou částí po oříznutí. min_area=100 vylučuje malé fragmenty.

Strategie oříznutí a typické chyby

RandomCrop může vytvořit boxy s nulovou užitečnou plochou. Doporučení:

  • Nastavte min_visibility > 0 pro zachování signálu
  • Použijte p < 1.0 pro oříznutí, abyste se vyhnuli přefiltrování
  • Zkontrolujte distribuci velikostí bbox před/po pipeline

Časté problémy:

  • Nesprávný coord_format (YOLO vyžaduje 'yolo')
  • Absence label_fields pro třídy
  • Ignorování clip/filter pro "špinavé" datasety
  • Nulové min_ parametry vedou k učení na odpadu

Co je důležité

  • coord_format je povinný: pascal_voc pro většinu datasetů, yolo pro Ultralytics
  • label_fields synchronizuje štítky automaticky při filtraci
  • clip + filter čistí anotace před trénováním
  • min_visibility 0.3–0.5 optimálně pro oříznutí
  • Zkontrolujte vizuálně první batchy po pipeline

— Editorial Team

Advertisement 728x90

Číst dál