AutoAugment#
AutoAugment,如 https://arxiv.org/abs/1805.09501 中所述,构建策略的方式是使用成对的 数据增强,称为子策略。每个子策略指定操作序列,以及应用概率和幅度参数。当使用 AutoAugment 时,对于每个样本,会随机选择并应用一个子策略。
要使用在 ImageNet 上发现的预定义策略,请导入并调用 auto_augment()
在 pipeline 定义中,例如
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)
augmented_images = auto_augment.auto_augment(images, shape=shapes)
resized_images = fn.resize(augmented_images, size=[image_size, image_size])
return resized_images, labels
警告
您需要使用 @pipeline_def
装饰器定义 pipeline,并将 enable_conditionals
设置为 True
才能使用自动数据增强。
请参阅 此 部分,以了解有关使用自定义策略的更多信息。
调用预定义的 AutoAugment 策略#
要调用预定义的策略之一,请使用以下函数。
- nvidia.dali.auto_aug.auto_augment.auto_augment(data, policy_name='image_net', shape=None, fill_value=128, interp_type=None, max_translate_abs=None, max_translate_rel=None, seed=None)#
将 AutoAugment 论文 (https://arxiv.org/abs/1805.09501) 中预定义的策略之一应用于提供的样本批次。
- 参数:
data¶ (DataNode) – 要处理的样本批次。支持的样本是 HWC 布局的图像和 FHWC 布局的视频,支持的数据类型是 uint8。
policy_name¶ (str, 可选) – 预定义策略的名称。可接受的值包括:image_net、reduced_image_net、svhn、reduced_cifar10。默认为 image_net。
shape¶ (DataNode 或 Tuple[int, int], 可选) – 作为
data
传递的图像或视频序列中帧的大小(高度和宽度)。如果指定,translation 操作的幅度取决于图像/帧形状,范围从 0 到 max_translate_rel * shape。否则,任何样本的幅度范围都是 [0, max_translate_abs]。fill_value¶ (int, 可选) – 用作使用 warp_affine 操作(平移、剪切和旋转)变换的图像/帧的填充值。如果指定 None,则图像/帧将使用重复(钳制)的边界值进行填充。
interp_type¶ (DALIInterpType, 可选) – warp_affine 操作(平移、剪切和旋转)使用的插值方法。支持的值为 types.INTERP_LINEAR(默认)和 types.INTERP_NN。
max_translate_abs¶ (int 或 (int, int), 可选) – 仅当未提供
shape
时有效。指定平移数据增强中的最大位移(以像素为单位)。如果指定了元组,则第一个分量限制高度,第二个分量限制宽度。默认为 250,这意味着最大幅度将图像移动 250 像素。max_translate_rel¶ (float 或 (float, float), 可选) – 仅当提供了
shape
参数时有效。指定平移数据增强中的最大位移,为图像形状的分数。如果指定了元组,则第一个分量限制高度,第二个分量限制宽度。默认为 1,这意味着最大幅度会将图像完全移出画布。seed¶ (int, 可选) – 用于随机采样操作(和否定幅度)的种子。
- 返回值:
一批变换后的样本。
- 返回类型:
- nvidia.dali.auto_aug.auto_augment.auto_augment_image_net(data, shape=None, fill_value=128, interp_type=None, max_translate_abs=None, max_translate_rel=None, seed=None)#
以 AutoAugment (https://arxiv.org/abs/1805.09501) 方式将 image_net_policy 应用于提供的样本批次。
等效于
auto_augment()
调用,其中policy_name
指定为'image_net'
。有关详细信息,请参阅auto_augment()
函数。
构建和调用自定义策略#
DALI 的 AutoAugment 实现依赖于 Policy()
类来定义要执行的策略,可以使用 apply_auto_augment()
函数在 pipeline 中调用这些策略。
最好的方法是将您的策略创建包装到一个函数中
from nvidia.dali.auto_aug import augmentations
from nvidia.dali.auto_aug.core import Policy
def my_custom_policy() -> Policy:
"""
Creates a simple AutoAugment policy with 3 sub-policies using custom
magnitude ranges.
"""
shear_x = augmentations.shear_x.augmentation((0, 0.5), True)
shear_y = augmentations.shear_y.augmentation((0, 0.5), True)
rotate = augmentations.rotate.augmentation((0, 40), True)
invert = augmentations.invert
return Policy(
name="SimplePolicy", num_magnitude_bins=11, sub_policies=[
[(shear_x, 0.8, 7), (shear_y, 0.8, 4)],
[(invert, 0.4, None), (rotate, 0.6, 8)],
[(rotate, 0.6, 7), (shear_y, 0.6, 3)],
])
子策略定义中的元组指定
要使用的数据增强,
应用该数据增强的概率(如果选择了此子策略),
要使用的幅度。
- class nvidia.dali.auto_aug.core.Policy(name, num_magnitude_bins, sub_policies)#
- __init__(name, num_magnitude_bins, sub_policies)#
描述了 AutoAugment (https://arxiv.org/abs/1805.09501) 中引入的数据增强策略。
- nvidia.dali.auto_aug.auto_augment.apply_auto_augment(policy, data, seed=None, **kwargs)#
将 AutoAugment (https://arxiv.org/abs/1805.09501) 数据增强方案应用于提供的样本批次。
访问预定义策略#
要获取预定义的策略定义,请参阅以下函数。
- nvidia.dali.auto_aug.auto_augment.get_image_net_policy(use_shape=False, max_translate_abs=None, max_translate_rel=None)#
创建针对 ImageNet 调整的数据增强策略,如 AutoAugment 论文 (https://arxiv.org/abs/1805.09501) 中所述。返回的策略可以使用
apply_auto_augment()
运行。- 参数:
use_shape¶ (bool) – 如果为 true,则平移偏移量计算为图像/帧形状的百分比。如果使用自动数据增强处理的样本具有不同的形状,则此参数很有用。如果为 false,则偏移量范围受常量 (
max_translate_abs
) 限制。max_translate_abs¶ (int 或 (int, int), 可选) – 仅在 use_shape=False 时有效,指定平移数据增强中的最大位移(以像素为单位)。如果指定了元组,则第一个分量限制高度,第二个分量限制宽度。默认为 250。
max_translate_rel¶ (float 或 (float, float), 可选) – 仅在 use_shape=True 时有效,指定平移数据增强中的最大位移,为图像/帧形状的分数。如果指定了元组,则第一个分量限制高度,第二个分量限制宽度。默认为 1。
- nvidia.dali.auto_aug.auto_augment.get_reduced_cifar10_policy(use_shape=False, max_translate_abs=None, max_translate_rel=None)#
创建使用 reduced CIFAR-10 调整的数据增强策略,如 AutoAugment 论文 (https://arxiv.org/abs/1805.09501) 中所述。返回的策略可以使用
apply_auto_augment()
运行。- 参数:
use_shape¶ (bool) – 如果为 true,则平移偏移量计算为图像/帧形状的百分比。如果使用自动数据增强处理的样本具有不同的形状,则此参数很有用。如果为 false,则偏移量范围受常量 (
max_translate_abs
) 限制。max_translate_abs¶ (int 或 (int, int), 可选) – 仅在 use_shape=False 时有效,指定平移数据增强中的最大位移(以像素为单位)。如果指定了元组,则第一个分量限制高度,第二个分量限制宽度。默认为 250。
max_translate_rel¶ (float 或 (float, float), 可选) – 仅在 use_shape=True 时有效,指定平移数据增强中的最大位移,为图像/帧形状的分数。如果指定了元组,则第一个分量限制高度,第二个分量限制宽度。默认为 1。
- nvidia.dali.auto_aug.auto_augment.get_svhn_policy(use_shape=False, max_translate_abs=None, max_translate_rel=None)#
创建使用 SVHN 调整的增强策略,如 AutoAugment 论文 (https://arxiv.org/abs/1805.09501) 中所述。返回的策略可以使用
apply_auto_augment()
运行。- 参数:
use_shape¶ (bool) – 如果为 true,则平移偏移量计算为图像/帧形状的百分比。如果使用自动增强处理的样本具有不同的形状,则此项很有用。如果为 false,则偏移量范围受常数 (
max_translate_abs
) 限制。max_translate_abs¶ (int 或 (int, int), 可选) – 仅在 use_shape=False 时有效,指定平移增强中的最大位移(以像素为单位)。如果指定了元组,则第一个分量限制高度,第二个分量限制宽度。默认为 250。
max_translate_rel¶ (float 或 (float, float), 可选) – 仅在 use_shape=True 时有效,指定平移增强中的最大位移,为图像/帧形状的分数。如果指定了元组,则第一个分量限制高度,第二个分量限制宽度。默认为 1。
- nvidia.dali.auto_aug.auto_augment.get_reduced_image_net_policy()#
创建使用简化的 ImageNet 调整的增强策略,如 AutoAugment 论文 (https://arxiv.org/abs/1805.09501) 中所述。返回的策略可以使用
apply_auto_augment()
运行。