RandAugment#

RandAugment,如 https://arxiv.org/abs/1909.13719 中所述,是一种自动增强方案,它简化了 AutoAugment。对于 RandAugment,策略只是 增强 列表,其搜索空间仅限于两个参数 nm

  • n 描述了我们应该对输入样本应用多少个随机选择的增强。

  • m 是用于所有增强的固定幅度。

例如,要为每个样本使用 3 个随机操作,每个操作的固定幅度为 17,您可以调用 rand_augment(),如下所示

from nvidia.dali import pipeline_def, fn, types
from nvidia.dali.auto_aug import rand_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 = rand_augment.rand_augment(images, shape=shapes, n=3, m=17)

    resized_images = fn.resize(augmented_images, size=[image_size, image_size])

    return resized_images, labels

rand_augment() 使用论文中描述的增强集。要应用自定义增强,请参阅 本节

警告

您需要使用 @pipeline_def 装饰器定义 pipeline,并将 enable_conditionals 设置为 True 才能使用自动增强。

调用预定义的 RandAugment 策略#

要调用预定义的 RandAugment 策略,请使用以下函数。

nvidia.dali.auto_aug.rand_augment.rand_augment(data, n, m, num_magnitude_bins=31, shape=None, fill_value=128, interp_type=None, max_translate_abs=None, max_translate_rel=None, seed=None, monotonic_mag=True, excluded=None)#

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

参数:
  • data (DataNode) – 要处理的样本批次。支持的样本是 HWC 布局的图像和 FHWC 布局的视频,支持的数据类型是 uint8

  • n (int) – 要应用于样本的随机采样操作的数量。

  • m (int) – 要应用的每个操作的幅度(强度),它必须是 [0, num_magnitude_bins - 1] 范围内的整数。

  • num_magnitude_bins (int, optional) – 用于划分幅度范围的 bin 的数量。

  • shape (DataNode or Tuple[int, int], optional) – 作为 data 传递的视频序列中图像或帧的大小(高度和宽度)。如果指定,translation 操作的幅度取决于图像/帧形状,范围从 0 到 max_translate_rel * shape。 否则,对于任何样本,幅度范围为 [0, max_translate_abs]

  • fill_value (int, optional) – 用作使用 warp_affine 操作(平移、剪切和旋转)变换的图像/帧的填充值。如果指定 None,则图像/帧将使用重复的边框值(钳制)进行填充。

  • interp_type (DALIInterpType, optional) – warp_affine 操作(平移、剪切和旋转)使用的插值方法。支持的值为 types.INTERP_LINEAR(默认)和 types.INTERP_NN

  • max_translate_abs (int or (int, int), optional) – 仅当未提供 shapes 时有效。指定平移增强中的最大位移(以像素为单位)。如果指定了元组,则第一个分量限制高度,第二个分量限制宽度。默认为 100,这意味着最大幅度将图像移动 100 像素。

  • max_translate_rel (float or (float, float), optional) – 仅当提供了 shapes 参数时有效。指定平移增强中的最大位移,以图像形状的分数表示。如果指定了元组,则第一个分量限制高度,第二个分量限制宽度。默认为大约 0.45 (100/224)。

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

  • monotonic_mag (bool, optional) – 在不同的框架中有两种 RandAugment 风格可用。对于默认的 monotonic_mag=True,接受幅度 bin 的操作强度会随着 bin 的增加而增加。如果设置为 False,则某些颜色操作的幅度范围会有所不同。在那里,posterize()solarize() 强度随着幅度 bin 的增加而降低,增强操作( brightness(), contrast(), color(), sharpness()) 使用 (0.1, 1.9) 范围,这意味着强度会随着幅度接近范围中心而降低。请参阅 get_rand_augment_non_monotonic_suite()

  • excluded (List[str], optional) – 要从默认增强套件中排除的操作名称列表。如果除了限制操作集之外,您还需要包含一些自定义操作或微调现有操作,则可以直接使用 apply_rand_augment(),它接受增强列表。

返回值:

一批转换后的样本。

返回类型:

DataNode

调用自定义 RandAugment 策略#

由于 RandAugment 的性质更简单,因此其策略被定义为 增强 列表,可以在 pipeline 定义内部调用 apply_rand_augment() 时作为第一个参数传递。

nvidia.dali.auto_aug.rand_augment.apply_rand_augment(augmentations, data, n, m, num_magnitude_bins=31, seed=None, **kwargs)#

以 RandAugment (https://arxiv.org/abs/1909.13719) 方式应用 augmentations 列表。每个样本都通过从 augmentations 列表中随机选择的 n 个操作的序列进行转换。每个操作都使用 m 作为幅度 bin。

参数:
  • augmentations (List[core._Augmentation]) – 要以 RandAugment 方式采样和应用的增强列表。

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

  • n (int) – 要应用于样本的随机采样操作的数量。

  • m (int) – 要应用的每个操作的幅度 bin(强度),它必须是 [0, num_magnitude_bins - 1] 范围内的整数。

  • num_magnitude_bins (int) – 用于划分幅度范围的 bin 的数量。

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

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

返回值:

一批转换后的样本。

返回类型:

DataNode

访问预定义的策略#

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

nvidia.dali.auto_aug.rand_augment.get_rand_augment_suite(use_shape=False, max_translate_abs=None, max_translate_rel=None)#

创建 RandAugment 增强列表。

参数:
  • use_shape (bool) – 如果为 true,则平移偏移量计算为图像/帧形状的百分比。如果使用自动增强处理的样本具有不同的形状,则此参数很有用。如果为 false,则偏移量范围受常量 (max_translate_abs) 限制。

  • max_translate_abs (int or (int, int), optional) – 仅当 use_shape=False 时有效,指定平移增强中的最大位移(以像素为单位)。如果指定了元组,则第一个分量限制高度,第二个分量限制宽度。默认为 100。

  • max_translate_rel (float or (float, float), optional) – 仅当 use_shape=True 时有效,指定平移增强中的最大位移,以图像/帧形状的分数表示。如果指定了元组,则第一个分量限制高度,第二个分量限制宽度。默认为大约 0.45 (100/224)。

nvidia.dali.auto_aug.rand_augment.get_rand_augment_non_monotonic_suite(use_shape=False, max_translate_abs=None, max_translate_rel=None)#

get_rand_augment_suite() 类似,创建 RandAugment 增强列表。

此变体使用亮度、对比度、色彩、锐度、色调分离和曝光过度,其幅度范围与 AutoAugment 使用的范围相同。但是,这些范围不符合幅度 bin 越大对应于操作越强的直觉。