数据增强操作可用于在模型训练时,增加训练样本的多样性,从而提升模型的泛化能力。
PaddleX对于图像分类、目标检测、实例分割和语义分割内置了部分常见的数据增强操作,如下表所示,
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() ])