ValueError: bbox_params must be specified for bbox transformations
错误 ValueError: bbox_params must be specified for bbox transformations
是因为使用了需要处理边界框(bboxes)的增强操作,但在 albumentations.Compose
中没有正确设置bbox_params
参数。
bbox_params
是用来指定如何处理边界框的配置。
解决方案
修改数据增强部分代码,添加 bbox_params
参数。
from albumentations import BboxParams
transform = A.Compose(
[
A.HorizontalFlip(p=0.5),
A.VerticalFlip(p=0.5),
A.RandomRotate90(p=0.5),
A.ShiftScaleRotate(shift_limit=0.1, scale_limit=0.2, rotate_limit=20, p=0.7),
A.RandomBrightnessContrast(p=0.2),
A.GaussNoise(var_limit=(10.0, 50.0), p=0.3),
],
bbox_params=BboxParams(
format='pascal_voc', # 边界框的格式,Pascal VOC 为 [xmin, ymin, xmax, ymax]
label_fields=['class_labels'], # 必须指定与边界框对应的标签
min_visibility=0.2, # 边界框最小可见性,小于此值将被移除
)
)
同步修改其他部分代码
在调用 transform
的地方,需要为 bboxes
提供对应的 class_labels
,例如:
augmented = transform(
image=image,
bboxes=[[xmin, ymin, xmax, ymax]], # 提供原始边界框坐标
class_labels=["object"] # 对应的标签,与 bbox_params 中的配置匹配
)
完整的增强示例代码
以下是如何应用增强的完整示例:
from albumentations import Compose, HorizontalFlip, VerticalFlip, RandomRotate90, ShiftScaleRotate, RandomBrightnessContrast, GaussNoise, BboxParams
import cv2
# 数据增强配置
transform = Compose(
[
HorizontalFlip(p=0.5),
VerticalFlip(p=0.5),
RandomRotate90(p=0.5),
ShiftScaleRotate(shift_limit=0.1, scale_limit=0.2, rotate_limit=20, p=0.7),
RandomBrightnessContrast(p=0.2),
GaussNoise(var_limit=(10.0, 50.0), p=0.3),
],
bbox_params=BboxParams(
format='pascal_voc',
label_fields=['class_labels'],
min_visibility=0.2,
)
)
# 示例图片和边界框
image = cv2.imread('example.jpg')
bboxes = [[50, 50, 200, 200]] # 示例边界框,格式为 [xmin, ymin, xmax, ymax]
class_labels = ["object"] # 示例标签
# 执行数据增强
augmented = transform(image=image, bboxes=bboxes, class_labels=class_labels)
aug_image = augmented['image']
aug_bboxes = augmented['bboxes']
aug_labels = augmented['class_labels']
# 保存增强结果
cv2.imwrite('augmented_image.jpg', aug_image)
print("增强后的边界框:", aug_bboxes)
关键点总结
-
添加
bbox_params
:- 指定边界框格式:
'pascal_voc'
对应 [xmin, ymin, xmax, ymax]。 - 设置
label_fields
,对应每个边界框的标签。
- 指定边界框格式:
-
调整调用方式:
- 每次调用增强时,提供
bboxes
和class_labels
。
- 每次调用增强时,提供
-
边界框过滤:
- 使用
min_visibility
确保增强后边界框的可见性,避免完全失效的边界框。
- 使用