对目标检测任务的数据进行操作。可以利用Compose类将图像预处理/增强操作进行组合。
paddlex.det.transforms.Compose(transforms)
根据数据预处理/增强算子对输入数据进行操作。使用示例
paddlex.det.transforms.ResizeByShort(short_size=800, max_size=1333)
根据图像的短边调整图像大小(resize)。
paddlex.det.transforms.Padding(coarsest_stride=1)
将图像的长和宽padding至coarsest_stride的倍数。如输入图像为[300, 640], coarest_stride为32,则由于300不为32的倍数,因此在图像最右和最下使用0值进行padding,最终输出图像为[320, 640]
paddlex.det.transforms.Resize(target_size=608, interp='LINEAR')
调整图像大小(resize)。
paddlex.det.transforms.RandomHorizontalFlip(prob=0.5)
以一定的概率对图像进行随机水平翻转,模型训练时的数据增强操作。
paddlex.det.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
对图像进行标准化。
paddlex.det.transforms.RandomDistort(brightness_range=0.5, brightness_prob=0.5, contrast_range=0.5, contrast_prob=0.5, saturation_range=0.5, saturation_prob=0.5, hue_range=18, hue_prob=0.5)
以一定的概率对图像进行随机像素内容变换,模型训练时的数据增强操作。
【注意】该数据增强必须在数据增强Normalize之前使用。
paddlex.det.transforms.MixupImage(alpha=1.5, beta=1.5, mixup_epoch=-1)
对图像进行mixup操作,模型训练时的数据增强操作,目前仅YOLOv3模型支持该transform。
当label_info中不存在mixup字段时,直接返回,否则进行下述操作:
paddlex.det.transforms.RandomExpand(ratio=4., prob=0.5, fill_value=[123.675, 116.28, 103.53])
随机扩张图像,模型训练时的数据增强操作。
【注意】该数据增强必须在数据增强Resize、ResizeByShort之前使用。
paddlex.det.transforms.RandomCrop(aspect_ratio=[.5, 2.], thresholds=[.0, .1, .3, .5, .7, .9], scaling=[.3, 1.], num_attempts=50, allow_no_crop=True, cover_all_box=False)
随机裁剪图像,模型训练时的数据增强操作。
【注意】该数据增强必须在数据增强Resize、ResizeByShort之前使用。
paddlex.det.transforms.ComposedRCNNTransforms(mode, min_max_size=[224, 224], mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
目标检测FasterRCNN和实例分割MaskRCNN模型中已经组合好的数据处理流程,开发者可以直接使用ComposedRCNNTransforms,简化手动组合transforms的过程, 该类中已经包含了RandomHorizontalFlip数据增强方式,你仍可以通过add_augmenters函数接口添加新的数据增强方式。
ComposedRCNNTransforms共包括以下几个步骤:
训练阶段:
- 随机以0.5的概率将图像水平翻转
- 将图像进行归一化
- 图像采用ResizeByShort方式,根据min_max_size参数,进行缩入
- 使用Padding将图像的长和宽分别Padding成32的倍数 验证/预测阶段:
- 将图像进行归一化
- 图像采用ResizeByShort方式,根据min_max_size参数,进行缩入
- 使用Padding将图像的长和宽分别Padding成32的倍数
ComposedRCNNTransforms.add_augmenters(augmenters)
参数
- augmenters(list): 数据增强方式列表
import paddlex as pdx
from paddlex.det import transforms
train_transforms = transforms.ComposedRCNNTransforms(mode='train', min_max_size=[800, 1333])
eval_transforms = transforms.ComposedRCNNTransforms(mode='eval', min_max_size=[800, 1333])
# 添加数据增强
import imgaug.augmenters as iaa
train_transforms.add_augmenters([
transforms.RandomDistort(),
iaa.blur.GaussianBlur(sigma=(0.0, 3.0))
])
上面代码等价于
import paddlex as pdx
from paddlex.det import transforms
train_transforms = transforms.Composed([
transforms.RandomDistort(),
iaa.blur.GaussianBlur(sigma=(0.0, 3.0)),
# 上面两个为通过add_augmenters额外添加的数据增强方式
transforms.RandomHorizontalFlip(prob=0.5),
transforms.Normalize(),
transforms.ResizeByShort(short_size=800, max_size=1333),
transforms.Padding(coarsest_stride=32)
])
eval_transforms = transforms.Composed([
transforms.Normalize(),
transforms.ResizeByShort(short_size=800, max_size=1333),
transforms.Padding(coarsest_stride=32)
])
paddlex.det.transforms.ComposedYOLOTransforms(mode, shape=[608, 608], mixup_epoch=250, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
目标检测YOLOv3模型中已经组合好的数据处理流程,开发者可以直接使用ComposedYOLOTransforms,简化手动组合transforms的过程, 该类中已经包含了MixupImage、RandomDistort、RandomExpand、RandomCrop、RandomHorizontalFlip5种数据增强方式,你仍可以通过add_augmenters函数接口添加新的数据增强方式。
ComposedYOLOTransforms共包括以下几个步骤:
训练阶段:
- 在前mixup_epoch轮迭代中,使用MixupImage策略
- 对图像进行随机扰动,包括亮度,对比度,饱和度和色调
- 随机扩充图像
- 随机裁剪图像
- 将4步骤的输出图像Resize成shape参数的大小
- 随机0.5的概率水平翻转图像
- 图像归一化 验证/预测阶段:
- 将图像Resize成shape参数大小
- 图像归一化
ComposedYOLOTransforms.add_augmenters(augmenters)
参数
- augmenters(list): 数据增强方式列表
import paddlex as pdx
from paddlex.det import transforms
train_transforms = transforms.ComposedYOLOTransforms(mode='train', shape=[480, 480])
eval_transforms = transforms.ComposedYOLOTransforms(mode='eval', shape=[480, 480])
# 添加数据增强
import imgaug.augmenters as iaa
train_transforms.add_augmenters([
iaa.blur.GaussianBlur(sigma=(0.0, 3.0))
])
上面代码等价于
import paddlex as pdx
from paddlex.det import transforms
train_transforms = transforms.Composed([
iaa.blur.GaussianBlur(sigma=(0.0, 3.0)),
# 上面为通过add_augmenters额外添加的数据增强方式
transforms.MixupImage(mixup_epoch=250),
transforms.RandomDistort(),
transforms.RandomExpand(),
transforms.RandomCrop(),
transforms.Resize(target_size=480, interp='RANDOM'),
transforms.RandomHorizontalFlip(prob=0.5),
transforms.Normalize()
])
eval_transforms = transforms.Composed([
transforms.Resize(target_size=480, interp='CUBIC'),
transforms.Normalize()
])