自动数据增强#
自动数据增强是一系列概率性数据增强策略。当运行自动数据增强策略时,每个样本都使用根据策略定义的某种概率分布随机选择的数据增强(转换图像的操作)进行处理。DALI 通过使用条件执行来实现自动数据增强。
nvidia.dali.auto_aug
模块包含即用型策略,用于流行的自动数据增强 - AutoAugment、RandAugment 和 TrivialAugment - 可以直接在处理 pipeline 定义中使用。它提供了一组实用程序来自定义现有策略并允许定义新策略。
要使用其中一个策略,请使用 @pipeline_def
装饰器定义 pipeline 并将 enable_conditionals
设置为 True
。接下来,在 pipeline 内部调用自动数据增强函数。此示例应用为 ImageNet 调整的 AutoAugment 策略
from nvidia.dali import pipeline_def, fn, types
from nvidia.dali.auto_aug import auto_augment
@pipeline_def(enable_conditionals=True)
def training_pipe(data_dir, image_size):
jpegs, labels = fn.readers.file(file_root=data_dir, ...)
shapes = fn.peek_image_shape(jpegs)
images = fn.decoders.image(jpegs, device="mixed", output_type=types.RGB)
# Applies the AutoAugment policy for ImageNet
augmented_images = auto_augment.auto_augment_image_net(images, shape=shapes)
resized_images = fn.resize(augmented_images, size=[image_size, image_size])
return resized_images, labels
RandAugment 和 TrivialAugment 策略可以以类似的方式应用。
注意
要查看使用自动数据增强进行训练的完整示例,请参阅 EfficientNet for PyTorch with DALI and AutoAugment 示例。
自动数据增强库结构#
自动数据增强库围绕几个概念构建
数据增强 - 图像处理操作。DALI 提供了 常用数据增强列表,这些数据增强在 AutoAugment、RandAugment 和 TrivialAugment 中使用,以及用于自定义这些操作的 API。
@augmentation
装饰器可用于实现新的数据增强。策略 - 数据增强和参数的集合,描述如何将它们应用于输入图像 - 应用的概率以及操作的“强度”。DALI 提供了预定义的策略以及定义新策略的方法 - 查看特定自动数据增强方案的文档。
应用操作 - 在 DALI pipeline 中对一批图像调用指定策略的函数。
要了解有关构建或应用策略的更多信息,请查看特定自动数据增强方案的文档:AutoAugment、RandAugment 或 TrivialAugment。