数据增强操作可用于在模型训练时,增加训练样本的多样性,从而提升模型的泛化能力。
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 , DropoutJpegCompression 等 |
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()
])