nvidia.dali.fn.readers.video#

nvidia.dali.fn.readers.video(*, additional_decode_surfaces=2, 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, labels=None, lazy_init=False, normalized=False, num_shards=1, pad_last_batch=False, pad_sequences=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, sequence_length, shard_id=0, skip_cached_images=False, skip_vfr_check=False, step=-1, stick_to_shard=False, stride=1, tensor_init_bytes=1048576, device=None, name=None)#

使用 FFmpeg 和 NVDECODE 加载和解码视频文件,NVDECODE 是 NVIDIA(R) GPU 中的硬件加速视频解码功能。

视频流可以是大多数容器文件格式。FFmpeg 用于解析视频容器,并返回一批 sequence_length 帧的序列,形状为 (N, F, H, W, C),其中 N 是批大小,F 是帧数)。此类仅支持恒定帧率视频。

注意

不支持索引的容器(如 mpeg)需要 DALI 在每次需要解码新序列时寻址到该序列。

支持的后端
  • ‘gpu’

关键词参数:
  • additional_decode_surfaces (int, optional, default = 2) –

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

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

    注意

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

    此参数可用于在内存使用量和性能之间进行权衡。

  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

  • channels (int, optional, default = 3) – 通道数。

  • dont_use_mmap (bool, optional, default = False) –

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

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

  • dtype (nvidia.dali.types.DALIDataType, optional, default = DALIDataType.UINT8) –

    输出数据类型。

    支持的类型:UINT8FLOAT

  • enable_frame_num (bool, optional, default = False) – 如果传递了 file_listfilenames 参数,则返回帧号输出。

  • enable_timestamps (bool, optional, default = False) – 如果传递了 file_listfilenames 参数,则返回时间戳输出。

  • file_list (str, optional, default = ‘’) –

    包含 文件 标签 [起始帧 [结束帧]] 值的列表的文件路径。

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

  • file_list_frame_num (bool, optional, default = False) –

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

    如果提供了浮点值,则起始帧号将向上舍入,结束帧号将向下舍入。

    帧号从 0 开始。

  • file_list_include_preceding_frame (bool, optional, default = 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, optional, default = ‘’) –

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

    此选项与 filenamesfile_list 互斥。

  • filenames (str or list of str, optional, default = []) –

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

    此选项与 file_listfile_root 互斥。

  • image_type (nvidia.dali.types.DALIImageType, optional, default = DALIImageType.RGB) – 输出帧的色彩空间(RGB 或 YCbCr)。

  • initial_fill (int, optional, default = 1024) –

    用于混洗的缓冲区大小。

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

  • labels (intlist of int, optional) –

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

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

  • lazy_init (bool, optional, default = False) – 仅在第一次运行时解析和准备数据集元数据,而不是在构造函数中。

  • normalized (bool, optional, default = False) – 获取归一化数据的输出。

  • num_shards (int, optional, default = 1) –

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

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

  • pad_last_batch (bool, optional, default = False) –

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

    注意

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

  • pad_sequences (bool, optional, default = False) –

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

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

  • prefetch_queue_depth (int, optional, default = 1) –

    指定内部 Loader 要预取的批次数。

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

  • preserve (bool, optional, default = False) – 即使操作符的输出未使用,也阻止将其从图中删除。

  • random_shuffle (bool, optional, default = False) –

    确定是否随机混洗数据。

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

  • read_ahead (bool, optional, default = False) –

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

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

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

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

  • shard_id (int, optional, default = 0) – 要读取的分片的索引。

  • skip_cached_images (bool, optional, default = False) –

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

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

  • skip_vfr_check (bool, optional, default = False) –

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

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

    警告

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

  • step (int, optional, default = -1) –

    每个序列之间的帧间隔。

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

  • stick_to_shard (bool, optional, default = False) –

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

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

  • stride (int, optional, default = 1) – 序列中连续帧之间的距离。

  • tensor_init_bytes (int, optional, default = 1048576) – 每个图像要分配多少内存的提示。