nvidia.dali.fn.per_frame#

nvidia.dali.fn.per_frame(__input, /, *, bytes_per_sample_hint=[0], preserve=False, replace=False, device=None, name=None)#

将输入张量标记为序列。

该算子修改输入数据的布局字符串,以表明批次包含序列。只有布局受到影响,而数据保持不变。

该算子可以用于在处理序列时提供逐帧张量参数。例如,以下代码片段展示了如何将 gaussian_blur 应用于序列批次,以便为每个序列中的每一帧使用不同的 sigma

@pipeline_def
def random_per_frame_blur():
  video, _ = fn.readers.video_resize(sequence_length=50, ...)
  sigma = fn.random.uniform(range=[0.5, 5], shape=(50,))
  blurred = fn.gaussian_blur(video, sigma=fn.per_frame(sigma))
  return blurred

请注意,指定为逐帧参数的批次中每个张量的最外层维度必须与给定算子处理的相应序列中的帧数相匹配。例如,在提供的示例中,video 批次中的每个序列都有 50 帧,因此 sigma 的形状为 (50,)

请查阅序列处理算子的给定参数的文档,以了解它是否支持逐帧输入。

如果传递给 per-frame 算子的输入没有布局,则会设置一个新的布局,该布局以 F 开头,并用 * 填充以匹配输入的维度。否则,根据 replace 标志,算子要么检查布局的第一个字符是否等于 F,要么将该字符替换为 F

支持的后端
  • ‘cpu’

  • ‘gpu’

参数:

__input (TensorList) – 算子的输入。

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, 可选, 默认值 = [0]) –

    输出大小提示,以字节/样本为单位。

    如果指定,则位于 GPU 或页锁定主机内存中的算子输出将被预先分配,以容纳此大小的样本批次。

  • preserve (bool, 可选, 默认值 = False) – 即使算子的输出没有被使用,也防止算子从图中被移除。

  • replace (bool, 可选, 默认值 = False) – 控制对已指定布局的输入的处理。如果设置为 False,则当布局的第一个字符不是 F 时,算子会报错。如果设置为 True,则布局的第一个字符将被替换为 F