数据增强与imgaug支持

数据增强操作可用于在模型训练时,增加训练样本的多样性,从而提升模型的泛化能力。

PaddleX内置增强操作

PaddleX对于图像分类、目标检测、实例分割和语义分割内置了部分常见的数据增强操作,如下表所示,

任务类型 增强方法
图像分类 RandomCropRandomHorizontalFlipRandomVerticalFlip
RandomRotateRandomDistort
目标检测
实例分割
RandomHorizontalFlipRandomDistortRandomCrop
MixupImage(仅支持YOLOv3模型)、RandomExpand
语义分割 RandomHorizontalFlipRandomVerticalFlipResizeRangeScaling
ResizeStepScalingRandomPaddingCropRandomBlur
RandomRotateRandomScaleAspectRandomDistort

imgaug增强库的支持

PaddleX目前已适配imgaug图像增强库,用户可以直接在PaddleX构造transforms时,调用imgaug的方法,如下示例,

import paddlex as pdx
from paddlex.cls import transforms
import imgaug.augmenters as iaa
train_transforms = transforms.Compose([
    # 随机在[0.0 3.0]中选值对图像进行模糊
    iaa.blur.GaussianBlur(sigma=(0.0, 3.0)),
    transforms.RandomCrop(crop_size=224),
    transforms.Normalize()
])

除了上述用法,Compose接口中也支持imgaug的SomeofSometimesSequentialOneof等操作,开发者可以通过这些方法随意组合出增强流程。由于imgaug对于标注信息(目标检测框和实例分割mask)与PaddleX模型训练逻辑有部分差异,目前在检测和分割中,只支持pixel-level的增强方法,(即在增强时,不对图像的大小和方向做改变) 其它方法仍在适配中,详情可见下表,

增强方法 图像分类 目标检测
实例分割
语义分割 备注
imgaug.augmenters.arithmetic Cutout, Dropout, JpegCompression等
imgaug.augmenters.artistic 图像卡通化
imgaug.augmenters.blur GaussianBlur, AverageBlur等
imgaug.augmenters.collections 提供了RandAugment方法
imgaug.augmenters.color Brightness, Hue等色调的增强方法
imgaug.augmenters.contrast 多种对比度增强方式
imgaug.augmenters.convolutional 应用卷积kernel到图像
imgaug.augmenters.edges 图像边缘化等方法
imgaug.augmenters.flip Fliplr和Flipud翻转方法
imgaug.augmenters.geometric Affine、Rotate等增强方法
imgaug.augmenters.imgcorruptlike GaussianNoise等图像噪声增强方法
imgaug.augmenters.pillike
imgaug.augmenters.pooling 应用pooling操作到图像
imgaug.augmenters.segmentation 应用分割方法到图像
imgaug.augmenters.size Reisze、Crop、Pad等操作
imgaug.augmenters.weather 多种模拟天气等增强方法

需要注意的是,imgaug的基础方法中,如imgaug.augmenters.blur仅为图像处理操作,并无概率设置,而在CV模型训练中,增强操作往往是以一定概率应用在样本上,因此我们可以通过imgaug的SomeofSometimesSequentialOneof等操作来组合实现,如下代码所示,

  • Someof 执行定义增强方法列表中的部分方法
  • Sometimes 以一定概率执行定义的增强方法列表
  • Sequential 按顺序执行定义的增强方法列表
image imgaug.augmenters as iaa
from paddlex.cls import transforms
# 以0.6的概率对图像样本进行模糊
img_augmenters = iaa.Sometimes(0.6, [
    iaa.blur.GaussianBlur(sigma=(0.0, 3.0))
])
train_transforms = transforms.Compose([
    img_augmenters,
    transforms.RandomCrop(crop_size=224),
    transforms.Normalize()
])