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_netreduced_image_netsvhnreduced_cifar10。默认为 image_net

  • shape (DataNodeTuple[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, 可选) – 用于随机采样操作(和否定幅度)的种子。

返回值:

一批变换后的样本。

返回类型:

DataNode

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) 中引入的数据增强策略。

参数:
  • name (str) – 策略的名称,用于演示目的。

  • num_magnitude_bins (int) – 数据增强幅度范围应划分成的 bin 的数量。

  • sub_policies (Sequence[Sequence[Tuple[Augmentation, float, Optional[int]]]]) – 变换序列的列表。对于每个处理后的样本,均匀随机地选择其中一个序列。然后,逐个考虑序列中的元组。每个元组描述了在该点要应用的数据增强,此时跳过数据增强的概率以及与数据增强一起使用的幅度。

nvidia.dali.auto_aug.auto_augment.apply_auto_augment(policy, data, seed=None, **kwargs)#

将 AutoAugment (https://arxiv.org/abs/1805.09501) 数据增强方案应用于提供的样本批次。

参数:
  • policy (Policy) – 要以 AutoAugment 方式应用的数据增强序列集。

  • data (DataNode) – 要处理的样本批次。

  • seed (int, 可选) – 用于随机采样操作(和否定幅度)的种子。

  • kwargs – 调用数据增强时要传递的额外参数字典。检查每个数据增强的签名是否有任何额外的参数,如果参数名称与 kwargs 中的参数名称匹配,则该值将作为参数传递。例如,默认 AutoAugment 套件中的某些数据增强接受 shapefill_valueinterp_type

返回值:

一批变换后的样本。

返回类型:

DataNode

访问预定义策略#

要获取预定义的策略定义,请参阅以下函数。

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() 运行。