返回首页

Albumentations 中的 Bbox 增强:格式和错误

本文介绍了在 Albumentations 中为检测任务设置边界框增强。描述了坐标格式、BboxParams 参数、元数据绑定和标记错误处理。带 label_fields 的管道代码示例。

Bbox 增强:Albumentations 完整指南
Advertisement 728x90

Albumentations 中边界框增强:参数与错误处理

在目标检测任务中,mAP 下降往往不是模型架构问题,而是增强后边界框不一致导致的。空间变换需要同步更新物体坐标和图像本身。Albumentations 通过 A.BboxParams 无缝处理,支持五种坐标格式:pascal_voc、albumentations、coco、yolo 和 cxcywh。

坐标格式 coord_format 不匹配会导致框无声偏移,却不报错。以 640×480 图像为例,框从 (98,345) 到 (420,462),各格式如下:

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

构建检测流水线

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)

像素级增强(如亮度、对比度)不影响边界框。几何变换(如翻转、裁剪、旋转)会自动更新坐标。应用方式如下:

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

库会自动过滤超出边界或过小的框。

为边界框附加元数据

使用 label_fields

将类别和额外数据作为独立数组传入:

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

支持场景:

Google AdInline article slot
  • 视频标注frame_ids 追踪框来源
  • 实例分割instance_ids 关联掩码
  • 跟踪:额外字段存 class_id + track_id

过滤时所有数组自动同步。

嵌入式元数据

数值数据可附加到边界框数组列中:

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 用于质量控制

关键参数:

Google AdInline article slot

| 参数 | 描述 | 默认值 |

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

| coord_format | 坐标格式 | 必填 |

| label_fields | 元数据 | [] |

| min_area | 最小像素面积 | 0.0 |

| min_visibility | 最小可见比例 | 0.0 |

| min_width/height | 尺寸阈值 | 0.0 |

| clip_bboxes_on_input | 增强前裁剪 | False |

| filter_invalid_bboxes | 移除无效框 | False |

| max_accept_ratio | 最大宽高比 | None |

针对不完美标注:

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

min_visibility=0.3 会丢弃裁剪后可见面积过小的框。min_area=100 排除微小碎片。

裁剪策略与常见陷阱

RandomCrop 可能产生可用面积为零的框。最佳实践:

  • 设置 min_visibility > 0 保留有效信号
  • 裁剪概率 p < 1.0 避免过度过滤
  • 检查流水线前后边界框尺寸分布

常见问题:

  • 坐标格式错误(YOLO 用 'yolo')
  • 缺少类别 label_fields
  • 杂乱数据集跳过裁剪/过滤
  • min_ 参数为零导致训练垃圾数据

关键要点

  • coord_format 必填:多数数据集用 pascal_voc,Ultralytics 用 yolo
  • label_fields 自动同步 过滤时标签
  • clip + filter 训练前清理标注
  • min_visibility 0.3–0.5 裁剪效果最佳
  • 目视检查 流水线后早期批次

— Editorial Team

Advertisement 728x90

继续阅读