数据增强与imgaug支持¶
数据增强操作可用于在模型训练时,增加训练样本的多样性,从而提升模型的泛化能力。
PaddleX内置增强操作¶
PaddleX对于图像分类、目标检测、实例分割和语义分割内置了部分常见的数据增强操作,如下表所示,
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的Someof
、Sometimes
、Sequential
、Oneof
等操作,开发者可以通过这些方法随意组合出增强流程。由于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的Someof
、Sometimes
、Sequential
、Oneof
等操作来组合实现,如下代码所示,
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()
])