RandAugment#
RandAugment,如 https://arxiv.org/abs/1909.13719 中所述,是一种自动增强方案,它简化了 AutoAugment。对于 RandAugment,策略只是 增强 列表,其搜索空间仅限于两个参数 n
和 m
。
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()
,它接受增强列表。
- 返回值:
一批转换后的样本。
- 返回类型:
调用自定义 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 方式采样和应用的增强列表。
n¶ (int) – 要应用于样本的随机采样操作的数量。
m¶ (int) – 要应用的每个操作的幅度 bin(强度),它必须是
[0, num_magnitude_bins - 1]
范围内的整数。num_magnitude_bins¶ (int) – 用于划分幅度范围的 bin 的数量。
seed¶ (int) – 用于随机采样操作(和否定幅度)的种子。
kwargs¶ – 调用
augmentations
时要传递的任何额外参数。检查每个增强的签名中是否有任何额外的参数,如果参数名称与kwargs
中的参数名称匹配,则将该值作为参数传递。例如,默认 RandAugment 套件中的某些增强接受shapes
、fill_value
和interp_type
。
- 返回值:
一批转换后的样本。
- 返回类型:
访问预定义的策略#
要获取预定义的策略定义,请参阅以下函数。
- 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 越大对应于操作越强的直觉。