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) –输出数据类型。
支持的类型:
UINT8
或FLOAT
。enable_frame_num¶ (bool, 可选, 默认值 = False) – 如果传递了
file_list
或filenames
参数,则返回帧号输出。enable_timestamps¶ (bool, 可选, 默认值 = False) – 如果传递了
file_list
或filenames
参数,则返回时间戳输出。file_list¶ (str, 可选, 默认值 = ‘’) –
包含
file label [start_frame [end_frame]]
值的列表的文件路径。正值表示确切的帧,负值表示从末尾开始的第 N 帧(遵循 python 数组索引模式),开始帧和结束帧的相等值将产生一个空序列和一个警告。此选项与
filenames
和file_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, 可选, 默认值 = ‘’) –
包含数据文件的目录的路径。
filenames¶ (str 或 str 列表, 可选, 默认值 = []) –
要加载的视频文件的文件名。
image_type¶ (
nvidia.dali.types.DALIImageType
, 可选, 默认值 = DALIImageType.RGB) – 输出帧的色彩空间(RGB 或 YCbCr)。initial_fill¶ (int, 可选, 默认值 = 1024) –
用于洗牌的缓冲区大小。
如果
random_shuffle
为 False,则忽略此参数。interp_type¶ (
nvidia.dali.types.DALIInterpType
或 DALIInterpType 张量列表, 可选, 默认值 = DALIInterpType.INTERP_LINEAR) –要使用的插值类型。
使用
min_filter
和mag_filter
来指定用于缩小和放大比例的不同滤波。注意
现在不建议使用 INTERP_TRIANGULAR,应将其替换为以下组合
启用
antialias
的 INTERP_LINEAR。labels¶ (int 或 int 列表, 可选) –
与
filenames
参数中列出的文件关联的标签。如果提供空列表,则顺序的从 0 开始的索引将用作标签。如果未提供,则不会生成任何标签。
lazy_init¶ (bool, 可选, 默认值 = False) – 仅在首次运行时(而不是在构造函数中)解析和准备数据集元数据。
mag_filter¶ (
nvidia.dali.types.DALIInterpType
或nvidia.dali.types.DALIInterpType
的 TensorList,可选,默认值 = DALIInterpType.INTERP_LINEAR) – 放大时使用的滤波器。max_size¶ (float 或 float 列表,可选) –
输出尺寸的限制。
当操作符配置为保持宽高比且仅指定较小尺寸时,另一尺寸可能会变得非常大。当使用
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.DALIInterpType
或nvidia.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_longer
和resize_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_longer
和size
互斥。如果resize_y
未指定或为 0,则操作符保持原始图像的宽高比。负值会翻转图像。resize_y¶ (float 或 float 的 TensorList,可选,默认值 = 0.0) –
调整大小后的图像 Y 维度的长度。
此选项与
resize_shorter
,resize_longer
和size
互斥。如果resize_x
未指定或为 0,则操作符保持原始图像的宽高比。负值会翻转图像。resize_z¶ (float 或 float 的 TensorList,可选,默认值 = 0.0) –
调整大小后的体积 Z 维度的长度。
此选项与
resize_shorter
,resize_longer
和size
互斥。如果resize_x
和resize_y
未指定或为 0,则操作符将保持原始体积的宽高比。负值会翻转体积。roi_end¶ (float 或 float 列表或 float 的 TensorList,可选) –
输入感兴趣区域 (ROI) 的结束位置。
必须与
roi_start
一起指定。坐标遵循张量形状顺序,这与size
相同。坐标可以是绝对坐标(以像素为单位,默认值)或相对坐标 (0..1),具体取决于relative_roi
参数的值。如果 ROI 原点在任何维度上都大于 ROI 终点,则该区域在该维度上翻转。roi_relative¶ (bool, 可选,默认值 = False) – 如果为 true,则 ROI 坐标相对于输入尺寸,其中 0 表示顶部/左侧,1 表示底部/右侧
roi_start¶ (float 或 float 列表或 float 的 TensorList,可选) –
输入感兴趣区域 (ROI) 的起始位置。
必须与
roi_end
一起指定。坐标遵循张量形状顺序,这与size
相同。坐标可以是绝对坐标(以像素为单位,默认值)或相对坐标 (0..1),具体取决于relative_roi
参数的值。如果 ROI 原点在任何维度上都大于 ROI 终点,则该区域在该维度上翻转。seed¶ (int, 可选,默认值 = -1) – 随机种子;如果未设置,将自动分配一个。
sequence_length¶ (int) – 每个序列加载的帧数。
shard_id¶ (int, 可选,默认值 = 0) – 要读取的分片索引。
size¶ (float 或 float 列表或 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) – 每个图像要分配多少内存的提示。
另请参阅