nvidia.dali.fn.readers.video_resize#

nvidia.dali.fn.readers.video_resize(*, additional_decode_surfaces=2, antialias=True, bytes_per_sample_hint=[0], channels=3, dont_use_mmap=False, dtype=DALIDataType.UINT8, enable_frame_num=False, enable_timestamps=False, file_list='', file_list_frame_num=False, file_list_include_preceding_frame=False, file_root='', filenames=[], image_type=DALIImageType.RGB, initial_fill=1024, interp_type=DALIInterpType.INTERP_LINEAR, labels=None, lazy_init=False, mag_filter=DALIInterpType.INTERP_LINEAR, max_size=None, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, mode='default', normalized=False, num_shards=1, pad_last_batch=False, pad_sequences=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, resize_longer=0.0, resize_shorter=0.0, resize_x=0.0, resize_y=0.0, resize_z=0.0, roi_end=None, roi_relative=False, roi_start=None, seed=-1, sequence_length, shard_id=0, size=None, skip_cached_images=False, skip_vfr_check=False, step=-1, stick_to_shard=False, stride=1, subpixel_scale=True, temp_buffer_hint=0, tensor_init_bytes=1048576, device=None, name=None)#

使用 FFmpeg 和 NVDECODE 加载、解码和调整视频文件大小,NVDECODE 是 NVIDIA GPU 的硬件加速视频解码。

视频流可以是大多数容器文件格式。FFmpeg 用于解析视频容器,并返回形状为 (N, F, H, W, C) 的序列批次,其中 N 是批次大小,F 是序列中的帧数。

此操作符结合了 nvidia.dali.fn.video_reader()nvidia.dali.fn.resize() 的功能。

注意

解码器仅支持恒定帧率视频。

支持的后端
  • ‘gpu’

关键字参数:
  • additional_decode_surfaces (int, 可选, 默认值 = 2) –

    超出最低要求之外要使用的额外解码表面。

    当解码器无法确定最低解码表面数量时,将忽略此参数

    注意

    当驱动程序版本较旧时,可能会发生这种情况。

    此参数可用于权衡内存使用量和性能。

  • antialias (bool, 可选, 默认值 = True) –

    如果启用,则在缩小比例时应用抗锯齿滤波器。

    注意

    最近邻插值不支持抗锯齿。

  • bytes_per_sample_hint (int 或 int 列表, 可选, 默认值 = [0]) –

    每个样本的输出大小提示(以字节为单位)。

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

  • channels (int, 可选, 默认值 = 3) – 通道数。

  • dont_use_mmap (bool, 可选, 默认值 = False) –

    如果设置为 True,则 Loader 将使用纯文件 I/O,而不是尝试在内存中映射文件。

    映射在访问本地文件系统时提供小的性能优势,但大多数网络文件系统不提供最佳性能。

  • dtype (nvidia.dali.types.DALIDataType, 可选, 默认值 = DALIDataType.UINT8) –

    输出数据类型。

    支持的类型:UINT8FLOAT

  • enable_frame_num (bool, 可选, 默认值 = False) – 如果传递了 file_listfilenames 参数,则返回帧号输出。

  • enable_timestamps (bool, 可选, 默认值 = False) – 如果传递了 file_listfilenames 参数,则返回时间戳输出。

  • file_list (str, 可选, 默认值 = ‘’) –

    包含 file label [start_frame [end_frame]] 值的列表的文件路径。

    正值表示确切的帧,负值表示从末尾开始的第 N 帧(遵循 python 数组索引模式),开始帧和结束帧的相等值将产生一个空序列和一个警告。此选项与 filenamesfile_root 互斥。

  • file_list_frame_num (bool, 可选, 默认值 = False) –

    如果在 file_list 中提供了开始/结束时间戳,您可以将它们解释为帧数而不是时间戳。

    如果已提供浮点值,则开始帧数将向上舍入,结束帧数将向下舍入。

    帧号从 0 开始。

  • file_list_include_preceding_frame (bool, 可选, 默认值 = False) –

    更改 file_list 开始和结束帧时间戳转换为帧号的行为方式。

    如果在 file_list 中将开始/结束时间戳作为时间戳提供,则开始帧计算为 ceil(start_time_stamp * FPS),结束帧计算为 floor(end_time_stamp * FPS)。如果此参数设置为 True,则等式更改为 floor(start_time_stamp * FPS)ceil(end_time_stamp * FPS)。实际上,第一个返回的帧不晚于,且结束帧不早于提供的时间戳。此行为更符合可见时间戳与显示的视频帧的关联方式。

    注意

    file_list_frame_num 设置为 True 时,此选项不起作用。

    警告

    此选项可用于旧版行为兼容性。

  • file_root (str, 可选, 默认值 = ‘’) –

    包含数据文件的目录的路径。

    此选项与 filenamesfile_list 互斥。

  • filenames (str 或 str 列表, 可选, 默认值 = []) –

    要加载的视频文件的文件名。

    此选项与 file_listfile_root 互斥。

  • image_type (nvidia.dali.types.DALIImageType, 可选, 默认值 = DALIImageType.RGB) – 输出帧的色彩空间(RGB 或 YCbCr)。

  • initial_fill (int, 可选, 默认值 = 1024) –

    用于洗牌的缓冲区大小。

    如果 random_shuffle 为 False,则忽略此参数。

  • interp_type (nvidia.dali.types.DALIInterpTypeDALIInterpType 张量列表, 可选, 默认值 = DALIInterpType.INTERP_LINEAR) –

    要使用的插值类型。

    使用 min_filtermag_filter 来指定用于缩小和放大比例的不同滤波。

    注意

    现在不建议使用 INTERP_TRIANGULAR,应将其替换为以下组合

    启用 antialias 的 INTERP_LINEAR。

  • labels (intint 列表, 可选) –

    filenames 参数中列出的文件关联的标签。

    如果提供空列表,则顺序的从 0 开始的索引将用作标签。如果未提供,则不会生成任何标签。

  • lazy_init (bool, 可选, 默认值 = False) – 仅在首次运行时(而不是在构造函数中)解析和准备数据集元数据。

  • mag_filter (nvidia.dali.types.DALIInterpTypenvidia.dali.types.DALIInterpType 的 TensorList,可选,默认值 = DALIInterpType.INTERP_LINEAR) – 放大时使用的滤波器。

  • max_size (floatfloat 列表,可选) –

    输出尺寸的限制。

    当操作符配置为保持宽高比且仅指定较小尺寸时,另一尺寸可能会变得非常大。当使用 resize_shorter 参数或 “not_smaller” 模式,或者当某些范围未指定时,可能会发生这种情况。

    此参数限制了输出可以变得多大。此值可以按轴指定,也可以统一应用于所有轴。

    注意

    当与 “not_smaller” 模式或 resize_shorter 参数一起使用时,max_size 优先,并且保持宽高比 - 例如,使用 mode="not_smaller", size=800, max_size=1400 调整 1200x600 图像的大小时,图像将被调整为 1400x700。

  • min_filter (nvidia.dali.types.DALIInterpTypenvidia.dali.types.DALIInterpType 的 TensorList,可选,默认值 = DALIInterpType.INTERP_LINEAR) – 缩小时使用的滤波器。

  • minibatch_size (int, 可选,默认值 = 32) – 内核调用中处理的最大图像数量。

  • mode (str, 可选,默认值 = ‘default’) –

    调整大小模式。

    以下是支持的模式列表

    • "default" - 图像被调整为指定大小。
      缺失的范围会按照提供的范围的平均比例进行缩放。
    • "stretch" - 图像被调整为指定大小。
      缺失的范围完全不进行缩放。
    • "not_larger" - 图像被调整大小,保持宽高比,以便输出图像的任何尺寸都不超过指定大小。
      例如,对于 1280x720 的图像,如果期望的输出尺寸为 640x480,则实际生成 640x360 的输出。
    • "not_smaller" - 图像被调整大小,保持宽高比,以便输出图像的任何尺寸都不小于指定大小。
      例如,对于 640x480 的图像,如果期望的输出尺寸为 1920x1080,则实际生成 1920x1440 的输出。

      此参数与 resize_longerresize_shorter 互斥

  • normalized (bool, 可选,默认值 = False) – 获取归一化后的输出数据。

  • num_shards (int, 可选,默认值 = 1) –

    将数据划分为指定数量的部分(分片)。

    这通常用于多 GPU 或多节点训练。

  • pad_last_batch (bool, 可选,默认值 = False) –

    如果设置为 True,则通过重复最后一个样本来填充分片。

    注意

    如果分片之间的批次数量不同,此选项可能会导致将整个批次的重复样本添加到数据集中。

  • pad_sequences (bool, 可选,默认值 = False) –

    如果视频末尾的帧数不足,则允许创建不完整的序列。

    冗余帧将被置零。相应的时间戳和帧号将被设置为 -1。

  • prefetch_queue_depth (int, 可选,默认值 = 1) –

    指定内部加载器要预取的批次数量。

    当流水线受 CPU 阶段限制时,应增加此值,以内存消耗换取与加载器线程更好的交错。

  • preserve (bool, 可选,默认值 = False) – 即使操作符的输出未使用,也阻止其从图中移除。

  • random_shuffle (bool, 可选,默认值 = False) –

    确定是否随机打乱数据。

    使用大小等于 initial_fill 的预取缓冲区顺序读取数据,然后随机选择样本以形成批次。

  • read_ahead (bool, 可选,默认值 = False) –

    确定是否应预读访问的数据。

    对于 LMDB、RecordIO 或 TFRecord 等大型文件,此参数会减慢首次访问速度,但会减少所有后续访问的时间。

  • resize_longer (float 或 float 的 TensorList,可选,默认值 = 0.0) –

    调整大小后的图像较长边的长度。

    此选项与 resize_shorter 和显式 size 参数互斥,并且操作符保持原始图像的宽高比。此选项等效于为所有维度指定相同的大小和 mode="not_larger"

  • resize_shorter (float 或 float 的 TensorList,可选,默认值 = 0.0) –

    调整大小后的图像较短边的长度。

    此选项与 resize_longer 和显式 size 参数互斥,并且操作符保持原始图像的宽高比。此选项等效于为所有维度指定相同的大小和 mode="not_smaller"。较长边可以通过设置 max_size 参数来限制。有关更多信息,请参阅 max_size 参数文档。

  • resize_x (float 或 float 的 TensorList,可选,默认值 = 0.0) –

    调整大小后的图像 X 维度的长度。

    此选项与 resize_shorter, resize_longersize 互斥。如果 resize_y 未指定或为 0,则操作符保持原始图像的宽高比。负值会翻转图像。

  • resize_y (float 或 float 的 TensorList,可选,默认值 = 0.0) –

    调整大小后的图像 Y 维度的长度。

    此选项与 resize_shorter, resize_longersize 互斥。如果 resize_x 未指定或为 0,则操作符保持原始图像的宽高比。负值会翻转图像。

  • resize_z (float 或 float 的 TensorList,可选,默认值 = 0.0) –

    调整大小后的体积 Z 维度的长度。

    此选项与 resize_shorter, resize_longersize 互斥。如果 resize_xresize_y 未指定或为 0,则操作符将保持原始体积的宽高比。负值会翻转体积。

  • roi_end (floatfloat 列表或 float 的 TensorList,可选) –

    输入感兴趣区域 (ROI) 的结束位置。

    必须与 roi_start 一起指定。坐标遵循张量形状顺序,这与 size 相同。坐标可以是绝对坐标(以像素为单位,默认值)或相对坐标 (0..1),具体取决于 relative_roi 参数的值。如果 ROI 原点在任何维度上都大于 ROI 终点,则该区域在该维度上翻转。

  • roi_relative (bool, 可选,默认值 = False) – 如果为 true,则 ROI 坐标相对于输入尺寸,其中 0 表示顶部/左侧,1 表示底部/右侧

  • roi_start (floatfloat 列表或 float 的 TensorList,可选) –

    输入感兴趣区域 (ROI) 的起始位置。

    必须与 roi_end 一起指定。坐标遵循张量形状顺序,这与 size 相同。坐标可以是绝对坐标(以像素为单位,默认值)或相对坐标 (0..1),具体取决于 relative_roi 参数的值。如果 ROI 原点在任何维度上都大于 ROI 终点,则该区域在该维度上翻转。

  • seed (int, 可选,默认值 = -1) – 随机种子;如果未设置,将自动分配一个。

  • sequence_length (int) – 每个序列加载的帧数。

  • shard_id (int, 可选,默认值 = 0) – 要读取的分片索引。

  • size (floatfloat 列表或 float 的 TensorList,可选) –

    期望的输出尺寸。

    必须是列表/元组,每个空间维度一个条目,不包括视频帧和通道。范围为 0 的维度被视为不存在,输出大小将根据其他范围和 mode 参数计算。

  • skip_cached_images (bool, 可选,默认值 = False) –

    如果设置为 True,当样本在解码器缓存中时,将跳过加载数据。

    在这种情况下,加载器的输出将为空。

  • skip_vfr_check (bool, 可选,默认值 = False) –

    跳过可变帧率 (VFR) 视频的检查。

    使用此标志来抑制 VFR 视频的误报检测。

    警告

    当数据集确实包含 VFR 文件时,设置此标志可能会导致解码器故障。

  • step (int, 可选,默认值 = -1) –

    每个序列之间的帧间隔。

    当值小于 0 时,step 将设置为 sequence_length

  • stick_to_shard (bool, 可选,默认值 = False) –

    确定读取器是否应坚持数据分片,而不是遍历整个数据集。

    如果使用解码器缓存,它可以显著减少要缓存的数据量,但可能会影响训练的准确性。

  • stride (int, 可选,默认值 = 1) – 序列中连续帧之间的距离。

  • subpixel_scale (bool, 可选,默认值 = True) –

    如果为 True,则直接指定或计算的小数尺寸将导致调整输入 ROI 以保持缩放因子。

    否则,将调整缩放因子,以使源图像映射到四舍五入的输出尺寸。

  • temp_buffer_hint (int, 可选,默认值 = 0) –

    用于重采样的临时缓冲区的初始大小(以字节为单位)。

    注意

    此参数对于 CPU 变体将被忽略。

  • tensor_init_bytes (int, 可选,默认值 = 1048576) – 每个图像要分配多少内存的提示。