操作符对象(旧版)#

在旧版本的 DALI 中,对象导向的 API 用于定义操作,而不是函数式 API。现在不鼓励使用对象 API,此处显示其文档仅供参考。

旧版对象“操作符”包含在 dali.ops 模块中,它们的名称采用驼峰式大小写,而不是蛇形大小写。例如,dali.ops.CropMirrorNormalizedali.fn.crop_mirror_normalize 的旧版对应项。

当使用操作符对象 API 时,操作符的定义与其在 DALI pipeline 中的使用分离,这允许在实例化期间设置静态参数。

以下是使用(推荐的)函数式 API 的 pipeline 示例

import nvidia.dali as dali

pipe = dali.pipeline.Pipeline(batch_size = 3, num_threads = 2, device_id = 0)
with pipe:
    files, labels = dali.fn.readers.file(file_root = "./my_file_root")
    images = dali.fn.decoders.image(files, device = "mixed")
    images = dali.fn.rotate(images, angle = dali.fn.random.uniform(range=(-45,45)))
    images = dali.fn.resize(images, resize_x = 300, resize_y = 300)
    pipe.set_outputs(images, labels)

outputs = pipe.run()

以及使用操作符对象 API 的旧版实现

import nvidia.dali as dali

class CustomPipe(Pipeline):
    def __init__(self, batch_size, num_threads, device_id):
        super(CustomPipe, self).__init__(batch_size, num_threads, device_id)
        self.reader = dali.ops.readers.File(file_root='./my_file_root')
        self.decoder = dali.ops.ImageDecoder(device='mixed')
        self.rotate = dali.ops.Rotate()
        self.resize = dali.ops.Resize(resize_x=300, resize_y=300)
        self.rng = dali.ops.random.Uniform(range=(-45, 45))

    def define_graph(self):
        files, labels = self.reader()
        images = self.decoder(files)
        images = self.rotate(images, angle=self.rng())
        images = self.resize(images)
        return images, labels

pipe = CustomPipe(batch_size = 3, num_threads = 2, device_id = 0)
outputs = pipe.run()

值得注意的是,这两种 API 可以在单个 pipeline 中一起使用。以下是示例:

pipe = dali.pipeline.Pipeline(batch_size = 3, num_threads = 2, device_id = 0)
reader = dali.ops.readers.File(file_root = ".")
resize = dali.ops.Resize(device = "gpu", resize_x = 300, resize_y = 300)

with pipe:
    files, labels = reader()
    images = dali.fn.decoders.image(files, device = "mixed")
    images = dali.fn.rotate(images, angle = dali.fn.random.uniform(range=(-45,45)))
    images = resize(images)
    pipe.set_outputs(images, labels)

outputs = pipe.run()

映射到函数式 API#

下表显示了当前函数式 API 中的操作与旧版操作符对象 API 之间的对应关系。

函数 (fn.*)

操作符对象 (ops.*)

audio_decoder

AudioDecoder

audio_resample

AudioResample

batch_permutation

BatchPermutation

bb_flip

BbFlip

bbox_paste

BBoxPaste

box_encoder

BoxEncoder

brightness

Brightness

brightness_contrast

BrightnessContrast

caffe2_reader

Caffe2Reader

caffe_reader

CaffeReader

cast

Cast

cast_like

CastLike

cat

Cat

coco_reader

COCOReader

coin_flip

CoinFlip

color_space_conversion

ColorSpaceConversion

color_twist

ColorTwist

contrast

Contrast

coord_flip

CoordFlip

coord_transform

CoordTransform

copy

Copy

crop

Crop

crop_mirror_normalize

CropMirrorNormalize

dl_tensor_python_function

DLTensorPythonFunction

dump_image

DumpImage

element_extract

ElementExtract

erase

Erase

expand_dims

ExpandDims

external_source

ExternalSource

fast_resize_crop_mirror

FastResizeCropMirror

file_reader

FileReader

flip

Flip

full

Full

full_like

FullLike

gaussian_blur

GaussianBlur

get_property

GetProperty

grid_mask

GridMask

hsv

Hsv

hue

Hue

image_decoder

ImageDecoder

image_decoder_crop

ImageDecoderCrop

image_decoder_random_crop

ImageDecoderRandomCrop

image_decoder_slice

ImageDecoderSlice

jitter

Jitter

jpeg_compression_distortion

JpegCompressionDistortion

laplacian

Laplacian

lookup_table

LookupTable

mel_filter_bank

MelFilterBank

mfcc

MFCC

multi_paste

MultiPaste

mxnet_reader

MXNetReader

nemo_asr_reader

NemoAsrReader

nonsilent_region

NonsilentRegion

normal_distribution

NormalDistribution

normalize

Normalize

numba_function

NumbaFunction

numpy_reader

NumpyReader

one_hot

OneHot

ones

Ones

ones_like

OnesLike

optical_flow

OpticalFlow

pad

Pad

paste

Paste

peek_image_shape

PeekImageShape

per_frame

PerFrame

permute_batch

PermuteBatch

power_spectrum

PowerSpectrum

preemphasis_filter

PreemphasisFilter

python_function

PythonFunction

random_bbox_crop

RandomBBoxCrop

random_crop_generator

RandomCropGenerator

random_resized_crop

RandomResizedCrop

reinterpret

Reinterpret

reshape

Reshape

resize

Resize

resize_crop_mirror

ResizeCropMirror

roi_random_crop

ROIRandomCrop

rotate

Rotate

saturation

Saturation

sequence_reader

SequenceReader

sequence_rearrange

SequenceRearrange

shapes

Shapes

slice

Slice

spectrogram

Spectrogram

sphere

Sphere

squeeze

Squeeze

ssd_random_crop

SSDRandomCrop

stack

Stack

tfrecord_reader

TFRecordReader

to_decibels

ToDecibels

torch_python_function

TorchPythonFunction

transpose

Transpose

uniform

Uniform

video_reader

VideoReader

video_reader_resize

VideoReaderResize

warp_affine

WarpAffine

water

Water

zeros

Zeros

zeros_like

ZerosLike

decoders.audio

decoders.Audio

decoders.image

decoders.Image

decoders.image_crop

decoders.ImageCrop

decoders.image_random_crop

decoders.ImageRandomCrop

decoders.image_slice

decoders.ImageSlice

experimental.audio_resample

experimental.AudioResample

experimental.debayer

experimental.Debayer

experimental.dilate

experimental.Dilate

experimental.equalize

experimental.Equalize

experimental.erode

experimental.Erode

experimental.filter

experimental.Filter

experimental.inflate

experimental.Inflate

experimental.median_blur

experimental.MedianBlur

experimental.peek_image_shape

experimental.PeekImageShape

experimental.remap

experimental.Remap

experimental.resize

experimental.Resize

experimental.tensor_resize

experimental.TensorResize

experimental.warp_perspective

experimental.WarpPerspective

experimental.decoders.image

experimental.decoders.Image

experimental.decoders.image_crop

experimental.decoders.ImageCrop

experimental.decoders.image_random_crop

experimental.decoders.ImageRandomCrop

experimental.decoders.image_slice

experimental.decoders.ImageSlice

experimental.decoders.video

experimental.decoders.Video

experimental.inputs.video

experimental.inputs.Video

experimental.readers.fits

experimental.readers.Fits

experimental.readers.video

experimental.readers.Video

io.file.read

io.file.Read

noise.gaussian

noise.Gaussian

noise.salt_and_pepper

noise.SaltAndPepper

noise.shot

noise.Shot

plugin.video.decoder

plugin.video.Decoder

random.beta

random.Beta

random.choice

random.Choice

random.coin_flip

random.CoinFlip

random.normal

random.Normal

random.uniform

random.Uniform

readers.caffe

readers.Caffe

readers.caffe2

readers.Caffe2

readers.coco

readers.COCO

readers.file

readers.File

readers.mxnet

readers.MXNet

readers.nemo_asr

readers.NemoAsr

readers.numpy

readers.Numpy

readers.sequence

readers.Sequence

readers.tfrecord

readers.TFRecord

readers.video

readers.Video

readers.video_resize

readers.VideoResize

readers.webdataset

readers.Webdataset

reductions.max

reductions.Max

reductions.mean

reductions.Mean

reductions.mean_square

reductions.MeanSquare

reductions.min

reductions.Min

reductions.rms

reductions.RMS

reductions.std_dev

reductions.StdDev

reductions.sum

reductions.Sum

reductions.variance

reductions.Variance

segmentation.random_mask_pixel

segmentation.RandomMaskPixel

segmentation.random_object_bbox

segmentation.RandomObjectBBox

segmentation.select_masks

segmentation.SelectMasks

transforms.combine

transforms.Combine

transforms.crop

transforms.Crop

transforms.rotation

transforms.Rotation

transforms.scale

transforms.Scale

transforms.shear

transforms.Shear

transforms.translation

transforms.Translation

模块#

nvidia.dali.ops#

class nvidia.dali.ops.AudioDecoder(*, bytes_per_sample_hint=[0], downmix=False, dtype=DALIDataType.FLOAT, preserve=False, quality=50.0, sample_rate=0.0, device=None, name=None)#

警告

此操作符现已弃用。请使用 decoders.Audio() 代替。

在 DALI 1.0 中,所有解码器都已移至专用的 decoders 子模块中,并已重命名以遵循通用模式。这是一个占位符操作符,功能相同,以实现向后兼容性。

用于 decoders.audio() 的旧版别名。

class nvidia.dali.ops.AudioResample(*, bytes_per_sample_hint=[0], dtype=None, in_rate=None, out_length=None, out_rate=None, preserve=False, quality=50.0, scale=None, device=None, name=None)#

对音频信号进行重采样。

重采样是通过应用 sinc 滤波器和 Hann 窗口来实现的,窗口的范围由 quality 参数控制。

重采样率可以直接指定,也可以指定为目标采样率与源采样率之比,或者从请求的输出长度与输入长度之比计算得出。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出类型。

    如果未指定,则输出类型与输入类型相同。当类型更改时,值将被标准化以填充目标数据类型的动态范围。当将浮点输入转换为整数类型时,输入值假定在 -1..1 范围内。在有符号和无符号类型之间转换时,0 转换为无符号类型的一半范围。 示例

    float -> uint8
    -1.0  -> 0
    0     -> 128
    1.0   -> 255
    
    uint8 -> int16
    0     -> -32767
    127   -> -128
    128   ->  128
    255   ->  32767
    
    uint16 -> float
    0      -> -1
    32767  -> -0.000015
    32768  ->  0.000015
    65535  ->  1
    

  • in_rate (floatTensorList of float, 可选) –

    输入采样率。

    输入样本的采样率。此参数必须与 out_rate 一起指定。该值相对于 out_rate,并且不需要使用任何特定单位,只要输入和输出速率的单位匹配即可。

    in_rateout_rate 参数不能与 scaleout_length 一起指定。

  • out_length (intTensorList of int, 可选) –

    请求的输出长度,以样本数为单位。

    缩放因子是此输出长度与输入长度之比。此参数不能与 in_rateout_ratescale 一起指定。

  • out_rate (floatTensorList of float, 可选) –

    输出采样率。

    请求的输出采样率。此参数必须与 in_rate 一起指定。该值相对于 in_rate,并且不需要使用任何特定单位,只要输入和输出速率的单位匹配即可。

    in_rateout_rate 参数不能与 scaleout_length 一起指定。

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

  • quality (float, 可选, 默认值 = 50.0) –

    重采样质量,其中 0 为最低,100 为最高。

    0 提供 3 个 sinc 滤波器瓣,50 提供 16 个瓣,100 提供 64 个瓣。

  • scale (floatTensorList of float, 可选) –

    缩放因子。

    缩放因子是目标采样率与源采样率之比。例如,scale=2 将生成输出,其样本数是输入的两倍。

    此参数不能与 in_rateout_rateout_length 一起指定。

__call__(__input, /, *, bytes_per_sample_hint=[0], dtype=None, in_rate=None, out_length=None, out_rate=None, preserve=False, quality=50.0, scale=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 操作符的输入。

class nvidia.dali.ops.BBoxPaste(*, bytes_per_sample_hint=[0], ltrb=False, paste_x=0.5, paste_y=0.5, preserve=False, ratio=None, device=None, name=None)#

转换边界框,以便在图像粘贴到更大的画布上后,框保持在图像中的同一位置。

角坐标根据以下公式进行变换

(x', y') = (x/ratio + paste_x', y/ratio + paste_y')

框尺寸(如果使用 xywh)会根据以下公式进行转换

(w', h') = (w/ratio, h/ratio)

其中

paste_x' = paste_x * (ratio - 1)/ratio
paste_y' = paste_y * (ratio - 1)/ratio

粘贴坐标已归一化,因此 (0,0) 将图像与画布的左上角对齐,而 (1,1) 将其与右下角对齐。

支持的后端
  • ‘cpu’

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

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

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

  • ltrb (bool,可选,默认值 = False) – 对于 ltrb 为 True,对于 xywh 为 False。

  • paste_x (float 或 float 的 TensorList,可选,默认值 = 0.5) – 粘贴在图像坐标中的水平位置 (0.0 - 1.0)。

  • paste_y (float 或 float 的 TensorList,可选,默认值 = 0.5) – 粘贴在图像坐标中的垂直位置 (0.0 - 1.0)。

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也阻止从图中删除该运算符。

  • ratio (floatfloatTensorList) – 画布尺寸与输入尺寸的比率;该值必须至少为 1。

__call__(__input, /, *, bytes_per_sample_hint=[0], ltrb=False, paste_x=0.5, paste_y=0.5, preserve=False, ratio=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.BatchPermutation(*, allow_repetitions=False, bytes_per_sample_hint=[0], no_fixed_points=False, preserve=False, seed=-1, device=None, name=None)#

生成一批随机整数,可用作批处理中索引样本的索引。

支持的后端
  • ‘cpu’

关键词参数:
  • allow_repetitions (bool,可选,默认值 = False) – 如果为 true,则输出可以包含重复和遗漏。

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

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

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

  • no_fixed_points (bool,可选,默认值 = False) – 如果为 true,则输出排列不能包含不动点,即 out[i] != i。当批处理大小为 1 时,此参数将被忽略。

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也阻止从图中删除该运算符。

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

__call__(*, allow_repetitions=False, bytes_per_sample_hint=[0], no_fixed_points=False, preserve=False, seed=-1, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.BbFlip(*, bytes_per_sample_hint=[0], horizontal=1, ltrb=False, preserve=False, vertical=0, device=None, name=None)#

水平或垂直翻转(镜像)边界框。

输入的边界框坐标采用 [x, y, width, height] - xywh 或 [left, top, right, bottom] - ltrb 格式。所有坐标均在图像坐标系中,即 0.0-1.0

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • horizontal (int 或 int 的 TensorList,可选,默认值 = 1) – 翻转水平维度。

  • ltrb (bool,可选,默认值 = False) – 对于 ltrb 为 True,对于 xywh 为 False。

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也阻止从图中删除该运算符。

  • vertical (int 或 int 的 TensorList,可选,默认值 = 0) – 翻转垂直维度。

__call__(__input, /, *, bytes_per_sample_hint=[0], horizontal=1, ltrb=False, preserve=False, vertical=0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.BoxEncoder(*, anchors=None, bytes_per_sample_hint=[0], criteria=0.5, means=[0.0, 0.0, 0.0, 0.0], offset=False, preserve=False, scale=1.0, stds=[1.0, 1.0, 1.0, 1.0], device=None, name=None)#

使用作为参数传递的一组默认框(锚框)对输入边界框和标签进行编码。

此运算符遵循 “SSD: Single Shot MultiBox Detector” 中描述的算法,并在 mlperf/training 中实现。输入必须作为以下张量提供

  • BBoxes 包含表示为 [l,t,r,b] 的边界框。

  • Labels 包含每个边界框的相应标签。

结果是两个张量

  • EncodedBBoxes 包含 M 编码的边界框,格式为 [l,t,r,b],其中 M 是锚框的数量。

  • EncodedLabels 包含每个编码框的相应标签。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • anchors (floatfloat 列表) – 用于编码的锚框,浮点数列表采用 ltrb 格式。

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

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

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

  • criteria (float,可选,默认值 = 0.5) –

    用于将边界框与锚框匹配的阈值 IoU。

    该值需要在 0 和 1 之间。

  • means (float 或 float 列表,可选,默认值 = [0.0, 0.0, 0.0, 0.0]) – 用于归一化的 [x y w h] 均值。

  • offset (bool,可选,默认值 = False) – 返回归一化的偏移量 ((encoded_bboxes*scale - anchors*scale) - mean) / stds 在 EncodedBBoxes 中,它使用 stdmean 以及 scale 参数。

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也阻止从图中删除该运算符。

  • scale (float,可选,默认值 = 1.0) – 在计算偏移量之前重新缩放框和锚框值(例如,返回到绝对值)。

  • stds (float 或 float 列表,可选,默认值 = [1.0, 1.0, 1.0, 1.0]) – 用于偏移量归一化的 [x y w h] 标准差。

__call__(__input_0, __input_1, /, *, anchors=None, bytes_per_sample_hint=[0], criteria=0.5, means=[0.0, 0.0, 0.0, 0.0], offset=False, preserve=False, scale=1.0, stds=[1.0, 1.0, 1.0, 1.0], device=None, name=None)#

有关完整信息,请参见 nvidia.dali.ops.BoxEncoder() 类。

class nvidia.dali.ops.Brightness(*, brightness=1.0, brightness_shift=0.0, bytes_per_sample_hint=[0], dtype=None, preserve=False, device=None, name=None)#

调整图像的亮度。

亮度根据以下公式进行调整

out = brightness_shift * output_range + brightness * in

其中 output_range 对于浮点输出为 1,对于整数类型为最大正值。

此运算符还可以更改数据类型。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • brightness (float 或 float 的 TensorList,可选,默认值 = 1.0) –

    亮度乘数。

    支持 per-frame 输入。

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

    亮度偏移。

    对于有符号类型,1.0 表示该类型可以表示的最大正值。

    支持 per-frame 输入。

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

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

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

  • dtype (nvidia.dali.types.DALIDataType,可选) –

    输出数据类型。

    如果未设置,则使用输入类型。

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也阻止从图中删除该运算符。

__call__(__input, /, *, brightness=1.0, brightness_shift=0.0, bytes_per_sample_hint=[0], dtype=None, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('FHWC', 'DHWC', 'HWC')) – 运算符的输入。

class nvidia.dali.ops.BrightnessContrast(*, brightness=1.0, brightness_shift=0.0, bytes_per_sample_hint=[0], contrast=1.0, contrast_center=0.5, dtype=None, preserve=False, device=None, name=None)#

调整图像的亮度和对比度。

亮度和对比度根据以下公式进行调整

out = brightness_shift * output_range +
      brightness * (contrast_center + contrast * (in - contrast_center))

其中 output_range 对于浮点输出为 1,对于整数类型为最大正值。

此运算符还可以更改数据类型。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • brightness (float 或 float 的 TensorList,可选,默认值 = 1.0) –

    亮度乘数。

    支持 per-frame 输入。

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

    亮度偏移。

    对于有符号类型,1.0 表示该类型可以表示的最大正值。

    支持 per-frame 输入。

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

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

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

  • contrast (float 或 float 的 TensorList,可选,默认值 = 1.0) –

    对比度乘数,其中 0.0 产生均匀的灰色。

    支持 per-frame 输入。

  • contrast_center (float 或 float 的 TensorList,可选,默认值 = 0.5) –

    不受对比度影响的强度级别。

    这是当对比度为零时所有像素都采用的值。如果未设置,则使用输入类型正值范围的一半(或 float 的 0.5)。

    支持 per-frame 输入。

  • dtype (nvidia.dali.types.DALIDataType,可选) –

    输出数据类型。

    如果未设置,则使用输入类型。

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也阻止从图中删除该运算符。

__call__(__input, /, *, brightness=1.0, brightness_shift=0.0, bytes_per_sample_hint=[0], contrast=1.0, contrast_center=0.5, dtype=None, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('FHWC', 'DHWC', 'HWC')) – 运算符的输入。

class nvidia.dali.ops.COCOReader(*, annotations_file='', avoid_class_remapping=False, bytes_per_sample_hint=[0], dont_use_mmap=False, file_root=None, image_ids=False, images=None, include_iscrowd=True, initial_fill=1024, lazy_init=False, ltrb=False, num_shards=1, pad_last_batch=False, pixelwise_masks=False, polygon_masks=False, prefetch_queue_depth=1, preprocessed_annotations='', preserve=False, random_shuffle=False, ratio=False, read_ahead=False, save_preprocessed_annotations=False, save_preprocessed_annotations_dir='', seed=-1, shard_id=0, shuffle_after_epoch=False, size_threshold=0.1, skip_cached_images=False, skip_empty=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

警告

此运算符现已弃用。请使用 readers.COCO() 代替。

在 DALI 1.0 中,所有 reader 都被移动到了专用的 readers 子模块中,并被重命名以遵循通用模式。这是一个占位符运算符,具有相同的功能,以实现向后兼容性。

用于 readers.coco() 的旧版别名。

class nvidia.dali.ops.Caffe2Reader(*, additional_inputs=0, bbox=False, bytes_per_sample_hint=[0], dont_use_mmap=False, image_available=True, initial_fill=1024, label_type=0, lazy_init=False, num_labels=1, num_shards=1, pad_last_batch=False, path=None, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

警告

此运算符现已弃用。请使用 readers.Caffe2() 代替。

在 DALI 1.0 中,所有 reader 都被移动到了专用的 readers 子模块中,并被重命名以遵循通用模式。这是一个占位符运算符,具有相同的功能,以实现向后兼容性。

用于 readers.caffe2() 的旧版别名。

class nvidia.dali.ops.CaffeReader(*, bytes_per_sample_hint=[0], dont_use_mmap=False, image_available=True, initial_fill=1024, label_available=True, lazy_init=False, num_shards=1, pad_last_batch=False, path=None, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

警告

此运算符现已弃用。请使用 readers.Caffe() 代替。

在 DALI 1.0 中,所有 reader 都被移动到了专用的 readers 子模块中,并被重命名以遵循通用模式。这是一个占位符运算符,具有相同的功能,以实现向后兼容性。

用于 readers.caffe() 的旧版别名。

class nvidia.dali.ops.Cast(*, bytes_per_sample_hint=[0], dtype=None, preserve=False, device=None, name=None)#

将张量转换为不同的类型。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • dtype (nvidia.dali.types.DALIDataType) – 输出数据类型。

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

__call__(__input, /, *, bytes_per_sample_hint=[0], dtype=None, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.CastLike(*, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

将第一个张量转换为第二个张量的类型。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

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

__call__(__input_0, __input_1, /, *, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

有关完整信息,请参见 nvidia.dali.ops.CastLike() 类。

class nvidia.dali.ops.Cat(*, axis=0, axis_name=None, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

沿现有轴连接输入张量。

除了连接轴之外,输入张量的形状在所有维度上必须匹配。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axis (int, 可选, 默认值 = 0) –

    输入张量沿此轴连接。

    接受范围为 [-ndim, ndim-1]。负索引从后往前计数。

  • axis_name (str, 可选) –

    张量沿此轴连接的轴的名称。

    此参数与 axis 互斥。此参数要求至少一个输入具有非空布局,并且所有非空输入布局都匹配。

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

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

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

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

__call__(__input_0, /, *__input_, axis=0, axis_name=None, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

有关完整信息,请参见 nvidia.dali.ops.Cat() 类。

class nvidia.dali.ops.CoinFlip(*, bytes_per_sample_hint=[0], dtype=None, preserve=False, probability=0.5, seed=-1, shape=None, device=None, name=None)#

警告

此运算符现已弃用。请使用 random.CoinFlip() 代替。

生成服从伯努利分布的随机布尔值。

生成值 1 (true) 的概率由 probability 参数确定。

生成的数据的形状可以通过 shape 参数显式指定,或者选择与输入形状匹配(如果提供输入)。如果两者都不存在,则每个样本生成一个值。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    注意

    生成的数字将转换为输出数据类型,并在必要时进行舍入和钳位。

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

  • probability (float 或 TensorList of float, 可选, 默认值 = 0.5) – 值 1 的概率。

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

  • shape (intlist of intTensorList of int, 可选) – 输出数据的形状。

__call__(__shape_like=None, /, *, bytes_per_sample_hint=[0], dtype=None, preserve=False, probability=0.5, seed=-1, shape=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__shape_like (TensorList, 可选) – 如果提供,此输入的形状将用于推断输出的形状。

class nvidia.dali.ops.ColorSpaceConversion(*, bytes_per_sample_hint=[0], image_type=None, output_type=None, preserve=False, device=None, name=None)#

在各种图像颜色模型之间进行转换。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • image_type (nvidia.dali.types.DALIImageType) – 输入图像的色彩空间。

  • output_type (nvidia.dali.types.DALIImageType) – 输出图像的色彩空间。

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

__call__(__input, /, *, bytes_per_sample_hint=[0], image_type=None, output_type=None, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('FDHWC', 'FHWC', 'DHWC', 'HWC')) – 运算符的输入。

class nvidia.dali.ops.ColorTwist(*, brightness=1.0, bytes_per_sample_hint=[0], contrast=1.0, dtype=None, hue=0.0, image_type=DALIImageType.RGB, preserve=False, saturation=1.0, device=None, name=None)#

调整图像的色调、饱和度、亮度和对比度。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • brightness (float 或 TensorList of float, 可选, 默认值 = 1.0) –

    亮度变化因子。

    值必须是非负数。

    示例值

    • 0 - 黑色图像。

    • 1 - 无变化。

    • 2 - 亮度增加两倍。

    支持 per-frame 输入。

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

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

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

  • contrast (float 或 TensorList of float, 可选, 默认值 = 1.0) –

    对比度变化因子。

    值必须是非负数。

    示例值

    • 0 - 均匀灰色图像。

    • 1 - 无变化。

    • 2 - 亮度增加两倍。

    支持 per-frame 输入。

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    如果未设置,则使用输入类型。

  • hue (float 或 TensorList of float, 可选, 默认值 = 0.0) –

    色调变化,单位为度。

    支持 per-frame 输入。

  • image_type (nvidia.dali.types.DALIImageType, 可选, 默认值 = DALIImageType.RGB) – 输入和输出图像的色彩空间。

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

  • saturation (float 或 TensorList of float, 可选, 默认值 = 1.0) –

    饱和度变化因子。

    值必须是非负数。

    示例值

    • 0 - 完全去饱和的图像。

    • 1 - 图像饱和度无变化。

    支持 per-frame 输入。

__call__(__input, /, *, brightness=1.0, bytes_per_sample_hint=[0], contrast=1.0, dtype=None, hue=0.0, image_type=DALIImageType.RGB, preserve=False, saturation=1.0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'FHWC', 'DHWC')) – 运算符的输入。

nvidia.dali.ops.Compose(op_list)#

返回一个元运算符,它将 op_list 中的运算符链接在一起。

返回值是一个可调用对象,当调用时,执行以下操作

op_list[n-1](op_list([n-2](...  op_list[0](args))))

只有当列表中前一个运算符的所有输出可以直接被下一个运算符处理时,才能组合运算符。

下面的示例链接了一个图像解码器和一个具有随机正方形尺寸的 Resize 操作。decode_and_resize 对象可以像运算符一样被调用

decode_and_resize = ops.Compose([
    ops.decoders.Image(device="cpu"),
    ops.Resize(size=fn.random.uniform(range=400,500)), device="gpu")
])

files, labels = fn.readers.caffe(path=caffe_db_folder, seed=1)
pipe.set_outputs(decode_and_resize(files), labels)

如果在 op_list 中间存在从 CPU 到 GPU 的转换,就像本例中的情况一样,Compose 会自动安排将数据复制到 GPU 内存。

注意

这是一个实验性功能,如有更改,恕不另行通知。

class nvidia.dali.ops.Contrast(*, bytes_per_sample_hint=[0], contrast=1.0, contrast_center=0.5, dtype=None, preserve=False, device=None, name=None)#

调整图像的对比度。

对比度根据以下公式调整

out = contrast_center + contrast * (in - contrast_center)

此运算符还可以更改数据类型。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • contrast (float 或 TensorList of float, 可选, 默认值 = 1.0) –

    对比度乘数,其中 0.0 产生均匀的灰色。

    支持 per-frame 输入。

  • contrast_center (float 或 TensorList of float, 可选, 默认值 = 0.5) –

    不受对比度影响的强度级别。

    这是当对比度为零时所有像素都采用的值。如果未设置,则使用输入类型正值范围的一半(或 float 的 0.5)。

    支持 per-frame 输入。

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    如果未设置,则使用输入类型。

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

__call__(__input, /, *, bytes_per_sample_hint=[0], contrast=1.0, contrast_center=0.5, dtype=None, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('FHWC', 'DHWC', 'HWC')) – 运算符的输入。

class nvidia.dali.ops.CoordFlip(*, bytes_per_sample_hint=[0], center_x=0.5, center_y=0.5, center_z=0.5, flip_x=1, flip_y=0, flip_z=0, layout='', preserve=False, device=None, name=None)#

通过相对于给定中心翻转(反射)其坐标来变换向量或点。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • center_x (float 或 TensorList of float, 可选, 默认值 = 0.5) – 水平轴上的翻转中心。

  • center_y (float 或 TensorList of float, 可选, 默认值 = 0.5) – 垂直轴上的翻转中心。

  • center_z (float 或 TensorList of float, 可选, 默认值 = 0.5) – 深度轴上的翻转中心。

  • flip_x (int 或 TensorList of int, 可选, 默认值 = 1) – 翻转水平 (x) 坐标。

  • flip_y (int 或 TensorList of int, 可选, 默认值 = 0) – 翻转垂直 (y) 坐标。

  • flip_z (int 或 TensorList of int, 可选, 默认值 = 0) – 翻转深度 (z) 坐标。

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

    确定输入中坐标的顺序。

    字符串应包含以下字符

    • “x”(水平坐标),

    • “y”(垂直坐标),

    • “z”(深度坐标),

    注意

    如果留空,则根据维度数量,假定值为“x”、“xy”或“xyz”。

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

__call__(__input, /, *, bytes_per_sample_hint=[0], center_x=0.5, center_y=0.5, center_z=0.5, flip_x=1, flip_y=0, flip_z=0, layout='', preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.CoordTransform(*, M=None, MT=None, T=None, bytes_per_sample_hint=[0], dtype=DALIDataType.FLOAT, preserve=False, device=None, name=None)#

对点或向量应用线性变换。

变换的形式为

out = M * in + T

其中 M 是一个 m x n 矩阵,T 是一个具有 m 个分量的平移向量。输入必须由 n 元素向量或点组成,输出具有 m 个分量。

此运算符可用于许多操作。以下是(不完整)列表

  • 对点云应用仿射变换

  • 将点投影到子空间

  • 一些色彩空间转换,例如 RGB 到 YCbCr 或灰度

  • 对颜色进行线性操作,例如色调旋转、亮度和对比度调整

此运算符允许序列输入。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • M (floatlist of floatTensorList of float, 可选) –

    用于变换输入向量的矩阵。

    如果未指定,则使用单位矩阵。

    矩阵 M 不需要是方阵 - 如果不是,则输出向量的分量数将等于 M 中的行数。

    如果提供标量值,则假定 M 是对角线上具有该值的方阵。然后假定矩阵的大小与输入向量中的分量数匹配。

    支持 per-frame 输入。

  • MT (floatlist of floatTensorList of float, 可选) –

    一个块矩阵 [M T],它组合了参数 MT

    为此参数提供标量值等效于为 M 提供相同的标量值并保持 T 未指定。

    列数必须比输入中的分量数多一个。此参数与 MT 互斥。

    支持 per-frame 输入。

  • T (floatlist of floatTensorList of float, 可选) –

    平移向量。

    如果未指定,则不应用平移,除非使用 MT 参数。

    此向量的分量数必须与矩阵 M 中的行数匹配。如果提供标量值,则该值将广播到 T 的所有分量,并且选择分量数以匹配 M 中的行数。

    支持 per-frame 输入。

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

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

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

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

    输出坐标的数据类型。

    如果使用整数类型,则输出值四舍五入到最接近的整数并钳制到此类型的动态范围。

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

__call__(__input, /, *, M=None, MT=None, T=None, bytes_per_sample_hint=[0], dtype=DALIDataType.FLOAT, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.Copy(*, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

创建输入张量的副本。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

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

__call__(__input, /, *, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.Crop(*, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, dtype=None, fill_values=[0.0], out_of_bounds_policy='error', preserve=False, rounding='round', device=None, name=None)#

使用指定的窗口尺寸和窗口位置(左上角)裁剪图像。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • crop (floatlist of floatTensorList of float, 可选) –

    裁剪图像的形状,指定为值列表(例如,对于 2D 裁剪为 (crop_H, crop_W),对于体积裁剪为 (crop_D, crop_H, crop_W))。

    提供 crop 参数与提供单独的参数(如 crop_dcrop_hcrop_w)不兼容。

  • crop_d (float 或 TensorList of float, 可选, 默认值 = 0.0) –

    适用于体积输入;裁剪窗口深度(以体素为单位)。

    crop_wcrop_hcrop_d 必须一起指定。为 crop_wcrop_hcrop_d 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • crop_h (float 或 TensorList of float, 可选, 默认值 = 0.0) –

    裁剪窗口高度(以像素为单位)。

    crop_wcrop_h 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • crop_pos_x (float 或 TensorList of float, 可选, 默认值 = 0.5) –

    裁剪窗口(左上角)的归一化 (0.0 - 1.0) 水平位置。

    实际位置计算公式为 crop_x = crop_x_norm * (W - crop_W),其中 crop_x_norm 是归一化位置,W 是图像的宽度,而 crop_W 是裁剪窗口的宽度。

    有关如何将 crop_x 转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_pos_y (float 或 float 的 TensorList,可选,默认值 = 0.5) –

    裁剪窗口起始位置的归一化 (0.0 - 1.0) 垂直位置(通常为左上角)。

    实际位置计算公式为 crop_y = crop_y_norm * (H - crop_H),其中 crop_y_norm 是归一化位置,H 是图像的高度,而 crop_H 是裁剪窗口的高度。

    有关如何将 crop_y 转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_pos_z (float 或 float 的 TensorList,可选,默认值 = 0.5) –

    适用于体数据输入。

    裁剪窗口(前平面)的归一化 (0.0 - 1.0) 法线位置。实际位置计算公式为 crop_z = crop_z_norm * (D - crop_D),其中 crop_z_norm 是归一化位置,D 是图像的深度,而 crop_D 是裁剪窗口的深度。

    有关如何将 crop_z 转换为整数值的更多详细信息,请参阅 rounding 参数。

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

    裁剪窗口宽度(以像素为单位)。

    crop_wcrop_h 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    支持的类型:FLOATFLOAT16UINT8

    如果未设置,则使用输入类型。

  • fill_values (float 或 float 列表,可选,默认值 = [0.0]) –

    确定填充值,并且仅当 out_of_bounds_policy 设置为 “pad” 时才相关。

    如果提供标量值,它将用于所有通道。如果提供多个值,则值的数量和通道的数量必须相同(输出切片中布局中维度 C 的范围)。

  • image_type (nvidia.dali.types.DALIImageType) –

    警告

    参数 image_type 已不再使用,并将在未来的版本中移除。

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

    确定当对输入进行越界区域切片时的策略。

    以下是支持值的列表

    • "error" (默认值):尝试在输入边界之外进行切片将产生错误。

    • "pad":将根据需要使用零或使用 fill_values 参数指定的任何其他值来填充输入。

    • "trim_to_shape":切片窗口将被裁剪到输入的边界。

  • output_dtype (nvidia.dali.types.DALIDataType) –

    警告

    参数 output_dtypedtype 的已弃用的别名。请改用 dtype

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

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

    确定用于将窗口的起始坐标转换为整数值的舍入函数(请参阅 crop_pos_xcrop_pos_ycrop_pos_z)。

    可能的值为

    • "round" - 四舍五入到最接近的整数值,中间情况远离零舍入。
    • "truncate" - 丢弃数字的小数部分(向零截断)。

__call__(__input, /, *, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, dtype=None, fill_values=[0.0], out_of_bounds_policy='error', preserve=False, rounding='round', device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'CHW', 'DHWC', 'CDHW', 'FHWC', 'FCHW', 'CFHW', 'FDHWC', 'FCDHW', 'CFDHW')) – 操作符的输入。

class nvidia.dali.ops.CropMirrorNormalize(*, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, dtype=DALIDataType.FLOAT, fill_values=[0.0], mean=[0.0], mirror=0, out_of_bounds_policy='error', output_layout='CHW', pad_output=False, preserve=False, rounding='round', scale=1.0, shift=0.0, std=[1.0], device=None, name=None)#

执行融合的裁剪、归一化、格式转换(NHWC 到 NCHW,如果需要)和类型转换。

归一化采用输入图像,并通过以下公式生成输出

output = scale * (input - mean) / std + shift

注意

如果未指定任何裁剪参数,则只会发生镜像和归一化。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

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

    裁剪图像的形状,指定为值列表(例如,对于 2D 裁剪为 (crop_H, crop_W),对于体积裁剪为 (crop_D, crop_H, crop_W))。

    提供 crop 参数与提供单独的参数(如 crop_dcrop_hcrop_w)不兼容。

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

    适用于体积输入;裁剪窗口深度(以体素为单位)。

    crop_wcrop_hcrop_d 必须一起指定。为 crop_wcrop_hcrop_d 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

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

    裁剪窗口高度(以像素为单位)。

    crop_wcrop_h 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • crop_pos_x (float 或 float 的 TensorList,可选,默认值 = 0.5) –

    裁剪窗口(左上角)的归一化 (0.0 - 1.0) 水平位置。

    实际位置计算公式为 crop_x = crop_x_norm * (W - crop_W),其中 crop_x_norm 是归一化位置,W 是图像的宽度,而 crop_W 是裁剪窗口的宽度。

    有关如何将 crop_x 转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_pos_y (float 或 float 的 TensorList,可选,默认值 = 0.5) –

    裁剪窗口起始位置的归一化 (0.0 - 1.0) 垂直位置(通常为左上角)。

    实际位置计算公式为 crop_y = crop_y_norm * (H - crop_H),其中 crop_y_norm 是归一化位置,H 是图像的高度,而 crop_H 是裁剪窗口的高度。

    有关如何将 crop_y 转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_pos_z (float 或 float 的 TensorList,可选,默认值 = 0.5) –

    适用于体数据输入。

    裁剪窗口(前平面)的归一化 (0.0 - 1.0) 法线位置。实际位置计算公式为 crop_z = crop_z_norm * (D - crop_D),其中 crop_z_norm 是归一化位置,D 是图像的深度,而 crop_D 是裁剪窗口的深度。

    有关如何将 crop_z 转换为整数值的更多详细信息,请参阅 rounding 参数。

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

    裁剪窗口宽度(以像素为单位)。

    crop_wcrop_h 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

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

    输出数据类型。

    支持的类型:FLOATFLOAT16INT8UINT8

  • fill_values (float 或 float 列表,可选,默认值 = [0.0]) –

    确定填充值,并且仅当 out_of_bounds_policy 设置为 “pad” 时才相关。

    如果提供标量值,它将用于所有通道。如果提供多个值,则值的数量和通道的数量必须相同(输出切片中布局中维度 C 的范围)。

  • image_type (nvidia.dali.types.DALIImageType) –

    警告

    参数 image_type 已不再使用,并将在未来的版本中移除。

  • mean (float 或 float 列表或 float 的 TensorList,可选,默认值 = [0.0]) – 用于图像归一化的平均像素值。

  • mirror (int 或 int 的 TensorList,可选,默认值 = 0) – 如果非零,图像将水平翻转(镜像)。

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

    确定当对输入进行越界区域切片时的策略。

    以下是支持值的列表

    • "error" (默认值):尝试在输入边界之外进行切片将产生错误。

    • "pad":将根据需要使用零或使用 fill_values 参数指定的任何其他值来填充输入。

    • "trim_to_shape":切片窗口将被裁剪到输入的边界。

  • output_dtype (nvidia.dali.types.DALIDataType) –

    警告

    参数 output_dtypedtype 的已弃用的别名。请改用 dtype

  • output_layout (layout str,可选,默认值 = ‘CHW’) – 输出的张量数据布局。

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

    确定是否填充输出,以便通道数是 2 的幂。

    用于填充的值由 fill_values 参数确定。

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

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

    确定用于将窗口的起始坐标转换为整数值的舍入函数(请参阅 crop_pos_xcrop_pos_ycrop_pos_z)。

    可能的值为

    • "round" - 四舍五入到最接近的整数值,中间情况远离零舍入。
    • "truncate" - 丢弃数字的小数部分(向零截断)。

  • scale (float,可选,默认值 = 1.0) –

    结果乘以的值。

    当使用整数输出以提高动态范围利用率时,此参数很有用。

  • shift (float,可选,默认值 = 0.0) –

    添加到(缩放)结果的值。

    当使用无符号整数输出以提高动态范围利用率时,此参数很有用。

  • std (float 或 float 列表或 float 的 TensorList,可选,默认值 = [1.0]) – 用于图像归一化的标准差值。

__call__(__input, /, *, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, dtype=DALIDataType.FLOAT, fill_values=[0.0], mean=[0.0], mirror=0, out_of_bounds_policy='error', output_layout='CHW', pad_output=False, preserve=False, rounding='round', scale=1.0, shift=0.0, std=[1.0], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'CHW', 'DHWC', 'CDHW', 'FHWC', 'FCHW', 'CFHW', 'FDHWC', 'FCDHW', 'CFDHW')) – 操作符的输入。

class nvidia.dali.ops.DLTensorPythonFunction(function, num_outputs=1, device='cpu', synchronize_stream=True, batch_processing=True, **kwargs)#

执行操作 DLPack 张量的 Python 函数。

该函数不应修改输入张量。

对于 GPU 操作符,用户有责任将设备代码与 DALI 同步。要将设备代码与 DALI 同步,请在操作符调用之前使用 synchronize_stream 标志(默认启用)同步 DALI 的工作,并确保在操作符调用中完成计划的设备任务。GPU 代码可以在 DALI 使用的 CUDA 流上执行,可以通过调用 current_dali_stream() 函数获得。在这种情况下,可以将 synchronize_stream 标志设置为 False。

警告

此操作符与 TensorFlow 集成不兼容。

此运算符允许序列输入并支持体积数据。

此操作符将不会从图中优化掉。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • batch_processing (bool,可选,默认值 = False) –

    确定函数是每个批次调用一次,还是为批次中的每个样本单独调用。

    如果设置为 True,该函数将接收其参数作为 DLPack 张量列表。

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

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

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

  • function (object) –

    定义操作符功能的可调用对象。

    警告

    该函数不得持有对其使用的 pipeline 的引用。如果持有,将形成对 pipeline 的循环引用,并且 pipeline 将永远不会被释放。

  • num_outputs (int,可选,默认值 = 1) – 输出数量。

  • output_layouts (layout strlayout str 列表,可选) –

    输出的张量数据布局。

    此参数可以是列表,其中包含每个输出的不同布局。如果列表的元素少于 num_outputs,则仅设置前几个输出的布局,其余输出不分配布局。

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

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

    确保 DALI 在调用 Python 函数之前同步其 CUDA 流。

    警告

    仅当调用的函数将设备工作调度到 DALI 使用的流时,才应将此参数设置为 False。

class nvidia.dali.ops.DumpImage(*, bytes_per_sample_hint=[0], input_layout='HWC', preserve=False, suffix='', device=None, name=None)#

以 PPM 格式将批处理图像保存到磁盘。

对调试很有用。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • input_layout (layout str, 可选, 默认值 = ‘HWC’) – 输入图像的布局。

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

  • suffix (str, 可选, 默认值 = ‘’) – 要添加到输出文件名的后缀。

__call__(__input, /, *, bytes_per_sample_hint=[0], input_layout='HWC', preserve=False, suffix='', device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.ElementExtract(*, bytes_per_sample_hint=[0], element_map=None, preserve=False, device=None, name=None)#

从输入序列中提取一个或多个元素。

输出是输入的第一(最外层)维度中的切片。输出的数量与 element_map 中提供的元素数量相同。

例如,对于 element_map = [2, 0, 3],将有三个输出,分别包含输入序列的第 2、第 0 和第 3 个元素。

如果提供了输入布局,则它必须以 F 维度开始。输出将比输入少一个维度,也就是说,对于 FHWC 输入,输出将是 HWC 元素。

此运算符期望序列输入。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • element_map (intint 列表) – 要提取的元素的索引。

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

__call__(__input, /, *, bytes_per_sample_hint=[0], element_map=None, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.Erase(*, anchor=[], axes=[1, 0], axis_names='HW', bytes_per_sample_hint=[0], centered_anchor=False, fill_value=[0.0], normalized=False, normalized_anchor=False, normalized_shape=False, preserve=False, shape=[], device=None, name=None)#

从输入张量中擦除一个或多个区域。

该区域由 anchor(起始点)和 shape(维度)指定。仅指定相关维度。未指定的维度被视为提供了轴的整个范围。要指定多个区域,anchorshape 连续表示多个点(例如,anchor = (y0, x0, y1, x1, …) 和 shape = (h0, w0, h1, w1, …))。anchorshape 参数根据 axis_names 参数的值或 axes 参数的值进行解释。如果未提供 axis_namesaxes 参数,则必须指定除 C(通道)之外的所有维度。

示例 1

anchor = (10, 20), shape = (190, 200), axis_names = “HW”, fill_value = 0

输入: layout = “HWC”, shape = (300, 300, 3)

擦除区域覆盖垂直维度(高度)中 10 到 200 之间的范围,以及水平维度(宽度)中 20 到 220 之间的范围。通道维度的范围未指定,因此在 0 到 3 之间。结果是

output[y, x, c] = 0   if 20 <= x < 220 and 10 <= y < 200
output[y, x, c] = input[y, x, c]  otherwise

示例 2

anchor = (10, 250), shape = (20, 30), axis_names = “W”, fill_value = (118, 185, 0)

输入: layout = “HWC”, shape = (300, 300, 3)

提供了两个擦除区域,分别覆盖 x=(10, 30) 和 x=(250, 280) 范围内的两个垂直条带。擦除区域中的每个像素都填充了多通道值 (118, 185, 0)。结果是

output[y, x, :] = (118, 185, 0)   if 10 <= x < 30 or 250 <= x < 280
output[y, x, :] = input[y, x, :]  otherwise

示例 3

anchor = (0.15, 0.15), shape = (0.3, 0.3), axis_names = “HW”, fill_value = 100, normalized = True

输入: layout = “HWC”, shape = (300, 300, 3)

提供了一个在高度和宽度维度上具有归一化坐标的擦除区域。为所有通道提供了填充值。坐标可以通过乘以输入形状转换为绝对坐标。结果是

if (0.15 * 300 <= x < (0.3 + 0.15) * 300 and
    0.15 * 300 <= y < (0.3 + 0.15) * 300():
  output[y, x, c] = 100
else:
  output[y, x, c] = input[y, x, c]

示例 4: anchor = (0.15, 0.15), shape = (20, 30), normalized_anchor = True, normalized_shape = False

输入: layout = “HWC”, shape = (300, 300, 3)

指定了一个擦除区域,其锚点以归一化坐标指定,形状以绝对坐标指定。由于未提供 axis_names,因此锚点和形状必须包含除 “C”(通道)之外的所有维度。结果是

if (0.15 * 300 <= x < (0.15 * 300) + 20 and
   (0.15 * 300) <= y < (0.15 * 300) + 30):
  output[y, x, c] = 0
else:
  output[y, x, c] = input[y, x, c]

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • anchor (float 或 float 列表 或 float 的 TensorList, 可选, 默认值 = []) –

    擦除区域的锚点或起始点的坐标。

    仅应提供由 axis_namesaxes 指定的相关维度的坐标。

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

    用于 anchorshape 参数的维度顺序,作为维度索引。

    例如,axes=(1, 0) 表示 anchorshape 中的坐标指的是轴 1 和轴 0,顺序如此。

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

    用于锚点和形状参数的维度顺序,如布局中所述。

    例如,axis_names=”HW” 表示 anchorshape 中的坐标指的是维度 H(高度)和 W(宽度),顺序如此。

    注意

    axis_name*s 的优先级高于 *axes.

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

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

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

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

    如果设置为 True,则锚点指的是区域的中心而不是左上角。

    这会在指定的 anchor 处产生居中的擦除区域。

  • fill_value (float 或 float 列表 或 float 的 TensorList, 可选, 默认值 = [0.0]) –

    用于填充擦除区域的值。

    可以指定为一个值(例如,0)或多通道值(例如,(200, 210, 220))。如果提供了多通道填充值,则输入布局应包含通道维度 C

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

    确定是否应将锚点和形状参数解释为归一化坐标(范围 [0.0, 1.0])或绝对坐标。

    分别为 normalized_shapenormalized_anchor 参数提供值是互斥的。

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

    确定是否应将锚点参数解释为归一化坐标(范围 [0.0, 1.0])或绝对坐标。

    normalized 提供值是互斥的。

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

    确定是否应将形状参数解释为归一化坐标(范围 [0.0, 1.0])或绝对坐标。

    normalized 提供值是互斥的。

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

  • shape (float 或 float 列表 或 float 的 TensorList, 可选, 默认值 = []) –

    擦除区域的形状或维度值。

    仅应提供由 axis_namesaxes 指定的相关维度的坐标。

__call__(__input, /, *, anchor=[], axes=[1, 0], axis_names='HW', bytes_per_sample_hint=[0], centered_anchor=False, fill_value=[0.0], normalized=False, normalized_anchor=False, normalized_shape=False, preserve=False, shape=[], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.ExpandDims(*, axes=None, bytes_per_sample_hint=[0], new_axis_names='', preserve=False, device=None, name=None)#

向数据形状插入 extent 为 1 的新维度。

新维度插入到 axes 指定的位置。

如果提供了 new_axis_names,则新的维度名称将插入到数据布局中,位置由 axes 指定。如果未提供 new_axis_names,则输出数据布局将为空。”

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axes (intint 列表int TensorList) – 插入新维度的索引。

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

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

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

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

    数据布局中新维度的名称。

    new_axis_names 的长度必须与 axes 的长度匹配。如果未提供参数,则布局将被清除。

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

__call__(__data, /, *, axes=None, bytes_per_sample_hint=[0], new_axis_names='', preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__data (TensorList) – 要扩展的数据

class nvidia.dali.ops.ExternalSource(source=None, num_outputs=None, *, cycle=None, layout=None, dtype=None, ndim=None, name=None, device='cpu', cuda_stream=None, use_copy_kernel=None, batch=None, parallel=None, no_copy=None, prefetch_queue_depth=None, bytes_per_sample_hint=None, batch_info=None, repeat_last=False, **kwargs)#

ExternalSource 是一个特殊的运算符,可以通过多种方法从 Python 向 DALI 管道提供数据。

最简单和首选的方法是指定 source,它可以是可调用对象或可迭代对象。

注意

nvidia.dali.fn.external_source() 运算符通过 nvidia.dali.plugin.tf.experimental.DALIDatasetWithInputs() 与 TensorFlow 集成部分兼容。有关详细信息,请参阅其文档。

注意

要返回同一张量的批次副本,请使用 nvidia.dali.types.Constant(),这样性能更高。

参数:
  • source (callableiterable) –

    数据源。

    当管道需要下一个迭代的输入时,将轮询数据源(通过调用 source()next(source))。根据 num_outputs 的值,数据源可以提供一个或多个数据项。数据项可以是整个批次(默认),也可以是单个批次条目(当 batch==False 时)。如果未设置 num_outputs,则期望 source 返回一个项目(批次或样本)。如果指定了此值(即使其值为 1),则期望数据为元组或列表,其中每个元素对应于 external_source 的相应返回值。

    数据样本必须是以下兼容的数组类型之一

    • NumPy ndarray (CPU)

    • MXNet ndarray (CPU)

    • PyTorch tensor (CPU 或 GPU)

    • CuPy array (GPU)

    • 实现 __cuda_array_interface__ 的对象

    • DALI Tensor 对象

    批次数据源必须生成完整的数据批次。这可以通过向数组添加新的最外层维度或返回数组列表来实现(在这种情况下,它们的大小可以不同,但必须具有相同的秩和元素类型)。批次数据源还可以生成 DALI TensorList 对象,这可以是另一个 DALI 管道的输出。

    每个批次的数据源可以接受一个位置参数。如果接受,则它是当前 epoch 内迭代的索引,连续调用将是 source(0)source(1),依此类推。如果 batch_info 设置为 True,则 nvidia.dali.types.BatchInfo 的实例将传递给数据源,而不是纯索引。

    每个样本的数据源可以接受一个类型为 nvidia.dali.types.SampleInfo 的位置参数,其中包含样本在当前 epoch 和批次中的索引,以及当前迭代次数。

    如果数据源是生成器函数,则会调用该函数并将其视为可迭代对象。但是,与生成器不同,该函数可以与 cycle 一起使用。在这种情况下,当生成器到达迭代结束时,将再次调用该函数。

    对于 GPU 输入,用户有责任仅在提供的流中修改提供的 GPU 内存内容。DALI 会在此流上安排复制,并且所有工作都已正确排队。如果未提供流,DALI 将使用默认流,并尽最大努力确保正确性。有关更多信息,请参阅 cuda_stream 参数文档。

    注意

    从检查点恢复后,对接受单参数可调用对象(接受 nvidia.dali.types.SampleInfonvidia.dali.types.BatchInfo 或批次索引)的数据源的查询将从检查点中保存的 epoch 和迭代恢复。

  • num_outputs (int, optional) –

    如果指定,则表示数据源函数生成的 TensorList 的数量。

    如果设置,运算符将返回 DataNode 对象列表,否则返回单个 DataNode 对象。

关键词参数:
  • cycle (stringbool, optional) –

    指定是否以及如何循环遍历数据源。它可以是以下值之一

    • "no"FalseNone - 不循环;当达到数据末尾时,会引发 StopIteration;这是默认行为 * "quiet"True - 数据无限重复,* "raise" - 当达到数据末尾时,会引发 StopIteration,但在后续调用时会重新启动迭代。

    end of data is reached; this is the default behavior * "quiet" or True - the data is repeated indefinitely, * "raise" - when the end of data is reached, StopIteration is raised, but the iteration is restarted on subsequent call.

    此标志要求 source 是一个集合,例如,一个可迭代对象,其中 iter(source) 在每次调用时返回一个新的迭代器,或者是一个生成器函数。在后一种情况下,当请求的数据量超过函数生成的数据量时,将再次调用生成器函数。

    "raise" 与 DALI 迭代器一起使用可以创建 epoch 的概念。

  • name (str, optional) –

    数据节点的名称。

    当使用调用 feed_input 提供数据时使用,如果数据由 source 提供,则可以省略。

  • layout (layout str 或其列表/元组, optional) –

    如果提供,则设置数据的布局。

    num_outputs > 1 时,布局可以是列表,其中包含每个输出的不同布局。如果列表的元素少于 num_outputs 个,则仅前几个输出设置了布局,其余输出未设置布局。

  • dtype (nvidia.dali.types.DALIDataType 或其列表/元组, optional) –

    输入数据类型。

    num_outputs > 1 时,dtype 可以是列表,其中包含每个输出的不同值。

    运算符将验证获取的数据是否为提供的类型。如果省略了参数或传递了 DALIDataType.NO_TYPE,则运算符将从提供的数据中推断类型。

    从 DALI 2.0 开始,此参数将是必需的。

  • ndim (intlist/tuple thereof, optional) –

    输入数据中的维度数。

    num_outputs > 1 时,ndim 可以是列表,其中包含每个输出的不同值。

    将根据此值验证提供给运算符的数据的维度。如果提供了 layout 参数,也可以从该参数推断维度数。

    如果提供了 layout 参数,则 ndim 必须与布局中的维度数匹配。

    从 DALI 2.0 开始,将需要指定输入维度。

  • cuda_stream (optional, cudaStream_t 或可转换为 cudaStream_t 的对象,) –

    例如 cupy.cuda.Streamtorch.cuda.Stream。CUDA 流用于将数据复制到 GPU 或从 GPU 数据源复制数据。

    如果未设置此参数,将尽最大努力保持正确性。也就是说,如果数据作为来自公认库(如 CuPy 或 PyTorch)的张量/数组提供,则使用该库的当前流。虽然这种方法在典型情况下有效,但在高级用例和使用不受支持的库的代码中,您可能需要显式提供流句柄。

    此参数有两个特殊值

    • 0 - 使用默认 CUDA 流

    • 1 - 使用 DALI 的内部流

    如果使用内部流,则对 feed_input 的调用将阻塞,直到复制到内部缓冲区完成,因为无法与此流同步以防止在另一个流中使用新数据覆盖数组。

  • use_copy_kernel (bool, optional) –

    如果设置为 True,DALI 将使用 CUDA 内核来馈送数据,而不是 cudaMemcpyAsync(默认)。

    注意

    这仅在将数据复制到 GPU 内存和从 GPU 内存复制数据时适用。

  • blocking (bool, optional) – 高级 如果为 True,则此运算符将阻塞,直到数据可用(例如,通过调用 feed_input)。如果为 False,则如果数据不可用,运算符将引发错误。

  • no_copy (bool, optional) –

    确定在调用 feed_input 时 DALI 是否应复制缓冲区。

    如果设置为 True,DALI 会将用户内存直接传递给管道,而不是复制它。用户有责任保持缓冲区处于活动状态且未修改,直到管道使用它为止。

    在相关迭代的输出被使用后,可以再次修改或释放缓冲区。实际上,这发生在 Pipeline 的 prefetch_queue_depthcpu_queue_depth * gpu_queue_depth(当它们不相等时)在 feed_input 调用之后的迭代之后。

    内存位置必须与运算符的指定 device 参数匹配。对于 CPU,提供的内存可以是一个连续的缓冲区或连续张量列表。对于 GPU,为避免额外的复制,提供的缓冲区必须是连续的。如果您提供单独张量的列表,则内部会进行额外的复制,从而消耗内存和带宽。

    parallel=True 时自动设置为 True

  • batch (bool, optional) –

    如果设置为 True 或 None,则期望 source 一次生成整个批次。如果设置为 False,则为每个样本调用 source

    如果未提供,将 parallel 设置为 True 会自动将 batch 设置为 False。

  • batch_info (bool, optional, default = False) – 控制可调用的 source(接受参数并返回批次)是应接收 class:~nvidia.dali.types.BatchInfo 实例还是仅接收表示迭代次数的整数。如果设置为 False(默认值),则仅传递整数。如果 source 不可调用,不接受参数或 batch 设置为 False,则设置此标志无效。

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

    如果设置为 True,则相应的管道将启动 Python 工作进程池以并行运行回调。您可以通过将 py_num_workers 传递到管道的构造函数中来指定工作进程的数量。

    parallel 设置为 True 时,source 返回的样本必须是 NumPy/MXNet/PyTorch CPU 数组或 TensorCPU 实例。


    可接受的数据源取决于为 batch 参数指定的值。

    如果 batch 设置为 False,则 source 必须是

    • 可调用对象(函数或具有 __call__ 方法的对象),该对象接受

      正好一个参数(SampleInfo 实例,表示请求样本的索引)。

    如果 batch 设置为 True,则 source 可以是

    • 接受正好一个参数的可调用对象(BatchInfo

      实例或整数 - 有关详细信息,请参阅 batch_info

    • 可迭代对象,

    • 生成器函数。


    警告

    无论 batch 值如何,可调用对象都应该是无状态的 - 它们应该仅根据 SampleInfo/BatchInfo 实例或批次中的索引来生成请求的样本或批次,以便它们可以在多个工作进程中并行运行。

    source 回调在到达数据末尾时必须引发 StopIteration。请注意,由于预取,回调可能会在数据集末尾之后的几次迭代中被调用 - 请确保在这种情况下始终如一地引发 StopIteration


    警告

    当管道启用条件执行时,必须采取其他步骤来防止 source 被 AutoGraph 重写。有两种方法可以实现此目的

    1. 在全局作用域(即 pipeline_def 作用域之外)定义函数。

    2. 如果函数是另一个“工厂”函数的结果,则工厂函数必须在管道定义函数外部定义,并使用 @do_not_convert 进行修饰。

    更多详细信息可以在 @do_not_convert 文档中找到。


    注意

    可调用的 source 可以由多个工作进程并行运行。对于 batch=True,可以并行准备多个批次,对于 batch=False,可以在批次内并行化计算。

    batch=True 时,可调用对象的性能可能尤其受益于增加 prefetch_queue_depth,以便可以并行计算接下来的几个批次。


    注意

    迭代器或生成器函数将分配给单个工作进程,该工作进程将迭代它们。主要优点是与主 Python 进程并行执行,但由于它们的状态,一次不可能计算多个批次。

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

    注意

    这是一个高级设置,主要与 Triton Inference Server 与解耦模型一起使用。

    通常,external_source 会消耗其输入数据,并期望在即将到来的迭代中馈入新数据。设置 repeat_last=True 会更改此行为,以便 external_source 将检测到在前一个管道运行和当前管道运行之间没有馈入新数据,并将使用最近的数据自行重新馈送。

    仅在“推送”模式下,即当用户通过调用 feed_input 主动提供数据时,将 repeat_last 设置为 True 才有意义。启用此选项与指定 source 不兼容,这会使 external_source 在“拉取”模式下运行。

  • prefetch_queue_depth (int, optional, default = 1) – 当在 parallel=True 模式下运行时,指定要预先计算并存储在内部缓冲区中的批次数量,否则将忽略此参数。

  • bytes_per_sample_hint (int, optional, default = None) –

    如果在 parallel=True 模式下指定,则该值在计算工作进程用于将并行外部数据源输出传递到管道的共享内存槽的初始容量时用作提示。在非并行模式下,将忽略此参数。

    设置足够大的值以容纳传入数据可以防止 DALI 在管道运行时重新分配共享内存。此外,手动提供提示可以防止 DALI 高估必要的共享内存容量。

    该值必须为正整数。请注意,共享内存中的样本附带一些内部元数据,因此,对共享内存的实际需求略高于外部数据源生成的二进制数据的大小。实际元数据大小取决于许多因素,例如,可能会在 Python 或 DALI 版本之间更改,恕不另行通知。

    请参阅管道的 external_source_shm_statistics 以检查为管道的并行外部数据源生成的数据分配了多少共享内存。

__call__(*, source=None, cycle=None, name=None, layout=None, dtype=None, ndim=None, cuda_stream=None, use_copy_kernel=None, batch=None, parallel=None, no_copy=None, prefetch_queue_depth=None, bytes_per_sample_hint=None, batch_info=None, repeat_last=False, **kwargs)#
参数:
  • source (callableiterable) –

    数据源。

    当管道需要下一个迭代的输入时,将轮询数据源(通过调用 source()next(source))。根据 num_outputs 的值,数据源可以提供一个或多个数据项。数据项可以是整个批次(默认),也可以是单个批次条目(当 batch==False 时)。如果未设置 num_outputs,则期望 source 返回一个项目(批次或样本)。如果指定了此值(即使其值为 1),则期望数据为元组或列表,其中每个元素对应于 external_source 的相应返回值。

    数据样本必须是以下兼容的数组类型之一

    • NumPy ndarray (CPU)

    • MXNet ndarray (CPU)

    • PyTorch tensor (CPU 或 GPU)

    • CuPy array (GPU)

    • 实现 __cuda_array_interface__ 的对象

    • DALI Tensor 对象

    批次数据源必须生成完整的数据批次。这可以通过向数组添加新的最外层维度或返回数组列表来实现(在这种情况下,它们的大小可以不同,但必须具有相同的秩和元素类型)。批次数据源还可以生成 DALI TensorList 对象,这可以是另一个 DALI 管道的输出。

    每个批次的数据源可以接受一个位置参数。如果接受,则它是当前 epoch 内迭代的索引,连续调用将是 source(0)source(1),依此类推。如果 batch_info 设置为 True,则 nvidia.dali.types.BatchInfo 的实例将传递给数据源,而不是纯索引。

    每个样本的数据源可以接受一个类型为 nvidia.dali.types.SampleInfo 的位置参数,其中包含样本在当前 epoch 和批次中的索引,以及当前迭代次数。

    如果数据源是生成器函数,则会调用该函数并将其视为可迭代对象。但是,与生成器不同,该函数可以与 cycle 一起使用。在这种情况下,当生成器到达迭代结束时,将再次调用该函数。

    对于 GPU 输入,用户有责任仅在提供的流中修改提供的 GPU 内存内容。DALI 会在此流上安排复制,并且所有工作都已正确排队。如果未提供流,DALI 将使用默认流,并尽最大努力确保正确性。有关更多信息,请参阅 cuda_stream 参数文档。

    注意

    从检查点恢复后,对接受单参数可调用对象(接受 nvidia.dali.types.SampleInfonvidia.dali.types.BatchInfo 或批次索引)的数据源的查询将从检查点中保存的 epoch 和迭代恢复。

  • num_outputs (int, optional) –

    如果指定,则表示数据源函数生成的 TensorList 的数量。

    如果设置,运算符将返回 DataNode 对象列表,否则返回单个 DataNode 对象。

关键词参数:
  • cycle (stringbool, optional) –

    指定是否以及如何循环遍历数据源。它可以是以下值之一

    • "no"FalseNone - 不循环;当达到数据末尾时,会引发 StopIteration;这是默认行为 * "quiet"True - 数据无限重复,* "raise" - 当达到数据末尾时,会引发 StopIteration,但在后续调用时会重新启动迭代。

    end of data is reached; this is the default behavior * "quiet" or True - the data is repeated indefinitely, * "raise" - when the end of data is reached, StopIteration is raised, but the iteration is restarted on subsequent call.

    此标志要求 source 是一个集合,例如,一个可迭代对象,其中 iter(source) 在每次调用时返回一个新的迭代器,或者是一个生成器函数。在后一种情况下,当请求的数据量超过函数生成的数据量时,将再次调用生成器函数。

    "raise" 与 DALI 迭代器一起使用可以创建 epoch 的概念。

  • name (str, optional) –

    数据节点的名称。

    当使用调用 feed_input 提供数据时使用,如果数据由 source 提供,则可以省略。

  • layout (layout str 或其列表/元组, optional) –

    如果提供,则设置数据的布局。

    num_outputs > 1 时,布局可以是列表,其中包含每个输出的不同布局。如果列表的元素少于 num_outputs 个,则仅前几个输出设置了布局,其余输出未设置布局。

  • dtype (nvidia.dali.types.DALIDataType 或其列表/元组, optional) –

    输入数据类型。

    num_outputs > 1 时,dtype 可以是列表,其中包含每个输出的不同值。

    运算符将验证获取的数据是否为提供的类型。如果省略了参数或传递了 DALIDataType.NO_TYPE,则运算符将从提供的数据中推断类型。

    从 DALI 2.0 开始,此参数将是必需的。

  • ndim (intlist/tuple thereof, optional) –

    输入数据中的维度数。

    num_outputs > 1 时,ndim 可以是列表,其中包含每个输出的不同值。

    将根据此值验证提供给运算符的数据的维度。如果提供了 layout 参数,也可以从该参数推断维度数。

    如果提供了 layout 参数,则 ndim 必须与布局中的维度数匹配。

    从 DALI 2.0 开始,将需要指定输入维度。

  • cuda_stream (optional, cudaStream_t 或可转换为 cudaStream_t 的对象,) –

    例如 cupy.cuda.Streamtorch.cuda.Stream。CUDA 流用于将数据复制到 GPU 或从 GPU 数据源复制数据。

    如果未设置此参数,将尽最大努力保持正确性。也就是说,如果数据作为来自公认库(如 CuPy 或 PyTorch)的张量/数组提供,则使用该库的当前流。虽然这种方法在典型情况下有效,但在高级用例和使用不受支持的库的代码中,您可能需要显式提供流句柄。

    此参数有两个特殊值

    • 0 - 使用默认 CUDA 流

    • 1 - 使用 DALI 的内部流

    如果使用内部流,则对 feed_input 的调用将阻塞,直到复制到内部缓冲区完成,因为无法与此流同步以防止在另一个流中使用新数据覆盖数组。

  • use_copy_kernel (bool, optional) –

    如果设置为 True,DALI 将使用 CUDA 内核来馈送数据,而不是 cudaMemcpyAsync(默认)。

    注意

    这仅在将数据复制到 GPU 内存和从 GPU 内存复制数据时适用。

  • blocking (bool, optional) – 高级 如果为 True,则此运算符将阻塞,直到数据可用(例如,通过调用 feed_input)。如果为 False,则如果数据不可用,运算符将引发错误。

  • no_copy (bool, optional) –

    确定在调用 feed_input 时 DALI 是否应复制缓冲区。

    如果设置为 True,DALI 会将用户内存直接传递给管道,而不是复制它。用户有责任保持缓冲区处于活动状态且未修改,直到管道使用它为止。

    在相关迭代的输出被使用后,可以再次修改或释放缓冲区。实际上,这发生在 Pipeline 的 prefetch_queue_depthcpu_queue_depth * gpu_queue_depth(当它们不相等时)在 feed_input 调用之后的迭代之后。

    内存位置必须与运算符的指定 device 参数匹配。对于 CPU,提供的内存可以是一个连续的缓冲区或连续张量列表。对于 GPU,为避免额外的复制,提供的缓冲区必须是连续的。如果您提供单独张量的列表,则内部会进行额外的复制,从而消耗内存和带宽。

    parallel=True 时自动设置为 True

  • batch (bool, optional) –

    如果设置为 True 或 None,则期望 source 一次生成整个批次。如果设置为 False,则为每个样本调用 source

    如果未提供,将 parallel 设置为 True 会自动将 batch 设置为 False。

  • batch_info (bool, optional, default = False) – 控制可调用的 source(接受参数并返回批次)是应接收 class:~nvidia.dali.types.BatchInfo 实例还是仅接收表示迭代次数的整数。如果设置为 False(默认值),则仅传递整数。如果 source 不可调用,不接受参数或 batch 设置为 False,则设置此标志无效。

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

    如果设置为 True,则相应的管道将启动 Python 工作进程池以并行运行回调。您可以通过将 py_num_workers 传递到管道的构造函数中来指定工作进程的数量。

    parallel 设置为 True 时,source 返回的样本必须是 NumPy/MXNet/PyTorch CPU 数组或 TensorCPU 实例。


    可接受的数据源取决于为 batch 参数指定的值。

    如果 batch 设置为 False,则 source 必须是

    • 可调用对象(函数或具有 __call__ 方法的对象),该对象接受

      正好一个参数(SampleInfo 实例,表示请求样本的索引)。

    如果 batch 设置为 True,则 source 可以是

    • 接受正好一个参数的可调用对象(BatchInfo

      实例或整数 - 有关详细信息,请参阅 batch_info

    • 可迭代对象,

    • 生成器函数。


    警告

    无论 batch 值如何,可调用对象都应该是无状态的 - 它们应该仅根据 SampleInfo/BatchInfo 实例或批次中的索引来生成请求的样本或批次,以便它们可以在多个工作进程中并行运行。

    source 回调在到达数据末尾时必须引发 StopIteration。请注意,由于预取,回调可能会在数据集末尾之后的几次迭代中被调用 - 请确保在这种情况下始终如一地引发 StopIteration


    警告

    当管道启用条件执行时,必须采取其他步骤来防止 source 被 AutoGraph 重写。有两种方法可以实现此目的

    1. 在全局作用域(即 pipeline_def 作用域之外)定义函数。

    2. 如果函数是另一个“工厂”函数的结果,则工厂函数必须在管道定义函数外部定义,并使用 @do_not_convert 进行修饰。

    更多详细信息可以在 @do_not_convert 文档中找到。


    注意

    可调用的 source 可以由多个工作进程并行运行。对于 batch=True,可以并行准备多个批次,对于 batch=False,可以在批次内并行化计算。

    batch=True 时,可调用对象的性能可能尤其受益于增加 prefetch_queue_depth,以便可以并行计算接下来的几个批次。


    注意

    迭代器或生成器函数将分配给单个工作进程,该工作进程将迭代它们。主要优点是与主 Python 进程并行执行,但由于它们的状态,一次不可能计算多个批次。

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

    注意

    这是一个高级设置,主要与 Triton Inference Server 与解耦模型一起使用。

    通常,external_source 会消耗其输入数据,并期望在即将到来的迭代中馈入新数据。设置 repeat_last=True 会更改此行为,以便 external_source 将检测到在前一个管道运行和当前管道运行之间没有馈入新数据,并将使用最近的数据自行重新馈送。

    仅在“推送”模式下,即当用户通过调用 feed_input 主动提供数据时,将 repeat_last 设置为 True 才有意义。启用此选项与指定 source 不兼容,这会使 external_source 在“拉取”模式下运行。

  • prefetch_queue_depth (int, optional, default = 1) – 当在 parallel=True 模式下运行时,指定要预先计算并存储在内部缓冲区中的批次数量,否则将忽略此参数。

  • bytes_per_sample_hint (int, optional, default = None) –

    如果在 parallel=True 模式下指定,则该值在计算工作进程用于将并行外部数据源输出传递到管道的共享内存槽的初始容量时用作提示。在非并行模式下,将忽略此参数。

    设置足够大的值以容纳传入数据可以防止 DALI 在管道运行时重新分配共享内存。此外,手动提供提示可以防止 DALI 高估必要的共享内存容量。

    该值必须为正整数。请注意,共享内存中的样本附带一些内部元数据,因此,对共享内存的实际需求略高于外部数据源生成的二进制数据的大小。实际元数据大小取决于许多因素,例如,可能会在 Python 或 DALI 版本之间更改,恕不另行通知。

    请参阅管道的 external_source_shm_statistics 以检查为管道的并行外部数据源生成的数据分配了多少共享内存。

nvidia.dali.ops.FastResizeCropMirror(*, antialias=False, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, dtype=None, interp_type=DALIInterpType.INTERP_LINEAR, mag_filter=DALIInterpType.INTERP_LINEAR, max_size=None, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, mirror=0, mode='default', preserve=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, rounding='round', size=None, subpixel_scale=True, temp_buffer_hint=0, device=None, name=None)#

警告

此运算符现已弃用。请使用 ResizeCropMirror() 代替。

ResizedCropMirror 的旧别名,默认禁用抗锯齿。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • antialias (bool, 可选, 默认值 = False) –

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

    注意

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

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

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

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

  • crop (floatfloat 列表或 TensorList of float, 可选) –

    裁剪图像的形状,指定为值列表(例如,对于 2D 裁剪为 (crop_H, crop_W),对于体积裁剪为 (crop_D, crop_H, crop_W))。

    提供 `crop` 参数与提供单独的参数(如 crop_d, crop_hcrop_w)不兼容。

  • crop_d (float 或 TensorList of float, 可选, 默认值 = 0.0) –

    适用于体积输入;裁剪窗口深度(以体素为单位)。

    crop_w, crop_hcrop_d 必须一起指定。为 crop_w, crop_hcrop_d 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • crop_h (float 或 TensorList of float, 可选, 默认值 = 0.0) –

    裁剪窗口高度(以像素为单位)。

    crop_wcrop_h 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • crop_pos_x (float 或 TensorList of float, 可选, 默认值 = 0.5) –

    裁剪窗口(左上角)的归一化 (0.0 - 1.0) 水平位置。

    实际位置计算公式为 crop_x = crop_x_norm * (W - crop_W),其中 crop_x_norm 是归一化位置,W 是图像的宽度,而 crop_W 是裁剪窗口的宽度。

    有关 crop_x 如何转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_pos_y (float 或 TensorList of float, 可选, 默认值 = 0.5) –

    裁剪窗口起始位置的归一化 (0.0 - 1.0) 垂直位置(通常为左上角)。

    实际位置计算公式为 crop_y = crop_y_norm * (H - crop_H),其中 crop_y_norm 是归一化位置,H 是图像的高度,而 crop_H 是裁剪窗口的高度。

    有关 crop_y 如何转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_pos_z (float 或 TensorList of float, 可选, 默认值 = 0.5) –

    适用于体数据输入。

    裁剪窗口(前平面)的归一化 (0.0 - 1.0) 法线位置。实际位置计算公式为 crop_z = crop_z_norm * (D - crop_D),其中 crop_z_norm 是归一化位置,D 是图像的深度,而 crop_D 是裁剪窗口的深度。

    有关 crop_z 如何转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_w (float 或 TensorList of float, 可选, 默认值 = 0.0) –

    裁剪窗口宽度(以像素为单位)。

    crop_wcrop_h 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    必须与输入类型相同或为 float。如果未设置,则使用输入类型。

  • interp_type (nvidia.dali.types.DALIInterpType 或 TensorList of nvidia.dali.types.DALIInterpType, 可选, 默认值 = DALIInterpType.INTERP_LINEAR) –

    要使用的插值类型。

    使用 min_filtermag_filter 为缩小和放大指定不同的滤波。

    注意

    现在不建议使用 INTERP_TRIANGULAR,应将其替换为

    启用 antialias 的 INTERP_LINEAR。

  • mag_filter (nvidia.dali.types.DALIInterpType 或 TensorList of nvidia.dali.types.DALIInterpType, 可选, 默认值 = 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.DALIInterpType 或 TensorList of nvidia.dali.types.DALIInterpType, 可选, 默认值 = DALIInterpType.INTERP_LINEAR) – 缩小时使用的滤波器。

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

  • mirror (int 或 TensorList of int, 可选, 默认值 = 0) –

    翻转掩码

    支持的值

    • 0 - 不翻转

    • 1 - 水平翻转

    • 2 - 垂直翻转

    • 4 - 深度方向翻转

    • 以上任意按位组合

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

    调整大小模式。

    以下是支持的模式列表

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

      此参数与 resize_longerresize_shorter 互斥

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    输入感兴趣区域 (ROI) 的结束坐标。

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

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

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

    输入感兴趣区域 (ROI) 的起始坐标。

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

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

    确定用于将窗口起始坐标转换为整数值的舍入函数(请参阅 crop_pos_x, crop_pos_y, crop_pos_z)。

    可能的值为

    • "round" - 四舍五入到最接近的整数值,中间情况远离零舍入。
    • "truncate" - 丢弃数字的小数部分(向零截断)。

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

    期望的输出尺寸。

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

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

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

    否则,将调整缩放比例,以使源图像映射到舍入后的输出尺寸。

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

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

    注意

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

__call__(__input, /, *, antialias=False, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, dtype=None, interp_type=DALIInterpType.INTERP_LINEAR, mag_filter=DALIInterpType.INTERP_LINEAR, max_size=None, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, mirror=0, mode='default', preserve=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, rounding='round', size=None, subpixel_scale=True, temp_buffer_hint=0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'FHWC', 'CHW', 'FCHW', 'CFHW', 'DHWC', 'FDHWC', 'CDHW', 'FCDHW', 'CFDHW')) – 运算符的输入。

class nvidia.dali.ops.FileReader(*, bytes_per_sample_hint=[0], case_sensitive_filter=False, dir_filters=None, dont_use_mmap=False, file_filters=['*.jpg', '*.jpeg', '*.png', '*.bmp', '*.tif', '*.tiff', '*.pnm', '*.ppm', '*.pgm', '*.pbm', '*.jp2', '*.webp', '*.flac', '*.ogg', '*.wav'], file_list=None, file_root=None, files=None, initial_fill=1024, labels=None, lazy_init=False, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, shuffle_after_epoch=False, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

警告

此运算符现已弃用。请使用 readers.File() 代替。

在 DALI 1.0 中,所有 reader 都被移动到了专用的 readers 子模块中,并被重命名以遵循通用模式。这是一个占位符运算符,具有相同的功能,以实现向后兼容性。

用于 readers.file() 的旧版别名。

class nvidia.dali.ops.Flip(*, bytes_per_sample_hint=[0], depthwise=0, horizontal=1, preserve=False, vertical=0, device=None, name=None)#

在选定的维度(水平、垂直和深度方向)翻转图像。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • depthwise (int 或 TensorList of int, optional, default = 0) – 在深度方向翻转维度。

  • horizontal (int 或 TensorList of int, optional, default = 1) – 在水平方向翻转维度。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

  • vertical (int 或 TensorList of int, optional, default = 0) – 在垂直方向翻转维度。

__call__(__input, /, *, bytes_per_sample_hint=[0], depthwise=0, horizontal=1, preserve=False, vertical=0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('FDHWC', 'FHWC', 'DHWC', 'HWC', 'FCDHW', 'FCHW', 'CDHW', 'CHW')) – 运算符的输入。

class nvidia.dali.ops.Full(*, bytes_per_sample_hint=[0], preserve=False, shape=None, device=None, name=None)#

返回具有给定形状和类型的新数据,并用填充值填充。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

  • shape (intlist of intTensorList of int, optional) – 输出数据的形状。

__call__(__fill_value, /, *, bytes_per_sample_hint=[0], preserve=False, shape=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__fill_value (TensorList) – 填充值。

class nvidia.dali.ops.FullLike(*, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

返回与输入数据具有相同形状和类型的新数据,并用 fill_value 填充。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

__call__(__data_like, __fill_value, /, *, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __data_like (TensorList) – 要从中复制形状和类型的输入数据值。

  • __fill_value (TensorList) – 填充值。

class nvidia.dali.ops.GaussianBlur(*, bytes_per_sample_hint=[0], dtype=None, preserve=False, sigma=[0.0], window_size=[0], device=None, name=None)#

对输入应用高斯模糊。

高斯模糊通过应用具有高斯核的卷积来计算,高斯核可以使用 windows_sizesigma 进行参数化。如果仅指定 sigma,则高斯核的半径默认为 ceil(3 * sigma),因此内核窗口大小为 2 * ceil(3 * sigma) + 1

如果仅提供窗口大小,则 sigma 通过以下公式计算

radius = (window_size - 1) / 2
sigma = (radius - 1) * 0.3 + 0.8

sigma 和内核窗口大小可以指定为所有数据轴的一个值或每个数据轴一个值。

当为每个轴指定 sigma 或窗口大小时,轴的提供方式与布局相同,从最外层到最内层。

注意

通道 C 和帧 F 维度不被视为数据轴。如果存在通道,则仅支持通道优先或通道最后的输入。

例如,对于 HWC 输入,您可以提供 sigma=1.0sigma=(1.0, 2.0),因为有两个数据轴 H 和 W。

相同的输入可以作为每个样本的张量提供。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

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

    输出数据类型。

    支持的类型:FLOAT。如果未设置,则使用输入类型。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

  • sigma (float 或 list of float 或 TensorList of float, optional, default = [0.0]) –

    高斯核的 Sigma 值。

    支持 per-frame 输入。

  • window_size (int 或 list of int 或 TensorList of int, optional, default = [0]) –

    内核的直径。

    支持 per-frame 输入。

__call__(__input, /, *, bytes_per_sample_hint=[0], dtype=None, preserve=False, sigma=[0.0], window_size=[0], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.GetProperty(*, bytes_per_sample_hint=[0], key=None, preserve=False, device=None, name=None)#

返回作为输入传递的张量的属性。

输出的类型将取决于请求属性的 key

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • key (str) –

    指定请求的属性。

    支持以下属性

    • "source_info":返回类型:字节数组。

      类似字符串的字节数组,其中包含有关样本来源的信息。例如,在通过 fn.readers.file() 加载的张量上调用的 fn.get_property() 返回张量来源文件的完整路径。

    • "layout":返回类型:字节数组

      数据布局 在给定的张量中。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

__call__(__input, /, *, bytes_per_sample_hint=[0], key=None, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.GridMask(*, angle=0.0, bytes_per_sample_hint=[0], preserve=False, ratio=0.5, shift_x=0.0, shift_y=0.0, tile=100, device=None, name=None)#

执行 GridMask 数据增强 (https://arxiv.org/abs/2001.04086)。

以网格状方式将图像的像素归零。网格由在 x 和 y 方向重复的正方形组成,在两个方向上具有相同的间距。可以围绕原点旋转。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • angle (float 或 TensorList of float, optional, default = 0.0) – 网格旋转的角度,以弧度为单位。

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

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

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

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

  • ratio (float 或 TensorList of float, optional, default = 0.5) – 黑色正方形宽度与瓦片宽度的比率。

  • shift_x (float 或 TensorList of float, optional, default = 0.0) – 平移向量的 x 分量,在旋转后应用。

  • shift_y (float 或 TensorList of float, optional, default = 0.0) – 平移向量的 y 分量,在旋转后应用。

  • tile (int 或 TensorList of int, optional, default = 100) – 单个瓦片的长度,等于黑色正方形的宽度加上它们之间的间距。

__call__(__input, /, *, angle=0.0, bytes_per_sample_hint=[0], preserve=False, ratio=0.5, shift_x=0.0, shift_y=0.0, tile=100, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.Hsv(*, bytes_per_sample_hint=[0], dtype=DALIDataType.UINT8, hue=0.0, preserve=False, saturation=1.0, value=1.0, device=None, name=None)#

调整图像的色调、饱和度和明度(亮度)。

要更改图像的色调、饱和度和/或明度,请传递相应的系数。请记住,hue 是一个加性增量参数,而对于 saturationvalue,参数是乘法的。

此运算符接受 RGB 颜色空间中的图像。

出于性能原因,此操作通过 RGB 空间中的线性变换近似。颜色向量沿中性(灰色)轴投影,基于色调增量旋转,基于值和饱和度乘数缩放,并恢复到原始颜色空间。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

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

    输出数据类型。

    如果未设置值,则使用输入类型。

  • hue (float 或 TensorList of float, optional, default = 0.0) –

    色调增量,以度为单位。

    色调分量可以解释为一个角度,0-360 范围之外的值会像旋转一样环绕。

    支持 per-frame 输入。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

  • saturation (float 或 float 的 TensorList, optional, default = 1.0) –

    饱和度乘数。

    支持 per-frame 输入。

  • value (float 或 float 的 TensorList, optional, default = 1.0) –

    明度乘数。

    支持 per-frame 输入。

__call__(__input, /, *, bytes_per_sample_hint=[0], dtype=DALIDataType.UINT8, hue=0.0, preserve=False, saturation=1.0, value=1.0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'FHWC', 'DHWC')) – 运算符的输入。

class nvidia.dali.ops.Hue(*, bytes_per_sample_hint=[0], dtype=None, hue=0.0, image_type=DALIImageType.RGB, preserve=False, device=None, name=None)#

更改图像的色调级别。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

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

    输出数据类型。

    如果未设置,则使用输入类型。

  • hue (float 或 float 的 TensorList, optional, default = 0.0) –

    色调变化,以度为单位。

    支持 per-frame 输入。

  • image_type (nvidia.dali.types.DALIImageType, optional, default = DALIImageType.RGB) – 输入和输出图像的色彩空间。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__input, /, *, bytes_per_sample_hint=[0], dtype=None, hue=0.0, image_type=DALIImageType.RGB, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'FHWC', 'DHWC')) – 运算符的输入。

class nvidia.dali.ops.ImageDecoder(*, affine=True, bytes_per_sample_hint=[0], cache_batch_copy=True, cache_debug=False, cache_size=0, cache_threshold=0, cache_type='', device_memory_padding=16777216, device_memory_padding_jpeg2k=0, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.65, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, memory_stats=False, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, use_fast_idct=False, device=None, name=None)#

警告

此运算符现已弃用。请使用 decoders.Image() 代替。

在 DALI 1.0 中,所有解码器都已移至专用的 decoders 子模块中,并已重命名以遵循通用模式。这是一个占位符操作符,功能相同,以实现向后兼容性。

用于 decoders.image() 的旧别名。

class nvidia.dali.ops.ImageDecoderCrop(*, affine=True, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, device_memory_padding=16777216, device_memory_padding_jpeg2k=0, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.65, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, memory_stats=False, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, rounding='round', use_fast_idct=False, device=None, name=None)#

警告

此运算符现已弃用。请使用 decoders.ImageCrop() 代替。

在 DALI 1.0 中,所有解码器都已移至专用的 decoders 子模块中,并已重命名以遵循通用模式。这是一个占位符操作符,功能相同,以实现向后兼容性。

用于 decoders.image_crop() 的旧别名。

class nvidia.dali.ops.ImageDecoderRandomCrop(*, affine=True, bytes_per_sample_hint=[0], device_memory_padding=16777216, device_memory_padding_jpeg2k=0, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.65, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, memory_stats=False, num_attempts=10, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, random_area=[0.08, 1.0], random_aspect_ratio=[0.75, 1.333333], seed=-1, use_fast_idct=False, device=None, name=None)#

警告

此运算符现已弃用。请使用 decoders.ImageRandomCrop() 代替。

在 DALI 1.0 中,所有解码器都已移至专用的 decoders 子模块中,并已重命名以遵循通用模式。这是一个占位符操作符,功能相同,以实现向后兼容性。

用于 decoders.image_random_crop() 的旧别名。

class nvidia.dali.ops.ImageDecoderSlice(*, affine=True, axes=[1, 0], axis_names='WH', bytes_per_sample_hint=[0], device_memory_padding=16777216, device_memory_padding_jpeg2k=0, end=None, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.65, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, memory_stats=False, normalized_anchor=True, normalized_shape=True, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, rel_end=None, rel_shape=None, rel_start=None, shape=None, start=None, use_fast_idct=False, device=None, name=None)#

警告

此运算符现已弃用。请使用 decoders.ImageSlice() 代替。

在 DALI 1.0 中,所有解码器都已移至专用的 decoders 子模块中,并已重命名以遵循通用模式。这是一个占位符操作符,功能相同,以实现向后兼容性。

用于 decoders.image_slice() 的旧别名。

class nvidia.dali.ops.Jitter(*, bytes_per_sample_hint=[0], fill_value=0.0, interp_type=DALIInterpType.INTERP_NN, mask=1, nDegree=2, preserve=False, seed=-1, device=None, name=None)#

执行随机抖动增强。

输出图像是通过在 x 和 y 维度上将每个像素移动随机量而生成的,并且以 nDegree 参数的一半为界。

支持的后端
  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • fill_value (float, optional, default = 0.0) – 用于填充的颜色值。

  • interp_type (nvidia.dali.types.DALIInterpType, optional, default = DALIInterpType.INTERP_NN) – 使用的插值类型。

  • mask (int 或 int 的 TensorList, optional, default = 1) –

    确定是否将此增强应用于输入图像。

    以下是这些值:

    • 0:不应用此变换。

    • 1:应用此变换。

  • nDegree (int, optional, default = 2) – 每个像素在 [-nDegree/2, nDegree/2] 范围内移动随机量

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

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

__call__(__input, /, *, bytes_per_sample_hint=[0], fill_value=0.0, interp_type=DALIInterpType.INTERP_NN, mask=1, nDegree=2, preserve=False, seed=-1, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC')) – 运算符的输入。

class nvidia.dali.ops.JpegCompressionDistortion(*, bytes_per_sample_hint=[0], preserve=False, quality=50, device=None, name=None)#

向 RGB 图像引入 JPEG 压缩伪影。

JPEG 是一种有损压缩格式,它利用自然图像和人类视觉系统的特性来实现高压缩率。信息损失源于以低于亮度的空间分辨率对颜色信息进行采样,以及用较低的有效位深度表示图像的高频分量。转换为频域和量化独立应用于 8x8 像素块,这会在块边界引入额外的伪影。

此操作通过对输入进行转换来生成图像,该转换模拟具有给定 quality 因子的 JPEG 压缩,然后进行解压缩。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

  • quality (int 或 int 的 TensorList, optional, default = 50) –

    JPEG 压缩质量,从 1(最低质量)到 100(最高质量)。

    任何超出 1-100 范围的值都将被钳制。

__call__(__input, /, *, bytes_per_sample_hint=[0], preserve=False, quality=50, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'FHWC')) – 算子的输入。

class nvidia.dali.ops.Laplacian(*, bytes_per_sample_hint=[0], dtype=None, normalized_kernel=False, preserve=False, scale=[1.0], smoothing_size=None, window_size=[3], device=None, name=None)#

计算输入的拉普拉斯算子。

拉普拉斯算子计算为关于每个空间维度的二阶偏导数之和。每个偏导数都使用可分离卷积来近似,该卷积在偏导数方向上使用导数窗口,并在剩余轴上使用平滑窗口。

默认情况下,每个偏导数都通过沿所有空间轴卷积来近似:偏导数方向上的轴使用大小为 window_size 的导数窗口,其余轴与相同大小的平滑窗口进行卷积。如果指定了 smoothing_size,则应用于给定轴的平滑窗口的大小可以与导数窗口的大小不同。指定 smoothing_size = 1 意味着在垂直于导数方向的轴上不进行平滑处理。

window_sizesmoothing_size 都可以指定为单个值或每个轴的值。例如,对于体积输入,如果指定了 window_size=[dz, dy, dx]smoothing_size=[sz, sy, sx],则将使用以下窗口

  • 对于 z 方向的偏导数:沿 z 轴大小为 dz 的导数窗口,以及分别沿 yx 轴大小为 sysx 的平滑窗口。

  • 对于 y 方向的偏导数:沿 y 轴大小为 dy 的导数窗口,以及分别沿 zx 轴大小为 szsx 的平滑窗口。

  • 对于 x 方向的偏导数:沿 x 轴大小为 dx 的导数窗口,以及分别沿 zy 轴大小为 szsy 的平滑窗口。

窗口大小和平滑大小必须为奇数。导数窗口的大小必须至少为 3。平滑窗口的大小可以为 1,这意味着沿相应轴不进行平滑处理。

要归一化偏导数,可以使用 normalized_kernel=True。每个偏导数都按 2^(-s + n + 2) 缩放,其中 s 是用于计算给定偏导数的窗口大小之和(包括平滑窗口),n 是数据维度/轴的数量。或者,您可以指定 scale 参数来自定义缩放因子。缩放因子可以是单个值或 n 个值,每个偏导数一个值。

算子使用 32 位浮点数作为中间类型。

注意

通道 C 和帧 F 维度不被视为数据轴。如果存在通道,则仅支持通道优先或通道最后的输入。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

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

    输出数据类型。

    支持的类型:FLOAT。如果未设置,则使用输入类型。

  • normalized_kernel (bool, optional, default = False) – 如果设置为 True,则自动缩放偏导数核。如果指定了 scale,则必须为 False。

  • preserve (bool, optional, default = False) – 即使算子的输出未使用,也阻止从图中删除该算子。

  • scale (float 或 list of float 或 TensorList of float, optional, default = [1.0]) –

    手动缩放偏导数的因子。

    支持 per-frame 输入。

  • smoothing_size (intlist of intTensorList of int, optional) –

    卷积中使用的平滑窗口的大小。

    平滑大小必须为奇数,且介于 1 到 23 之间。

    支持 per-frame 输入。

  • window_size (int 或 list of int 或 TensorList of int, optional, default = [3]) –

    卷积中使用的导数窗口的大小。

    窗口大小必须为奇数,且介于 3 到 23 之间。

    支持 per-frame 输入。

__call__(__input, /, *, bytes_per_sample_hint=[0], dtype=None, normalized_kernel=False, preserve=False, scale=[1.0], smoothing_size=None, window_size=[3], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.LookupTable(*, bytes_per_sample_hint=[0], default_value=0.0, dtype=DALIDataType.FLOAT, keys=[], preserve=False, values=[], device=None, name=None)#

通过使用查找表将输入映射到输出,该查找表由 keysvalues 指定,并为未指定的键使用 default_value

例如,当 keysvalues 用于以下方式定义查找表时

keys[] =   {0,     2,   3,   4,   5,    3}
values[] = {0.2, 0.4, 0.5, 0.6, 0.7, 0.10}
default_value = 0.99

0 <= i < max(keys)
lut[i] = values[keys.index[i]]   if i in keys
lut[i] = default_value           otherwise

算子创建以下表格

lut[] = {0.2, 0.99, 0.4, 0.10, 0.6, 0.7}  // only last occurrence of a key is considered

并根据以下公式生成输出

Output[i] = lut[Input[i]]   if 0 <= Input[i] <= len(lut)
Output[i] = default_value   otherwise

这是一个实际示例,考虑上面定义的表格

Input[] =  {1,      4,    1,   0,  100,   2,     3,   4}
Output[] = {0.99, 0.6, 0.99, 0.2, 0.99, 0.4,  0.10, 0.6}

注意

只有整数类型可以用作此算子的输入。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • default_value (float, optional, default = 0.0) – 表中不存在的键的默认输出值。

  • dtype (nvidia.dali.types.DALIDataType, optional, default = DALIDataType.FLOAT) – 输出数据类型。

  • keys (int 或 list of int, optional, default = []) –

    查找表中的输入值(键)列表。

    keysvalues 参数的长度必须匹配。keys 中的值应在 [0, 65535] 范围内。

  • output_dtype (nvidia.dali.types.DALIDataType) –

    警告

    output_dtype 参数是已弃用的 dtype 的别名。请改用 dtype

  • preserve (bool, optional, default = False) – 即使算子的输出未使用,也阻止从图中删除该算子。

  • values (float 或 list of float, optional, default = []) –

    每个 keys 条目的映射输出 values 列表。

    keysvalues 参数的长度必须匹配。

__call__(__input, /, *, bytes_per_sample_hint=[0], default_value=0.0, dtype=DALIDataType.FLOAT, keys=[], preserve=False, values=[], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.MFCC(*, axis=0, bytes_per_sample_hint=[0], dct_type=2, lifter=0.0, n_mfcc=20, normalize=False, preserve=False, device=None, name=None)#

从梅尔频谱图中计算梅尔频率倒谱系数 (MFCC)。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axis (int, optional, default = 0) –

    将应用变换的轴。

    如果未提供值,将使用最外层维度。

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

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

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

  • dct_type (int, optional, default = 2) –

    离散余弦变换类型。

    支持的类型为 1、2、3、4。用于计算 DCT 的公式等效于 https://en.wikipedia.org/wiki/Discrete_cosine_transform 中描述的公式(数字对应于 https://en.wikipedia.org/wiki/Discrete_cosine_transform#Formal_definition 中列出的类型)。

  • lifter (float, optional, default = 0.0) –

    倒谱滤波系数,也称为提升系数。

    如果提升系数大于 0,则 MFCC 将根据以下公式进行缩放

    MFFC[i] = MFCC[i] * (1 + sin(pi * (i + 1) / lifter)) * (lifter / 2)
    

  • n_mfcc (int, optional, default = 20) – MFCC 系数的数量。

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

    如果设置为 True,则 DCT 使用正交归一化基。

    注意

    当 dct_type=1 时,不支持归一化。

  • preserve (bool, optional, default = False) – 即使算子的输出未使用,也阻止从图中删除该算子。

__call__(__input, /, *, axis=0, bytes_per_sample_hint=[0], dct_type=2, lifter=0.0, n_mfcc=20, normalize=False, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.MXNetReader(*, bytes_per_sample_hint=[0], dont_use_mmap=False, index_path=None, initial_fill=1024, lazy_init=False, num_shards=1, pad_last_batch=False, path=None, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

警告

此算子现在已弃用。请改用 readers.MXNet()

在 DALI 1.0 中,所有 reader 都被移动到了专用的 readers 子模块中,并被重命名以遵循通用模式。这是一个占位符运算符,具有相同的功能,以实现向后兼容性。

用于 readers.mxnet() 的旧别名。

class nvidia.dali.ops.MelFilterBank(*, bytes_per_sample_hint=[0], freq_high=0.0, freq_low=0.0, mel_formula='slaney', nfilter=128, normalize=True, preserve=False, sample_rate=44100.0, device=None, name=None)#

通过应用三角滤波器组将频谱图转换为梅尔频谱图。

频率 ('f') 维度是从输入布局中选择的。如果未指定布局,则假定为 “f”、“ft” 或 “*ft”,具体取决于维度的数量。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • freq_high (float, optional, default = 0.0) –

    最大频率。

    如果未提供此值,则使用 sample_rate/2

  • freq_low (float, optional, default = 0.0) – 最小频率。

  • mel_formula (str, optional, default = ‘slaney’) –

    确定用于将频率从赫兹转换为梅尔以及从梅尔转换为赫兹的公式。

    梅尔尺度是音调的感知尺度,因此没有单一公式。

    支持的值包括

    • slaney,它遵循 Slaney 的 MATLAB Auditory Modelling Work 行为。
      此公式在 1 KHz 以下是线性的,在此值以上是对数的。该实现与 Librosa 的默认实现一致。
    • htk,它遵循 O'Shaughnessy 书中的公式 m = 2595 * log10(1 + (f/700))
      此值与 Hidden Markov Toolkit (HTK) 的实现一致。

  • nfilter (int, optional, default = 128) – 梅尔滤波器的数量。

  • normalize (bool, optional, default = True) –

    确定是否通过其频带宽度来归一化三角形滤波器权重。

    • 如果设置为 True,则滤波器函数的积分为 1。

    • 如果设置为 False,则滤波器函数的峰值为 1。

  • preserve (bool, optional, default = False) – 即使算子的输出未使用,也阻止从图中删除该算子。

  • sample_rate (float, optional, default = 44100.0) – 音频信号的采样率。

__call__(__input, /, *, bytes_per_sample_hint=[0], freq_high=0.0, freq_low=0.0, mel_formula='slaney', nfilter=128, normalize=True, preserve=False, sample_rate=44100.0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.MultiPaste(*, bytes_per_sample_hint=[0], dtype=None, in_anchors=None, in_anchors_rel=None, in_ids=None, out_anchors=None, out_anchors_rel=None, output_size=None, preserve=False, shapes=None, shapes_rel=None, device=None, name=None)#

对每个输出执行来自图像批次的多次粘贴操作。

如果指定了 in_ids,则该算子正好需要一个输入批次。在这种情况下,对于每个输出样本,in_ids 描述了应将输入批次中的哪些样本粘贴到输出批次中的相应样本。

如果省略了 in_ids 参数,则该算子接受多个输入。在这种情况下,来自每个输入批次的第 i 个样本将被粘贴到输出批次的第 i 个样本。所有输入批次必须具有相同的类型和设备放置。

如果输入形状是统一的,并且没有提供显式的 output_size,则该算子假定相同的输出形状(输出画布大小)。否则,必须指定 output_size

此运算符还可以更改数据类型。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • dtype (nvidia.dali.types.DALIDataType, optional) – 输出数据类型。如果未设置,则使用输入类型。

  • in_anchors (intTensorList of int, optional) –

    源区域左上角的绝对坐标。

    锚点表示为 2D 张量,其中第一维度等于粘贴区域的数量,第二维度为 2(表示高度和宽度范围)。

    如果既未提供 in_anchors 也未提供 in_anchors_rel,则所有锚点均为零。

    支持 per-frame 输入。

  • in_anchors_rel (floatTensorList of float, optional) –

    源区域左上角的相对坐标。

    该参数的工作方式与 in_anchors 类似,但值应为 [0, 1] 范围内的浮点数,描述相对于输入样本形状的锚点位置。

    支持 per-frame 输入。

  • in_ids (intlist of intTensorList of int, optional) –

    从中粘贴数据的输入的索引。

    如果指定,则该算子接受正好一个批次作为输入。

  • out_anchors (intTensorList of int, optional) –

    粘贴区域在输出画布中左上角的绝对坐标。

    锚点表示为 2D 张量,其中第一维度等于粘贴区域的数量,第二维度为 2(表示高度和宽度范围)。

    如果既未提供 out_anchors 也未提供 out_anchors_rel,则所有锚点均为零,这使得所有粘贴区域都从输出画布的左上角开始。

    支持 per-frame 输入。

  • out_anchors_rel (floatTensorList of float, optional) –

    粘贴区域在输出画布中左上角的相对坐标。

    工作方式与 out_anchors 参数类似,但值应为 [0, 1] 范围内的浮点数,描述相对于输出画布大小的粘贴区域左上角。

    支持 per-frame 输入。

  • output_size (intlist of intTensorList of int, optional) –

    一个元组 (H, W),描述输出形状(即输出粘贴的画布大小)。

    如果算子使用统一形状的输入运行,则可以省略。在这种情况下,相同的形状将用作画布大小。

  • preserve (bool, optional, default = False) – 阻止算子从图中移除,即使其输出未使用。

  • shapes (intTensorList of int, optional) –

    粘贴区域的形状。

    形状表示为 2D 张量,其中第一维度等于粘贴区域的数量,第二维度为 2(表示高度和宽度范围)。

    如果既未提供 shapes 也未提供 shapes_rel,则会计算形状,使区域从输入锚点跨越到输入图像的末尾。

    支持 per-frame 输入。

  • shapes_rel (floatTensorList of float, optional) –

    粘贴区域的相对形状。

    工作方式与 shape 参数类似,但值应为 [0, 1] 范围内的浮点数,描述相对于输入形状的粘贴区域形状。

    支持 per-frame 输入。

__call__(__input_0, /, *__input_, bytes_per_sample_hint=[0], dtype=None, in_anchors=None, in_anchors_rel=None, in_ids=None, out_anchors=None, out_anchors_rel=None, output_size=None, preserve=False, shapes=None, shapes_rel=None, device=None, name=None)#

有关完整信息,请参见 nvidia.dali.ops.MultiPaste() 类。

class nvidia.dali.ops.NemoAsrReader(*, bytes_per_sample_hint=[0], dont_use_mmap=False, downmix=True, dtype=DALIDataType.FLOAT, initial_fill=1024, lazy_init=False, manifest_filepaths=None, max_duration=0.0, min_duration=0.0, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, quality=50.0, random_shuffle=False, read_ahead=False, read_idxs=False, read_sample_rate=True, read_text=True, sample_rate=-1.0, seed=-1, shard_id=0, shuffle_after_epoch=False, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

警告

此算子现在已弃用。请使用 readers.NemoAsr() 代替。

在 DALI 1.0 中,所有 reader 都被移动到了专用的 readers 子模块中,并被重命名以遵循通用模式。这是一个占位符运算符,具有相同的功能,以实现向后兼容性。

用于 readers.nemo_asr() 的旧版别名。

class nvidia.dali.ops.NonsilentRegion(*, bytes_per_sample_hint=[0], cutoff_db=-60.0, preserve=False, reference_power=0.0, reset_interval=8192, window_length=2048, device=None, name=None)#

在音频缓冲区中执行前导和尾随静音检测。

该算子通过比较为信号的 window_length 计算的短时功率与静音截止阈值,返回非静音区域的起始位置和长度。当 short_term_power_db 小于 cutoff_db 时,信号被认为是静音的。其中

short_term_power_db = 10 * log10( short_term_power / reference_power )

除非另有说明,否则 reference_power 是信号的最大功率。

输入和输出

  • 输入 0 - 1D 音频缓冲区。

  • 输出 0 - 非静音区域中第一个样本的索引。

  • 输出 1 - 非静音区域的长度。

注意

如果 Outputs[1] == 0,则 Outputs[0] 中的值未定义。

警告

目前,此算子的“gpu”后端是根据“cpu”实现来实现的。这会导致输入的设备到主机复制以及输出的主机到设备复制。虽然使用此算子的“gpu”实现本身不会增加任何性能优势,但为了使管道中前面的操作能够在 GPU 上运行,使用它可能是有意义的。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • cutoff_db (float, optional, default = -60.0) – 阈值,以分贝 (dB) 为单位,低于该阈值信号被认为是静音的。

  • preserve (bool, optional, default = False) – 阻止算子从图中移除,即使其输出未使用。

  • reference_power (float, optional, default = 0.0) –

    用于将信号转换为分贝 (dB) 的参考功率。

    如果未提供值,则信号的最大功率将用作参考。

  • reset_interval (int, optional, default = 8192) –

    重新计算移动平均值以避免精度损失的样本数。

    如果 reset_interval == -1,或者输入类型允许精确计算,则平均值将不会重置。默认值可用于大多数用例。

  • window_length (int, optional, default = 2048) – 用于计算信号短时功率的滑动窗口大小。

__call__(__input, /, *, bytes_per_sample_hint=[0], cutoff_db=-60.0, preserve=False, reference_power=0.0, reset_interval=8192, window_length=2048, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.NormalDistribution(*, bytes_per_sample_hint=[0], dtype=None, mean=0.0, preserve=False, seed=-1, shape=None, stddev=1.0, device=None, name=None)#

警告

此算子现在已弃用。请使用 random.Normal() 代替。

生成服从正态分布的随机数。

可以通过 shape 参数显式指定生成数据的形状,或者选择与提供的 __shape_like 输入的形状匹配。如果两者都不存在,则每个样本生成一个值。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

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

    输出数据类型。

    注意

    生成的数字将转换为输出数据类型,并在必要时进行舍入和钳位。

  • mean (float 或 TensorList of float, optional, default = 0.0) – 分布的均值。

  • preserve (bool, optional, default = False) – 阻止算子从图中移除,即使其输出未使用。

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

  • shape (intlist of intTensorList of int, optional) – 输出数据的形状。

  • stddev (float 或 TensorList of float, optional, default = 1.0) – 分布的标准差。

__call__(__shape_like=None, /, *, bytes_per_sample_hint=[0], dtype=None, mean=0.0, preserve=False, seed=-1, shape=None, stddev=1.0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__shape_like (TensorList, optional) – 如果提供,则此输入的形状将用于推断输出的形状。

class nvidia.dali.ops.Normalize(*, axes=[], axis_names='', batch=False, bytes_per_sample_hint=[0], ddof=0, dtype=DALIDataType.FLOAT, epsilon=0.0, mean=None, preserve=False, scale=1.0, shift=0.0, stddev=None, device=None, name=None)#

通过去除均值并除以标准差来归一化输入。

均值和标准差可以在内部为指定的轴子集计算,也可以作为 meanstddev 参数从外部提供。

归一化按照以下公式进行

out = scale * (in - mean) / stddev + shift

该公式假定 outin 是形状相同的张量,但 meanstddev 可以是形状相同的张量、标量或二者的混合。

注意

该表达式遵循 numpy 广播规则。

如果给定的轴被缩减,则非标量 meanstddev 的大小必须为 1,或者与输入的相应大小匹配。如果维度在 axesaxis_names 中列出,则该维度被认为是缩减的。如果 axesaxis_names 参数都不存在,则通过比较输入形状与 mean/stddev 参数的形状来推断缩减轴的集合,但对于批次中的所有张量,缩减轴的集合必须相同。

以下是一些有效参数组合的示例

  1. 维度 0 和 2 的按样本归一化

    axes = 0,2                                        # optional
    input.shape = [ [480, 640, 3], [1080, 1920, 4] ]
    batch = False
    mean.shape =  [ [1, 640, 1], [1, 1920, 1] ]
    stddev = (not supplied)
    

使用这些形状,批次归一化是不可能的,因为非缩减维度在不同样本之间具有不同的大小。

  1. 维度 0 和 1 的批次归一化

    axes = 0,1                                        # optional
    input.shape = [ [480, 640, 3], [1080, 1920, 3] ]
    batch = True
    mean = (scalar)
    stddev.shape =  [ [1, 1, 3] ] ]
    

对于彩色图像,此示例分别对 3 个颜色通道进行归一化,但在整个批次的所有样本中进行归一化。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axes (int 或 list of int, optional, default = []) –

    输入沿其归一化的维度索引。

    默认情况下,使用所有轴,并且轴也可以按名称指定。 有关更多信息,请参见 axis_names

  • axis_names (layout str, optional, default = ‘’) –

    输入中轴的名称。

    轴索引取自输入布局,并且此参数不能与 axes 一起使用。

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

    如果设置为 True,则跨批次中的张量计算均值和标准差。

    此参数还要求非缩减轴中的输入样本形状匹配。

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

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

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

  • ddof (int, optional, default = 0) –

    Bessel 修正的 Delta 自由度。

    方差通过以下公式估算

    sum(Xi - mean)**2 / (N - ddof).
    

    当使用外部提供的标准差时,将忽略此参数。

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

    输出数据类型。

    当使用整数类型时,请使用 shiftscale 以提高输出类型动态范围的利用率。如果 dtype 是整数类型,则超出范围的值将被钳制,非整数值将被四舍五入到最接近的整数。

  • epsilon (float, optional, default = 0.0) – 添加到方差中的值,以避免除以小数字。

  • mean (floatTensorList of float, optional) –

    要从数据中减去的平均值。

    该值可以是标量或与输入具有相同维度的张量批次。每个维度的大小必须与输入的值匹配或等于 1。如果大小为 1,则该值将在此维度中广播。如果未指定值,则从输入计算均值。当 batch 参数设置为 True 时,不能使用非标量均值。

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

  • scale (float, optional, default = 1.0) –

    应用于输出的缩放因子。

    此参数对于整数输出类型很有用。

  • shift (float, optional, default = 0.0) –

    均值将在输出中映射到的值。

    此参数对于无符号输出类型很有用。

  • stddev (floatTensorList of float, optional) –

    用于缩放数据的标准差值。

    有关形状约束的更多信息,请参见 mean 参数。如果未指定值,则从输入计算标准差。当 batch 参数设置为 True 时,不能使用非标量 stddev

__call__(__input, /, *, axes=[], axis_names='', batch=False, bytes_per_sample_hint=[0], ddof=0, dtype=DALIDataType.FLOAT, epsilon=0.0, mean=None, preserve=False, scale=1.0, shift=0.0, stddev=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.NumbaFunction(*, batch_processing=False, blocks=None, bytes_per_sample_hint=[0], in_types=None, ins_ndim=None, out_types=None, outs_ndim=None, preserve=False, run_fn=None, setup_fn=None, threads_per_block=None, device=None, name=None)#

调用 njit 编译的 Numba 函数。

run 函数应该是一个可以在 Numba nopython 模式下编译的 Python 函数。 接受单个输入并产生单个输出的函数应遵循以下定义

def run_fn(out0, in0)

其中 out0in0 是输入和输出张量的 numpy 数组视图。 如果运算符配置为在批处理模式下运行,则数组的第一个维度是样本索引。

请注意,该函数最多可以接受 6 个输入和 6 个输出。

此外,可选的 setup 函数计算输出的形状,以便 DALI 可以为输出分配内存,其定义如下

def setup_fn(outs, ins)

setup 函数为整个批次调用一次。 outsins 的第一个维度分别是输出/输入的数量。 第二个维度是样本索引。 例如,可以通过 outs[1][0] 访问第二个输出上的第一个样本。

如果未提供 setup 函数,则输出形状和数据类型将与输入相同。

注意

此运算符是实验性的,其 API 可能会更改,恕不另行通知。

警告

当管道启用条件执行时,必须采取其他步骤来防止 run_fnsetup_fn 函数被 AutoGraph 重写。 有两种方法可以实现这一点

  1. 在全局作用域(即 pipeline_def 作用域之外)定义函数。

  2. 如果函数是另一个“工厂”函数的结果,则工厂函数必须在管道定义函数之外定义,并使用 @do_not_convert 修饰。

更多详细信息可以在 @do_not_convert 文档中找到。

示例 1

以下示例显示了一个简单的 setup 函数,该函数置换形状中维度的顺序。

def setup_change_out_shape(outs, ins):
    out0 = outs[0]
    in0 = ins[0]
    perm = [1, 0, 2]
    for sample_idx in range(len(out0)):
        for d in range(len(perm)):
            out0[sample_idx][d] = in0[sample_idx][perm[d]]

由于 setup 函数是为整个批次运行的,因此我们需要迭代并单独置换每个样本的形状。 对于 shapes = [(10, 20, 30), (20, 10, 30)],它将生成 shapes = [(20, 10, 30), (10, 20, 30)] 的输出。

此外,让我们提供 run 函数

def run_fn(out0, in0):
    for i in range(in0.shape[0]):
        for j in range(in0.shape[1]):
            out0[j, i] = in0[i, j]

run 函数可以按样本或按批次工作,具体取决于 batch_processing 参数。

按批次工作的 run 函数可能如下所示

def run_fn(out0_samples, in0_samples):
    for out0, in0 in zip(out0_samples, in0_samples):
        for i in range(in0.shape[0]):
            for j in range(in0.shape[1]):
                out0[j, i] = in0[i, j]

按样本工作的 run 函数可能如下所示

def run_fn(out0, in0):
    for i in range(in0.shape[0]):
        for j in range(in0.shape[1]):
            out0[j, i] = in0[i, j]

此运算符允许序列输入并支持体积数据。

此操作符将不会从图中优化掉。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • batch_processing (bool, optional, default = False) –

    确定函数是为每个批次调用一次,还是为批次中的每个样本单独调用。

    batch_processing 设置为 True 时,该函数处理整个批次。 如果函数必须执行跨样本操作,并且如果可以重用大部分工作,则这是必要的,并且可能是有益的。 对于其他用例,指定 False 并使用按样本处理函数允许运算符并行处理样本。

  • blocks (intlist of int, optional) –

    3 项列表,指定每个网格的块数,用于

    执行 CUDA 内核

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

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

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

  • in_types (DALIDataTypelist of DALIDataType) – 输入的类型。

  • ins_ndim (intlist of int) – 输入形状应具有的维度数。

  • out_types (DALIDataTypelist of DALIDataType) – 输出的类型。

  • outs_ndim (intlist of int) – 输出形状应具有的维度数。

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

  • run_fn (object) – 要调用的函数。 此函数必须在 Numba nopython 模式下工作。

  • setup_fn (object, optional) – 设置输出形状的 Setup 函数。 此函数每个批次调用一次。 此外,此函数必须在 Numba nopython 模式下工作。

  • threads_per_block (intlist of int, optional) –

    3 项列表,指定每个线程数

    用于执行 CUDA 内核的块

__call__(__input_0, __input_1=None, __input_2=None, __input_3=None, __input_4=None, __input_5=None, /, *, batch_processing=False, blocks=None, bytes_per_sample_hint=[0], in_types=None, ins_ndim=None, out_types=None, outs_ndim=None, preserve=False, run_fn=None, setup_fn=None, threads_per_block=None, device=None, name=None)#

有关完整信息,请参见 nvidia.dali.ops.NumbaFunction() 类。

class nvidia.dali.ops.NumpyReader(*, bytes_per_sample_hint=[0], cache_header_information=False, dont_use_mmap=False, file_filter='*.npy', file_list=None, file_root=None, files=None, fill_value=0.0, initial_fill=1024, lazy_init=False, num_shards=1, out_of_bounds_policy='error', pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, register_buffers=True, rel_roi_end=None, rel_roi_shape=None, rel_roi_start=None, roi_axes=[], roi_end=None, roi_shape=None, roi_start=None, seed=-1, shard_id=0, shuffle_after_epoch=False, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, use_o_direct=False, device=None, name=None)#

警告

此运算符现在已弃用。 请改用 readers.Numpy()

在 DALI 1.0 中,所有 reader 都被移动到了专用的 readers 子模块中,并被重命名以遵循通用模式。这是一个占位符运算符,具有相同的功能,以实现向后兼容性。

用于 readers.numpy() 的旧别名。

class nvidia.dali.ops.OneHot(*, axis=-1, axis_name=None, bytes_per_sample_hint=[0], dtype=DALIDataType.FLOAT, num_classes=0, off_value=0.0, on_value=1.0, preserve=False, device=None, name=None)#

生成输入的 one-hot 编码。

添加新轴或将标量输入转换为 num_classes 元素的轴。

对于给定的输入坐标 (x0, x1, ..., xn)axis = k,输出样本指定为

cls = input[x0, x1, ..., xn]
output[x0, x1, ..., xk-1, i, xk, ..., xn] = on_value if i == cls else off_value

对于范围 [0, num_classes) 中的所有 i

对于标量,输出在从 input 获取的索引处设置为 on_value,在其他位置设置为 off_value

output[i] = on_value if i == input else off_value

为了向后兼容,所有张量中只有一个元素的任何输入(无论维度数量如何)都被视为标量。 如果指定了 axis 参数,则不支持将张量解释为标量的旧版方式。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axis (int, optional, default = -1) – 用于放置大小为 num_classes 的 one-hot 编码轴的维度。 默认情况下,对于非标量输入,它作为最后一个维度附加。 对于标量输入,它成为唯一的维度。

  • axis_name (str, optional) – 将用作输出布局中新添加维度的名称的单个字符。 如果未提供字符,则输出布局将为空。

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, optional, default = DALIDataType.FLOAT) – 输出数据类型。

  • num_classes (int, optional, default = 0) – 数据中所有类别的数量。

  • off_value (float, optional, default = 0.0) –

    将用于填充输出的值,以指示相应输入坐标中缺少给定类别。

    此值将强制转换为 dtype 类型。

  • on_value (float, optional, default = 1.0) –

    用于填充输出的值,以指示相应输入坐标中的给定类别。

    此值将强制转换为 dtype 类型。

  • preserve (bool, optional, default = False) – 阻止运算符从图中删除,即使其输出未使用。

__call__(__input, /, *, axis=-1, axis_name=None, bytes_per_sample_hint=[0], dtype=DALIDataType.FLOAT, num_classes=0, off_value=0.0, on_value=1.0, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.Ones(*, bytes_per_sample_hint=[0], dtype=DALIDataType.INT32, preserve=False, shape=None, device=None, name=None)#

返回使用 1 填充的给定形状和类型的新数据。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

  • dtype (nvidia.dali.types.DALIDataType, optional, default = DALIDataType.INT32) – 输出数据类型。

  • preserve (bool, optional, default = False) – 阻止运算符从图中删除,即使其输出未使用。

  • shape (int or list of int or TensorList of int, optional) – 输出数据的形状。

__call__(*, bytes_per_sample_hint=[0], dtype=DALIDataType.INT32, preserve=False, shape=None, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.OnesLike(*, bytes_per_sample_hint=[0], dtype=DALIDataType.INT32, preserve=False, device=None, name=None)#

返回与输入数组具有相同形状和类型,并用 1 填充的新数据。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

  • dtype (nvidia.dali.types.DALIDataType, optional, default = DALIDataType.INT32) – 覆盖输出数据类型。

  • preserve (bool, optional, default = False) – 阻止运算符从图中删除,即使其输出未使用。

__call__(__data_like, /, *, bytes_per_sample_hint=[0], dtype=DALIDataType.INT32, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__data_like (TensorList) – 用于复制形状和类型的输入数据值。

class nvidia.dali.ops.OpticalFlow(*, bytes_per_sample_hint=[0], enable_external_hints=False, enable_temporal_hints=False, hint_grid=4, image_type=DALIImageType.RGB, output_grid=4, preserve=False, preset=0.0, device=None, name=None)#

计算输入图像之间光流。

此运算符的主要输入是帧序列。 可选地,可以为运算符提供用于光流计算的外部提示。 此运算符的输出格式与光流驱动程序 API 的输出格式匹配。 有关 DALI 使用的 Turing、Ampere 和 Hopper 光流硬件的更多信息,请参阅 https://developer.nvidia.com/opticalflow-sdk

注意

计算出的光流始终与输入图像的分辨率有关,但是输出光流图像可以是较低的分辨率,由 output_grid 决定。 相反,如果您希望光流矢量与此运算符的输出分辨率一致,则必须将输出矢量场除以 output_grid

此运算符允许序列输入。

支持的后端
  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

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

    启用或禁用光流计算的外部提示。

    外部提示类似于时间提示,但唯一的区别是外部提示来自外部源。 启用此选项后,运算符需要两个输入。

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

    为长度超过两个图像的序列启用或禁用时间提示。

    这些提示用于提高输出运动场质量并加快计算速度。 这些提示在存在大位移或可能使光流算法混淆的周期性模式时特别有用。)

  • hint_grid (int, optional, default = 4) –

    设置提示矢量场的网格大小。

    这些提示用于提高输出运动场质量并加快计算速度。 网格分辨率可以设置为与输出不同的值。

    注意

    目前,Ampere 仅支持 1、2、4 和 8,Turing 仅支持 4。

  • image_type (nvidia.dali.types.DALIImageType, optional, default = DALIImageType.RGB) – 输入颜色空间(RGB、BGR 或 GRAY)。

  • output_format (int) –

    警告

    参数 output_formatoutput_grid 的已弃用的别名。 请改用 output_grid

  • output_grid (int, optional, default = 4) –

    设置输出矢量场的网格大小。

    此运算符生成比输入像素更粗糙分辨率的运动矢量场。 此参数指定与一个运动矢量相对应的像素网格单元的大小。 例如,值 4 将为每个 4x4 像素块生成一个运动矢量。 因此,要将光流与 output_grid 为 4 的参数一起使用以重采样全分辨率图像,则在缩放矢量量的情况下对流场进行上采样。

    注意

    目前,Ampere 仅支持 1、2 和 4,Turing 仅支持 4。

  • preserve (bool, optional, default = False) – 阻止运算符从图中删除,即使其输出未使用。

  • preset (float, optional, default = 0.0) –

    光流计算的速度和质量级别。

    允许的值为

    • 0.0 是最低速度和最佳质量。

    • 0.5 是中等速度和质量。

    • 1.0 是最快速度和最低质量。

    速度越低,用于增强光流结果质量的额外预处理和后处理就越多。

__call__(__input_0, __input_1=None, /, *, bytes_per_sample_hint=[0], enable_external_hints=False, enable_temporal_hints=False, hint_grid=4, image_type=DALIImageType.RGB, output_grid=4, preserve=False, preset=0.0, device=None, name=None)#

有关完整信息,请参见 nvidia.dali.ops.OpticalFlow() 类。

class nvidia.dali.ops.Pad(*, align=[], axes=[], axis_names='', bytes_per_sample_hint=[0], fill_value=0.0, preserve=False, shape=[], device=None, name=None)#

使用 fill_value 在指定的轴上填充所有样本,以匹配这些轴中批次的最大范围,或匹配指定的最小形状。

以下是一些示例

样本在第一个轴上填充,以匹配最大样本的范围。

input  = [[3,   4,   2,   5,   4],
          [2,   2],
          [3, 199,   5]];
output = [[3,   4,   2,   5,   4],
          [2,   2,  -1,  -1,  -1],
          [3, 199,   5,  -1,  -1]]

样本在第一个轴上填充到最小范围 7。

input  = [[3,   4,   2,   5,   4],
          [2,   2],
          [3, 199,   5],
          [1,   2,   3,   4,   5,   6,   7,   8]];
output = [[3,   4,   2,   5,   4,  -1,  -1],
          [2,   2,  -1,  -1,  -1,  -1,  -1],
          [3, 199,   5,  -1,  -1,  -1,  -1],
          [1,   2,   3,   4,   5,   6,   7,   8]]

样本在第一个轴上填充,以匹配最大样本的范围和对齐要求。 输出范围为 8,这是将最大范围 (5) 向上舍入到对齐 (4) 的倍数的结果。

input  = [[3,   4,   2,   5,   4],
          [2,   2],
          [3, 199,   5]];
output = [[3,   4,   2,   5,   4,  -1,  -1,  -1],
          [2,   2,  -1,  -1,  -1,  -1,  -1,  -1],
          [3, 199,   5,  -1,  -1,  -1,  -1,  -1]]

样本仅在第一个轴上填充以匹配对齐要求。 最小范围 (shape) 设置为 1,以避免除对齐所需的任何填充之外的任何填充。

input  = [[3,   4,   2,   5,   4],
          [2,   2],
          [3, 199,   5]];
output = [[3,   4,   2,   5,   4,  -1],
          [2,   2],
          [3, 199,   5,  -1]]

样本在第二个轴上填充,以匹配最大样本的范围,并使用自定义填充值 42 而不是默认值 0。

input  = [[[1,  2,  3,  4],
           [5,  6,  7,  8]],
          [[1,  2],
           [4,  5]]]
output = [[[1,  2,  3,  4],
           [5,  6,  7,  8]],
          [[1,  2, 42, 42],
           [4,  5, 42, 42]]]

样本在第一个和第二个轴上填充,以匹配每个轴的对齐要求。

input  = [[[1,  2,  3,  4],
           [5,  6,  7,  8],
           [9, 10, 11, 12]],
          [[1, 2],
           [4, 5]]]
output = [[[1,  2,  3,  4,  0],
           [5,  6,  7,  8,  0],
           [9, 10, 11, 12,  0],
           [0,  0,  0,  0,  0]],
          [[1,  2,  0,  0,  0],
           [4,  5,  0,  0,  0],
           [0,  0,  0,  0,  0],
           [0,  0,  0,  0,  0]]]

样本在第一个轴上填充以匹配最小范围 4,在第二个轴上填充以匹配批次中最大样本和对齐 2。

input  = [[[1,  2,  3],
           [4,  5,  6]],
          [[1, 2],
           [4, 5],
           [6, 7]]]
output = [[[1,  2,  3,  0],
           [4,  5,  6,  0],
           [0,  0,  0,  0],
           [0,  0,  0,  0]],
          [[1,  2,  0,  0],
           [4,  5,  0,  0],
           [6,  7,  0,  0],
           [0,  0,  0,  0]]]
支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • align (int or list of int or TensorList of int, optional, default = []) –

    如果指定,则此参数确定由 axesaxis_names 指定的维度上的对齐方式。

    axis = axes[i] 上的范围将调整为 align[i] 的倍数。

    如果提供整数值,则对齐限制将应用于所有填充轴。

    要仅使用对齐,即没有任何默认或显式填充行为,请将指定轴的最小 shape 设置为 1。

  • axes (int or list of int or TensorList of int, optional, default = []) –

    批次样本将在其上填充的轴的索引。

    负值被解释为从后面计数维度。 有效范围:[-ndim, ndim-1],其中 ndim 是输入数据中的维度数。

    axis_namesaxes 参数是互斥的。 如果 axesaxis_names 为空,或未提供,则输出将在所有轴上填充。

  • axis_names (layout str, optional, default = ‘’) –

    批次样本将在其上填充的轴的名称。

    axis_namesaxes 参数是互斥的。 如果 axesaxis_names 为空,或未提供,则输出将在所有轴上填充。

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

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

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

  • fill_value (float or TensorList of float, optional, default = 0.0) – 用于填充批次的值。

  • preserve (bool, optional, default = False) – 阻止运算符从图中删除,即使其输出未使用。

  • shape (int or list of int or TensorList of int, optional, default = []) –

    axesaxis_names 指定的轴中输出形状的范围。

    为轴指定 -1 会恢复默认行为,即将轴扩展为容纳批次中最大样本的对齐大小。

    如果提供的范围小于样本的范围,则将仅应用填充以匹配所需的对齐方式。 例如,要禁用轴中的填充,除了对齐所需的填充外,可以指定值 1。

__call__(__input, /, *, align=[], axes=[], axis_names='', bytes_per_sample_hint=[0], fill_value=0.0, preserve=False, shape=[], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.Paste(*, bytes_per_sample_hint=[0], fill_value=None, min_canvas_size=0.0, n_channels=3, paste_x=0.5, paste_y=0.5, preserve=False, ratio=None, device=None, name=None)#

将输入图像粘贴到更大的画布上,其中画布大小等于 input size * ratio

支持的后端
  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

  • fill_value (int or list of int) –

    用于填充画布的颜色的值元组。

    元组的长度必须等于 n_channels 的长度。

  • min_canvas_size (float 或 float 的 TensorList,可选,默认值 = 0.0) – 强制执行在按比例缩放输入尺寸后,粘贴画布的最小尺寸。

  • n_channels (int,可选,默认值 = 3) – 图像中的通道数。

  • paste_x (float 或 float 的 TensorList,可选,默认值 = 0.5) – 粘贴在 (0.0 - 1.0) 图像坐标中的水平位置。

  • paste_y (float 或 float 的 TensorList,可选,默认值 = 0.5) – 粘贴在 (0.0 - 1.0) 图像坐标中的垂直位置。

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也防止从图中删除该运算符。

  • ratio (floatfloatTensorList) – 画布尺寸与输入尺寸的比率。必须 >= 1。

__call__(__input, /, *, bytes_per_sample_hint=[0], fill_value=None, min_canvas_size=0.0, n_channels=3, paste_x=0.5, paste_y=0.5, preserve=False, ratio=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC')) – 运算符的输入。

class nvidia.dali.ops.PeekImageShape(*, bytes_per_sample_hint=[0], dtype=DALIDataType.INT64, preserve=False, device=None, name=None)#

获取编码图像的形状。

此运算符返回图像解码后的形状。

注意

不建议将此运算符与动态执行器(管道构造函数中的 exec_dynamic=True)一起使用。请在解码后的图像上使用 nvidia.dali.pipeline.DataNode.shape() 代替。

支持的后端
  • ‘cpu’

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

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

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

  • dtype (nvidia.dali.types.DALIDataType,可选,默认值 = DALIDataType.INT64) – 尺寸转换的数据类型。

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也防止从图中删除该运算符。

  • type (nvidia.dali.types.DALIDataType) –

    警告

    参数 typedtype 的已弃用别名。请改用 dtype

__call__(__input, /, *, bytes_per_sample_hint=[0], dtype=DALIDataType.INT64, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.PerFrame(*, 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’

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

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

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

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也防止从图中删除该运算符。

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

__call__(__input, /, *, bytes_per_sample_hint=[0], preserve=False, replace=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.PermuteBatch(*, bytes_per_sample_hint=[0], indices=None, preserve=False, device=None, name=None)#

返回一个张量批次,该批次通过根据 indices 参数中给出的索引从输入中选择张量来构建

out_tensor[i] = in_tensor[indices[i]]
支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • indices (intint 列表或 intTensorList) –

    索引列表,与当前批次大小匹配,或表示输入批次中张量索引的标量批次。

    索引必须在 [0..batch_size) 范围内。允许重复和省略。

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也防止从图中删除该运算符。

__call__(__input, /, *, bytes_per_sample_hint=[0], indices=None, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.PowerSpectrum(*, axis=-1, bytes_per_sample_hint=[0], nfft=None, power=2, preserve=False, device=None, name=None)#

计算信号的功率谱。

支持的后端
  • ‘cpu’

关键词参数:
  • axis (int,可选,默认值 = -1) –

    要转换为频域的维度的索引。

    默认情况下,选择最后一个维度。

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

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

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

  • nfft (int, 可选) –

    FFT 的大小。

    默认情况下,选择 nfft 以匹配变换轴中数据的长度。

    输出中创建的 bin 的数量使用以下公式计算

    nfft // 2 + 1
    

    注意

    输出仅表示频谱的正半部分。

  • power (int,可选,默认值 = 2) –

    FFT 幅度的指数。

    支持的值包括

    • 2 用于功率谱 (real*real + imag*imag)

    • 1 用于复数幅度 (sqrt(real*real + imag*imag))

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也防止从图中删除该运算符。

__call__(__input, /, *, axis=-1, bytes_per_sample_hint=[0], nfft=None, power=2, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.PreemphasisFilter(*, border='clamp', bytes_per_sample_hint=[0], dtype=DALIDataType.FLOAT, preemph_coeff=0.97, preserve=False, device=None, name=None)#

将预加重滤波器应用于输入数据。

此滤波器以简单形式,可以用公式表示

Y[t] = X[t] - coeff * X[t-1]    if t > 1
Y[t] = X[t] - coeff * X_border  if t == 0

其中 XY 分别是输入和输出信号。

X_border 的值取决于 border 参数

X_border = 0                    if border_type == 'zero'
X_border = X[0]                 if border_type == 'clamp'
X_border = X[1]                 if border_type == 'reflect'
支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • border (str,可选,默认值 = ‘clamp’) – 边界值策略。可能的值为 “zero”、“clamp”、“reflect”。

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

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

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

  • dtype (nvidia.dali.types.DALIDataType,可选,默认值 = DALIDataType.FLOAT) – 输出的数据类型。

  • preemph_coeff (float 或 float 的 TensorList,可选,默认值 = 0.97) – 预加重系数 coeff

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也防止从图中删除该运算符。

__call__(__input, /, *, border='clamp', bytes_per_sample_hint=[0], dtype=DALIDataType.FLOAT, preemph_coeff=0.97, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.PythonFunction(function, num_outputs=1, device='cpu', batch_processing=False, **kwargs)#

执行 Python 函数。

此运算符可用于在 DALI 管道中执行自定义 Python 代码。对于 CPU 运算符,该函数从 DALI 接收数据作为 NumPy 数组;对于 GPU 运算符,则接收 CuPy 数组。预期以相同格式返回结果。对于更通用的数据格式,请参阅 nvidia.dali.fn.dl_tensor_python_function()。该函数不应修改输入张量。

警告

此操作符与 TensorFlow 集成不兼容。

警告

当管道启用条件执行时,必须采取其他步骤以防止 function 被 AutoGraph 重写。有两种方法可以实现这一点

  1. 在全局作用域(即 pipeline_def 作用域之外)定义函数。

  2. 如果函数是另一个“工厂”函数的结果,则工厂函数必须在管道定义函数外部定义,并使用 @do_not_convert 装饰。

更多详细信息可以在 @do_not_convert 文档中找到。

此运算符允许序列输入并支持体积数据。

此操作符将不会从图中优化掉。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • batch_processing (bool,可选,默认值 = False) –

    确定函数是每个批次调用一次,还是为批次中的每个样本单独调用。

    如果设置为 True,则该函数将接收其参数作为 NumPy 或 CuPy 数组的列表,分别用于 CPU 和 GPU 后端。

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

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

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

  • function (object) –

    定义操作符功能的可调用对象。

    警告

    该函数不得持有对其使用的 pipeline 的引用。如果持有,将形成对 pipeline 的循环引用,并且 pipeline 将永远不会被释放。

  • num_outputs (int,可选,默认值 = 1) – 输出数量。

  • output_layouts (布局字符串布局字符串 列表,可选) –

    输出的张量数据布局。

    此参数可以是列表,其中包含每个输出的不同布局。如果列表的元素少于 num_outputs,则仅设置前几个输出的布局,其余输出不分配布局。

  • preserve (bool,可选,默认值 = False) – 即使运算符的输出未使用,也防止从图中删除该运算符。

static current_stream()#

获取 DALI 当前的 CUDA 流。

class nvidia.dali.ops.ROIRandomCrop(*, bytes_per_sample_hint=[0], crop_shape=None, in_shape=None, preserve=False, roi_end=None, roi_shape=None, roi_start=None, seed=-1, device=None, name=None)#

生成固定形状的裁剪窗口,随机放置,以便尽可能多地包含提供的感兴趣区域 (ROI)。

如果 ROI 大于裁剪窗口,则裁剪窗口将是 ROI 的子窗口。如果 ROI 小于裁剪窗口,则整个 ROI 应包含在裁剪窗口中。

如果给定了输入形状 (in_shape),则生成的裁剪窗口将选择在输入形状的边界内。 或者,可以将要裁剪的输入数据传递给算子。 当提供输入形状时,感兴趣区域应在输入的边界内,并且裁剪窗口形状不应大于输入形状。

如果未提供输入形状,则生成的裁剪窗口将是无界的,可能会导致越界裁剪。

裁剪窗口尺寸应显式提供 (crop_shape),并且 ROI 应使用 roi_start/roi_endroi_start/roi_shape 来指定。

该算子生成表示裁剪窗口起始坐标的输出。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • crop_shape (intlist of intTensorList of int) – 裁剪窗口尺寸。

  • in_shape (intlist of intTensorList of int, optional) –

    输入数据的形状。

    如果提供,裁剪窗口的起始位置将被选择为使裁剪窗口在输入的边界内。

    注意

    提供 in_shape 与直接将输入数据作为位置输入传递不兼容。

  • preserve (bool, optional, default = False) – 即使其输出未使用,也防止从图中删除算子。

  • roi_end (intlist of intTensorList of int, optional) –

    ROI 结束坐标。

    注意

    使用 roi_endroi_shape 互斥。

  • roi_shape (intlist of intTensorList of int, optional) –

    ROI 形状。

    注意

    使用 roi_shaperoi_end 互斥。

  • roi_start (intlist of intTensorList of int) – ROI 起始坐标。

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

__call__(__input=None, /, *, bytes_per_sample_hint=[0], crop_shape=None, in_shape=None, preserve=False, roi_end=None, roi_shape=None, roi_start=None, seed=-1, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.RandomBBoxCrop(*, all_boxes_above_threshold=True, allow_no_crop=True, aspect_ratio=[1.0, 1.0], bbox_layout='', bbox_prune_threshold=None, bytes_per_sample_hint=[0], crop_shape=[], input_shape=[], ltrb=True, num_attempts=1, output_bbox_indices=False, preserve=False, scaling=[1.0, 1.0], seed=-1, shape_layout='', threshold_type='iou', thresholds=[0.0], total_num_attempts=-1, device=None, name=None)#

对图像坐标空间应用前瞻性的随机裁剪,同时保持边界框以及可选的标签的一致性。

这意味着在对图像坐标空间应用随机裁剪算子后,将调整或过滤掉边界框以匹配裁剪后的 ROI。 应用的随机裁剪操作受提供给算子的参数约束。

随机选择裁剪窗口候选区域,直到其中一个区域符合由 thresholds 参数指定的重叠限制。 thresholds 值表示由 threshold_type 指定的最小重叠度量,例如裁剪窗口与边界框的交并比,或作为交集区域与边界框区域之比的相对重叠度。

此外,如果 allow_no_crop 为 True,则可以完全跳过裁剪,作为算子的有效结果之一。

以下是随机裁剪的可用模式

  • 随机形状的窗口,随机放置在原始输入空间中。
    选择随机裁剪窗口尺寸以满足宽高比和相对区域限制。
    如果提供 input_shape,则在宽高比范围检查时会考虑它。
    否则,宽高比将以相对术语计算。
    换句话说,在没有 input_shape 的情况下,宽高比 1.0 等效于输入图像的宽高比。
  • 固定大小的窗口,随机放置在原始输入空间中。
    随机裁剪窗口尺寸取自 crop_shape 参数,锚点是
    随机选择的。
    当提供 crop_shape 时,也需要 input_shape (这些尺寸是缩放输出边界框所必需的)。
    缩放输出边界框)。

num_attempts 参数可用于控制尝试生成有效裁剪以匹配 thresholds 中的最小重叠度量值的最大次数。

警告

allow_no_crop 为 False 且 thresholds 不包含 0.0 时,如果不增加 num_attempts 值,则可能会持续循环很长时间。

输入 0: bboxes, (1: labels)

第一个输入 bboxes 指的是作为二维张量提供的边界框,其中第一维指的是边界框的索引,第二维指的是坐标的索引。

坐标是相对于原始图像尺寸的(这意味着范围为 [0.0, 1.0]),表示区域的起始位置,以及取决于 bbox_layout 的值,区域的结束位置或起始位置和形状。 例如,bbox_layout=”xyXY” 表示边界框坐标遵循 start_xstart_yend_xend_y 顺序,而 bbox_layout=”xyWH” 表示顺序为 start_xstart_ywidthheight。 有关更多信息,请参阅 bbox_layout 参数描述。

可以提供可选的输入 labels,表示与每个边界框关联的标签。

输出 0: anchor, 1: shape, 2: bboxes (, 3: labels, 4: bboxes_indices)

生成的裁剪参数作为两个单独的输出 anchorshape 提供,可以直接馈送到 nvidia.dali.fn.slice() 算子,以完成原始图像的裁剪。 anchorshape 包含裁剪的起始坐标和尺寸,格式分别为 [x, y, (z)][w, h, (d)]。 坐标可以用绝对或相对术语表示,表示形式取决于是否使用了固定的 crop_shape

注意

anchorshape 都作为 float 返回,即使由于提供了 crop_shape 参数,它们表示绝对坐标也是如此。 为了使 nvidia.dali.fn.slice() 正确解释它们,应将 normalized_anchornormalized_shape 设置为 False。

第三个输出包含边界框,在通过质心或面积阈值进行过滤后(请参阅 bbox_prune_threshold 参数),并且坐标已映射到新的坐标空间。

下一个输出是可选的,它表示与已过滤的边界框关联的标签。 如果提供了标签输入,则将显示该输出。

最后一个输出也是可选的,对应于通过上述过滤过程并存在于输出中的边界框的原始索引。 如果选项 output_bbox_indices 设置为 True,则将显示此输出。

支持的后端
  • ‘cpu’

关键词参数:
  • all_boxes_above_threshold (bool, optional, default = True) –

    如果设置为 True,则样本中的所有边界框都应按照 thresholds 的指定与裁剪窗口重叠。

    如果边界框不重叠,则裁剪窗口被视为无效。 如果设置为 False,并且至少一个边界框与窗口重叠,则该窗口被视为有效。

  • allow_no_crop (bool, optional, default = True) – 如果设置为 True,则随机过程的可能结果之一将是不裁剪,就像结果是要选择的另一个 thresholds 值一样。

  • aspect_ratio (float 或 list of float, optional, default = [1.0, 1.0]) –

    裁剪窗口的有效宽高比范围。

    此参数可以指定为两个值(最小值,最大值)或六个值(三对),具体取决于输入的维度。

    • 对于 2D 边界框,应提供一个有效宽高比 (x/y) 范围(例如 [min_xy, max_xy])。
    • 对于 3D 边界框,可以为 x/y、x/z 和 y/z 尺寸对指定三个单独的宽高比范围。
      它们按以下顺序提供 [min_xy, max_xy, min_xz, max_xz, min_yz, max_yz]。 或者,如果仅提供一个宽高比范围,则它将用于所有三对尺寸。

    min 的值应大于 0.0,并且 min 应小于或等于 max 值。 默认情况下,生成正方形窗口。

    注意

    提供 aspect_ratioscaling 与显式指定 crop_shape 不兼容。

    注意

    如果提供 input_shape,则在计算裁剪窗口宽高比时会考虑它。 否则,宽高比范围是相对于图像尺寸的。 换句话说,当未指定 input_shape 时,宽高比 1.0 等效于图像的原始宽高比。

  • bbox_layout (layout str, optional, default = ‘’) –

    确定边界框坐标的含义。

    此参数的值是包含以下字符的字符串

    x (horizontal start anchor), y (vertical start anchor), z (depthwise start anchor),
    X (horizontal end anchor),   Y (vertical end anchor),   Z (depthwise end anchor),
    W (width),                   H (height),                D (depth).
    

    注意

    如果此值留空,则根据维度数,假定为 “xyXY” 或 “xyzXYZ”。

  • bbox_prune_threshold (float, optional) –

    控制何时将边界框视为在 ROI 之外并被修剪。 如果设置此参数,则当框在 ROI 内的面积比例大于或等于指定的阈值 [0.0,1.0] 时,将保留这些框。 如果设置此参数,则当框的质心在 ROI 之外时,将修剪这些框。

    例如,当 bbox_prune_threshold=0.2 时,至少有 20% 的原始面积在 ROI 内的边界框将被保留,小于或等于该比例的边界框将被修剪。 如果 bbox_prune_threshold=0.0,则在 ROI 中具有一定存在的框都将被保留。

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

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

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

  • crop_shape (int 或 list of int 或 TensorList of int, optional, default = []) –

    如果提供,则随机裁剪窗口尺寸将固定为该形状。

    尺寸的顺序由 shape_layout 中提供的布局确定。

    注意

    当提供 crop_shape 时,也应提供 input_shape。 提供显式的 crop_shape 与使用 scalingaspect_ratio 参数不兼容。

  • input_shape (int 或 list of int 或 TensorList of int, optional, default = []) –

    指定原始输入图像的形状。

    尺寸的顺序由 shape_layout 中提供的布局确定。

  • ltrb (bool, optional, default = True) –

    如果设置为 True,则边界框将作为 [left, top, right, bottom] 返回; 否则,它们将作为 [left, top, width, height] 提供。

    警告

    此参数已弃用。 要指定边界框编码,请改用 bbox_layout。 例如,ltrb=True 等于 bbox_layout=”xyXY”,而 ltrb=False 对应于 bbox_layout=”xyWH”。

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

    尝试获取与 aspect_ratio 和从 thresholds 中选择的值匹配的裁剪窗口的次数。

    在每次 num_attempts 之后,将选择不同的阈值,直到阈值达到最大值 total_num_attempts(如果提供),否则将无限期地继续。

  • output_bbox_indices (bool, optional, default = False) – 如果设置为 True,将返回一个额外的输出,其中包含通过质心过滤器并在输出边界框中存在的边界框的原始索引。

  • preserve (bool, optional, default = False) – 即使算子的输出未被使用,也防止其从图中移除。

  • scaling (float or list of float, optional, default = [1.0, 1.0]) –

    范围 [min, max],表示裁剪尺寸相对于原始图像尺寸的比例。

    `min` 和 `max` 的值必须满足条件 0.0 <= min <= max

    注意

    当显式指定 crop_shape 值时,提供 aspect_ratioscaling 是不兼容的。

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

  • shape_layout (布局字符串, optional, default = ‘’) –

    确定在 crop_shapeinput_shape 中提供的维度的含义。

    取值如下:

    • W (宽度)

    • H (高度)

    • D (深度)

    注意

    如果留空,将根据维度数量假定为 “WH” 或 “WHD”。

  • threshold_type (str, optional, default = ‘iou’) –

    确定 thresholds 的含义。

    默认情况下,thresholds 指的是边界框相对于裁剪窗口的交并比 (IoU)。或者,阈值可以设置为 “overlap” 以指定边界框将落在裁剪窗口内的面积比例。例如,阈值 1.0 表示整个边界框必须包含在结果裁剪窗口中。

  • thresholds (float or list of float, optional, default = [0.0]) –

    最小 IoU 或不同的指标(如果由 threshold_type 指定),即边界框相对于裁剪窗口的指标。

    每个样本随机选择一个 thresholds,并且算子将完成最多指定次数的尝试,以生成一个随机裁剪窗口,该窗口的选定指标高于该阈值。有关配置尝试次数的更多信息,请参阅 num_attempts

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

    如果提供,则表示获取与 aspect_ratio 和从 thresholds 中选择的任何值匹配的裁剪窗口的最大尝试总次数。

    total_num_attempts 次尝试后,将选择最佳候选者。

    如果未指定此值,裁剪搜索将无限期地继续,直到找到有效的裁剪。

    警告

    如果您不提供 total_num_attempts 值,如果参数施加的条件无法满足,则可能导致无限循环。

__call__(__boxes, __labels=None, /, *, all_boxes_above_threshold=True, allow_no_crop=True, aspect_ratio=[1.0, 1.0], bbox_layout='', bbox_prune_threshold=None, bytes_per_sample_hint=[0], crop_shape=[], input_shape=[], ltrb=True, num_attempts=1, output_bbox_indices=False, preserve=False, scaling=[1.0, 1.0], seed=-1, shape_layout='', threshold_type='iou', thresholds=[0.0], total_num_attempts=-1, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __boxes (float 类型的 2D TensorList) – 边界框的相对坐标,表示为 2D 张量,其中第一维指的是边界框的索引,第二维指的是坐标的索引。

  • __labels (integer 类型的 1D TensorList, 可选) – 与每个边界框关联的标签。

class nvidia.dali.ops.RandomCropGenerator(*, bytes_per_sample_hint=[0], num_attempts=10, preserve=False, random_area=[0.08, 1.0], random_aspect_ratio=[0.75, 1.333333], seed=-1, device=None, name=None)#

生成具有随机选择的面积和宽高比的裁剪窗口。

期望一维输入,表示我们要裁剪的输入的形状(HW 或 HWC 表示)。

生成两个输出,分别表示裁剪窗口的锚点和形状。

此算子的输出(锚点和形状)可以馈送到 fn.slicefn.decoders.image_slice 或任何其他接受感兴趣区域的算子。例如:

crop_anchor, crop_shape = fn.random_crop_generator(image_shapes)
images_crop = fn.slice(images, start=crop_anchor, shape=crop_shape, axes=[0, 1])
支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

  • num_attempts (int, optional, default = 10) – 用于选择随机面积和宽高比的最大尝试次数。

  • preserve (bool, optional, default = False) – 即使算子的输出未被使用,也防止其从图中移除。

  • random_area (float or list of float, optional, default = [0.08, 1.0]) –

    从中选择随机面积比例 A 的范围。

    裁剪图像的面积将等于 A * 原始图像的面积。

  • random_aspect_ratio (float or list of float, optional, default = [0.75, 1.333333]) – 从中选择随机宽高比(宽度/高度)的范围。

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

__call__(__input, /, *, bytes_per_sample_hint=[0], num_attempts=10, preserve=False, random_area=[0.08, 1.0], random_aspect_ratio=[0.75, 1.333333], seed=-1, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.RandomResizedCrop(*, antialias=True, bytes_per_sample_hint=[0], dtype=None, interp_type=DALIInterpType.INTERP_LINEAR, mag_filter=DALIInterpType.INTERP_LINEAR, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, num_attempts=10, preserve=False, random_area=[0.08, 1.0], random_aspect_ratio=[0.75, 1.333333], seed=-1, size=None, temp_buffer_hint=0, device=None, name=None)#

执行具有随机选择的面积和宽高比的裁剪,并将其调整为指定大小。

期望三维输入,样本以高度、宽度、通道 (HWC) 布局排列。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • antialias (bool, optional, default = True) –

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

    注意

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

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

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

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

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

    输出数据类型。

    必须与输入类型相同或为 float。如果未设置,则使用输入类型。

  • interp_type (nvidia.dali.types.DALIInterpType or TensorList of nvidia.dali.types.DALIInterpType, optional, default = DALIInterpType.INTERP_LINEAR) –

    要使用的插值类型。

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

    注意

    现在不建议使用 INTERP_TRIANGULAR,应将其替换为

    启用抗锯齿的 INTERP_LINEAR。

  • mag_filter (nvidia.dali.types.DALIInterpType or TensorList of nvidia.dali.types.DALIInterpType, optional, default = DALIInterpType.INTERP_LINEAR) – 放大时使用的滤波器。

  • min_filter (nvidia.dali.types.DALIInterpType or TensorList of nvidia.dali.types.DALIInterpType, optional, default = DALIInterpType.INTERP_LINEAR) – 缩小时使用的滤波器。

  • minibatch_size (int, optional, default = 32) – 在内核调用中处理的最大图像数量。

  • num_attempts (int, optional, default = 10) – 用于选择随机面积和宽高比的最大尝试次数。

  • preserve (bool, optional, default = False) – 即使算子的输出未被使用,也防止其从图中移除。

  • random_area (float or list of float, optional, default = [0.08, 1.0]) –

    从中选择随机面积比例 A 的范围。

    裁剪图像的面积将等于 A * 原始图像的面积。

  • random_aspect_ratio (float or list of float, optional, default = [0.75, 1.333333]) – 从中选择随机宽高比(宽度/高度)的范围。

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

  • size (intint 列表) – 调整大小后的图像尺寸。

  • temp_buffer_hint (int, optional, default = 0) –

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

    注意

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

__call__(__input, /, *, antialias=True, bytes_per_sample_hint=[0], dtype=None, interp_type=DALIInterpType.INTERP_LINEAR, mag_filter=DALIInterpType.INTERP_LINEAR, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, num_attempts=10, preserve=False, random_area=[0.08, 1.0], random_aspect_ratio=[0.75, 1.333333], seed=-1, size=None, temp_buffer_hint=0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'CHW', 'FHWC', 'FCHW', 'CFHW')) – 算子的输入。

class nvidia.dali.ops.Reinterpret(*, bytes_per_sample_hint=[0], dtype=None, layout='', preserve=False, rel_shape=[], shape=[], src_dims=[], device=None, name=None)#

将输入的内容视为具有不同的类型、形状和/或布局。

缓冲区内容不会被复制。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

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

    输出数据类型。

    输出的总大小(以字节为单位)必须与输入匹配。如果未提供形状,则最内层维度将相应调整。如果最内层维度的字节大小不能被目标类型的大小整除,则会发生错误。

  • layout (布局字符串, optional, default = ‘’) –

    数据的新布局。

    如果未指定值,则如果维度数量与现有布局匹配,则保留输出布局。如果维度数量不匹配,则参数将重置为空。如果设置了值并且不为空,则布局必须与输出的维度匹配。

  • preserve (bool, optional, default = False) – 即使算子的输出未被使用,也防止其从图中移除。

  • rel_shape (float or list of float or TensorList of float, optional, default = []) –

    输出的相对形状。

    输出形状通过将输入形状乘以 rel_shape 来计算。

    out_shape[i] = in_shape[i] * rel_shape[i]
    

    可以使用附加参数 src_dims 来更改用于计算输出形状的源维度。

    out_shape[i] = in_shape[src_dims[i]] * rel_shape[i]
    

    可以有一个负维度,用于接收与输入 volume 匹配所需的大小。例如,形状为 [480, 640, 3] 的输入和 rel_shape = [0.5, -1] 将产生形状为 [240, 3840] 的输出。

    维度的数量受以下限制:

    • 如果使用了 src_dims 参数,则 src_dimsrel_shape 中的元素数量必须匹配

    • 否则,rel_shape 的长度不得超过输入中的维度数量,除非 rel_shape 中的最后一个元素为负数,在这种情况下,将在末尾添加一个额外的维度

    注意

    rel_shapeshape 是互斥的。

  • shape (int 或 int 列表或 int 的 TensorList, 可选, 默认值 = []) –

    期望的输出形状。

    可以有一个负维度,用于接收与输入 volume 匹配所需的大小。例如,形状为 [480, 640, 3] 的输入和 shape = [240, -1] 将产生形状为 [240, 3840] 的输出。

    注意

    rel_shapeshape 是互斥的。

  • src_dims (int 或 int 列表或 int 的 TensorList, 可选, 默认值 = []) –

    要保留的维度的索引。

    此参数可用于操作现有维度的顺序,或删除或添加维度。特殊索引值 -1 可用于插入新维度。

    例如,重塑形状为 [300, 200, 1] 的样本,并使用 src_dims 参数 [-1, 1, 0] 将产生输出形状 [1, 200, 300]。一个 extent 为 1 的前导维度被插入到开头,然后是原始的第一个维度,但顺序相反。最后一个维度被移除。

    src_dims 参数可以与 rel_shape 一起使用,在这种情况下,rel_shape 中的相对 extent 描述目标维度。在上面的示例中,指定 rel_shape = [-1, 0.5, 2] 将导致输出形状 [1, 100, 600]

    所有索引都必须在输入的有效维度范围内,或为 -1。

__call__(__data, __shape_input=None, /, *, bytes_per_sample_hint=[0], dtype=None, layout='', preserve=False, rel_shape=[], shape=[], src_dims=[], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __data (TensorList) – 要重塑的数据

  • __shape_input (整数的 1D TensorList, 可选) – 与 shape 关键字参数相同

class nvidia.dali.ops.Reshape(*, bytes_per_sample_hint=[0], layout='', preserve=False, rel_shape=[], shape=[], src_dims=[], device=None, name=None)#

将输入的内容视为具有不同的形状和/或布局。

缓冲区内容不会被复制。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

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

    数据的新布局。

    如果未指定值,则如果维度数量与现有布局匹配,则保留输出布局。如果维度数量不匹配,则参数将重置为空。如果设置了值并且不为空,则布局必须与输出的维度匹配。

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

  • rel_shape (float 或 float 列表或 float 的 TensorList, 可选, 默认值 = []) –

    输出的相对形状。

    输出形状通过将输入形状乘以 rel_shape 来计算

    out_shape[i] = in_shape[i] * rel_shape[i]
    

    可以使用附加参数 src_dims 来更改用于计算输出形状的源维度

    out_shape[i] = in_shape[src_dims[i]] * rel_shape[i]
    

    可以有一个负维度,用于接收与输入 volume 匹配所需的大小。例如,形状为 [480, 640, 3] 的输入和 rel_shape = [0.5, -1] 将产生形状为 [240, 3840] 的输出。

    维度的数量受以下限制:

    • 如果使用了 src_dims 参数,则 src_dimsrel_shape 中的元素数量必须匹配

    • 否则,rel_shape 的长度不得超过输入中的维度数量,除非 rel_shape 中的最后一个元素为负数,在这种情况下,将在末尾添加一个额外的维度

    注意

    rel_shapeshape 是互斥的。

  • shape (int 或 int 列表或 int 的 TensorList, 可选, 默认值 = []) –

    期望的输出形状。

    可以有一个负维度,用于接收与输入 volume 匹配所需的大小。例如,形状为 [480, 640, 3] 的输入和 shape = [240, -1] 将产生形状为 [240, 3840] 的输出。

    注意

    rel_shapeshape 是互斥的。

  • src_dims (int 或 int 列表或 int 的 TensorList, 可选, 默认值 = []) –

    要保留的维度的索引。

    此参数可用于操作现有维度的顺序,或删除或添加维度。特殊索引值 -1 可用于插入新维度。

    例如,重塑形状为 [300, 200, 1] 的样本,并使用 src_dims 参数 [-1, 1, 0] 将产生输出形状 [1, 200, 300]。一个 extent 为 1 的前导维度被插入到开头,然后是原始的第一个维度,但顺序相反。最后一个维度被移除。

    src_dims 参数可以与 rel_shape 一起使用,在这种情况下,rel_shape 中的相对 extent 描述目标维度。在上面的示例中,指定 rel_shape = [-1, 0.5, 2] 将导致输出形状 [1, 100, 600]

    所有索引都必须在输入的有效维度范围内,或为 -1。

__call__(__data, __shape_input=None, /, *, bytes_per_sample_hint=[0], layout='', preserve=False, rel_shape=[], shape=[], src_dims=[], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __data (TensorList) – 要重塑的数据

  • __shape_input (整数的 1D TensorList, 可选) – 与 shape 关键字参数相同

class nvidia.dali.ops.Resize(*, antialias=True, bytes_per_sample_hint=[0], dtype=None, interp_type=DALIInterpType.INTERP_LINEAR, mag_filter=DALIInterpType.INTERP_LINEAR, max_size=None, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, mode='default', preserve=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, save_attrs=False, size=None, subpixel_scale=True, temp_buffer_hint=0, device=None, name=None)#

调整图像大小。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • antialias (bool, 可选, 默认值 = True) –

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

    注意

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

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    必须与输入类型相同或为 float。如果未设置,则使用输入类型。

  • image_type (nvidia.dali.types.DALIImageType) –

    警告

    参数 image_type 已不再使用,并将在未来的版本中移除。

  • interp_type (nvidia.dali.types.DALIInterpTypenvidia.dali.types.DALIInterpType 的 TensorList, 可选, 默认值 = DALIInterpType.INTERP_LINEAR) –

    要使用的插值类型。

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

    注意

    现在不建议使用 INTERP_TRIANGULAR,应将其替换为

    启用 antialias 的 INTERP_LINEAR。

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

  • max_size (floatfloat 列表, 可选) –

    输出尺寸的限制。

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

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

    注意

    当与 “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 互斥

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

  • 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,则操作将保持原始 volume 的纵横比。负值会翻转 volume。

  • 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 (float float 列表 float TensorList, 可选) –

    输入感兴趣区域 (ROI) 的起始坐标。

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

  • save_attrs (bool, 可选, 默认 = False) – 保存用于测试的 reshape 属性。

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

    期望的输出尺寸。

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

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

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

    否则,将调整缩放比例,以使源图像映射到舍入后的输出尺寸。

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

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

    注意

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

__call__(__input, /, *, antialias=True, bytes_per_sample_hint=[0], dtype=None, interp_type=DALIInterpType.INTERP_LINEAR, mag_filter=DALIInterpType.INTERP_LINEAR, max_size=None, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, mode='default', preserve=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, save_attrs=False, size=None, subpixel_scale=True, temp_buffer_hint=0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'FHWC', 'CHW', 'FCHW', 'CFHW', 'DHWC', 'FDHWC', 'CDHW', 'FCDHW', 'CFDHW')) – 算子的输入。

class nvidia.dali.ops.ResizeCropMirror(*, antialias=True, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, dtype=None, interp_type=DALIInterpType.INTERP_LINEAR, mag_filter=DALIInterpType.INTERP_LINEAR, max_size=None, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, mirror=0, mode='default', preserve=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, rounding='round', size=None, subpixel_scale=True, temp_buffer_hint=0, device=None, name=None)#

执行融合的 resize、crop、mirror 操作。

此操作的结果等同于先应用 resize,然后应用 cropflip。 在内部,算子计算相关的感兴趣区域,并对该区域执行单个调整大小操作。 .

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • antialias (bool, 可选, 默认 = True) –

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

    注意

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

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

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

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

  • crop (float float 列表 float TensorList, 可选) –

    裁剪图像的形状,指定为值列表(例如,对于 2D 裁剪为 (crop_H, crop_W),对于体积裁剪为 (crop_D, crop_H, crop_W))。

    提供 crop 参数与提供单独的参数(如 crop_dcrop_hcrop_w)不兼容。

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

    适用于体积输入;裁剪窗口深度(以体素为单位)。

    crop_wcrop_hcrop_d 必须一起指定。 为 crop_wcrop_hcrop_d 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

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

    裁剪窗口高度(以像素为单位)。

    crop_wcrop_h 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • crop_pos_x (float 或 float 的 TensorList, 可选, 默认 = 0.5) –

    裁剪窗口(左上角)的归一化 (0.0 - 1.0) 水平位置。

    实际位置计算公式为 crop_x = crop_x_norm * (W - crop_W),其中 crop_x_norm 是归一化位置,W 是图像的宽度,而 crop_W 是裁剪窗口的宽度。

    有关 rounding 参数关于 crop_x 如何转换为整数值的更多详细信息,请参阅该参数。

  • crop_pos_y (float 或 float 的 TensorList, 可选, 默认 = 0.5) –

    裁剪窗口起始位置的归一化 (0.0 - 1.0) 垂直位置(通常为左上角)。

    实际位置计算公式为 crop_y = crop_y_norm * (H - crop_H),其中 crop_y_norm 是归一化位置,H 是图像的高度,而 crop_H 是裁剪窗口的高度。

    有关 rounding 参数关于 crop_y 如何转换为整数值的更多详细信息,请参阅该参数。

  • crop_pos_z (float 或 float 的 TensorList, 可选, 默认 = 0.5) –

    适用于体数据输入。

    裁剪窗口(前平面)的归一化 (0.0 - 1.0) 法线位置。实际位置计算公式为 crop_z = crop_z_norm * (D - crop_D),其中 crop_z_norm 是归一化位置,D 是图像的深度,而 crop_D 是裁剪窗口的深度。

    有关 rounding 参数关于 crop_z 如何转换为整数值的更多详细信息,请参阅该参数。

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

    裁剪窗口宽度(以像素为单位)。

    crop_wcrop_h 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    必须与输入类型相同或为 float。如果未设置,则使用输入类型。

  • interp_type (nvidia.dali.types.DALIInterpTypenvidia.dali.types.DALIInterpType 的 TensorList, 可选, 默认 = DALIInterpType.INTERP_LINEAR) –

    要使用的插值类型。

    使用 min_filtermag_filter 为缩小和放大指定不同的滤波。

    注意

    现在不建议使用 INTERP_TRIANGULAR,应将其替换为

    启用 antialias 的 INTERP_LINEAR。

  • mag_filter (nvidia.dali.types.DALIInterpTypenvidia.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.DALIInterpTypenvidia.dali.types.DALIInterpType 的 TensorList, 可选, 默认 = DALIInterpType.INTERP_LINEAR) – 缩小时使用的滤波器。

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

  • mirror (int 或 int 的 TensorList, 可选, 默认 = 0) –

    翻转掩码

    支持的值

    • 0 - 不翻转

    • 1 - 水平翻转

    • 2 - 垂直翻转

    • 4 - 深度方向翻转

    • 以上任意按位组合

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

    调整大小模式。

    以下是支持的模式列表

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

      此参数与 resize_longerresize_shorter 互斥。

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

  • 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_shorterresize_longersize 互斥。 如果未指定 resize_y 或为 0,则算子保持原始图像的宽高比。 负值会翻转图像。

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

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

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

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

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

    此选项与 resize_shorterresize_longersize 互斥。 如果 resize_xresize_y 未指定或为 0,则 op 将保持原始 volume 的宽高比。 负值会翻转 volume。

  • 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 终点,则该区域在该维度上会翻转。

  • rounding (str, 可选, 默认 = ‘round’) –

    确定用于将窗口的起始坐标转换为整数值的舍入函数(参见 crop_pos_x, crop_pos_y, crop_pos_z)。

    可能的值为

    • "round" - 四舍五入到最接近的整数值,中间情况远离零舍入。
    • "truncate" - 丢弃数字的小数部分(向零截断)。

  • size (floatfloat 列表 或 floatTensorList, 可选) –

    期望的输出尺寸。

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

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

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

    否则,将调整缩放比例,以使源图像映射到舍入后的输出尺寸。

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

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

    注意

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

__call__(__input, /, *, antialias=True, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, dtype=None, interp_type=DALIInterpType.INTERP_LINEAR, mag_filter=DALIInterpType.INTERP_LINEAR, max_size=None, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, mirror=0, mode='default', preserve=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, rounding='round', size=None, subpixel_scale=True, temp_buffer_hint=0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'FHWC', 'CHW', 'FCHW', 'CFHW', 'DHWC', 'FDHWC', 'CDHW', 'FCDHW', 'CFDHW')) – 算子的输入。

class nvidia.dali.ops.Rotate(*, angle=None, axis=[], bytes_per_sample_hint=[0], dtype=None, fill_value=None, interp_type=DALIInterpType.INTERP_LINEAR, keep_size=False, preserve=False, size=[], device=None, name=None)#

按指定的角度旋转图像。

此算子支持体数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • angle (floatfloatTensorList) –

    图像旋转的角度,单位为度。

    对于二维数据,假设左上角为 (0,0),则旋转是逆时针的。对于三维数据,angle 是绕给定轴的正向旋转。

    支持 per-frame 输入。

  • axis (float 或 float 列表 或 float 的 TensorList, 可选, 默认 = []) –

    **仅**适用于三维数据,是图像旋转所绕的轴。

    该向量不需要归一化,但必须具有非零长度。反转向量等效于更改 angle 的符号。

    支持 per-frame 输入。

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    如果未设置,则使用输入类型。

  • fill_value (float, 可选) –

    用于填充源图像外部区域的值。

    如果未指定值,则源坐标将被钳制,并且边界像素将被重复。

  • interp_type (nvidia.dali.types.DALIInterpType, 可选, 默认 = DALIInterpType.INTERP_LINEAR) – 使用的插值类型。

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

    如果为 True,则保留原始画布大小。

    如果设置为 False(默认值),并且未设置大小,则会调整画布大小以适应旋转后的图像,并尽可能减少填充。

  • output_dtype (nvidia.dali.types.DALIDataType) –

    警告

    参数 output_dtypedtype 的已弃用别名。请改用 dtype

  • preserve (bool, 可选, 默认 = False) – 阻止算子从图中删除,即使其输出未使用。

  • size (float 或 float 列表 或 float 的 TensorList, 可选, 默认 = []) –

    输出大小,以像素/点为单位。

    非整数大小将四舍五入到最接近的整数。通道维度应排除在外(例如,对于 RGB 图像,请指定 (480,640),而不是 (480,640,3))。

__call__(__input, /, *, angle=None, axis=[], bytes_per_sample_hint=[0], dtype=None, fill_value=None, interp_type=DALIInterpType.INTERP_LINEAR, keep_size=False, preserve=False, size=[], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'FHWC', 'DHWC', 'FDHWC')) – 算子的输入。

class nvidia.dali.ops.SSDRandomCrop(*, bytes_per_sample_hint=[0], num_attempts=1, preserve=False, seed=-1, device=None, name=None)#

警告

此算子现已弃用。请改用 RandomBBoxCrop()

使用边界框执行随机裁剪,其中交并比 (IoU) 满足 0-1 之间的随机选择的阈值。

当 IoU 低于阈值时,将生成新的随机裁剪,最多尝试 num_attempts 次。作为输入,此算子接受图像、边界框和标签。在输出中,返回裁剪后的图像、裁剪后的有效边界框和有效标签。

支持的后端
  • ‘cpu’

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

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

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

  • num_attempts (int, 可选, 默认 = 1) – 尝试次数。

  • preserve (bool, 可选, 默认 = False) – 阻止算子从图中删除,即使其输出未使用。

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

__call__(__input_0, __input_1, __input_2, /, *, bytes_per_sample_hint=[0], num_attempts=1, preserve=False, seed=-1, device=None, name=None)#

有关完整信息,请参见 nvidia.dali.ops.SSDRandomCrop() 类。

class nvidia.dali.ops.Saturation(*, bytes_per_sample_hint=[0], dtype=None, image_type=DALIImageType.RGB, preserve=False, saturation=1.0, device=None, name=None)#

更改图像的饱和度级别。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    如果未设置,则使用输入类型。

  • image_type (nvidia.dali.types.DALIImageType, 可选, 默认 = DALIImageType.RGB) – 输入和输出图像的色彩空间。

  • preserve (bool, 可选, 默认 = False) – 阻止算子从图中删除,即使其输出未使用。

  • saturation (float 或 float 的 TensorList, 可选, 默认 = 1.0) –

    饱和度变化因子。

    值必须是非负数。

    示例值

    • 0 - 完全去饱和的图像。

    • 1 - 图像饱和度无变化。

    支持 per-frame 输入。

__call__(__input, /, *, bytes_per_sample_hint=[0], dtype=None, image_type=DALIImageType.RGB, preserve=False, saturation=1.0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'FHWC', 'DHWC')) – 算子的输入。

class nvidia.dali.ops.SequenceReader(*, bytes_per_sample_hint=[0], dont_use_mmap=False, file_root=None, image_type=DALIImageType.RGB, initial_fill=1024, lazy_init=False, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, sequence_length=None, shard_id=0, skip_cached_images=False, step=1, stick_to_shard=False, stride=1, tensor_init_bytes=1048576, device=None, name=None)#

警告

此算子现已弃用。请改用 readers.Sequence()

在 DALI 1.0 中,所有 reader 都被移动到了专用的 readers 子模块中,并被重命名以遵循通用模式。这是一个占位符运算符,具有相同的功能,以实现向后兼容性。

readers.sequence() 的旧别名。

class nvidia.dali.ops.SequenceRearrange(*, bytes_per_sample_hint=[0], new_order=None, preserve=False, device=None, name=None)#

重新排列序列中的帧。

假设最外层维度表示序列中的帧索引。如果输入具有非空布局描述,则它必须以 F (帧)开头。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • new_order (intint 列表 或 intTensorList) –

    描述每个样本中元素新顺序的列表。

    位置 i 处的输出序列将包含来自输入序列的元素 new_order[i]

    out[i, ...] = in[new_order[i], ...]
    

    元素可以重复或删除,但不允许空输出序列。只允许在 new_order 中使用 [0, input_outermost_extent) 中的索引。可以为每个样本指定为 1D 张量。

  • preserve (bool, 可选, 默认 = False) – 阻止算子从图中删除,即使其输出未使用。

__call__(__input, /, *, bytes_per_sample_hint=[0], new_order=None, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.Shapes(*, bytes_per_sample_hint=[0], dtype=DALIDataType.INT64, preserve=False, device=None, name=None)#

警告

此算子现已弃用。

请改用 nvidia.dali.pipeline.DataNode.shape()

返回输入批次中张量的形状。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选, 默认 = DALIDataType.INT64) – 大小编换后的数据类型。

  • preserve (bool, 可选, 默认 = False) – 阻止算子从图中删除,即使其输出未使用。

  • type (nvidia.dali.types.DALIDataType) –

    警告

    参数 type 是已弃用的别名,请使用 dtype,而不是 dtype

__call__(__input, /, *, bytes_per_sample_hint=[0], dtype=DALIDataType.INT64, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.Slice(*, axes=[1, 0], axis_names='WH', bytes_per_sample_hint=[0], dtype=None, end=None, fill_values=[0.0], normalized_anchor=True, normalized_shape=True, out_of_bounds_policy='error', preserve=False, rel_end=None, rel_shape=None, rel_start=None, shape=None, start=None, device=None, name=None)#

提取子张量或切片。

注意

对于通用索引和切片,您可以使用 Python 索引语法。 有关详细信息,请参阅 索引和切片

切片可以通过提供起始和结束坐标,或起始坐标和切片的形状来指定。坐标和形状都可以用绝对或相对术语提供。

切片参数可以通过以下命名参数指定

  1. start:切片起始坐标(绝对)

  2. rel_start:切片起始坐标(相对)

  3. end:切片结束坐标(绝对)

  4. rel_end:切片结束坐标(相对)

  5. shape:切片形状(绝对)

  6. rel_shape:切片形状(相对)

可以通过提供起始和结束坐标或起始和形状来配置切片。相对和绝对参数可以混合使用(例如,rel_start 可以与 shape 一起使用),只要起始和形状或结束被唯一定义。

或者,可以提供两个额外的位置输入,指定 __anchor__shape。当使用位置输入时,可以使用两个额外的布尔参数 normalized_anchor/normalized_shape 来指定提供的参数的性质。使用位置输入作为锚点和形状与上面指定的命名参数不兼容。

注意

对于 GPU 后端和位置输入 __anchor__shape,CPU 和 GPU 数据节点都被接受,尽管 CPU 输入是首选。将这些参数作为 GPU 输入提供将导致额外的设备到主机复制及其相关的同步点。如果可能,请将 __anchor__shape 作为 CPU 输入提供。

切片参数应提供与 axis_namesaxes 参数指定的维度一样多的维度。

默认情况下,nvidia.dali.fn.slice() 运算符对切片参数使用归一化坐标和 WH 顺序。

此算子支持体数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axes (int 或 int 列表或 int 的 TensorList,可选,默认值 = [1, 0]) –

    用作维度索引的锚点和形状切片输入的维度顺序。

    负值被解释为从后面计数维度。 有效范围:[-ndim, ndim-1],其中 ndim 是输入数据中的维度数。

  • axis_names (布局字符串,可选,默认值 = ‘WH’) –

    用于锚点和形状切片输入的维度顺序,如布局中所述。

    如果提供了值,则 axis_names 的优先级高于 axes

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

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

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

  • dtype (nvidia.dali.types.DALIDataType,可选) –

    输出数据类型。

    支持的类型:FLOATFLOAT16UINT8

    如果未设置,则使用输入类型。

  • end (intint 列表或 intTensorList,可选) –

    切片的结束坐标。

    注意:提供命名参数 startendshaperel_startrel_endrel_shape 与提供位置输入 anchor 和 shape 不兼容。

  • fill_values (float 或 float 列表,可选,默认值 = [0.0]) –

    确定填充值,仅当 out_of_bounds_policy 设置为 “pad” 时才相关。

    如果提供标量值,它将用于所有通道。如果提供多个值,则值的数量和通道的数量必须相同(输出切片中布局中维度 C 的范围)。

  • image_type (nvidia.dali.types.DALIImageType) –

    警告

    参数 image_type 已不再使用,并将在未来的版本中移除。

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

    确定锚点位置输入应解释为归一化坐标(范围 [0.0, 1.0])还是绝对坐标。

    注意

    此参数仅在锚点数据类型为 float 时才相关。 对于整数类型,坐标始终是绝对坐标。

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

    确定形状位置输入应解释为归一化坐标(范围 [0.0, 1.0])还是绝对坐标。

    注意

    此参数仅在锚点数据类型为 float 时才相关。 对于整数类型,坐标始终是绝对坐标。

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

    确定当对输入进行越界区域切片时的策略。

    以下是支持值的列表

    • "error" (默认值):尝试在输入边界之外进行切片将产生错误。

    • "pad":将根据需要使用零或使用 fill_values 参数指定的任何其他值填充输入。

    • "trim_to_shape":切片窗口将被裁剪到输入的边界。

  • output_dtype (nvidia.dali.types.DALIDataType) –

    警告

    参数 output_dtype 是已弃用的别名,请使用 dtype,而不是 dtype

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

  • rel_end (floatfloat 列表或 floatTensorList,可选) –

    切片的结束相对坐标(范围 [0.0 - 1.0])。

    注意:提供命名参数 startendshaperel_startrel_endrel_shape 与提供位置输入 anchor 和 shape 不兼容。

  • rel_shape (floatfloat 列表或 floatTensorList,可选) –

    切片的相对形状(范围 [0.0 - 1.0])。

    提供命名参数 startendshaperel_startrel_endrel_shape 与提供位置输入 anchor 和 shape 不兼容。

  • rel_start (floatfloat 列表或 floatTensorList,可选) –

    切片的起始相对坐标(范围 [0.0 - 1.0])。

    注意:提供命名参数 startendshaperel_startrel_endrel_shape 与提供位置输入 anchor 和 shape 不兼容。

  • shape (intint 列表或 intTensorList,可选) –

    切片的形状。

    提供命名参数 startendshaperel_startrel_endrel_shape 与提供位置输入 anchor 和 shape 不兼容。

  • start (intint 列表或 intTensorList,可选) –

    切片的起始坐标。

    注意:提供命名参数 start/endstart/shape 与提供位置输入 anchor 和 shape 不兼容。

__call__(__data, __anchor=None, __shape=None, /, *, axes=[1, 0], axis_names='WH', bytes_per_sample_hint=[0], dtype=None, end=None, fill_values=[0.0], normalized_anchor=True, normalized_shape=True, out_of_bounds_policy='error', preserve=False, rel_end=None, rel_shape=None, rel_start=None, shape=None, start=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __data (TensorList) – 包含输入数据的批次。

  • __anchor (floatint1D TensorList,可选) –

    (可选)包含切片起点的归一化或绝对坐标(x0、x1、x2、…)的输入。

    整数坐标被解释为绝对坐标,而浮点坐标可以解释为绝对坐标或相对坐标,具体取决于 normalized_anchor 的值。

  • __shape (floatint1D TensorList,可选) –

    (可选)包含切片维度(s0、s1、s2、…)的归一化或绝对坐标的输入。

    整数坐标被解释为绝对坐标,而浮点坐标可以解释为绝对坐标或相对坐标,具体取决于 normalized_shape 的值。

class nvidia.dali.ops.Spectrogram(*, bytes_per_sample_hint=[0], center_windows=True, layout='ft', nfft=None, power=2, preserve=False, reflect_padding=True, window_fn=[], window_length=512, window_step=256, device=None, name=None)#

从一维信号(例如,音频)生成频谱图。

输入数据应为单通道(形状为 (nsamples,)(nsamples, 1)(1, nsamples))的 float32 类型。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

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

    指示是否应填充提取的窗口,以便窗口函数在 window_step 的倍数处居中。

    如果设置为 False,则信号将不被填充,即,仅提取输入范围内的窗口。

  • layout (布局字符串,可选,默认值 = ‘ft’) – 输出布局:“ft”(频率优先)或 “tf”(时间优先)。

  • nfft (int,可选) –

    FFT 的大小。

    输出中创建的 bin 的数量为 nfft // 2 + 1

    注意

    输出仅表示频谱的正半部分。

  • power (int,可选,默认值 = 2) –

    频谱幅度的指数。

    支持的值

    • 1 - 幅度,

    • 2 - 功率(计算速度更快)。

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

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

    指示在信号边界外采样时的填充策略。

    如果设置为 True,则信号相对于边界镜像,否则信号用零填充。

    注意

    center_windows 设置为 False 时,将忽略此选项。

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

    窗口函数的样本,将在计算 STFT 时乘以每个提取的窗口。

    如果提供了值,它应该是一个浮点数列表,大小为 window_length。 如果未提供值,将使用 Hann 窗口。

  • window_length (int,可选,默认值 = 512) – 窗口大小,以样本数为单位。

  • window_step (int,可选,默认值 = 256) – STFT 窗口之间的步长,以样本数为单位。

__call__(__input, /, *, bytes_per_sample_hint=[0], center_windows=True, layout='ft', nfft=None, power=2, preserve=False, reflect_padding=True, window_fn=[], window_length=512, window_step=256, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.Sphere(*, bytes_per_sample_hint=[0], fill_value=0.0, interp_type=DALIInterpType.INTERP_NN, mask=1, preserve=False, device=None, name=None)#

执行球体增强。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • fill_value (float,可选,默认值 = 0.0) – 用于填充的颜色值。

  • interp_type (nvidia.dali.types.DALIInterpType, 可选, 默认 = DALIInterpType.INTERP_NN) – 使用的插值类型。

  • mask (int 或 int 的 TensorList, 可选, 默认 = 1) –

    确定是否将此增强应用于输入图像。

    以下是这些值:

    • 0:不应用此变换。

    • 1:应用此变换。

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__input, /, *, bytes_per_sample_hint=[0], fill_value=0.0, interp_type=DALIInterpType.INTERP_NN, mask=1, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC')) – 运算符的输入。

class nvidia.dali.ops.Squeeze(*, axes=[], axis_names='', bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

移除作为 axesaxis_names 给定的维度。

移除会导致总体积发生变化的维度是错误的。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axes (int 或 int 列表 或 int 的 TensorList, 可选, 默认 = []) –

    应该移除的维度的索引。

    所有被挤压的维度的大小都应为 1,除非张量的总体积在挤压前后均为 0。所有索引都必须在输入有效维度的范围内

  • axis_names (layout str, 可选, 默认 = ‘’) –

    应该移除的布局列。

    所有被挤压的维度的大小都应为 1,除非张量的总体积在挤压前后均为 0。所有布局名称都应存在于数据布局中。

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

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

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

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__data, /, *, axes=[], axis_names='', bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__data (TensorList) – 要挤压的数据

class nvidia.dali.ops.Stack(*, axis=0, axis_name=None, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

沿新轴连接输入张量。

输入中各个张量的形状必须匹配。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axis (int, 可选, 默认 = 0) –

    输出张量中输入被堆叠的轴。

    轴在输入中相应的轴之前插入。值 0 表示整个张量被堆叠。指定 axis 等于输入中的维度数会导致来自输入的值被交错)。

    接受范围为 [-ndim, ndim]。负索引从后往前计数。

  • axis_name (str, 可选) –

    要插入的新轴的名称。

    一个单字符字符串,它将表示输出布局中的新轴。输出布局将通过将该字符插入到输入布局中由 axis 指示的位置来构建。例如,指定 axis = 0axis_name = "C",输入布局为 “HW” 将产生输出布局 “CHW”

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

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

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

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__input_0, /, *__input_, axis=0, axis_name=None, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

有关完整信息,请参见 nvidia.dali.ops.Stack() 类。

class nvidia.dali.ops.TFRecordReader(path, index_path, features, **kwargs)#

警告

此运算符现在已弃用。请改用 readers.TFRecord()

在 DALI 1.0 中,所有 reader 都被移动到了专用的 readers 子模块中,并被重命名以遵循通用模式。这是一个占位符运算符,具有相同的功能,以实现向后兼容性。

用于 readers.tfrecord() 的旧别名。

class nvidia.dali.ops.ToDecibels(*, bytes_per_sample_hint=[0], cutoff_db=-200.0, multiplier=10.0, preserve=False, reference=0.0, device=None, name=None)#

将幅度(实数,正数)转换为分贝刻度。

转换根据以下公式完成

min_ratio = pow(10, cutoff_db / multiplier)
out[i] = multiplier * log10( max(min_ratio, input[i] / reference) )
支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • cutoff_db (float, 可选, 默认 = -200.0) –

    分贝为单位的最小或截止比率。

    任何低于此值的值都将饱和。例如,cutoff_db=-80 的值对应于 1e-8 的最小比率。

  • multiplier (float, 可选, 默认 = 10.0) – 对数乘以的因子。该值通常为 10.0 或 20.0,具体取决于幅度是否平方。

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未被使用。

  • reference (float, 可选, 默认 = 0.0) –

    参考幅度。

    如果未提供值,则输入的最大值将用作参考。

    注意

    输入的maximum值将在每个样本的基础上计算。

__call__(__input, /, *, bytes_per_sample_hint=[0], cutoff_db=-200.0, multiplier=10.0, preserve=False, reference=0.0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.TorchPythonFunction(*, batch_processing=True, bytes_per_sample_hint=[0], function=None, num_outputs=1, output_layouts=None, preserve=False, device=None, name=None)#

执行在 Torch 张量上运行的函数。

此类类似于 nvidia.dali.fn.python_function(),但张量数据作为 PyTorch 张量处理。

此运算符允许序列输入并支持体积数据。

此操作符将不会从图中优化掉。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • batch_processing (bool, 可选, 默认 = True) – 确定函数是否将整个批次作为输入。

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

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

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

  • function (object) –

    定义操作符功能的可调用对象。

    警告

    该函数不得持有对其使用的 pipeline 的引用。如果持有,将形成对 pipeline 的循环引用,并且 pipeline 将永远不会被释放。

  • num_outputs (int, 可选, 默认 = 1) – 输出数量。

  • output_layouts (layout strlayout str 列表, 可选) –

    输出的张量数据布局。

    此参数可以是列表,其中包含每个输出的不同布局。如果列表的元素少于 num_outputs,则仅设置前几个输出的布局,其余输出不分配布局。

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(*input, batch_processing=True, bytes_per_sample_hint=[0], function=None, num_outputs=1, output_layouts=None, preserve=False, device=None, name=None)#

有关完整信息,请参见 nvidia.dali.ops.TorchPythonFunction() 类。

class nvidia.dali.ops.Transpose(*, bytes_per_sample_hint=[0], output_layout='', perm=None, preserve=False, transpose_layout=True, device=None, name=None)#

通过根据 perm 参数重新排序维度来转置张量。

目标维度 i 从源维度 perm[i] 获得。

例如,对于具有 HWC 布局的源图像,shape = (100, 200, 3),以及 perm = [2, 0, 1],它将生成具有 CHW 布局和 shape = (3, 100, 200) 的目标图像,保持相等性

\[dst(x_2, x_0, x_1) = src(x_0, x_1, x_2)\]

这等效于

\[dst(x_{perm[0]}, x_{perm[1]}, x_{perm[2]}) = src(x_0, x_1, x_2)\]

对于所有有效坐标。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • output_layout (layout str, 可选, 默认 = ‘’) –

    显式设置输出数据布局。

    如果指定了此参数,则 transpose_layout 将被忽略。

  • perm (intint 列表, 可选) –

    输入维度的排列,例如,[2, 0, 1]。

    如果未给出,则维度将反转。

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未被使用。

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

    设置为 True 时,输出数据布局中的轴名称将根据 perm 排列。否则,输入布局将复制到输出。

    如果设置了 output_layout,则此参数将被忽略。

__call__(__input, /, *, bytes_per_sample_hint=[0], output_layout='', perm=None, preserve=False, transpose_layout=True, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.Uniform(*, bytes_per_sample_hint=[0], dtype=None, preserve=False, range=[-1.0, 1.0], seed=-1, shape=None, values=None, device=None, name=None)#

警告

此运算符现在已弃用。请改用 random.Uniform()

生成服从均匀分布的随机数。

它可以配置为生成 range [min, max) 中的连续均匀分布,或离散均匀分布,其中指定的 values [v0, v1, …, vn] 中的任何值以相等的概率出现。

生成数据的形状可以通过 shape 参数显式指定,或者选择与提供的 __shape_like 输入的形状相匹配。如果两者均未提供,则为每个样本生成单个值。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    注意

    生成的数字将转换为输出数据类型,并在必要时进行舍入和钳位。

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

  • range (float 或 float 列表或 float 的 TensorList,可选,默认值 = [-1.0, 1.0]) –

    连续均匀分布的范围 [min, max)

    此参数与 values 互斥。

    警告

    当指定整数类型作为 dtype 时,由于舍入,生成的数字可能会超出指定范围。

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

  • shape (intint 列表或 intTensorList可选) – 输出数据的形状。

  • values (floatfloat 列表或 floatTensorList可选) –

    离散均匀分布产生的离散值 [v0, v1, …, vn]。

    此参数与 range 互斥。

__call__(__shape_like=None, /, *, bytes_per_sample_hint=[0], dtype=None, preserve=False, range=[-1.0, 1.0], seed=-1, shape=None, values=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__shape_like (TensorList, 可选) – 如果提供,此输入的形状将用于推断输出的形状。

class nvidia.dali.ops.VideoReader(*, 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=None, 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)#

警告

此运算符现已弃用。请使用 readers.Video() 代替。

在 DALI 1.0 中,所有 reader 都被移动到了专用的 readers 子模块中,并被重命名以遵循通用模式。这是一个占位符运算符,具有相同的功能,以实现向后兼容性。

用于 readers.video() 的旧版别名。

class nvidia.dali.ops.VideoReaderResize(*, 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=None, 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)#

警告

此运算符现已弃用。请使用 readers.VideoResize() 代替。

在 DALI 1.0 中,所有 reader 都被移动到了专用的 readers 子模块中,并被重命名以遵循通用模式。这是一个占位符运算符,具有相同的功能,以实现向后兼容性。

用于 readers.video_resize() 的旧版别名。

class nvidia.dali.ops.WarpAffine(*, bytes_per_sample_hint=[0], dtype=None, fill_value=None, interp_type=DALIInterpType.INTERP_LINEAR, inverse_map=True, matrix=[], preserve=False, size=[], device=None, name=None)#

对图像应用仿射变换。

此算子支持体数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    如果未设置,则使用输入类型。

  • fill_value (float, 可选) –

    用于填充源图像外部区域的值。

    如果未指定值,则源坐标将被钳制,并且边界像素将被重复。

  • interp_type (nvidia.dali.types.DALIInterpType, 可选,默认值 = DALIInterpType.INTERP_LINEAR) – 使用的插值类型。

  • inverse_map (bool, 可选,默认值 = True) – 如果给定的变换是从目标到源的映射,则设置为 False,否则设置为 True

  • matrix (float 或 float 列表或 float 的 TensorList,可选,默认值 = []) –

    变换矩阵。

    inverse_map 选项设置为 true(默认值)时,该矩阵表示从目标到源的映射。对于值列表 (M11, M12, M13, M21, M22, M23),此操作通过使用以下公式生成新图像

    dst(x,y) = src(M11 * x + M12 * y + M13, M21 * x + M22 * y + M23)
    

    其中 [0, 0] 坐标表示第一个像素的角。

    如果 inverse_map 选项设置为 false,则该矩阵表示从源到目标的变换,并在应用上述公式之前进行反转。

    它等效于 OpenCV 的 warpAffine 操作,其中 inverse_map 参数类似于 WARP_INVERSE_MAP 标志。

    注意

    除了此参数之外,运算符还可以接受第二个位置输入,在这种情况下,矩阵可以放置在 GPU 上。

    支持 per-frame 输入。

  • output_dtype (nvidia.dali.types.DALIDataType) –

    警告

    参数 output_dtypedtype 的已弃用别名。请使用 dtype 代替。

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

  • size (float 或 float 列表或 float 的 TensorList,可选,默认值 = []) –

    输出大小,以像素/点为单位。

    非整数大小将四舍五入到最接近的整数。通道维度应排除在外(例如,对于 RGB 图像,请指定 (480,640),而不是 (480,640,3))。

__call__(__data, __mtx=None, /, *, bytes_per_sample_hint=[0], dtype=None, fill_value=None, interp_type=DALIInterpType.INTERP_LINEAR, inverse_map=True, matrix=[], preserve=False, size=[], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __data (TensorList ('HWC', 'FHWC', 'DHWC', 'FDHWC')) – 要扭曲的图像或体数据

  • __mtx (floatTensorList, 可选) – 类似于 matrix 参数,但可以放置在 GPU 内存中

class nvidia.dali.ops.Water(*, ampl_x=10.0, ampl_y=10.0, bytes_per_sample_hint=[0], fill_value=0.0, freq_x=0.049087, freq_y=0.049087, interp_type=DALIInterpType.INTERP_NN, mask=1, phase_x=0.0, phase_y=0.0, preserve=False, device=None, name=None)#

执行水波纹增强,使图像看起来像在水下。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • ampl_x (float, optional, default = 10.0) – x 方向波纹的振幅。

  • ampl_y (float, optional, default = 10.0) – y 方向波纹的振幅。

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

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

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

  • fill_value (float, optional, default = 0.0) – 用于填充的颜色值。

  • freq_x (float, optional, default = 0.049087) – x 方向波纹的频率。

  • freq_y (float, optional, default = 0.049087) – y 方向波纹的频率。

  • interp_type (nvidia.dali.types.DALIInterpType, optional, default = DALIInterpType.INTERP_NN) – 使用的插值类型。

  • mask (int or TensorList of int, optional, default = 1) –

    确定是否将此增强应用于输入图像。

    以下是这些值:

    • 0:不应用此变换。

    • 1:应用此变换。

  • phase_x (float, optional, default = 0.0) – x 方向波纹的相位。

  • phase_y (float, optional, default = 0.0) – y 方向波纹的相位。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__input, /, *, ampl_x=10.0, ampl_y=10.0, bytes_per_sample_hint=[0], fill_value=0.0, freq_x=0.049087, freq_y=0.049087, interp_type=DALIInterpType.INTERP_NN, mask=1, phase_x=0.0, phase_y=0.0, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC')) – 运算符的输入。

class nvidia.dali.ops.Zeros(*, bytes_per_sample_hint=[0], dtype=DALIDataType.INT32, preserve=False, shape=None, device=None, name=None)#

返回给定形状和类型的新数据,并用零填充。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

  • dtype (nvidia.dali.types.DALIDataType, optional, default = DALIDataType.INT32) – 输出数据类型。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

  • shape (int or list of int or TensorList of int, optional) – 输出数据的形状。

__call__(*, bytes_per_sample_hint=[0], dtype=DALIDataType.INT32, preserve=False, shape=None, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.ZerosLike(*, bytes_per_sample_hint=[0], dtype=DALIDataType.INT32, preserve=False, device=None, name=None)#

返回与输入数组具有相同形状和类型的新数据,并用零填充。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

  • dtype (nvidia.dali.types.DALIDataType, optional, default = DALIDataType.INT32) – 覆盖输出数据类型。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__data_like, /, *, bytes_per_sample_hint=[0], dtype=DALIDataType.INT32, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__data_like (TensorList) – 用于复制形状和类型的输入数据值。

nvidia.dali.ops.python_op_factory(name, schema_name, internal_schema_name=None, generated=True)#

为运算符生成 ops API 类绑定。

参数:
  • name (str) – 运算符的名称(不带模块)- 这将是类的名称

  • schema_name (str) – schema 的名称,用于文档查找和 schema/spec 检索,除非提供了 internal_schema_name

  • internal_schema_name (str, optional) – 如果提供,这将是用于处理参数的 schema,默认为 None

  • generated (bool, optional) – 将此类标记为完全生成的 API 绑定 (True),或标记为用于手动扩展绑定代码的(基)类 (False),默认为 True。

nvidia.dali.ops.decoders#

class nvidia.dali.ops.decoders.Audio(*, bytes_per_sample_hint=[0], downmix=False, dtype=DALIDataType.FLOAT, preserve=False, quality=50.0, sample_rate=0.0, device=None, name=None)#

从编码的音频数据中解码波形。

它支持以下音频格式:wav、flac 和 ogg。此运算符生成以下输出

  • output[0]: 一批解码后的数据

  • output[1]: 一批采样率 [Hz]。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

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

    如果设置为 True,则将所有输入通道下混为单声道。

    如果下混开启,则解码器输出为 1D。如果下混关闭,则生成具有交错通道的 2D 输出。

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

    输出数据类型。

    支持的类型: INT16, INT32, FLOAT

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

  • quality (float, optional, default = 50.0) –

    重采样质量,其中 0 为最低,100 为最高。

    0 提供 3 个 sinc 滤波器瓣,50 提供 16 个瓣,100 提供 64 个瓣。

  • sample_rate (float or TensorList of float, optional, default = 0.0) – 如果指定,则为音频重采样的目标采样率,单位为 Hz。

__call__(__input, /, *, bytes_per_sample_hint=[0], downmix=False, dtype=DALIDataType.FLOAT, preserve=False, quality=50.0, sample_rate=0.0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.decoders.Image(*, affine=True, bytes_per_sample_hint=[0], cache_batch_copy=True, cache_debug=False, cache_size=0, cache_threshold=0, cache_type='', device_memory_padding=16777216, device_memory_padding_jpeg2k=0, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.65, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, memory_stats=False, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, use_fast_idct=False, device=None, name=None)#

解码图像。

对于 jpeg 图像,根据所选的后端(“mixed” 和 “cpu”),实现分别使用 nvJPEG 库或 libjpeg-turbo。其他图像格式使用 OpenCV 或其他特定库(如 libtiff)进行解码。

如果与 mixed 后端一起使用,并且硬件可用,则运算符将使用专用硬件解码器。

警告

出于性能原因,对于驱动程序版本低于 455.x,硬件解码器将被禁用

解码器的输出采用 HWC 布局。

支持的格式:JPG、BMP、PNG、TIFF、PNM、PPM、PGM、PBM、JPEG 2000、WebP。请注意,JPEG 2000 解码的 GPU 加速仅适用于 CUDA 11 及更高版本。

注意

WebP 解码目前仅支持简单文件格式(有损和无损压缩)。有关不同 WebP 文件格式的详细信息,请参阅 https://developers.google.com/speed/webp/docs/riff_container

注意

EXIF 方向元数据将被忽略。

支持的后端
  • ‘cpu’

  • ‘mixed’

关键词参数:
  • affine (bool, optional, default = True) –

    适用于 mixed 后端类型。

    如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。否则,线程可以由操作系统重新分配到任何 CPU 核心。

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

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

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

  • cache_batch_copy (bool, optional, default = True) –

    适用于 mixed 后端类型。

    如果设置为 True,则使用批处理复制内核调用复制缓存中的多个图像。否则,除非批次中的顺序与缓存中的顺序相同,否则每个图像都使用 cudaMemcpy 复制。

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

    适用于 mixed 后端类型。

    打印有关解码器缓存的调试信息。

  • cache_size (int, optional, default = 0) –

    适用于 mixed 后端类型。

    解码器缓存的总大小,以兆字节为单位。如果提供,则大于 cache_threshold 的解码图像将被缓存在 GPU 内存中。

  • cache_threshold (int, optional, default = 0) –

    适用于 mixed 后端类型。

    要缓存的解码图像的大小阈值,以字节为单位。当图像被缓存时,当在运算符输入端遇到它时,不再需要解码,从而节省了处理时间。

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

    适用于 mixed 后端类型。

    以下是可用缓存类型的列表

    • threshold:缓存每个大小大于 cache_threshold 的图像,直到
      缓存已满。

      阈值策略的预热时间为 1 个 epoch。

    • largest:存储可以放入缓存的最大图像。
      最大策略的预热时间为 2 个 epoch

      注意

      为了利用缓存,建议将读取器配置为 stick_to_shard=True,以限制多节点环境中每个解码器实例看到的唯一图像数量。

  • device_memory_padding (int, optional, default = 16777216) –

    适用于 mixed 后端类型。

    nvJPEG 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则运算符为每个线程预分配一个请求大小的设备缓冲区。如果正确选择该值,则在管道执行期间不会发生额外的分配。找到理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • device_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则运算符会根据提供的提示预分配必要数量的缓冲区。如果正确选择该值,则在管道执行期间不会发生额外的分配。找到理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • host_memory_padding (int, optional, default = 8388608) –

    适用于 mixed 后端类型。

    nvJPEG 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则运算符为每个线程预分配两个(由于双缓冲)请求大小的主机 pinned 缓冲区。如果选择正确,则在管道执行期间不会发生额外的分配。找到理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • host_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则运算符会根据提供的提示预先分配所需数量的缓冲区。如果值选择正确,则在管道执行期间不会发生额外的分配。 查找理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • hw_decoder_load (float, optional, default = 0.65) –

    由硬件 JPEG 解码器处理的图像数据百分比。

    适用于 NVIDIA Ampere GPU 和更新架构中的 mixed 后端类型。

    确定将卸载到硬件解码器(如果可用)的工作负载百分比。最佳工作负载取决于提供给 DALI 管道的线程数,应通过经验找到。 更多详细信息可以在 https://developer.nvidia.com/blog/loading-data-fast-with-dali-and-new-jpeg-decoder-in-a100 中找到

  • hybrid_huffman_threshold (int, optional, default = 1000000) –

    适用于 mixed 后端类型。

    像素总数(height * width)高于此阈值的图像将使用 nvJPEG 混合霍夫曼解码器。像素较少的图像将使用 nvJPEG 主机端霍夫曼解码器。

    注意

    混合霍夫曼解码器仍然主要使用 CPU。

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

    使 mixed 后端使用与 cpu 后端相同的色度上采样方法。

    此选项对应于 libjpegturbo 或 ImageMagick 中提供的 JPEG 精细上采样

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

    适用于 mixed 后端类型。

    打印关于 nvJPEG 分配的调试信息。关于最大分配的信息可能有助于确定数据集的 device_memory_paddinghost_memory_padding 的合适值。

    注意

    统计信息是针对整个进程全局的,而不是每个运算符实例,并且包括在构造期间进行的分配(如果填充提示为非零)。

  • output_type (nvidia.dali.types.DALIImageType, optional, default = DALIImageType.RGB) –

    输出图像的色彩空间。

    注意:当解码为 YCbCr 时,图像将先解码为 RGB,然后转换为 YCbCr,遵循 ITU-R BT.601 中的 YCbCr 定义。

  • preallocate_height_hint (int, optional, default = 0) –

    图像宽度提示。

    适用于 NVIDIA Ampere GPU 和更新架构中的 mixed 后端类型。

    该提示用于为硬件 JPEG 解码器预分配内存。

  • preallocate_width_hint (int, optional, default = 0) –

    图像宽度提示。

    适用于 NVIDIA Ampere GPU 和更新架构中的 mixed 后端类型。

    该提示用于为硬件 JPEG 解码器预分配内存。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

  • split_stages (bool) –

    警告

    参数 split_stages 不再使用,将在未来版本中移除。

  • use_chunk_allocator (bool) –

    警告

    参数 use_chunk_allocator 不再使用,将在未来版本中移除。

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

    在基于 libjpeg-turbo 的 CPU 解码器中启用快速 IDCT,当 device 设置为 “cpu” 或设置为 “mixed” 但特定图像无法由 GPU 实现处理时使用。

    根据 libjpeg-turbo 文档,解压缩性能最多可提高 14%,而质量几乎没有降低。

__call__(__input, /, *, affine=True, bytes_per_sample_hint=[0], cache_batch_copy=True, cache_debug=False, cache_size=0, cache_threshold=0, cache_type='', device_memory_padding=16777216, device_memory_padding_jpeg2k=0, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.65, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, memory_stats=False, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, use_fast_idct=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.decoders.ImageCrop(*, affine=True, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, device_memory_padding=16777216, device_memory_padding_jpeg2k=0, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.65, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, memory_stats=False, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, rounding='round', use_fast_idct=False, device=None, name=None)#

解码图像并提取由固定窗口尺寸和可变锚点指定的感兴趣区域 (ROI)。

如果可能,该参数使用 ROI 解码 API(例如,libjpeg-turbonvJPEG)来减少解码时间和内存使用量。 如果给定图像格式不支持 ROI 解码,它将解码整个图像并裁剪选定的 ROI。

解码器的输出采用 HWC 布局。

支持的格式:JPG、BMP、PNG、TIFF、PNM、PPM、PGM、PBM、JPEG 2000、WebP。

注意

JPEG 2000 感兴趣区域 (ROI) 解码在 GPU 上未加速,并将使用 CPU 实现,而与选择的后端无关。 对于 GPU 加速实现,请考虑使用单独的 decoders.imagecrop 运算符。

注意

EXIF 方向元数据将被忽略。

支持的后端
  • ‘cpu’

  • ‘mixed’

关键词参数:
  • affine (bool, optional, default = True) –

    适用于 mixed 后端类型。

    如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。否则,线程可以由操作系统重新分配到任何 CPU 核心。

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

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

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

  • crop (floatfloat 列表或 TensorList of float, optional) –

    裁剪图像的形状,指定为值列表(例如,对于 2D 裁剪为 (crop_H, crop_W),对于体积裁剪为 (crop_D, crop_H, crop_W))。

    提供 crop 参数与提供单独的参数(例如 crop_dcrop_hcrop_w)不兼容。

  • crop_d (float 或 float 的 TensorList, optional, default = 0.0) –

    适用于体积输入;裁剪窗口深度(以体素为单位)。

    crop_wcrop_hcrop_d 必须一起指定。 为 crop_wcrop_hcrop_d 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • crop_h (float 或 float 的 TensorList, optional, default = 0.0) –

    裁剪窗口高度(以像素为单位)。

    crop_wcrop_h 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • crop_pos_x (float 或 float 的 TensorList, optional, default = 0.5) –

    裁剪窗口(左上角)的归一化 (0.0 - 1.0) 水平位置。

    实际位置计算公式为 crop_x = crop_x_norm * (W - crop_W),其中 crop_x_norm 是归一化位置,W 是图像的宽度,而 crop_W 是裁剪窗口的宽度。

    有关 crop_x 如何转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_pos_y (float 或 float 的 TensorList, optional, default = 0.5) –

    裁剪窗口起始位置的归一化 (0.0 - 1.0) 垂直位置(通常为左上角)。

    实际位置计算公式为 crop_y = crop_y_norm * (H - crop_H),其中 crop_y_norm 是归一化位置,H 是图像的高度,而 crop_H 是裁剪窗口的高度。

    有关 crop_y 如何转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_pos_z (float 或 float 的 TensorList, optional, default = 0.5) –

    适用于体数据输入。

    裁剪窗口(前平面)的归一化 (0.0 - 1.0) 法线位置。实际位置计算公式为 crop_z = crop_z_norm * (D - crop_D),其中 crop_z_norm 是归一化位置,D 是图像的深度,而 crop_D 是裁剪窗口的深度。

    有关 crop_z 如何转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_w (float 或 float 的 TensorList, optional, default = 0.0) –

    裁剪窗口宽度(以像素为单位)。

    crop_wcrop_h 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • device_memory_padding (int, optional, default = 16777216) –

    适用于 mixed 后端类型。

    nvJPEG 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则运算符会为每个线程预先分配一个请求大小的设备缓冲区。如果值选择正确,则在管道执行期间不会发生额外的分配。 查找理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • device_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则运算符会根据提供的提示预先分配所需数量的缓冲区。如果值选择正确,则在管道执行期间不会发生额外的分配。 查找理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • host_memory_padding (int, optional, default = 8388608) –

    适用于 mixed 后端类型。

    nvJPEG 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则运算符会为每个线程预先分配两个(由于双缓冲)请求大小的主机固定缓冲区。如果选择正确,则在管道执行期间不会发生额外的分配。 查找理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • host_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则运算符会根据提供的提示预先分配所需数量的缓冲区。如果值选择正确,则在管道执行期间不会发生额外的分配。 查找理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • hw_decoder_load (float, optional, default = 0.65) –

    由硬件 JPEG 解码器处理的图像数据百分比。

    适用于 NVIDIA Ampere GPU 和更新架构中的 mixed 后端类型。

    确定将卸载到硬件解码器(如果可用)的工作负载百分比。最佳工作负载取决于提供给 DALI 管道的线程数,应通过经验找到。 更多详细信息可以在 https://developer.nvidia.com/blog/loading-data-fast-with-dali-and-new-jpeg-decoder-in-a100 中找到

  • hybrid_huffman_threshold (int, optional, default = 1000000) –

    适用于 mixed 后端类型。

    像素总数(height * width)高于此阈值的图像将使用 nvJPEG 混合霍夫曼解码器。像素较少的图像将使用 nvJPEG 主机端霍夫曼解码器。

    注意

    混合霍夫曼解码器仍然主要使用 CPU。

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

    使 mixed 后端使用与 cpu 后端相同的色度上采样方法。

    此选项对应于 libjpegturbo 或 ImageMagick 中提供的 JPEG 精细上采样

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

    适用于 mixed 后端类型。

    打印关于 nvJPEG 分配的调试信息。关于最大分配的信息可能有助于确定数据集的 device_memory_paddinghost_memory_padding 的合适值。

    注意

    统计信息是针对整个进程全局的,而不是每个运算符实例,并且包括在构造期间进行的分配(如果填充提示为非零)。

  • output_type (nvidia.dali.types.DALIImageType, optional, default = DALIImageType.RGB) –

    输出图像的色彩空间。

    注意:当解码为 YCbCr 时,图像将先解码为 RGB,然后转换为 YCbCr,遵循 ITU-R BT.601 中的 YCbCr 定义。

  • preallocate_height_hint (int, optional, default = 0) –

    图像宽度提示。

    适用于 NVIDIA Ampere GPU 和更新架构中的 mixed 后端类型。

    该提示用于为硬件 JPEG 解码器预分配内存。

  • preallocate_width_hint (int, optional, default = 0) –

    图像宽度提示。

    适用于 NVIDIA Ampere GPU 和更新架构中的 mixed 后端类型。

    该提示用于为硬件 JPEG 解码器预分配内存。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

  • rounding (str, optional, default = ‘round’) –

    确定用于将窗口的起始坐标转换为整数值的舍入函数(请参阅 crop_pos_xcrop_pos_ycrop_pos_z)。

    可能的值为

    • "round" - 四舍五入到最接近的整数值,中间情况远离零舍入。
    • "truncate" - 丢弃数字的小数部分(向零截断)。

  • split_stages (bool) –

    警告

    参数 split_stages 不再使用,将在未来版本中移除。

  • use_chunk_allocator (bool) –

    警告

    参数 use_chunk_allocator 不再使用,将在未来版本中移除。

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

    在基于 libjpeg-turbo 的 CPU 解码器中启用快速 IDCT,当 device 设置为 “cpu” 或设置为 “mixed” 但特定图像无法由 GPU 实现处理时使用。

    根据 libjpeg-turbo 文档,解压缩性能最多可提高 14%,而质量几乎没有降低。

__call__(__input, /, *, affine=True, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, device_memory_padding=16777216, device_memory_padding_jpeg2k=0, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.65, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, memory_stats=False, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, rounding='round', use_fast_idct=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.decoders.ImageRandomCrop(*, affine=True, bytes_per_sample_hint=[0], device_memory_padding=16777216, device_memory_padding_jpeg2k=0, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.65, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, memory_stats=False, num_attempts=10, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, random_area=[0.08, 1.0], random_aspect_ratio=[0.75, 1.333333], seed=-1, use_fast_idct=False, device=None, name=None)#

解码图像并随机裁剪它们。

裁剪窗口的区域(相对于整个图像)和宽高比可以被限制在由 areaaspect_ratio 参数分别指定的取值范围内。

在可能的情况下,该算子使用 ROI 解码 API(例如,libjpeg-turbonvJPEG)来减少解码时间和内存使用量。当给定的图像格式不支持 ROI 解码时,它将解码整个图像并裁剪选定的 ROI。

解码器的输出采用 HWC 布局。

支持的格式:JPG、BMP、PNG、TIFF、PNM、PPM、PGM、PBM、JPEG 2000、WebP。

注意

JPEG 2000 感兴趣区域 (ROI) 解码在 GPU 上不加速,并将使用 CPU 实现,无论选择哪个后端。对于 GPU 加速实现,请考虑使用单独的 decoders.imagerandom_crop 算子。

注意

EXIF 方向元数据将被忽略。

支持的后端
  • ‘cpu’

  • ‘mixed’

关键词参数:
  • affine (bool, optional, default = True) –

    适用于 mixed 后端类型。

    如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。否则,线程可以由操作系统重新分配到任何 CPU 核心。

  • bytes_per_sample_hint (int 或 int 列表, optional, default = [0]) –

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

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

  • device_memory_padding (int, optional, default = 16777216) –

    适用于 mixed 后端类型。

    nvJPEG 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则算子会为每个线程预分配一个请求大小的设备缓冲区。如果值选择正确,则在 pipeline 执行期间不会发生额外的分配。 找到理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • device_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则算子会根据提供的提示预分配必要数量的缓冲区。如果值选择正确,则在 pipeline 执行期间不会发生额外的分配。 找到理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • host_memory_padding (int, optional, default = 8388608) –

    适用于 mixed 后端类型。

    nvJPEG 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则算子会为每个线程预分配两个(由于双缓冲)请求大小的主机 pinned 缓冲区。如果选择正确,则在 pipeline 执行期间不会发生额外的分配。 找到理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • host_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则算子会根据提供的提示预分配必要数量的缓冲区。如果值选择正确,则在 pipeline 执行期间不会发生额外的分配。 找到理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • hw_decoder_load (float, optional, default = 0.65) –

    由硬件 JPEG 解码器处理的图像数据百分比。

    适用于 NVIDIA Ampere GPU 和更新架构中的 mixed 后端类型。

    确定将卸载到硬件解码器(如果可用)的工作负载百分比。最佳工作负载取决于提供给 DALI 管道的线程数,应通过经验找到。 更多详细信息可以在 https://developer.nvidia.com/blog/loading-data-fast-with-dali-and-new-jpeg-decoder-in-a100 中找到

  • hybrid_huffman_threshold (int, optional, default = 1000000) –

    适用于 mixed 后端类型。

    像素总数(height * width)高于此阈值的图像将使用 nvJPEG 混合霍夫曼解码器。像素较少的图像将使用 nvJPEG 主机端霍夫曼解码器。

    注意

    混合霍夫曼解码器仍然主要使用 CPU。

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

    使 mixed 后端使用与 cpu 后端相同的色度上采样方法。

    此选项对应于 libjpegturbo 或 ImageMagick 中提供的 JPEG 精细上采样

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

    适用于 mixed 后端类型。

    打印有关 nvJPEG 分配的调试信息。关于最大分配的信息可能有助于确定数据集的 device_memory_paddinghost_memory_padding 的合适值。

    注意

    统计信息是针对整个进程全局的,而不是每个运算符实例,并且包括在构造期间进行的分配(如果填充提示为非零)。

  • num_attempts (int, optional, default = 10) – 用于选择随机区域和宽高比的最大尝试次数。

  • output_type (nvidia.dali.types.DALIImageType, optional, default = DALIImageType.RGB) –

    输出图像的色彩空间。

    注意:当解码为 YCbCr 时,图像将先解码为 RGB,然后转换为 YCbCr,遵循 ITU-R BT.601 中的 YCbCr 定义。

  • preallocate_height_hint (int, optional, default = 0) –

    图像宽度提示。

    适用于 NVIDIA Ampere GPU 和更新架构中的 mixed 后端类型。

    该提示用于为硬件 JPEG 解码器预分配内存。

  • preallocate_width_hint (int, optional, default = 0) –

    图像宽度提示。

    适用于 NVIDIA Ampere GPU 和更新架构中的 mixed 后端类型。

    该提示用于为硬件 JPEG 解码器预分配内存。

  • preserve (bool, optional, default = False) – 阻止算子从图中移除,即使其输出未使用。

  • random_area (float 或 float 列表, optional, default = [0.08, 1.0]) –

    从中选择随机面积比例 A 的范围。

    裁剪图像的面积将等于 A * 原始图像的面积。

  • random_aspect_ratio (float 或 float 列表, optional, default = [0.75, 1.333333]) – 选择随机宽高比(宽度/高度)的范围。

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

  • split_stages (bool) –

    警告

    参数 split_stages 不再使用,将在未来版本中移除。

  • use_chunk_allocator (bool) –

    警告

    参数 use_chunk_allocator 不再使用,将在未来版本中移除。

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

    在基于 libjpeg-turbo 的 CPU 解码器中启用快速 IDCT,当 device 设置为 “cpu” 或设置为 “mixed” 但特定图像无法由 GPU 实现处理时使用。

    根据 libjpeg-turbo 文档,解压缩性能最多可提高 14%,而质量几乎没有降低。

__call__(__input, /, *, affine=True, bytes_per_sample_hint=[0], device_memory_padding=16777216, device_memory_padding_jpeg2k=0, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.65, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, memory_stats=False, num_attempts=10, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, random_area=[0.08, 1.0], random_aspect_ratio=[0.75, 1.333333], seed=-1, use_fast_idct=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.decoders.ImageSlice(*, affine=True, axes=[1, 0], axis_names='WH', bytes_per_sample_hint=[0], device_memory_padding=16777216, device_memory_padding_jpeg2k=0, end=None, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.65, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, memory_stats=False, normalized_anchor=True, normalized_shape=True, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, rel_end=None, rel_shape=None, rel_start=None, shape=None, start=None, use_fast_idct=False, device=None, name=None)#

解码图像并提取感兴趣区域。

切片可以通过提供起始和结束坐标,或起始坐标和切片的形状来指定。坐标和形状都可以用绝对或相对术语提供。

切片参数可以通过以下命名参数指定

  1. start: 切片起始坐标(绝对)

  2. rel_start: 切片起始坐标(相对)

  3. end: 切片结束坐标(绝对)

  4. rel_end: 切片结束坐标(相对)

  5. shape: 切片形状(绝对)

  6. rel_shape: 切片形状(相对)

可以通过提供起始和结束坐标或起始和形状来配置切片。相对和绝对参数可以混合使用(例如,rel_start 可以与 shape 一起使用),只要起始和形状或结束被唯一地定义。

或者,可以提供两个额外的位置输入,指定 __anchor__shape。当使用位置输入时,可以使用两个额外的布尔参数 normalized_anchor/normalized_shape 来指定所提供参数的性质。将位置输入用于 anchor 和 shape 与上面指定的命名参数不兼容。

切片参数应提供与 axis_namesaxes 参数指定的维度一样多的维度。

默认情况下,nvidia.dali.fn.decoders.image_slice() 算子对切片参数使用归一化坐标和 “WH” 顺序。

在可能的情况下,该参数使用 ROI 解码 API(例如,libjpeg-turbonvJPEG)来优化解码时间和内存使用量。当给定的图像格式不支持 ROI 解码时,它将解码整个图像并裁剪选定的 ROI。

解码器的输出采用 HWC 布局。

支持的格式:JPG、BMP、PNG、TIFF、PNM、PPM、PGM、PBM、JPEG 2000、WebP。

注意

JPEG 2000 感兴趣区域 (ROI) 解码在 GPU 上不加速,并将使用 CPU 实现,无论选择哪个后端。对于 GPU 加速实现,请考虑使用单独的 decoders.imageslice 算子。

注意

EXIF 方向元数据将被忽略。

支持的后端
  • ‘cpu’

  • ‘mixed’

关键词参数:
  • affine (bool, optional, default = True) –

    适用于 mixed 后端类型。

    如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。否则,线程可以由操作系统重新分配到任何 CPU 核心。

  • axes (int 或 int 列表 或 int 的 TensorList, optional, default = [1, 0]) –

    用作维度索引的锚点和形状切片输入的维度顺序。

    负值被解释为从后面计数维度。 有效范围:[-ndim, ndim-1],其中 ndim 是输入数据中的维度数。

  • axis_names (布局字符串, optional, default = ‘WH’) –

    用于锚点和形状切片输入的维度顺序,如布局中所述。

    如果提供了值,则 axis_names 的优先级高于 axes

  • bytes_per_sample_hint (int 或 int 列表, optional, default = [0]) –

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

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

  • device_memory_padding (int, optional, default = 16777216) –

    适用于 mixed 后端类型。

    nvJPEG 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则算子会为每个线程预分配一个请求大小的设备缓冲区。如果值选择正确,则在 pipeline 执行期间不会发生额外的分配。 找到理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • device_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则算子会根据提供的提示预分配必要数量的缓冲区。如果值选择正确,则在 pipeline 执行期间不会发生额外的分配。 找到理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • end (intint 列表intTensorList, optional) –

    切片的结束坐标。

    注意:提供命名参数 start, end, shape, rel_start, rel_end, rel_shape 与提供位置输入 anchor 和 shape 不兼容。

  • host_memory_padding (int, optional, default = 8388608) –

    适用于 mixed 后端类型。

    nvJPEG 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则算子会为每个线程预分配两个(由于双缓冲)请求大小的主机 pinned 缓冲区。如果选择正确,则在 pipeline 执行期间不会发生额外的分配。 找到理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • host_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则算子会根据提供的提示预分配必要数量的缓冲区。如果值选择正确,则在 pipeline 执行期间不会发生额外的分配。 找到理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • hw_decoder_load (float, optional, default = 0.65) –

    由硬件 JPEG 解码器处理的图像数据百分比。

    适用于 NVIDIA Ampere GPU 和更新架构中的 mixed 后端类型。

    确定将卸载到硬件解码器(如果可用)的工作负载百分比。最佳工作负载取决于提供给 DALI 管道的线程数,应通过经验找到。 更多详细信息可以在 https://developer.nvidia.com/blog/loading-data-fast-with-dali-and-new-jpeg-decoder-in-a100 中找到

  • hybrid_huffman_threshold (int, optional, default = 1000000) –

    适用于 mixed 后端类型。

    像素总数(height * width)高于此阈值的图像将使用 nvJPEG 混合霍夫曼解码器。像素较少的图像将使用 nvJPEG 主机端霍夫曼解码器。

    注意

    混合霍夫曼解码器仍然主要使用 CPU。

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

    使 mixed 后端使用与 cpu 后端相同的色度上采样方法。

    此选项对应于 libjpegturbo 或 ImageMagick 中提供的 JPEG 精细上采样

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

    适用于 mixed 后端类型。

    打印有关 nvJPEG 分配的调试信息。关于最大分配的信息可能有助于确定数据集的 device_memory_paddinghost_memory_padding 的合适值。

    注意

    统计信息是针对整个进程全局的,而不是每个运算符实例,并且包括在构造期间进行的分配(如果填充提示为非零)。

  • normalized_anchor (bool, optional, default = True) –

    确定锚点位置输入应解释为归一化坐标(范围 [0.0, 1.0])还是绝对坐标。

    注意

    此参数仅在锚点数据类型为 float 时才相关。 对于整数类型,坐标始终是绝对坐标。

  • normalized_shape (bool, optional, default = True) –

    确定形状位置输入应解释为归一化坐标(范围 [0.0, 1.0])还是绝对坐标。

    注意

    此参数仅在锚点数据类型为 float 时才相关。 对于整数类型,坐标始终是绝对坐标。

  • output_type (nvidia.dali.types.DALIImageType, optional, default = DALIImageType.RGB) –

    输出图像的色彩空间。

    注意:当解码为 YCbCr 时,图像将先解码为 RGB,然后转换为 YCbCr,遵循 ITU-R BT.601 中的 YCbCr 定义。

  • preallocate_height_hint (int, optional, default = 0) –

    图像宽度提示。

    适用于 NVIDIA Ampere GPU 和更新架构中的 mixed 后端类型。

    该提示用于为硬件 JPEG 解码器预分配内存。

  • preallocate_width_hint (int, optional, default = 0) –

    图像宽度提示。

    适用于 NVIDIA Ampere GPU 和更新架构中的 mixed 后端类型。

    该提示用于为硬件 JPEG 解码器预分配内存。

  • preserve (bool, optional, default = False) – 防止算子从图中移除,即使其输出未被使用。

  • rel_end (floatfloat 列表或 floatTensorList可选) –

    切片的结束相对坐标(范围 [0.0 - 1.0])。

    注意:提供命名参数 start, end, shape, rel_start, rel_end, rel_shape 与提供位置输入 anchor 和 shape 不兼容。

  • rel_shape (floatfloat 列表或 floatTensorList可选) –

    切片的相对形状(范围 [0.0 - 1.0])。

    提供命名参数 start, end, shape, rel_start, rel_end, rel_shape 与提供位置输入 anchor 和 shape 不兼容。

  • rel_start (floatfloat 列表或 floatTensorList可选) –

    切片的起始相对坐标(范围 [0.0 - 1.0])。

    注意:提供命名参数 start, end, shape, rel_start, rel_end, rel_shape 与提供位置输入 anchor 和 shape 不兼容。

  • shape (intint 列表或 intTensorList可选) –

    切片的形状。

    提供命名参数 start, end, shape, rel_start, rel_end, rel_shape 与提供位置输入 anchor 和 shape 不兼容。

  • split_stages (bool) –

    警告

    参数 split_stages 不再使用,将在未来版本中移除。

  • start (intint 列表或 intTensorList可选) –

    切片的起始坐标。

    注意:提供命名参数 start/endstart/shape 与提供位置输入 anchor 和 shape 不兼容。

  • use_chunk_allocator (bool) –

    警告

    参数 use_chunk_allocator 不再使用,将在未来版本中移除。

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

    在基于 libjpeg-turbo 的 CPU 解码器中启用快速 IDCT,当 device 设置为 “cpu” 时,或者当它设置为 “mixed” 但特定图像无法由 GPU 实现处理时使用。

    根据 libjpeg-turbo 文档,解压缩性能最多可提高 14%,而质量几乎没有降低。

__call__(__data, __anchor=None, __shape=None, /, *, affine=True, axes=[1, 0], axis_names='WH', bytes_per_sample_hint=[0], device_memory_padding=16777216, device_memory_padding_jpeg2k=0, end=None, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.65, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, memory_stats=False, normalized_anchor=True, normalized_shape=True, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, rel_end=None, rel_shape=None, rel_start=None, shape=None, start=None, use_fast_idct=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __data (TensorList) – 包含输入数据的批次。

  • __anchor (floatint1D TensorList可选) –

    包含切片起始点的归一化或绝对坐标(x0, x1, x2, …)的输入。

    整数坐标被解释为绝对坐标,而浮点坐标可以被解释为绝对坐标或相对坐标,具体取决于 normalized_anchor 的值。

  • __shape (floatint1D TensorList可选) –

    包含切片尺寸的归一化或绝对坐标(s0, s1, s2, …)的输入。

    整数坐标被解释为绝对坐标,而浮点坐标可以被解释为绝对坐标或相对坐标,具体取决于 normalized_shape 的值。

nvidia.dali.ops.experimental#

class nvidia.dali.ops.experimental.AudioResample(*, bytes_per_sample_hint=[0], dtype=None, in_rate=None, out_length=None, out_rate=None, preserve=False, quality=50.0, scale=None, device=None, name=None)#

警告

此算子现已弃用。请使用 AudioResample() 代替。

此算子已从实验阶段移出,现在是常规的 DALI 算子。这只是为了向后兼容而保留的已弃用别名。

audio_resample() 的旧别名。

class nvidia.dali.ops.experimental.Debayer(*, algorithm='bilinear_npp', blue_position=None, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

执行图像去马赛克/拜耳化 (demosaicing/debayering)。

使用指定的颜色滤镜阵列将单通道图像转换为 RGB 图像。

支持的输入类型为 uint8_tuint16_t。输入图像必须是 2D 张量 (HW) 或 3D 张量 (HWC),其中通道数为 1。此算子支持图像序列/类似视频的输入(布局 FHW)。

例如,以下代码片段展示了对批量图像序列进行去马赛克处理

def bayered_sequence(sample_info):
  # some actual source of video inputs with corresponding pattern
  # as opencv-style string
  video, bayer_pattern = get_sequence(sample_info)
  if bayer_pattern == "bggr":
      blue_position = [0, 0]
  elif bayer_pattern == "gbrg":
      blue_position = [0, 1]
  elif bayer_pattern == "grbg":
      blue_position = [1, 0]
  else:
      assert bayer_pattern == "rggb"
      blue_position = [1, 1]
  return video, np.array(blue_position, dtype=np.int32)

@pipeline_def
def debayer_pipeline():
  bayered_sequences, blue_positions = fn.external_source(
    source=bayered_sequence, batch=False, num_outputs=2,
    layout=["FHW", None])  # note the "FHW" layout, for plain images it would be "HW"
  debayered_sequences = fn.experimental.debayer(
    bayered_sequences.gpu(), blue_position=blue_positions)
  return debayered_sequences

此运算符允许序列输入。

支持的后端
  • ‘gpu’

关键词参数:
  • algorithm (str, optional, default = ‘bilinear_npp’) –

    用于推断任何给定像素的缺失颜色的算法。目前仅支持 bilinear_npp

    • bilinear_npp 算法使用双线性插值来推断红色和蓝色值。对于绿色值,使用具有色度相关的双线性插值,如 NPP 文档中所述。

  • blue_position (intint 列表或 intTensorList) –

    颜色滤镜阵列/拜耳瓦片的布局。

    蓝色值在 2x2 拜耳瓦片中的位置。支持的值对应于以下 OpenCV 拜耳布局

    • (0, 0) - BG/BGGR

    • (0, 1) - GB/GBRG

    • (1, 0) - GR/GRBG

    • (1, 1) - RG/RGGB

    此参数遵循 OpenCV 的约定,指代传感器矩阵的第二行和第二列中开始的 2x2 瓦片。

    例如,(0, 0)/BG/BGGR 对应于以下传感器矩阵

    R

    G

    R

    G

    R

    G

    B

    G

    B

    G

    R

    G

    R

    G

    R

    G

    B

    G

    B

    G

    支持 per-frame 输入。

  • bytes_per_sample_hint (int 或 int 列表, optional, default = [0]) –

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

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

  • preserve (bool, optional, default = False) – 防止算子从图中移除,即使其输出未被使用。

__call__(__input, /, *, algorithm='bilinear_npp', blue_position=None, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HW', 'HWC', 'FHW', 'FHWC')) – 算子的输入。

class nvidia.dali.ops.experimental.Dilate(*, anchor=[-1, -1], border_mode='constant', bytes_per_sample_hint=[0], iterations=1, mask_size=[3, 3], preserve=False, device=None, name=None)#

对输入图像执行膨胀操作。

此运算符允许序列输入。

支持的后端
  • ‘gpu’

关键词参数:
  • anchor (int 或 int 列表或 int 的 TensorList, optional, default = [-1, -1]) –

    设置结构元素的锚点。默认值 (-1, -1) 使用元素的中心作为锚点。

    支持 per-frame 输入。

  • border_mode (str, optional, default = ‘constant’) – 访问输入图像外部元素时要使用的边界模式。

  • bytes_per_sample_hint (int 或 int 列表, optional, default = [0]) –

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

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

  • iterations (int, optional, default = 1) – 执行操作的次数,通常设置为 1。设置为大于 1 的值相当于每次额外迭代将掩码尺寸增加 (mask_width - 1, mask_height -1)。

  • mask_size (int 或 int 列表或 int 的 TensorList, optional, default = [3, 3]) –

    结构元素的大小。

    支持 per-frame 输入。

  • preserve (bool, optional, default = False) – 防止算子从图中移除,即使其输出未被使用。

__call__(__input, /, *, anchor=[-1, -1], border_mode='constant', bytes_per_sample_hint=[0], iterations=1, mask_size=[3, 3], preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HW', 'HWC', 'FHWC', 'CHW', 'FCHW')) – 输入数据。必须是 HWC 或 CHW 布局的图像,或这些图像的序列。

class nvidia.dali.ops.experimental.Equalize(*, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

执行灰度/逐通道直方图均衡化。

支持的输入是 uint8_t 类型的图像和视频。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 int 列表, optional, default = [0]) –

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

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

  • preserve (bool, optional, default = False) – 防止算子从图中移除,即使其输出未被使用。

__call__(__input, /, *, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HW', 'HWC', 'CHW', 'FHW', 'FHWC', 'FCHW')) – 算子的输入。

class nvidia.dali.ops.experimental.Erode(*, anchor=[-1, -1], border_mode='constant', bytes_per_sample_hint=[0], iterations=1, mask_size=[3, 3], preserve=False, device=None, name=None)#

对输入图像执行腐蚀操作。

此运算符允许序列输入。

支持的后端
  • ‘gpu’

关键词参数:
  • anchor (int 或 int 列表或 int 的 TensorList, optional, default = [-1, -1]) –

    设置结构元素的锚点。默认值 (-1, -1) 使用元素的中心作为锚点。

    支持 per-frame 输入。

  • border_mode (str, optional, default = ‘constant’) – 访问输入图像外部元素时要使用的边界模式。

  • bytes_per_sample_hint (int 或 int 列表, optional, default = [0]) –

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

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

  • iterations (int, optional, default = 1) – 执行操作的次数,通常设置为 1。设置为大于 1 的值相当于每次额外迭代将掩码尺寸增加 (mask_width - 1, mask_height -1)。

  • mask_size (int 或 int 列表或 int 的 TensorList, optional, default = [3, 3]) –

    结构元素的大小。

    支持 per-frame 输入。

  • preserve (bool, optional, default = False) – 防止算子从图中移除,即使其输出未被使用。

__call__(__input, /, *, anchor=[-1, -1], border_mode='constant', bytes_per_sample_hint=[0], iterations=1, mask_size=[3, 3], preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HW', 'HWC', 'FHWC', 'CHW', 'FCHW')) – 输入数据。必须是 HWC 或 CHW 布局的图像,或这些图像的序列。

class nvidia.dali.ops.experimental.Filter(*, anchor=[-1], border='reflect_101', bytes_per_sample_hint=[0], dtype=None, mode='same', preserve=False, device=None, name=None)#

使用提供的滤波器卷积图像。

注意

实际上,该算子计算的是相关性,而不是卷积,即在计算滤波器和图像的乘积时,滤波器元素的顺序不会被翻转。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • anchor (int 或 int 列表或 int 的 TensorList, 可选, 默认 = [-1]) –

    指定滤波器在输入上的位置。

    如果滤波器大小为 (r, s),锚点为 (a, b),则位置 (x, y) 的输出是滤波器和输入矩形的乘积,矩形角点为:左上角 (x - a, y - b) 和右下角 (x - a + r - 1, x - b + s - 1)

    如果指定 -1(默认值),则使用滤波器范围的中间值(向下舍入为整数),对于奇数大小的滤波器,这将使滤波器在输入上居中。

    锚点必须是 2D 或 3D 点,具体取决于输入维度,其每个范围都位于滤波器边界内 ([0, ..., filter_extent - 1])。锚点范围的顺序对应于滤波器范围的顺序。

    "valid" 模式下,此参数将被忽略。

    支持 per-frame 输入。

  • border (str, 可选, 默认 = ‘reflect_101’) –

    控制如何处理样本上超出边界的滤波器位置。

    支持的值为: "reflect_101", "reflect_1001", "wrap", "clamp", "constant"

    • "reflect_101" (默认), 反射输入,但不重复最外层的值 (dcb|abcdefghi|hgf)。

    • "reflect_1001": 反射输入,包括最外层的值 (cba|abcdefghi|ihg)

    • "wrap": 包裹输入 (ghi|abcdefghi|abc)。

    • "clamp": 输入用最外层的值填充 (aaa|abcdefghi|iii)。

    • "constant": 输入用用户提供的标量(默认为零)填充。在样本内。

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。输出类型可以是浮点型,或者必须与输入类型相同。如果未设置,则使用输入类型。

    注意

    用于实际计算的中间类型为 float32。如果输出为整数类型,则值将被限制在输出类型范围内。

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

    支持的值为: "same""valid"

    • "same" (默认): 输入和输出大小相同,并且使用 border 来处理超出边界的滤波器位置。

    • "valid": 输出样本被裁剪(裁剪量为 filter_extent - 1),以便所有滤波器位置都完全位于输入样本内。

  • preserve (bool, 可选, 默认 = False) – 阻止算子从图中移除,即使其输出未被使用。

__call__(__data, __filter, __fill_value=None, /, *, anchor=[-1], border='reflect_101', bytes_per_sample_hint=[0], dtype=None, mode='same', preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __data (TensorList) –

    输入样本批次。

    样本可以是图像、视频或体数据 (3D)。样本可以包含通道:支持通道优先和通道最后布局。对于视频/序列,帧范围必须在通道范围之前,例如,支持具有 "FCHW" 布局的视频,但不支持 "CFHW" 样本。

    支持以下类型的样本:int8、int16、uint8、uint16、float16、float32。

    请注意,用于计算的中间类型始终为 float32。

    注意

    CPU 变体不支持体数据 (3D),也不支持以下类型的输入:int8 和 float16。

  • __filter (TensorList) –

    滤波器批次。

    对于具有两个空间维度(图像或视频)的输入,每个滤波器必须是 2D 数组(或要 逐帧 应用于视频输入的 2D 数组序列)。对于体输入,滤波器必须是 3D 数组。滤波器值必须具有 float32 类型。

  • __fill_value (TensorList, optional) –

    用于填充的标量批次。

    如果 "border" 设置为 "constant",则当输入样本与滤波器卷积时,将使用相应的标量进行填充。标量必须与输入样本的类型相同。对于视频/序列输入,可以指定一个标量数组以 逐帧 应用。

class nvidia.dali.ops.experimental.Inflate(*, algorithm='LZ4', bytes_per_sample_hint=[0], chunk_offsets=None, chunk_sizes=None, dtype=DALIDataType.UINT8, layout='', preserve=False, sequence_axis_name='F', shape=None, device=None, name=None)#

使用指定的解压缩算法膨胀/解压缩输入。

输入必须是字节 (uint8) 的 1D 张量。需要传递解压缩样本的 shapedtype

每个输入样本可以是单个压缩块,也可以由多个压缩块组成,这些压缩块在膨胀时具有相同的形状和类型,因此可以将它们合并到单个张量中,其中张量的最外层范围对应于块的数量。

如果样本由多个块组成,则必须指定 chunk_offsetschunk_sizes。在这种情况下,shape 必须描述单个膨胀(输出)块的形状。块的数量将自动作为最外层范围添加到输出张量。

例如,以下代码片段展示了类似视频序列的解压缩。每个视频序列都通过以下方式解压缩:首先,单独压缩每一帧,然后连接来自相应序列的压缩帧。

@pipeline_def
def inflate_sequence_pipeline():
  compres_seq, uncompres_hwc_shape, compres_chunk_sizes = fn.external_source(...)
  sequences = fn.experimental.inflate(
      compres_seq.gpu(),
      chunk_sizes=compres_chunk_sizes,  # refers to sizes in ``compres_seq``
      shape=uncompres_hwc_shape,
      layout="HWC",
      sequence_axis_name="F")
  return sequences
支持的后端
  • ‘gpu’

关键词参数:
  • algorithm (str, 可选, 默认 = ‘LZ4’) –

    用于解码数据的算法。

    目前仅支持 LZ4

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

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

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

  • chunk_offsets (intint 列表或 intTensorList, optional) –

    输入样本中描述连续块开始位置的偏移量列表。

    如果未指定 chunk_sizes,则假定块在输入张量中密集打包,并且最后一个块以样本的结尾结束。

  • chunk_sizes (intint 列表或 intTensorList, optional) –

    相应输入块的大小列表。

    如果未指定 chunk_offsets,则假定块在输入张量中密集打包,并且第一个块从样本的开头开始。

  • dtype (nvidia.dali.types.DALIDataType, 可选, 默认 = DALIDataType.UINT8) – 输出(膨胀)数据类型。

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

    输出(膨胀)块的布局。

    如果样本由多个块组成,则还会将 sequence_axis_name 范围添加到指定布局的开头。

  • preserve (bool, 可选, 默认 = False) – 阻止算子从图中移除,即使其输出未被使用。

  • sequence_axis_name (layout str, 可选, 默认 = ‘F’) –

    序列轴的名称。

    如果样本由多个块组成,则会在输出张量中添加一个额外的外部维度。默认情况下,假定它是视频帧,因此默认标签为 'F'

    如果未指定 layout 或者输入不是序列(既未指定 chunk_offsets 也未指定 chunk_sizes),则忽略该值。

  • shape (intint 列表或 intTensorList) – 输出(膨胀)块的形状。

__call__(__input, /, *, algorithm='LZ4', bytes_per_sample_hint=[0], chunk_offsets=None, chunk_sizes=None, dtype=DALIDataType.UINT8, layout='', preserve=False, sequence_axis_name='F', shape=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.experimental.MedianBlur(*, bytes_per_sample_hint=[0], preserve=False, window_size=[3, 3], device=None, name=None)#

中值模糊通过用周围矩形区域的中值颜色替换每个像素来平滑图像或图像序列。

支持的后端
  • ‘gpu’

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

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

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

  • preserve (bool, 可选, 默认 = False) – 阻止算子从图中移除,即使其输出未被使用。

  • window_size (int 或 int 列表或 int 的 TensorList, 可选, 默认 = [3, 3]) – 执行平滑的窗口大小

__call__(__input, /, *, bytes_per_sample_hint=[0], preserve=False, window_size=[3, 3], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HW', 'HWC', 'FHWC', 'CHW', 'FCHW')) – 输入数据。必须是 HWC 或 CHW 布局的图像,或这些图像的序列。

class nvidia.dali.ops.experimental.PeekImageShape(*, adjust_orientation=True, bytes_per_sample_hint=[0], dtype=DALIDataType.INT64, image_type=DALIImageType.RGB, preserve=False, device=None, name=None)#

获取编码图像的形状。

此运算符返回图像解码后的形状。

注意

不建议将此运算符与动态执行器(管道构造函数中的 exec_dynamic=True)一起使用。请在解码后的图像上使用 nvidia.dali.pipeline.DataNode.shape() 代替。

支持的后端
  • ‘cpu’

关键词参数:
  • adjust_orientation (bool, 可选, 默认 = True) – 计算形状时使用 EXIF 方向元数据。

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选, 默认 = DALIDataType.INT64) – 尺寸转换到的数据类型。

  • image_type (nvidia.dali.types.DALIImageType, 可选, 默认 = DALIImageType.RGB) – 图像的颜色格式。

  • preserve (bool, 可选, 默认 = False) – 阻止算子从图中移除,即使其输出未被使用。

__call__(__input, /, *, adjust_orientation=True, bytes_per_sample_hint=[0], dtype=DALIDataType.INT64, image_type=DALIImageType.RGB, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.experimental.Remap(*, bytes_per_sample_hint=[0], interp=DALIInterpType.INTERP_LINEAR, pixel_origin='corner', preserve=False, device=None, name=None)#

Remap 操作对图像应用通用的几何变换。换句话说,它从输入图像中的一个位置获取像素,并将它们放置在输出图像中的另一个位置。变换由 mapxmapy 参数描述,其中

output(x,y) = input(mapx(x,y),mapy(x,y))

输出张量的类型将与输入张量的类型匹配。

仅处理 HWC 布局。

目前不支持选择边界策略。DALIBorderType 将始终为 CONSTANT,值为 0

此运算符允许序列输入。

支持的后端
  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • interp (nvidia.dali.types.DALIInterpType, optional, default = DALIInterpType.INTERP_LINEAR) – 插值类型。

  • pixel_origin (str, optional, default = ‘corner’) –

    像素原点。可选值: "corner", "center"

    定义像素的哪个部分(左上角或中心)被解释为其原点。此值会影响插值结果。要与 OpenCV 匹配,请选择 "center"

  • preserve (bool, optional, default = False) – 阻止算子从图中移除,即使其输出未使用。

__call__(__input, __mapx, __mapy, /, *, bytes_per_sample_hint=[0], interp=DALIInterpType.INTERP_LINEAR, pixel_origin='corner', preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __input (TensorList ('HWC', 'FHWC')) – 输入数据。必须是 1 通道或 3 通道的 HWC 图像。

  • __mapx (TensorList of float ('HWC', 'HW', 'FHWC', 'FHW', 'F***', 'F**')) – 定义 x 坐标的 remap 变换。

  • __mapy (TensorList of float ('HWC', 'HW', 'FHWC', 'FHW', 'F***', 'F**')) – 定义 y 坐标的 remap 变换。

class nvidia.dali.ops.experimental.Resize(*, antialias=True, bytes_per_sample_hint=[0], dtype=None, interp_type=DALIInterpType.INTERP_LINEAR, mag_filter=DALIInterpType.INTERP_LINEAR, max_size=None, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, mode='default', preserve=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, save_attrs=False, size=None, subpixel_scale=True, temp_buffer_hint=0, device=None, name=None)#

调整图像大小。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘gpu’

关键词参数:
  • antialias (bool, optional, default = True) –

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

    注意

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

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

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

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

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

    输出数据类型。

    必须与输入类型相同或为 float。如果未设置,则使用输入类型。

  • image_type (nvidia.dali.types.DALIImageType) –

    警告

    参数 image_type 已不再使用,并将在未来的版本中移除。

  • interp_type (nvidia.dali.types.DALIInterpType or TensorList of nvidia.dali.types.DALIInterpType, optional, default = DALIInterpType.INTERP_LINEAR) –

    要使用的插值类型。

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

    注意

    现在不建议使用 INTERP_TRIANGULAR,应将其替换为

    启用抗锯齿的 INTERP_LINEAR。

  • mag_filter (nvidia.dali.types.DALIInterpType or TensorList of nvidia.dali.types.DALIInterpType, optional, default = DALIInterpType.INTERP_LINEAR) – 放大时使用的滤波器。

  • max_size (float or list of float, optional) –

    输出尺寸的限制。

    当算子配置为保持宽高比且仅指定较小尺寸时,另一个(或多个)尺寸可能会变得非常大。当使用 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 or TensorList of nvidia.dali.types.DALIInterpType, optional, default = DALIInterpType.INTERP_LINEAR) – 缩小时使用的滤波器。

  • minibatch_size (int, optional, default = 32) – 内核调用中处理的最大图像数量。

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

    调整大小模式。

    以下是支持的模式列表

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

      此参数与 resize_longerresize_shorter 互斥。

  • preserve (bool, optional, default = False) – 阻止算子从图中移除,即使其输出未使用。

  • resize_longer (float or TensorList of float, optional, default = 0.0) –

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

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

  • resize_shorter (float or TensorList of float, optional, default = 0.0) –

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

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

  • resize_x (float or TensorList of float, optional, default = 0.0) –

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

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

  • resize_y (float or TensorList of float, optional, default = 0.0) –

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

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

  • resize_z (float or TensorList of float, optional, default = 0.0) –

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

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

  • roi_end (float or list of float or TensorList of float, optional) –

    输入感兴趣区域 (ROI) 的结束坐标。

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

  • roi_relative (bool, optional, default = False) – 如果为 true,则 ROI 坐标相对于输入大小,其中 0 表示顶部/左侧,1 表示底部/右侧

  • roi_start (float or list of float or TensorList of float, optional) –

    输入感兴趣区域 (ROI) 的起始坐标。

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

  • save_attrs (bool, optional, default = False) – 保存 reshape 属性以进行测试。

  • size (float or list of float or TensorList of float, optional) –

    期望的输出尺寸。

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

  • subpixel_scale (bool, optional, default = True) –

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

    否则,将调整缩放比例,以使源图像映射到舍入后的输出尺寸。

  • temp_buffer_hint (int, optional, default = 0) –

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

    注意

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

__call__(__input, /, *, antialias=True, bytes_per_sample_hint=[0], dtype=None, interp_type=DALIInterpType.INTERP_LINEAR, mag_filter=DALIInterpType.INTERP_LINEAR, max_size=None, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, mode='default', preserve=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, save_attrs=False, size=None, subpixel_scale=True, temp_buffer_hint=0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList ('HWC', 'FHWC', 'CHW', 'FCHW', 'CFHW', 'DHWC', 'FDHWC', 'CDHW', 'FCDHW', 'CFDHW')) – 算子的输入。

class nvidia.dali.ops.experimental.TensorResize(*, alignment=[0.5], antialias=True, axes=None, axis_names=None, bytes_per_sample_hint=[0], dtype=None, interp_type=DALIInterpType.INTERP_LINEAR, mag_filter=DALIInterpType.INTERP_LINEAR, max_size=None, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, mode='default', preserve=False, roi_end=None, roi_relative=False, roi_start=None, scales=None, size_rounding='round', sizes=None, subpixel_scale=True, temp_buffer_hint=0, device=None, name=None)#

调整张量大小。

此运算符允许序列输入并支持体积数据。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • alignment (float 或 float 列表或 float 张量列表, 可选, 默认 = [0.5]) –

    当使用缩放比例(已提供或已计算)时,确定 ROI 的位置。

    实际输出大小必须是整数,并且可能与通过输入(或 ROI)大小乘以缩放因子计算出的“理想”输出大小不同。在这种情况下,输出大小将四舍五入(根据 size_rounding 策略),并且需要调整输入 ROI 以保持缩放因子。此参数定义了 ROI 的哪个相对点应保持其在输出中的位置。

    此点计算为 center = (1 - alignment) * roi_start + alignment * roi_end。Alignment 0.0 表示与 ROI 的起始位置对齐,0.5 表示与区域的中心对齐,1.0 表示与末尾对齐。请注意,当未指定 ROI 时,将假定 roi_start=0 和 roi_end=input_size。

    当使用 0.5(默认值)时,调整大小操作具有翻转不变性(翻转后再调整大小在数学上等同于调整大小后再翻转)。

    此参数的值包含与为 sizes/scales 提供的维度一样多的元素。如果仅提供一个值,则将其应用于所有维度。

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

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

    注意

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

  • axes (intlist of int, 可选) –

    sizes, scales, max_size, roi_start, roi_end 的维度索引。

    接受范围为 [-ndim, ndim-1]。负索引从后往前计数。

    默认情况下,假定为所有维度。axis_namesaxes 参数互斥。

  • axis_names (布局字符串, 可选) –

    sizes, scales, max_size, roi_start, roi_end 的轴名称。

    默认情况下,假定为所有维度。axis_namesaxes 参数互斥。

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    必须与输入类型相同或为 float。如果未设置,则使用输入类型。

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

    要使用的插值类型。

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

    注意

    现在不建议使用 INTERP_TRIANGULAR,应将其替换为

    启用 antialias 的 INTERP_LINEAR。

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

  • max_size (floatlist of 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.DALIInterpTypenvidia.dali.types.DALIInterpType 的张量列表, 可选, 默认 = 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 互斥

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

  • roi_end (floatlist of floatTensorList of float, 可选) –

    输入感兴趣区域 (ROI) 的结束坐标。

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

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

  • roi_start (floatlist of floatTensorList of float, 可选) –

    输入感兴趣区域 (ROI) 的起始坐标。

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

  • scales (floatlist of floatTensorList of float, 可选) –

    缩放因子。

    结果输出大小计算为 out_size = size_rounding(scale_factor * original_size)。有关支持的舍入策略列表,请参阅 size_rounding

    当提供 axes 时,缩放因子值指的是指定的轴。注意:参数 sizesscales 互斥。

  • size_rounding (str, 可选, 默认 = ‘round’) –

    确定使用缩放比例时的舍入策略。

    可能的值为:* | "round" - 将结果大小四舍五入到最接近的整数值,中间值远离零舍入。 * | "truncate" - 丢弃结果大小的小数部分。 * | "ceil" - 将结果大小向上舍入到下一个整数值。

  • sizes (floatlist of floatTensorList of float, 可选) –

    输出大小。

    当提供 axes 时,大小值指的是指定的轴。注意:参数 sizesscales 互斥。

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

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

    否则,将调整缩放比例,以使源图像映射到舍入后的输出尺寸。

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

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

    注意

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

__call__(__input, /, *, alignment=[0.5], antialias=True, axes=None, axis_names=None, bytes_per_sample_hint=[0], dtype=None, interp_type=DALIInterpType.INTERP_LINEAR, mag_filter=DALIInterpType.INTERP_LINEAR, max_size=None, min_filter=DALIInterpType.INTERP_LINEAR, minibatch_size=32, mode='default', preserve=False, roi_end=None, roi_relative=False, roi_start=None, scales=None, size_rounding='round', sizes=None, subpixel_scale=True, temp_buffer_hint=0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 操作符的输入。

class nvidia.dali.ops.experimental.WarpPerspective(*, border_mode='constant', bytes_per_sample_hint=[0], fill_value=[], interp_type=DALIInterpType.INTERP_LINEAR, inverse_map=True, matrix=[], pixel_origin='corner', preserve=False, size=[], device=None, name=None)#

对图像执行透视变换。

支持的后端
  • ‘gpu’

关键词参数:
  • border_mode (str, 可选, 默认 = ‘constant’) – 访问输入图像外部的元素时要使用的边界模式。支持的值为:“constant”、“replicate”、“reflect”、“reflect_101”、“wrap”。

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

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

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

  • fill_value (float 或 float 列表, 可选, 默认 = []) – 当选择 “constant” border_mode 时,用于填充源图像外部区域的值。

  • interp_type (nvidia.dali.types.DALIInterpType, 可选, 默认 = DALIInterpType.INTERP_LINEAR) – 使用的插值类型。

  • inverse_map (bool, 可选, 默认 = True) – 如果设置为 true(默认值),则矩阵被解释为目标到源坐标的映射。否则,它被解释为源到目标坐标的映射。

  • matrix (float 或 float 列表或 float 张量列表, 可选, 默认 = []) –

    目标到源坐标的透视变换映射。

    如果 inverse_map 参数设置为 false,则矩阵被解释为源到目标坐标的映射。

    它等效于 OpenCV 的 warpPerspective 操作,其中 inverse_map 参数类似于 WARP_INVERSE_MAP 标志。

    注意

    除了此参数之外,运算符还可以接受第二个位置输入,在这种情况下,矩阵可以放置在 GPU 上。

    支持 per-frame 输入。

  • pixel_origin (str, 可选, 默认 = ‘corner’) –

    像素原点。可能的值:“corner”、“center”。

    确定 (0, 0) 坐标的含义 - “corner” 将原点放置在左上角像素的左上角(如 OpenGL 中);“center” 将 (0, 0) 放置在左上角像素的中心(如 OpenCV 中)。

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

  • size (float 或 float 列表或 float 张量列表, 可选, 默认 = []) –

    输出大小,以像素/点为单位。

    应排除通道维度(例如,对于 RGB 图像,指定 (480,640),而不是 (480,640,3)

__call__(__input, __matrix_gpu=None, /, *, border_mode='constant', bytes_per_sample_hint=[0], fill_value=[], interp_type=DALIInterpType.INTERP_LINEAR, inverse_map=True, matrix=[], pixel_origin='corner', preserve=False, size=[], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __input (uint8, uint16, int16float ('HW', 'HWC', 'FHWC', 'CHW', 'FCHW') 的 TensorList) – 输入数据。必须是 HWC 或 CHW 布局的图像,或这些图像的序列。

  • __matrix_gpu (1D TensorList of float, 可选) – 变换矩阵数据。应该用于传递 GPU 数据。对于 CPU 数据,应该使用 matrix 参数。

nvidia.dali.ops.experimental.decoders#

class nvidia.dali.ops.experimental.decoders.Image(*, adjust_orientation=True, affine=True, bytes_per_sample_hint=[0], cache_batch_copy=True, cache_debug=False, cache_size=0, cache_threshold=0, cache_type='', device_memory_padding=16777216, device_memory_padding_jpeg2k=0, dtype=DALIDataType.UINT8, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.9, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, use_fast_idct=False, device=None, name=None)#

解码图像。

支持的格式:JPEG、JPEG 2000、TIFF、PNG、BMP、PNM、PPM、PGM、PBM、WebP。

解码器的输出采用 HWC 布局。

该实现使用 NVIDIA nvImageCodec 来解码图像。

注意

GPU 加速解码仅适用于部分图像格式(JPEG 和 JPEG2000)。对于其他格式,将使用基于 CPU 的解码器。对于 JPEG,当可用时将使用专用硬件解码器。

注意

WebP 解码目前仅支持简单文件格式(有损和无损压缩)。有关不同 WebP 文件格式的详细信息,请参阅 https://developers.google.com/speed/webp/docs/riff_container

支持的后端
  • ‘cpu’

  • ‘mixed’

关键词参数:
  • adjust_orientation (bool, 可选, 默认 = True) – 使用 EXIF 方向元数据来校正图像

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

    适用于 mixed 后端类型。

    如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。否则,线程可以由操作系统重新分配到任何 CPU 核心。

  • bytes_per_sample_hint (int 或 list of int, 可选, 默认 = [0]) –

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

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

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

    适用于 mixed 后端类型。

    如果设置为 True,则使用批处理复制内核调用复制缓存中的多个图像。否则,除非批次中的顺序与缓存中的顺序相同,否则每个图像都使用 cudaMemcpy 复制。

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

    适用于 mixed 后端类型。

    打印有关解码器缓存的调试信息。

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

    适用于 mixed 后端类型。

    解码器缓存的总大小,以兆字节为单位。如果提供,则解码后大于 cache_threshold 的图像将被缓存在 GPU 内存中。

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

    适用于 mixed 后端类型。

    要缓存的解码图像的大小阈值,以字节为单位。当图像被缓存时,当在运算符输入端遇到它时,不再需要解码,从而节省了处理时间。

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

    适用于 mixed 后端类型。

    以下是可用缓存类型的列表

    • threshold: 缓存每个大小大于 cache_threshold 的图像,直到
      缓存已满。

      阈值策略的预热时间为 1 个 epoch。

    • largest:存储可以放入缓存的最大图像。
      最大策略的预热时间为 2 个 epoch

      注意

      为了利用缓存,建议将读取器配置为 stick_to_shard=True,以限制多节点环境中每个解码器实例看到的唯一图像数量。

  • device_memory_padding (int, 可选, 默认 = 16777216) –

    适用于 mixed 后端类型。

    nvJPEG 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符为每个线程预分配一个请求大小的设备缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

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

    适用于 mixed 后端类型。

    nvJPEG2k 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符会根据提供的提示预分配必要数量的缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

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

    图像的输出数据类型。

    值将被转换为请求类型的动态范围。

  • host_memory_padding (int, 可选, 默认 = 8388608) –

    适用于 mixed 后端类型。

    nvJPEG 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符为每个线程预分配两个(由于双缓冲)主机 pinned 缓冲区,大小为请求的大小。如果选择正确,则在 pipeline 执行期间不会发生额外的分配。

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

    适用于 mixed 后端类型。

    nvJPEG2k 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符会根据提供的提示预分配必要数量的缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

  • hw_decoder_load (float, 可选, 默认 = 0.9) –

    由硬件 JPEG 解码器处理的图像数据百分比。

    适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

    确定将卸载到硬件解码器(如果可用)的工作负载百分比。最佳工作负载取决于提供给 DALI 管道的线程数,应通过经验找到。 更多详细信息可以在 https://developer.nvidia.com/blog/loading-data-fast-with-dali-and-new-jpeg-decoder-in-a100 中找到

  • hybrid_huffman_threshold (int, 可选, 默认 = 1000000) –

    适用于 mixed 后端类型。

    像素总数(height * width)高于此阈值的图像将使用 nvJPEG 混合霍夫曼解码器。像素较少的图像将使用 nvJPEG 主机端霍夫曼解码器。

    注意

    混合霍夫曼解码器仍然主要使用 CPU。

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

    使 mixed 后端使用与 cpu 后端相同的色度上采样方法。

    此选项对应于 libjpegturbo 或 ImageMagick 中提供的 JPEG 精细上采样

  • memory_stats

output_typenvidia.dali.types.DALIImageType, 可选, 默认 = DALIImageType.RGB

输出图像的色彩空间。

注意:当解码为 YCbCr 时,图像将先解码为 RGB,然后转换为 YCbCr,遵循 ITU-R BT.601 中的 YCbCr 定义。

preallocate_height_hintint, 可选, 默认 = 0

图像宽度提示。

适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

该提示用于为硬件 JPEG 解码器预分配内存。

preallocate_width_hintint, 可选, 默认 = 0

图像宽度提示。

适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

该提示用于为硬件 JPEG 解码器预分配内存。

preservebool, 可选, 默认 = False

防止运算符从图中移除,即使其输出未使用。

split_stages : bool, 可选, 默认 = False

警告

参数 split_stages 现在已弃用,不建议使用。

use_chunk_allocator : bool, 可选, 默认 = False

警告

参数 use_chunk_allocator 现在已弃用,不建议使用。

use_fast_idctbool, 可选, 默认 = False

在基于 libjpeg-turbo 的 CPU 解码器中启用快速 IDCT,当 device 设置为 “cpu” 时,或者当它设置为 “mixed” 但特定图像无法由 GPU 实现处理时使用。

根据 libjpeg-turbo 文档,解压缩性能最多可提高 14%,而质量几乎没有降低。

__call__(__input, /, *, adjust_orientation=True, affine=True, bytes_per_sample_hint=[0], cache_batch_copy=True, cache_debug=False, cache_size=0, cache_threshold=0, cache_type='', device_memory_padding=16777216, device_memory_padding_jpeg2k=0, dtype=DALIDataType.UINT8, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.9, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, use_fast_idct=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.experimental.decoders.ImageCrop(*, adjust_orientation=True, affine=True, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, device_memory_padding=16777216, device_memory_padding_jpeg2k=0, dtype=DALIDataType.UINT8, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.9, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, rounding='round', use_fast_idct=False, device=None, name=None)#

解码图像并提取由固定窗口尺寸和可变锚点指定的感兴趣区域 (ROI)。

支持的格式:JPEG、JPEG 2000、TIFF、PNG、BMP、PNM、PPM、PGM、PBM、WebP。

解码器的输出采用 HWC 布局。

该实现使用 NVIDIA nvImageCodec 来解码图像。

如果可能,该运算符使用 ROI 解码,从而减少解码时间和内存消耗。

注意

GPU 加速解码仅适用于部分图像格式(JPEG 和 JPEG2000)。对于其他格式,将使用基于 CPU 的解码器。对于 JPEG,当可用时将使用专用硬件解码器。

注意

WebP 解码目前仅支持简单文件格式(有损和无损压缩)。有关不同 WebP 文件格式的详细信息,请参阅 https://developers.google.com/speed/webp/docs/riff_container

支持的后端
  • ‘cpu’

  • ‘mixed’

关键词参数:
  • adjust_orientation (bool, 可选, 默认 = True) – 使用 EXIF 方向元数据来校正图像

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

    适用于 mixed 后端类型。

    如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。否则,线程可以由操作系统重新分配到任何 CPU 核心。

  • bytes_per_sample_hint (int 或 list of int, 可选, 默认 = [0]) –

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

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

  • crop (floatlist of floatTensorList of float, 可选) –

    裁剪图像的形状,指定为值列表(例如,对于 2D 裁剪为 (crop_H, crop_W),对于体积裁剪为 (crop_D, crop_H, crop_W))。

    提供 crop 参数与提供单独的参数(例如 crop_d, crop_hcrop_w)不兼容。

  • crop_d (float 或 TensorList of float, 可选, 默认 = 0.0) –

    适用于体积输入;裁剪窗口深度(以体素为单位)。

    crop_w, crop_hcrop_d 必须一起指定。为 crop_w, crop_hcrop_d 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • crop_h (float 或 TensorList of float, 可选, 默认 = 0.0) –

    裁剪窗口高度(以像素为单位)。

    crop_wcrop_h 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • crop_pos_x (float 或 TensorList of float, 可选, 默认 = 0.5) –

    裁剪窗口(左上角)的归一化 (0.0 - 1.0) 水平位置。

    实际位置计算公式为 crop_x = crop_x_norm * (W - crop_W),其中 crop_x_norm 是归一化位置,W 是图像的宽度,而 crop_W 是裁剪窗口的宽度。

    有关 crop_x 如何转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_pos_y (float 或 TensorList of float, 可选, 默认 = 0.5) –

    裁剪窗口起始位置的归一化 (0.0 - 1.0) 垂直位置(通常为左上角)。

    实际位置计算公式为 crop_y = crop_y_norm * (H - crop_H),其中 crop_y_norm 是归一化位置,H 是图像的高度,而 crop_H 是裁剪窗口的高度。

    有关 crop_y 如何转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_pos_z (float 或 TensorList of float, 可选, 默认 = 0.5) –

    适用于体数据输入。

    裁剪窗口(前平面)的归一化 (0.0 - 1.0) 法线位置。实际位置计算公式为 crop_z = crop_z_norm * (D - crop_D),其中 crop_z_norm 是归一化位置,D 是图像的深度,而 crop_D 是裁剪窗口的深度。

    有关 crop_z 如何转换为整数值的更多详细信息,请参阅 rounding 参数。

  • crop_w (float 或 TensorList of float, 可选, 默认 = 0.0) –

    裁剪窗口宽度(以像素为单位)。

    crop_wcrop_h 提供值与提供固定裁剪窗口尺寸(参数 crop)不兼容。

  • device_memory_padding (int, 可选, 默认 = 16777216) –

    适用于 mixed 后端类型。

    nvJPEG 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符为每个线程预分配一个请求大小的设备缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

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

    适用于 mixed 后端类型。

    nvJPEG2k 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符会根据提供的提示预分配必要数量的缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

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

    图像的输出数据类型。

    值将被转换为请求类型的动态范围。

  • host_memory_padding (int, 可选, 默认 = 8388608) –

    适用于 mixed 后端类型。

    nvJPEG 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符为每个线程预分配两个(由于双缓冲)主机 pinned 缓冲区,大小为请求的大小。如果选择正确,则在 pipeline 执行期间不会发生额外的分配。

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

    适用于 mixed 后端类型。

    nvJPEG2k 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符会根据提供的提示预分配必要数量的缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

  • hw_decoder_load (float, 可选, 默认 = 0.9) –

    由硬件 JPEG 解码器处理的图像数据百分比。

    适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

    确定将卸载到硬件解码器(如果可用)的工作负载百分比。最佳工作负载取决于提供给 DALI 管道的线程数,应通过经验找到。 更多详细信息可以在 https://developer.nvidia.com/blog/loading-data-fast-with-dali-and-new-jpeg-decoder-in-a100 中找到

  • hybrid_huffman_threshold (int, 可选, 默认 = 1000000) –

    适用于 mixed 后端类型。

    像素总数(height * width)高于此阈值的图像将使用 nvJPEG 混合霍夫曼解码器。像素较少的图像将使用 nvJPEG 主机端霍夫曼解码器。

    注意

    混合霍夫曼解码器仍然主要使用 CPU。

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

    使 mixed 后端使用与 cpu 后端相同的色度上采样方法。

    此选项对应于 libjpegturbo 或 ImageMagick 中提供的 JPEG 精细上采样

  • memory_stats

output_typenvidia.dali.types.DALIImageType, 可选, 默认 = DALIImageType.RGB

输出图像的色彩空间。

注意:当解码为 YCbCr 时,图像将先解码为 RGB,然后转换为 YCbCr,遵循 ITU-R BT.601 中的 YCbCr 定义。

preallocate_height_hintint, 可选, 默认 = 0

图像宽度提示。

适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

该提示用于为硬件 JPEG 解码器预分配内存。

preallocate_width_hintint, 可选, 默认 = 0

图像宽度提示。

适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

该提示用于为硬件 JPEG 解码器预分配内存。

preservebool, 可选, 默认 = False

防止运算符从图中移除,即使其输出未使用。

roundingstr, 可选, 默认 = ‘round’

确定用于将窗口的起始坐标转换为整数值的取整函数(请参阅 crop_pos_x, crop_pos_y, crop_pos_z)。

可能的值为

  • "round" - 四舍五入到最接近的整数值,中间情况远离零舍入。
  • "truncate" - 丢弃数字的小数部分(向零截断)。

split_stages : bool, 可选, 默认 = False

警告

参数 split_stages 现在已弃用,不建议使用。

use_chunk_allocator : bool, 可选, 默认 = False

警告

参数 use_chunk_allocator 现在已弃用,不建议使用。

use_fast_idctbool, 可选, 默认 = False

在基于 libjpeg-turbo 的 CPU 解码器中启用快速 IDCT,当 device 设置为 “cpu” 时,或者当它设置为 “mixed” 但特定图像无法由 GPU 实现处理时使用。

根据 libjpeg-turbo 文档,解压缩性能最多可提高 14%,而质量几乎没有降低。

__call__(__input, /, *, adjust_orientation=True, affine=True, bytes_per_sample_hint=[0], crop=None, crop_d=0.0, crop_h=0.0, crop_pos_x=0.5, crop_pos_y=0.5, crop_pos_z=0.5, crop_w=0.0, device_memory_padding=16777216, device_memory_padding_jpeg2k=0, dtype=DALIDataType.UINT8, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.9, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, rounding='round', use_fast_idct=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.experimental.decoders.ImageRandomCrop(*, adjust_orientation=True, affine=True, bytes_per_sample_hint=[0], device_memory_padding=16777216, device_memory_padding_jpeg2k=0, dtype=DALIDataType.UINT8, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.9, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, num_attempts=10, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, random_area=[0.08, 1.0], random_aspect_ratio=[0.75, 1.333333], seed=-1, use_fast_idct=False, device=None, name=None)#

解码图像并随机裁剪它们。

支持的格式:JPEG、JPEG 2000、TIFF、PNG、BMP、PNM、PPM、PGM、PBM、WebP。

解码器的输出采用 HWC 布局。

该实现使用 NVIDIA nvImageCodec 来解码图像。

裁剪窗口的区域(相对于整个图像)和宽高比可以被限制在由 areaaspect_ratio 参数分别指定的取值范围内。

如果可能,该运算符使用 ROI 解码,从而减少解码时间和内存消耗。

注意

GPU 加速解码仅适用于部分图像格式(JPEG 和 JPEG2000)。对于其他格式,将使用基于 CPU 的解码器。对于 JPEG,当可用时将使用专用硬件解码器。

注意

WebP 解码目前仅支持简单文件格式(有损和无损压缩)。有关不同 WebP 文件格式的详细信息,请参阅 https://developers.google.com/speed/webp/docs/riff_container

支持的后端
  • ‘cpu’

  • ‘mixed’

关键词参数:
  • adjust_orientation (bool, optional, default = True) – 使用 EXIF 方向元数据来校正图像

  • affine (bool, optional, default = True) –

    适用于 mixed 后端类型。

    如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。否则,线程可以由操作系统重新分配到任何 CPU 核心。

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

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

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

  • device_memory_padding (int, optional, default = 16777216) –

    适用于 mixed 后端类型。

    nvJPEG 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符为每个线程预分配一个请求大小的设备缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

  • device_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符会根据提供的提示预分配必要数量的缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

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

    图像的输出数据类型。

    值将被转换为请求类型的动态范围。

  • host_memory_padding (int, optional, default = 8388608) –

    适用于 mixed 后端类型。

    nvJPEG 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符为每个线程预分配两个(由于双缓冲)主机 pinned 缓冲区,大小为请求的大小。如果选择正确,则在 pipeline 执行期间不会发生额外的分配。

  • host_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符会根据提供的提示预分配必要数量的缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

  • hw_decoder_load (float, optional, default = 0.9) –

    由硬件 JPEG 解码器处理的图像数据百分比。

    适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

    确定将卸载到硬件解码器(如果可用)的工作负载百分比。最佳工作负载取决于提供给 DALI 管道的线程数,应通过经验找到。 更多详细信息可以在 https://developer.nvidia.com/blog/loading-data-fast-with-dali-and-new-jpeg-decoder-in-a100 中找到

  • hybrid_huffman_threshold (int, optional, default = 1000000) –

    适用于 mixed 后端类型。

    像素总数(height * width)高于此阈值的图像将使用 nvJPEG 混合霍夫曼解码器。像素较少的图像将使用 nvJPEG 主机端霍夫曼解码器。

    注意

    混合霍夫曼解码器仍然主要使用 CPU。

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

    使 mixed 后端使用与 cpu 后端相同的色度上采样方法。

    此选项对应于 libjpegturbo 或 ImageMagick 中提供的 JPEG 精细上采样

  • memory_stats

num_attemptsint, optional, default = 10

最大尝试次数,用于选择随机区域和宽高比。

output_typenvidia.dali.types.DALIImageType, 可选, 默认 = DALIImageType.RGB

输出图像的色彩空间。

注意:当解码为 YCbCr 时,图像将先解码为 RGB,然后转换为 YCbCr,遵循 ITU-R BT.601 中的 YCbCr 定义。

preallocate_height_hintint, 可选, 默认 = 0

图像宽度提示。

适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

该提示用于为硬件 JPEG 解码器预分配内存。

preallocate_width_hintint, 可选, 默认 = 0

图像宽度提示。

适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

该提示用于为硬件 JPEG 解码器预分配内存。

preservebool, 可选, 默认 = False

防止运算符从图中移除,即使其输出未使用。

random_areafloat or list of float, optional, default = [0.08, 1.0]

从中选择随机面积比例 A 的范围。

裁剪图像的面积将等于 A * 原始图像的面积。

random_aspect_ratiofloat or list of float, optional, default = [0.75, 1.333333]

从中选择随机宽高比(宽度/高度)的范围。

seedint, optional, default = -1

随机种子;如果未设置,将自动分配一个。

split_stages : bool, 可选, 默认 = False

警告

参数 split_stages 现在已弃用,不建议使用。

use_chunk_allocator : bool, 可选, 默认 = False

警告

参数 use_chunk_allocator 现在已弃用,不建议使用。

use_fast_idctbool, 可选, 默认 = False

Enables fast IDCT in the libjpeg-turbo based CPU decoder, used when device is set to “cpu” or when the it is set to “mixed” but the particular image can not be handled by the GPU implementation.

根据 libjpeg-turbo 文档,解压缩性能最多可提高 14%,而质量几乎没有降低。

__call__(__input, /, *, adjust_orientation=True, affine=True, bytes_per_sample_hint=[0], device_memory_padding=16777216, device_memory_padding_jpeg2k=0, dtype=DALIDataType.UINT8, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.9, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, num_attempts=10, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, random_area=[0.08, 1.0], random_aspect_ratio=[0.75, 1.333333], seed=-1, use_fast_idct=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 算子的输入。

class nvidia.dali.ops.experimental.decoders.ImageSlice(*, adjust_orientation=True, affine=True, axes=[1, 0], axis_names='WH', bytes_per_sample_hint=[0], device_memory_padding=16777216, device_memory_padding_jpeg2k=0, dtype=DALIDataType.UINT8, end=None, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.9, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, normalized_anchor=True, normalized_shape=True, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, rel_end=None, rel_shape=None, rel_start=None, shape=None, start=None, use_fast_idct=False, device=None, name=None)#

解码图像并提取感兴趣区域。

支持的格式:JPEG、JPEG 2000、TIFF、PNG、BMP、PNM、PPM、PGM、PBM、WebP。

解码器的输出采用 HWC 布局。

该实现使用 NVIDIA nvImageCodec 来解码图像。

切片可以通过提供起始和结束坐标,或起始坐标和切片的形状来指定。坐标和形状都可以用绝对或相对术语提供。

切片参数可以通过以下命名参数指定

  1. start: 切片起始坐标(绝对坐标)

  2. rel_start: 切片起始坐标(相对坐标)

  3. end: 切片结束坐标(绝对坐标)

  4. rel_end: 切片结束坐标(相对坐标)

  5. shape: 切片形状(绝对坐标)

  6. rel_shape: 切片形状(相对坐标)

切片可以通过提供起始和结束坐标或起始和形状来配置。相对和绝对参数可以混合使用(例如,rel_start 可以与 shape 一起使用),只要起始和形状或结束被唯一确定。

或者,可以提供两个额外的位置输入,指定 __anchor__shape。当使用位置输入时,可以使用两个额外的布尔参数 normalized_anchor/normalized_shape 来指定所提供参数的性质。使用锚点和形状的位置输入与上面指定的命名参数不兼容。

切片参数应提供与 axis_namesaxes 参数指定的维度一样多的维度。

默认情况下,nvidia.dali.fn.decoders.image_slice() 算子对切片参数使用归一化坐标和 “WH” 顺序。

如果可能,该运算符使用 ROI 解码,从而减少解码时间和内存消耗。

注意

GPU 加速解码仅适用于部分图像格式(JPEG 和 JPEG2000)。对于其他格式,将使用基于 CPU 的解码器。对于 JPEG,当可用时将使用专用硬件解码器。

注意

WebP 解码目前仅支持简单文件格式(有损和无损压缩)。有关不同 WebP 文件格式的详细信息,请参阅 https://developers.google.com/speed/webp/docs/riff_container

支持的后端
  • ‘cpu’

  • ‘mixed’

关键词参数:
  • adjust_orientation (bool, optional, default = True) – 使用 EXIF 方向元数据来校正图像

  • affine (bool, optional, default = True) –

    适用于 mixed 后端类型。

    如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。否则,线程可以由操作系统重新分配到任何 CPU 核心。

  • axes (int or list of int or TensorList of int, optional, default = [1, 0]) –

    用作维度索引的锚点和形状切片输入的维度顺序。

    负值被解释为从后面计数维度。 有效范围:[-ndim, ndim-1],其中 ndim 是输入数据中的维度数。

  • axis_names (layout str, optional, default = ‘WH’) –

    用于锚点和形状切片输入的维度顺序,如布局中所述。

    如果提供了值,axis_names 将比 axes 具有更高的优先级。

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

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

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

  • device_memory_padding (int, optional, default = 16777216) –

    适用于 mixed 后端类型。

    nvJPEG 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符为每个线程预分配一个请求大小的设备缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

  • device_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 的设备内存分配的填充大小,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符会根据提供的提示预分配必要数量的缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

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

    图像的输出数据类型。

    值将被转换为请求类型的动态范围。

  • end (int or list of int or TensorList of int, optional) –

    切片的结束坐标。

    注意:提供命名参数 start, end, shape, rel_start, rel_end, rel_shape 与提供位置输入 anchor 和 shape 不兼容。

  • host_memory_padding (int, optional, default = 8388608) –

    适用于 mixed 后端类型。

    nvJPEG 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符为每个线程预分配两个(由于双缓冲)主机 pinned 缓冲区,大小为请求的大小。如果选择正确,则在 pipeline 执行期间不会发生额外的分配。

  • host_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 的主机内存分配的填充大小,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG2k 中的重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则运算符会根据提供的提示预分配必要数量的缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

  • hw_decoder_load (float, optional, default = 0.9) –

    由硬件 JPEG 解码器处理的图像数据百分比。

    适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

    确定将卸载到硬件解码器(如果可用)的工作负载百分比。最佳工作负载取决于提供给 DALI 管道的线程数,应通过经验找到。 更多详细信息可以在 https://developer.nvidia.com/blog/loading-data-fast-with-dali-and-new-jpeg-decoder-in-a100 中找到

  • hybrid_huffman_threshold (int, optional, default = 1000000) –

    适用于 mixed 后端类型。

    像素总数(height * width)高于此阈值的图像将使用 nvJPEG 混合霍夫曼解码器。像素较少的图像将使用 nvJPEG 主机端霍夫曼解码器。

    注意

    混合霍夫曼解码器仍然主要使用 CPU。

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

    使 mixed 后端使用与 cpu 后端相同的色度上采样方法。

    此选项对应于 libjpegturbo 或 ImageMagick 中提供的 JPEG 精细上采样

  • memory_stats

normalized_anchorbool, optional, default = True

确定锚点位置输入应解释为归一化坐标(范围 [0.0, 1.0])还是绝对坐标。

注意

此参数仅在锚点数据类型为 float 时才相关。 对于整数类型,坐标始终是绝对坐标。

normalized_shapebool, optional, default = True

确定形状位置输入应解释为归一化坐标(范围 [0.0, 1.0])还是绝对坐标。

注意

此参数仅在锚点数据类型为 float 时才相关。 对于整数类型,坐标始终是绝对坐标。

output_typenvidia.dali.types.DALIImageType, 可选, 默认 = DALIImageType.RGB

输出图像的色彩空间。

注意:当解码为 YCbCr 时,图像将先解码为 RGB,然后转换为 YCbCr,遵循 ITU-R BT.601 中的 YCbCr 定义。

preallocate_height_hintint, 可选, 默认 = 0

图像宽度提示。

适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

该提示用于为硬件 JPEG 解码器预分配内存。

preallocate_width_hintint, 可选, 默认 = 0

图像宽度提示。

适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

该提示用于为硬件 JPEG 解码器预分配内存。

preservebool, 可选, 默认 = False

防止运算符从图中移除,即使其输出未使用。

rel_endfloat or list of float or TensorList of float, optional

切片的结束相对坐标(范围 [0.0 - 1.0])。

注意:提供命名参数 start, end, shape, rel_start, rel_end, rel_shape 与提供位置输入 anchor 和 shape 不兼容。

rel_shapefloat or list of float or TensorList of float, optional

切片的相对形状(范围 [0.0 - 1.0])。

Providing named arguments start, end, shape, rel_start, rel_end, rel_shape is incompatible with providing positional inputs anchor and shape.

rel_startfloat or list of float or TensorList of float, optional

切片的起始相对坐标(范围 [0.0 - 1.0])。

注意:提供命名参数 start, end, shape, rel_start, rel_end, rel_shape 与提供位置输入 anchor 和 shape 不兼容。

shapeint 或 int 列表或 int 的 TensorList,可选

切片的形状。

Providing named arguments start, end, shape, rel_start, rel_end, rel_shape is incompatible with providing positional inputs anchor and shape.

split_stages : bool, 可选, 默认 = False

警告

参数 split_stages 现在已弃用,不建议使用。

startint 或 int 列表或 int 的 TensorList,可选

切片的起始坐标。

注意:提供命名参数 start/endstart/shape 与提供位置输入 anchor 和 shape 不兼容。

use_chunk_allocator : bool, 可选, 默认 = False

警告

参数 use_chunk_allocator 现在已弃用,不建议使用。

use_fast_idctbool, 可选, 默认 = False

在基于 libjpeg-turbo 的 CPU 解码器中启用快速 IDCT,当 device 设置为 “cpu” 时,或者当它设置为 “mixed” 但特定图像无法由 GPU 实现处理时使用。

根据 libjpeg-turbo 文档,解压缩性能最多可提高 14%,而质量几乎没有降低。

__call__(__data, __anchor=None, __shape=None, /, *, adjust_orientation=True, affine=True, axes=[1, 0], axis_names='WH', bytes_per_sample_hint=[0], device_memory_padding=16777216, device_memory_padding_jpeg2k=0, dtype=DALIDataType.UINT8, end=None, host_memory_padding=8388608, host_memory_padding_jpeg2k=0, hw_decoder_load=0.9, hybrid_huffman_threshold=1000000, jpeg_fancy_upsampling=False, normalized_anchor=True, normalized_shape=True, output_type=DALIImageType.RGB, preallocate_height_hint=0, preallocate_width_hint=0, preserve=False, rel_end=None, rel_shape=None, rel_start=None, shape=None, start=None, use_fast_idct=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __data (TensorList) – 包含输入数据的批次。

  • __anchor (1D TensorList of float or int, optional) –

    包含切片起始点的归一化或绝对坐标(x0, x1, x2, …)的输入。

    整数坐标被解释为绝对坐标,而浮点坐标可以被解释为绝对坐标或相对坐标,具体取决于 normalized_anchor 的值。

  • __shape (1D TensorList of float or int, optional) –

    包含切片尺寸的归一化或绝对坐标(s0, s1, s2, …)的输入。

    整数坐标被解释为绝对坐标,而浮点坐标可以被解释为绝对坐标或相对坐标,具体取决于 normalized_shape 的值。

class nvidia.dali.ops.experimental.decoders.Video(*, affine=True, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

从内存缓冲区(例如,由外部源提供)解码视频文件。

视频流可以是大多数容器文件格式。FFmpeg 用于解析视频

容器,并返回形状为 (F, H, W, C) 的帧序列批次,其中 F 是序列中帧的数量,并且每个样本可能不同。

支持的后端
  • ‘cpu’

  • ‘mixed’

关键词参数:
  • affine (bool, optional, default = True) –

    仅适用于混合后端类型。

    如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。

    否则,线程可以由操作系统重新分配给任何 CPU 核心。

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

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

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

  • preserve (bool, optional, default = False) – 阻止运算符从图中删除,即使其输出未使用。

__call__(__buffer, /, *, affine=True, bytes_per_sample_hint=[0], preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__buffer (TensorList) – 带有已加载视频文件的数据缓冲区。

nvidia.dali.ops.experimental.inputs#

class nvidia.dali.ops.experimental.inputs.Video(*, affine=True, blocking=False, bytes_per_sample_hint=[0], last_sequence_policy='partial', no_copy=False, preserve=False, sequence_length=None, device=None, name=None)#

从内存缓冲区流式传输和解码视频。用于长视频和高分辨率视频。

返回帧序列批次,布局为:(F, H, W, C),其中

  • F - 序列中的帧数,

  • H - 帧的高度,

  • W - 帧的宽度,

  • C - 帧中的通道数。

当在 DALI Pipeline 中使用 fn.inputs.video 运算符时,用户需要使用 Pipeline.feed_input() 提供数据。当运算符被馈送数据时,Pipeline 可以多次运行,并且只要有足够的数据进行解码,fn.inputs.video 运算符将返回连续的序列。当帧的来源(视频文件)耗尽时,用户需要再次调用 feed_input 以向运算符提供下一个视频文件。此运算符具有用于数据的内部队列,因此 feed_input 可以多次调用,并且当给定的视频文件结束时,运算符将自动从队列顶部获取下一个视频文件。在 fn.inputs.video 没有数据运行时运行 pipeline 会导致错误。

此运算符仅接受一个视频作为输入(即 input_batch_size=1),并将返回序列批次。每个输出批次都将具有在 Pipeline 创建期间设置的 max_batch_size 样本。当视频文件中的帧数不允许在批次之间均匀分割帧时,此运算符为给定视频返回的最后一个批次将是部分的,并且此批次中的最后一个序列将使用 last_sequence_policy 参数确定。例如

This is a video that consists of 67 frames (every '-' is a frame):
-------------------------------------------------------------------


User decided that there shall be 5 frames per sequence and
the last_sequence_policy='partial':
-------------------------------------------------------------------
[   ][   ][   ][   ][   ][   ][   ][   ][   ][   ][   ][   ][   ][]
-------------------------------------------------------------------
Since there are not enough frames, the last sequence comprises 2 frames.


The Pipeline has max_batch_size=3, therefore the operator will return
5 batches of sequences.
First 4 batches comprise 3 sequences and the last batch is partial and
comprises 2 sequences.
---------------   ---------------   ---------------   ---------------   -------
[   ][   ][   ]   [   ][   ][   ]   [   ][   ][   ]   [   ][   ][   ]   [   ][]
---------------   ---------------   ---------------   ---------------   -------


With the last_sequence_policy='pad', the last sequence of the last batch
will be padded with 0:
---------------   ---------------   ---------------   ---------------   -------000
[   ][   ][   ]   [   ][   ][   ]   [   ][   ][   ]   [   ][   ][   ]   [   ][   ]
---------------   ---------------   ---------------   ---------------   -------000

fn.inputs.videofn.readers.video 之间的区别在于,前者从内存中读取编码的视频,而后者从磁盘读取编码的视频。

fn.inputs.videofn.decoders.video 之间的区别在于,前者不会一次解码整个视频文件。较长的视频需要此行为。例如,5 分钟、4k、30fps 解码视频大约需要 1.7 TB 的内存。

此运算符接受大多数视频容器和文件格式。FFmpeg 用于解析视频容器。在容器不包含所需元数据(例如,帧大小、帧数等)的情况下,运算符需要自行查找,这可能会导致速度减慢。

支持的后端
  • ‘cpu’

  • ‘mixed’

关键词参数:
  • affine (bool, optional, default = True) –

    仅适用于混合后端类型。如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。

    否则,线程可以由操作系统重新分配给任何 CPU 核心。

  • blocking (bool, optional, default = False) – 高级 如果 True,此运算符将阻塞,直到数据可用(例如,通过调用 feed_input)。如果 False,如果数据不可用,运算符将引发错误。

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

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

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

  • last_sequence_policy (str, optional, default = ‘partial’) –

    指定如何处理视频文件中的最后一个序列。

    对于视频文件中的给定帧数和 frames_per_sequence 参数,可能会发生视频无法在序列之间均匀分割的情况。如果 last_sequence_policy='partial',则最后一个序列可能具有少于 frames_per_sequence 值指定的帧。如果 last_sequence_policy='partial',则最后一个序列将始终具有 frames_per_sequence 帧,并将用空帧填充。

    允许的值为 'partial''pad'

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

    确定在调用 feed_input 时 DALI 是否应复制缓冲区。

    如果设置为 True,DALI 会将用户的内存直接传递给 pipeline,而不是复制它。用户有责任保持缓冲区处于活动状态且未被修改,直到 pipeline 使用它为止。

    在相关迭代的输出被使用后,可以再次修改或释放缓冲区。实际上,这发生在 prefetch_queue_depthcpu_queue_depth * gpu_queue_depth (当它们不相等时)迭代之后,紧跟在 feed_input 调用之后。

    内存位置必须与运算符的指定 device 参数匹配。对于 CPU,提供的内存可以是一个连续的缓冲区或连续 Tensor 的列表。对于 GPU,为了避免额外的复制,提供的缓冲区必须是连续的。如果提供单独 Tensor 的列表,则会在内部进行额外的复制,从而消耗内存和带宽。

  • preserve (bool, optional, default = False) – 阻止运算符从图中删除,即使其输出未使用。

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

__call__(*, affine=True, blocking=False, bytes_per_sample_hint=[0], last_sequence_policy='partial', no_copy=False, preserve=False, sequence_length=None, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

nvidia.dali.ops.experimental.readers#

class nvidia.dali.ops.experimental.readers.Fits(*, bytes_per_sample_hint=[0], dont_use_mmap=False, dtypes=None, file_filter='*.fits', file_list=None, file_root=None, files=None, hdu_indices=[2], initial_fill=1024, lazy_init=False, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, shuffle_after_epoch=False, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

从目录读取 Fits 图像 HDU。

此运算符可以在以下模式中使用

  1. 读取由 file_root 指示的目录中与给定 file_filter 匹配的所有文件。

  2. file_list 参数中指示的文本文件读取文件名。

  3. 读取在 files 参数中列出的文件。

4. 每个样本的输出数对应于 hdu_indices 参数的长度。默认情况下,从每个文件读取第一个带有数据的 HDU,因此输出数默认为 1。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

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

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

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

  • dtypes (DALIDataTypelist of DALIDataType, optional) –

    各个输出的数据类型。

    如果指定,则它必须是各个输出的类型列表。默认情况下,所有输出都假定为 UINT8。”

  • file_filter (str, optional, default = ‘*.fits’) –

    如果指定了值,则该字符串被解释为 glob 字符串,以过滤 file_root 的子目录中的文件列表。

    当从 file_listfiles 获取文件路径时,将忽略此参数。

  • file_list (str, optional) –

    文本文件的路径,其中包含文件名(每行一个)。文件名相对于文本文件的位置或 file_root(如果指定)。

    此参数与 files 互斥。

  • file_root (str, optional) –

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

    如果不使用 file_listfiles。则会遍历此目录以发现文件。在这种操作模式下,file_root 是必需的。

  • files (str or list of str, optional) –

    要从中读取数据的文件路径列表。

    如果提供了 file_root,则路径被视为相对于它。

    此参数与 file_list 互斥。

  • hdu_indices (int 或 int 列表,可选,默认值 = [2]) – 要读取的 HDU 索引。如果未提供,则将产生主 HDU 之后的第一个 HDU。由于 HDU 的索引从 1 开始,因此默认值如下:hdu_indices = [2]。提供的列表 hdu_indices 的大小定义了每个样本的输出数。

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

    用于洗牌的缓冲区大小。

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

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

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

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

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

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

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

    注意

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

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

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

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

  • 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) – 随机种子;如果未设置,将自动分配一个。

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

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

    如果设置为 True,则读取器会在每个 epoch 后混洗整个数据集。

    当此参数设置为 True 时,不能使用stick_to_shardrandom_shuffle

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

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

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

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

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

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

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

__call__(*, bytes_per_sample_hint=[0], dont_use_mmap=False, dtypes=None, file_filter='*.fits', file_list=None, file_root=None, files=None, hdu_indices=[2], initial_fill=1024, lazy_init=False, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, shuffle_after_epoch=False, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.experimental.readers.Video(*, bytes_per_sample_hint=[0], dont_use_mmap=False, enable_frame_num=False, filenames=[], initial_fill=1024, labels=None, lazy_init=False, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, sequence_length=None, shard_id=0, skip_cached_images=False, step=-1, stick_to_shard=False, stride=1, tensor_init_bytes=1048576, device=None, name=None)#

使用 FFmpeg 加载和解码视频文件。

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

注意

不支持索引的容器(如 MPEG)需要 DALI 构建索引。

DALI 将遍历视频并标记关键帧,以便即使在可变帧率的情况下也能有效地查找。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 int 列表, optional, default = [0]) –

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

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

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

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

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

  • enable_frame_num (bool, optional, default = False) – 如果设置,则返回解码序列中第一帧的索引作为额外的输出。

  • filenames (str 或 str 列表, optional, default = []) – 要加载的视频文件的绝对路径。

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

    用于洗牌的缓冲区大小。

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

  • labels (intint 列表,optional) – 与 filenames 参数中列出的文件关联的标签。如果未提供,则不会生成标签。

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

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

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

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

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

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

    注意

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

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

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

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

  • 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,则当样本在解码器缓存中时,将跳过加载数据。

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

  • 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) – 每个图像要分配多少内存的提示。

__call__(*, bytes_per_sample_hint=[0], dont_use_mmap=False, enable_frame_num=False, filenames=[], initial_fill=1024, labels=None, lazy_init=False, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, sequence_length=None, shard_id=0, skip_cached_images=False, step=-1, stick_to_shard=False, stride=1, tensor_init_bytes=1048576, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

nvidia.dali.ops.io#

此模块中的运算符是数据读取运算符,用于从运算符输入在运行时指定的源读取数据。对于能够在 pipeline 构建时构建数据集的无输入数据读取器,请参阅 nvidia.dali.fn.readers 模块。

nvidia.dali.ops.io.file#

class nvidia.dali.ops.io.file.Read(*, bytes_per_sample_hint=[0], dont_use_mmap=False, preserve=False, use_o_direct=False, device=None, name=None)#

从 1D 字节数组表示的编码文件名中读取原始文件内容。

注意

要从 Python 生成兼容的编码文件路径(例如,在 external_source 节点生成器中),请使用 np.frombuffer(filepath_str.encode(“utf-8”), dtype=types.UINT8)

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int 或 int 列表, optional, default = [0]) –

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

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

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

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

    当访问本地文件系统时,映射提供小的性能优势,但对于大多数网络文件系统,它不提供优势

  • preserve (bool, optional, default = False) – 阻止运算符从图中删除,即使其输出未使用。

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

    如果设置为 True,则数据将直接从存储读取,绕过系统缓存。

    dont_use_mmap=False 互斥。

__call__(__filepaths, /, *, bytes_per_sample_hint=[0], dont_use_mmap=False, preserve=False, use_o_direct=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__filepaths (TensorList) – 要从中读取的文件路径。

nvidia.dali.ops.noise#

class nvidia.dali.ops.noise.Gaussian(*, bytes_per_sample_hint=[0], mean=0.0, preserve=False, seed=-1, stddev=1.0, device=None, name=None)#

将高斯噪声应用于输入。

输出的形状和数据类型将与输入匹配。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 int 列表, optional, default = [0]) –

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

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

  • mean (float 或 float TensorList, optional, default = 0.0) – 分布的均值。

  • preserve (bool, optional, default = False) – 阻止运算符从图中删除,即使其输出未使用。

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

  • stddev (float 或 float TensorList, optional, default = 1.0) – 分布的标准差。

__call__(__input, /, *, bytes_per_sample_hint=[0], mean=0.0, preserve=False, seed=-1, stddev=1.0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.noise.SaltAndPepper(*, bytes_per_sample_hint=[0], pepper_val=None, per_channel=False, preserve=False, prob=0.05, salt_val=None, salt_vs_pepper=0.5, seed=-1, device=None, name=None)#

将椒盐噪声应用于输入。

输出的形状和数据类型将与输入匹配。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • pepper_val (floatTensorList of float, optional) –

    “pepper” 的值。

    如果未提供,对于浮点类型,pepper 值将为 -1.0,否则为输入数据类型的最小值,并转换为输入的数据类型。

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

    确定是否应独立地为每个通道生成噪声。

    如果设置为 True,则为每个通道独立生成噪声,导致某些通道损坏而其他通道保持完整。如果设置为 False,则噪声生成一次并应用于所有通道,因此像素中的所有通道都应保持完整、取 “pepper” 值或 “salt” 值。

    注意:每个通道的噪声生成要求输入布局包含通道('C')维度,或者为空。如果布局为空,则假定为通道优先布局。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

  • prob (float 或 TensorList of float, optional, default = 0.05) – 输出值取 salt 或 pepper 值的概率。

  • salt_val (floatTensorList of float, optional) –

    “salt” 的值。

    如果未提供,对于浮点类型,salt 值将为 1.0,否则为输入数据类型的最大值,并转换为输入的数据类型。

  • salt_vs_pepper (float 或 TensorList of float, optional, default = 0.5) – 损坏的输出值取 salt 值的概率。

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

__call__(__input, /, *, bytes_per_sample_hint=[0], pepper_val=None, per_channel=False, preserve=False, prob=0.05, salt_val=None, salt_vs_pepper=0.5, seed=-1, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.noise.Shot(*, bytes_per_sample_hint=[0], factor=20.0, preserve=False, seed=-1, device=None, name=None)#

将散粒噪声应用于输入。

散粒噪声通过应用以下公式生成

output[:] = poisson_dist(max(0, input[:] / factor)) * factor) if factor != 0
output[:] = input[:]                                          if factor == 0

其中 poisson_dist 表示泊松分布。

散粒噪声是一种存在于泊松过程生成的数据中的噪声,例如通过图像传感器注册光子。此运算符模拟数据采集过程,其中每个事件将输出值增加 factor,并且输入张量包含相应输出点的期望值。例如,factor 为 0.1 意味着需要 10 个事件才能将输出值增加 1,而 factor 为 10 意味着单个事件将输出增加 10。输出值被量化为 factor 的倍数。因子越大,输出中存在的噪声就越多。因子为 0 使其成为恒等运算。

输出的形状和数据类型将与输入匹配。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • factor (float 或 TensorList of float, optional, default = 20.0) – 因子参数。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

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

__call__(__input, /, *, bytes_per_sample_hint=[0], factor=20.0, preserve=False, seed=-1, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

nvidia.dali.ops.plugin#

nvidia.dali.ops.plugin.video#

注意

此模块属于 nvidia-dali-video 插件,需要作为单独的软件包安装。有关更多详细信息,请参阅安装指南

class nvidia.dali.ops.plugin.video.Decoder(*, affine=True, bytes_per_sample_hint=[0], end_frame=0, preserve=False, device=None, name=None)#

从内存缓冲区(例如,由外部源提供)解码视频文件。

视频流可以是大多数容器文件格式。FFmpeg 用于解析视频

容器,并返回形状为 (F, H, W, C) 的帧序列批次,其中 F 是序列中帧的数量,并且每个样本可能不同。

支持的后端
  • ‘mixed’

关键词参数:
  • affine (bool, optional, default = True) –

    仅适用于混合后端类型。

    如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。

    否则,线程可以由操作系统重新分配给任何 CPU 核心。

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

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

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

  • end_frame (int, optional, default = 0) – 要解码的结束帧的索引。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

__call__(__buffer, /, *, affine=True, bytes_per_sample_hint=[0], end_frame=0, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__buffer (TensorList) – 包含已加载视频文件的数据缓冲区。

nvidia.dali.ops.random#

class nvidia.dali.ops.random.Beta(*, alpha=1.0, beta=1.0, bytes_per_sample_hint=[0], dtype=None, preserve=False, seed=-1, shape=None, device=None, name=None)#

[0, 1] 范围生成服从 beta 分布的随机数。

beta 分布具有以下概率分布函数

\[f(x) = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)} x^{\alpha-1} (1-x)^{\beta-1}\]

其中 Г 是定义为以下公式的 gamma 函数

\[\Gamma(\alpha) = \int_0^\infty x^{\alpha-1} e^{-x} \, dx\]

该运算符支持 float32float64 输出类型。

生成数据的形状可以通过 shape 参数显式指定,也可以选择与提供的 __shape_like 输入的形状匹配。如果两者都不存在,则为每个样本生成一个值。

支持的后端
  • ‘cpu’

关键词参数:
  • alpha (float 或 TensorList of float, optional, default = 1.0) – alpha 参数,一个正 float32 标量。

  • beta (float 或 TensorList of float, optional, default = 1.0) – beta 参数,一个正 float32 标量。

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

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

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

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

    输出数据类型。

    注意

    生成的数字将转换为输出数据类型,并在必要时进行舍入和钳位。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

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

  • shape (intlist of intTensorList of int, optional) – 输出数据的形状。

__call__(__shape_like=None, /, *, alpha=1.0, beta=1.0, bytes_per_sample_hint=[0], dtype=None, preserve=False, seed=-1, shape=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__shape_like (TensorList, optional) – 如果提供,此输入的形状将用于推断输出的形状。

class nvidia.dali.ops.random.Choice(*, bytes_per_sample_hint=[0], p=None, preserve=False, seed=-1, shape=None, device=None, name=None)#

从给定的 1D 数组生成随机样本。

从输入中选择样本的概率由 p 参数中指定的相应概率确定。

生成数据的形状可以通过 shape 参数显式指定,也可以选择与提供的 __shape_like 输入的形状匹配。如果两者都不存在,则为每个样本生成一个值。

输出的类型与输入的类型匹配。对于标量输入,仅支持整数类型,否则可以使用任何类型。该运算符支持从包含 DALI 枚举类型元素之一的输入中进行选择,即:nvidia.dali.types.DALIDataType()nvidia.dali.types.DALIImageType()nvidia.dali.types.DALIInterpType()

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • p (floatlist of floatTensorList of float, optional) – 概率分布。如果未指定,则假定为均匀分布。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

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

  • shape (intlist of intTensorList of int, optional) – 输出数据的形状。

__call__(__a, __shape_like=None, /, *, bytes_per_sample_hint=[0], p=None, preserve=False, seed=-1, shape=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __a (scalarTensorList) – 如果提供了标量值 __a,则运算符的行为就好像 [0, 1, ..., __a-1] 列表作为输入传递。否则,__a 被视为输入样本的 1D 数组。

  • __shape_like (TensorList, optional) – 如果提供,此输入的形状将用于推断输出的形状。

class nvidia.dali.ops.random.CoinFlip(*, bytes_per_sample_hint=[0], dtype=None, preserve=False, probability=0.5, seed=-1, shape=None, device=None, name=None)#

生成服从伯努利分布的随机布尔值。

生成值 1 (true) 的概率由 probability 参数确定。

生成数据的形状可以通过 shape 参数显式指定,也可以选择与提供的 __shape_like 输入的形状匹配。如果两者都不存在,则为每个样本生成一个值。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    注意

    生成的数字将转换为输出数据类型,并在必要时进行舍入和钳位。

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

  • probability (float 或 float 的 TensorList, 可选, 默认值 = 0.5) – 值为 1 的概率。

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

  • shape (intintlistintTensorList, 可选) – 输出数据的形状。

__call__(__shape_like=None, /, *, bytes_per_sample_hint=[0], dtype=None, preserve=False, probability=0.5, seed=-1, shape=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__shape_like (TensorList, 可选) – 如果提供,此输入的形状将用于推断输出的形状。

class nvidia.dali.ops.random.Normal(*, bytes_per_sample_hint=[0], dtype=None, mean=0.0, preserve=False, seed=-1, shape=None, stddev=1.0, device=None, name=None)#

生成服从正态分布的随机数。

生成数据的形状可以通过 shape 参数显式指定,或者选择与提供的 __shape_like 输入的形状匹配。 如果两者都不存在,则每个样本生成一个值。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    注意

    生成的数字将转换为输出数据类型,并在必要时进行舍入和钳位。

  • mean (float 或 float 的 TensorList, 可选, 默认值 = 0.0) – 分布的均值。

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

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

  • shape (intintlistintTensorList, 可选) – 输出数据的形状。

  • stddev (float 或 float 的 TensorList, 可选, 默认值 = 1.0) – 分布的标准差。

__call__(__shape_like=None, /, *, bytes_per_sample_hint=[0], dtype=None, mean=0.0, preserve=False, seed=-1, shape=None, stddev=1.0, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__shape_like (TensorList, 可选) – 如果提供,此输入的形状将用于推断输出的形状。

class nvidia.dali.ops.random.Uniform(*, bytes_per_sample_hint=[0], dtype=None, preserve=False, range=[-1.0, 1.0], seed=-1, shape=None, values=None, device=None, name=None)#

生成服从均匀分布的随机数。

它可以配置为生成 range [min, max) 范围内的连续均匀分布,或生成离散均匀分布,其中任何指定的 values [v0, v1, …, vn] 值以相等的概率出现。

生成数据的形状可以通过 shape 参数显式指定,或者选择与提供的 __shape_like 输入的形状匹配。 如果两者都不存在,则每个样本生成一个值。

支持的后端
  • ‘cpu’

  • ‘gpu’

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

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

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

  • dtype (nvidia.dali.types.DALIDataType, 可选) –

    输出数据类型。

    注意

    生成的数字将转换为输出数据类型,并在必要时进行舍入和钳位。

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

  • range (float 或 float 的 list 或 float 的 TensorList, 可选, 默认值 = [-1.0, 1.0]) –

    连续均匀分布的范围 [min, max)

    此参数与 values 互斥。

    警告

    当指定整数类型作为 dtype 时,由于舍入,生成的数字可能会超出指定的范围。

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

  • shape (intintlistintTensorList, 可选) – 输出数据的形状。

  • values (floatfloatlistfloatTensorList, 可选) –

    离散均匀分布产生的离散值 [v0, v1, …, vn]。

    此参数与 range 互斥。

__call__(__shape_like=None, /, *, bytes_per_sample_hint=[0], dtype=None, preserve=False, range=[-1.0, 1.0], seed=-1, shape=None, values=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__shape_like (TensorList, 可选) – 如果提供,此输入的形状将用于推断输出的形状。

nvidia.dali.ops.readers#

此模块中的算子是数据生成算子,它们从存储或不同的源读取数据,并且数据位置在管道构建时通过参数已知。 对于能够从通过常规输入动态指定的源读取数据的读取器,请参阅 nvidia.dali.fn.io 模块。

class nvidia.dali.ops.readers.COCO(*, annotations_file='', avoid_class_remapping=False, bytes_per_sample_hint=[0], dont_use_mmap=False, file_root=None, image_ids=False, images=None, include_iscrowd=True, initial_fill=1024, lazy_init=False, ltrb=False, num_shards=1, pad_last_batch=False, pixelwise_masks=False, polygon_masks=False, prefetch_queue_depth=1, preprocessed_annotations='', preserve=False, random_shuffle=False, ratio=False, read_ahead=False, save_preprocessed_annotations=False, save_preprocessed_annotations_dir='', seed=-1, shard_id=0, shuffle_after_epoch=False, size_threshold=0.1, skip_cached_images=False, skip_empty=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

从 COCO 数据集中读取数据,该数据集由包含图像和注释 JSON 文件的目录组成。

此读取器生成以下输出

images, bounding_boxes, labels, ((polygons, vertices) | (pixelwise_masks)),
(image_ids)
  • images 每个样本包含图像数据,布局为 HWC (高度,宽度,通道)。

  • bounding_boxes 每个样本可以有任意数量 M 的边界框,每个边界框由 4 个坐标描述

    [[x_0, y_0, w_0, h_0],
     [x_1, y_1, w_1, h_1]
     ...
     [x_M, y_M, w_M, h_M]]
    

    或根据请求使用 [l, t, r, b] 格式(请参阅 ltrb 参数)。

  • labels 每个边界框都与一个表示类别标识符的整数标签相关联

    [label_0, label_1, ..., label_M]
    
  • polygonsvertices (可选,如果 polygon_masks 设置为 True 则存在)如果启用了 polygon_masks,则会生成两个额外的输出,通过一组多边形描述掩码。 每个掩码包含任意数量的多边形 P,每个多边形都与范围 [0, M) 内的掩码索引相关联,并由一组 V 顶点组成。 输出 polygons 描述多边形如下

    [[mask_idx_0, start_vertex_idx_0, end_vertex_idx_0],
     [mask_idx_1, start_vertex_idx_1, end_vertex_idx_1],
     ...
     [mask_idx_P, start_vertex_idx_P, end_vertex_idx_P]]
    

    其中 mask_idx 是多边形掩码的索引,范围为 [0, M)start_vertex_idxend_vertex_idx 定义顶点索引的范围,因为它们出现在输出 vertices 中,属于此多边形。 vertices 中的每个样本都包含一个顶点列表,这些顶点组成了样本中不同的多边形,以 2D 坐标表示

    [[x_0, y_0],
     [x_1, y_1],
     ...
     [x_V, y_V]]
    
  • pixelwise_masks (可选,如果参数 pixelwise_masks 设置为 True 则存在)包含类似图像的数据,形状和布局与 images 相同,表示像素级分割掩码。

  • image_ids (可选,如果参数 image_ids 设置为 True 则存在)每个样本一个元素,表示图像标识符。

支持的后端
  • ‘cpu’

关键词参数:
  • annotations_file (str, 可选, 默认值 = ‘’) – JSON 注释文件路径列表。

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

    如果设置为 True,类 ID 值将直接按照它们在清单文件中定义的方式返回。

    否则,类 ID 值将被映射到范围 1-类别数量的连续值,而忽略清单中的确切值(0 保留给特殊的背景类)。

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

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

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

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

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

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

  • dump_meta_files (bool) –

    警告

    参数 dump_meta_files 已弃用,是 save_preprocessed_annotations 的别名。 请改用 save_preprocessed_annotations

  • dump_meta_files_path (str) –

    警告

    参数 dump_meta_files_path 已弃用,是 save_preprocessed_annotations_dir 的别名。 请改用 save_preprocessed_annotations_dir

  • file_root (str, 可选) –

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

    如果未提供文件列表,则此参数是必需的。

  • image_ids (bool, 可选, 默认值 = False) – 如果设置为 True,图像 ID 将在额外的输出中生成。

  • images (strstrlist, 可选) –

    图像路径列表。

    如果提供,它指定将要读取的图像。 图像将按照它们在列表中出现的顺序读取,如果存在重复项,将生成相关样本的多个副本。

    如果未指定或设置为 None,则注释文件中列出的所有图像将精确读取一次,并按其图像 ID 排序。

    要保留的路径应与注释文件中的路径完全匹配。

    注意:此参数与 preprocessed_annotations 互斥。

  • include_iscrowd (bool, 可选, 默认值 = True) – 如果设置为 True,则标记为 iscrowd=1 的注释也将包含在内。

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

    用于洗牌的缓冲区大小。

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

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

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

    如果设置为 True,则边界框将作为 [left, top, right, bottom] 返回。

    如果设置为 False,则边界框将作为 [x, y, width, height] 返回。

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

    启用多边形掩码。

    警告

    请使用 polygon_masks 代替。请注意,多边形格式已从 mask_id, start_coord, end_coord 更改为 mask_id, start_vertex, end_vertex,其中 start_coord 和 end_coord 是坐标总数,实际上 start_coord = 2 * start_vertexend_coord = 2 * end_vertex。示例:顶点为 [[x0, y0], [x1, y1], [x2, y2]] 的多边形在使用已弃用的参数 masks 时将表示为 [mask_id, 0, 6],但在使用新参数 polygon_masks 时将表示为 [mask_id, 0, 3]

  • meta_files_path (str) –

    警告

    参数 meta_files_path 是已弃用的别名,用于 preprocessed_annotations。请使用 preprocessed_annotations 代替。

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

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

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

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

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

    注意

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

  • pixelwise_masks (bool, optional, default = False) – 如果为 true,则分割掩码将作为逐像素掩码读取和返回。此参数与 polygon_masks 互斥。

  • polygon_masks (bool, optional, default = False) – 如果设置为 True,则分割掩码多边形将以两个输出的形式读取:polygonsvertices。此参数与 pixelwise_masks 互斥。

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

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

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

  • preprocessed_annotations (str, optional, default = ‘’) – 包含预处理 COCO 注释的元文件的目录路径。

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

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

    确定是否随机打乱数据。

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

  • ratio (bool, optional, default = False) – 如果设置为 True,则返回的边界框和掩码多边形坐标相对于图像尺寸。

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

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

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

  • save_img_ids (bool) –

    警告

    参数 save_img_ids 是已弃用的别名,用于 image_ids。请使用 image_ids 代替。

  • save_preprocessed_annotations (bool, optional, default = False) – 如果设置为 True,则运算符会保存一组文件,其中包含预处理 COCO 注释的二进制表示。

  • save_preprocessed_annotations_dir (str, optional, default = ‘’) – 用于保存预处理 COCO 注释文件的目录路径。

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

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

  • shuffle_after_epoch (bool, optional, default = False) – 如果设置为 True,则读取器在每个 epoch 后对整个数据集进行洗牌。

  • size_threshold (float, optional, default = 0.1) – 如果表示对象实例的边界框的宽度或高度(以像素为单位)低于此值,则将忽略该对象。

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

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

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

  • skip_empty (bool, optional, default = False) – 如果为 true,读取器将跳过其中没有对象实例的样本

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

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

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

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

__call__(*, annotations_file='', avoid_class_remapping=False, bytes_per_sample_hint=[0], dont_use_mmap=False, file_root=None, image_ids=False, images=None, include_iscrowd=True, initial_fill=1024, lazy_init=False, ltrb=False, num_shards=1, pad_last_batch=False, pixelwise_masks=False, polygon_masks=False, prefetch_queue_depth=1, preprocessed_annotations='', preserve=False, random_shuffle=False, ratio=False, read_ahead=False, save_preprocessed_annotations=False, save_preprocessed_annotations_dir='', seed=-1, shard_id=0, shuffle_after_epoch=False, size_threshold=0.1, skip_cached_images=False, skip_empty=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.readers.Caffe(*, bytes_per_sample_hint=[0], dont_use_mmap=False, image_available=True, initial_fill=1024, label_available=True, lazy_init=False, num_shards=1, pad_last_batch=False, path=None, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

从 Caffe LMDB 读取(图像,标签)对。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

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

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

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

  • image_available (bool, optional, default = True) – 确定此 LMDB 中是否有图像可用。

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

    用于洗牌的缓冲区大小。

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

  • label_available (bool, optional, default = True) – 确定标签是否可用。

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

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

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

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

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

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

    注意

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

  • path (str or list of str) – Caffe LMDB 目录的路径列表。

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

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

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

  • 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) – 随机种子;如果未设置,将自动分配一个。

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

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

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

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

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

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

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

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

__call__(*, bytes_per_sample_hint=[0], dont_use_mmap=False, image_available=True, initial_fill=1024, label_available=True, lazy_init=False, num_shards=1, pad_last_batch=False, path=None, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.readers.Caffe2(*, additional_inputs=0, bbox=False, bytes_per_sample_hint=[0], dont_use_mmap=False, image_available=True, initial_fill=1024, label_type=0, lazy_init=False, num_labels=1, num_shards=1, pad_last_batch=False, path=None, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

从 Caffe2 Lightning Memory-Mapped Database (LMDB) 读取样本数据。

支持的后端
  • ‘cpu’

关键词参数:
  • additional_inputs (int, optional, default = 0) – 为每个样本提供的其他辅助数据张量。

  • bbox (bool, optional, default = False) – 表示是否存在边界框信息。

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

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

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

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

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

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

  • image_available (bool, optional, default = True) – 确定此 LMDB 中是否有图像可用。

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

    用于洗牌的缓冲区大小。

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

  • label_type (int, optional, default = 0) –

    数据集中存储的标签类型。

    以下是可用值列表

    • 0 = SINGLE_LABEL:这是多类分类的整数标签。

    • 1 = MULTI_LABEL_SPARSE:这是多标签分类的稀疏活动标签索引。

    • 2 = MULTI_LABEL_DENSE:这是用于标签嵌入回归的密集标签嵌入向量。

    • 3 = MULTI_LABEL_WEIGHTED_SPARSE:这是具有每个标签权重的多标签分类的稀疏活动标签索引。

    • 4 = NO_LABEL:没有可用的标签。

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

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

    数据集中的类数。

    当使用稀疏标签时是必需的。

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

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

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

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

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

    注意

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

  • path (str or list of str) – Caffe2 LMDB 目录的路径列表。

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

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

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

  • 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) – 随机种子;如果未设置,将自动分配一个。

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

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

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

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

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

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

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

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

__call__(*, additional_inputs=0, bbox=False, bytes_per_sample_hint=[0], dont_use_mmap=False, image_available=True, initial_fill=1024, label_type=0, lazy_init=False, num_labels=1, num_shards=1, pad_last_batch=False, path=None, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.readers.File(*, bytes_per_sample_hint=[0], case_sensitive_filter=False, dir_filters=None, dont_use_mmap=False, file_filters=['*.jpg', '*.jpeg', '*.png', '*.bmp', '*.tif', '*.tiff', '*.pnm', '*.ppm', '*.pgm', '*.pbm', '*.jp2', '*.webp', '*.flac', '*.ogg', '*.wav'], file_list=None, file_root=None, files=None, initial_fill=1024, labels=None, lazy_init=False, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, shuffle_after_epoch=False, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

读取文件内容并返回文件-标签对。

此运算符可以在以下模式中使用

  1. 从目录中列出文件,并根据子目录结构分配标签。

在这种模式下,file_root 参数中指示的目录应包含一个或多个子目录。将列出这些子目录中的文件,并根据子目录的字典顺序分配标签。如果提供带有 glob 字符串列表的 file_filters 参数,则运算符将列出与至少一个模式匹配的文件。否则,将使用默认的过滤器集(有关详细信息,请参阅 file_filters 的默认值)。

例如,此目录结构

<file_root>/0/image0.jpg
<file_root>/0/world_map.jpg
<file_root>/0/antarctic.png
<file_root>/1/cat.jpeg
<file_root>/1/dog.tif
<file_root>/2/car.jpeg
<file_root>/2/truck.jp2

默认情况下将产生以下输出

<contents of 0/image0.jpg>        0
<contents of 0/world_map.jpg>     0
<contents of 0/antarctic.png>     0
<contents of 1/cat.jpeg>          1
<contents of 1/dog.tif>           1
<contents of 2/car.jpeg>          2
<contents of 2/truck.jp2>         2

而使用 file_filters = ["*.jpg", "*.jpeg"] 将产生以下输出

<contents of 0/image0.jpg>        0
<contents of 0/world_map.jpg>     0
<contents of 1/cat.jpeg>          1
<contents of 2/car.jpeg>          2
  1. 使用存储在文本文件中的文件名和标签。

file_list 参数指向一个文件,该文件每行包含一个文件名和标签。例如

dog.jpg 0
cute kitten.jpg 1
doge.png 0

文件名中间可以包含空格,但不能包含尾随空格。

  1. 使用文件名和标签,分别以字符串和整数列表的形式提供。

与其他读取器一样,此运算符返回的(文件,标签)对可以随机打乱,并且可以应用各种分片策略。有关详细信息,请参阅此运算符参数的文档。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

  • case_sensitive_filter (bool, optional, default = False) – 如果设置为 True,则过滤器将区分大小写匹配,否则不区分大小写。

  • dir_filters (strlist of str, optional) –

    用于过滤 file_root 下子目录列表的 glob 字符串列表。

    当文件路径取自 file_listfiles 时,将忽略此参数。

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

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

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

  • file_filters (str or list of str, optional, default = [‘*.jpg’, ‘*.jpeg’, ‘*.png’, ‘*.bmp’, ‘*.tif’, ‘*.tiff’, ‘*.pnm’, ‘*.ppm’, ‘*.pgm’, ‘*.pbm’, ‘*.jp2’, ‘*.webp’, ‘*.flac’, ‘*.ogg’, ‘*.wav’]) –

    用于过滤 file_root 子目录中文件列表的 glob 字符串列表。

    当文件路径取自 file_listfiles 时,将忽略此参数。

  • file_list (str, optional) –

    指向文本文件的路径,该文件每行包含一个空格分隔的 filename label 对。文件名相对于该文件的位置或 file_root(如果指定)的位置。

    此参数与 files 互斥。

  • file_root (str, optional) –

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

    如果不使用 file_listfiles,则会遍历此目录以发现文件。在此操作模式下,file_root 是必需的。

  • files (strlist of str, optional) –

    要从中读取数据的文件路径列表。

    如果提供了 file_root,则路径被视为相对于它。当使用 files 时,标签取自 labels 参数,或者,如果未提供,则包含给定文件在 files 列表中出现的索引。

    此参数与 file_list 互斥。

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

    用于洗牌的缓冲区大小。

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

  • labels (intlist of int, optional) –

    伴随 files 参数中列出的文件内容的标签。

    如果未使用,则顺序的从 0 开始的索引将用作标签

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

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

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

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

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

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

    注意

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

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

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

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

  • 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) – 随机种子;如果未设置,将自动分配一个。

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

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

    如果设置为 True,则读取器会在每个 epoch 后混洗整个数据集。

    当此参数设置为 True 时,不能使用 stick_to_shardrandom_shuffle

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

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

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

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

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

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

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

__call__(*, bytes_per_sample_hint=[0], case_sensitive_filter=False, dir_filters=None, dont_use_mmap=False, file_filters=['*.jpg', '*.jpeg', '*.png', '*.bmp', '*.tif', '*.tiff', '*.pnm', '*.ppm', '*.pgm', '*.pbm', '*.jp2', '*.webp', '*.flac', '*.ogg', '*.wav'], file_list=None, file_root=None, files=None, initial_fill=1024, labels=None, lazy_init=False, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, shuffle_after_epoch=False, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.readers.MXNet(*, bytes_per_sample_hint=[0], dont_use_mmap=False, index_path=None, initial_fill=1024, lazy_init=False, num_shards=1, pad_last_batch=False, path=None, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

从 MXNet RecordIO 读取数据。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

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

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

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

  • index_path (strlist of str) –

    包含索引 (.idx) 文件路径的列表(长度为 1)。

    该文件由带有 RecordIO 文件的 MXNet 的 im2rec.py 脚本生成。该列表也可以使用与 DALI 一起分发的 rec2idx 脚本生成。

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

    用于洗牌的缓冲区大小。

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

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

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

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

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

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

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

    注意

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

  • path (strlist of str) – RecordIO 文件路径列表。

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

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

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

  • 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) – 随机种子;如果未设置,将自动分配一个。

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

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

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

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

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

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

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

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

__call__(*, bytes_per_sample_hint=[0], dont_use_mmap=False, index_path=None, initial_fill=1024, lazy_init=False, num_shards=1, pad_last_batch=False, path=None, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.readers.NemoAsr(*, bytes_per_sample_hint=[0], dont_use_mmap=False, downmix=True, dtype=DALIDataType.FLOAT, initial_fill=1024, lazy_init=False, manifest_filepaths=None, max_duration=0.0, min_duration=0.0, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, quality=50.0, random_shuffle=False, read_ahead=False, read_idxs=False, read_sample_rate=True, read_text=True, sample_rate=-1.0, seed=-1, shard_id=0, shuffle_after_epoch=False, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

从 NVIDIA NeMo 兼容的清单文件中读取自动语音识别 (ASR) 数据(音频、文本)。

清单文件示例

{
  "audio_filepath": "path/to/audio1.wav",
  "duration": 3.45,
  "text": "this is a nemo tutorial"
}
{
  "audio_filepath": "path/to/audio1.wav",
  "offset": 3.45,
  "duration": 1.45,
  "text": "same audio file but using offset"
}
{
  "audio_filepath": "path/to/audio2.wav",
  "duration": 3.45,
  "text": "third transcript in this example"
}

注意

只有 audio_filepath 字段是强制性的。如果未指定 duration,将使用整个音频文件。 缺少 text 字段将生成一个空字符串作为文本。

警告

尚未实现 durationoffset 字段的处理。 当前实现始终读取整个音频文件。

此读取器生成 1 到 3 个输出

  • 解码后的音频数据:float,shape=(audio_length,)

  • (可选,如果 read_sample_rate=True)音频采样率:float,shape=(1,)

  • (可选,如果 read_text=True)转录文本作为空终止字符串:uint8,shape=(text_len + 1,)

  • (可选,如果 read_idxs=True)清单条目的索引:int64,shape=(1,)

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

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

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

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

  • downmix (bool, optional, default = True) – 如果为 True,则将所有输入通道下混为单声道。 如果下混音已开启,解码器将始终产生 1-D 输出

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

    输出数据类型。

    支持的类型:INT16INT32FLOAT

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

    用于洗牌的缓冲区大小。

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

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

  • manifest_filepaths (strlist of str) – NeMo 兼容清单文件路径的列表。

  • max_duration (float, optional, default = 0.0) –

    如果提供大于 0 的值,则指定音频样本的最大允许持续时间(秒)。

    持续时间超过此值的样本将被忽略。

  • min_duration (float, optional, default = 0.0) –

    如果提供大于 0 的值,则指定最小允许持续时间,

    以秒为单位,音频样本的持续时间。

    持续时间短于此值的样本将被忽略。

  • normalize_text (bool) –

    警告

    normalize_text 参数不再使用,将在未来的版本中移除。

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

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

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

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

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

    注意

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

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

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

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

  • preserve (bool, optional, default = False) – 即使其输出未被使用,也防止运算符从图中移除。

  • quality (float, optional, default = 50.0) –

    重采样质量,0 为最低,100 为最高。

    0 对应于 sinc 滤波器的 3 个波瓣;50 给出 16 个波瓣,100 给出 64 个波瓣。

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

    确定是否随机打乱数据。

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

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

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

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

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

    是否将样本的索引作为单独的输出输出,因为它们出现在清单文件中

    作为单独的输出

  • read_sample_rate (bool, optional, default = True) – 是否将每个样本的采样率作为单独的输出输出

  • read_text (bool, optional, default = True) – 是否将每个样本的转录文本作为单独的输出输出

  • sample_rate (float, optional, default = -1.0) – 如果指定,则为目标采样率,单位为 Hz,音频将重采样到该采样率。

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

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

  • shuffle_after_epoch (bool, optional, default = False) – 如果为 true,则读取器在每个 epoch 后打乱整个数据集

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

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

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

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

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

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

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

__call__(*, bytes_per_sample_hint=[0], dont_use_mmap=False, downmix=True, dtype=DALIDataType.FLOAT, initial_fill=1024, lazy_init=False, manifest_filepaths=None, max_duration=0.0, min_duration=0.0, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, quality=50.0, random_shuffle=False, read_ahead=False, read_idxs=False, read_sample_rate=True, read_text=True, sample_rate=-1.0, seed=-1, shard_id=0, shuffle_after_epoch=False, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.readers.Numpy(*, bytes_per_sample_hint=[0], cache_header_information=False, dont_use_mmap=False, file_filter='*.npy', file_list=None, file_root=None, files=None, fill_value=0.0, initial_fill=1024, lazy_init=False, num_shards=1, out_of_bounds_policy='error', pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, register_buffers=True, rel_roi_end=None, rel_roi_shape=None, rel_roi_start=None, roi_axes=[], roi_end=None, roi_shape=None, roi_start=None, seed=-1, shard_id=0, shuffle_after_epoch=False, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, use_o_direct=False, device=None, name=None)#

从目录读取 Numpy 数组。

此运算符可以在以下模式中使用

  1. 读取 file_root 指示的目录中与给定 file_filter 匹配的所有文件。

  2. file_list 参数中指示的文本文件读取文件名。

  3. 读取 files 参数中列出的文件。

注意

gpu 后端需要 cuFile/GDS 支持(418.x 驱动程序系列或更高版本)。 该支持随 CUDA 工具包一起提供,从 CUDA 11.4 开始。 请查看 GDS 文档以了解更多详细信息。

gpu 读取器以块读取文件。 块的大小可以通过环境变量 DALI_GDS_CHUNK_SIZE 在进程范围内控制。 有效值是 4096 到 16M 之间的 2 的幂,默认值为 2M。 为了方便起见,可以使用 k 或 M 后缀指定值,分别应用 1024 和 2^20 的乘数。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

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

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

  • cache_header_information (bool, optional, default = False) – 如果设置为 True,则缓存每个文件的标头信息,从而提高访问速度。

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

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

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

  • file_filter (str, optional, default = ‘*.npy’) –

    如果指定了值,则该字符串被解释为 glob 字符串,以过滤 file_root 的子目录中的文件列表。

    当文件路径取自 file_listfiles 时,此参数将被忽略。

  • file_list (str, optional) –

    文本文件的路径,该文件包含文件名(每行一个),其中文件名相对于该文件的位置或 file_root(如果指定)。

    此参数与 files 互斥。

  • file_root (str, optional) –

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

    如果未使用 file_listfiles,则会遍历此目录以查找文件。在这种操作模式下,file_root 是必需的。

  • files (strlist of str, optional) –

    要从中读取数据的文件路径列表。

    如果提供了 file_root,则路径将被视为相对于它。

    此参数与 file_list 互斥。

  • fill_value (float, optional, default = 0.0) – 当 out_of_bounds_policy 设置为 “pad” 时,确定填充值。

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

    用于洗牌的缓冲区大小。

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

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

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

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

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

  • out_of_bounds_policy (str, optional, default = ‘error’) –

    确定读取超出 numpy 数组边界时的策略。

    以下是支持值的列表

    • "error" (默认): 尝试读取超出图像边界的内容将产生错误。

    • "pad": 将根据需要使用零或使用 fill_value 参数指定的任何其他值来填充数组。

    • "trim_to_shape": ROI 将被裁剪到数组的边界。

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

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

    注意

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

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

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

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

  • preserve (bool, optional, default = False) – 即使运算符的输出未使用,也防止从图中删除该运算符。

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

    确定是否随机打乱数据。

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

  • read_ahead (bool, optional, default = False) –

    确定是否应预读访问的数据。

    对于大型文件,例如 LMDB、RecordIO 或 TFRecord,此参数会减慢首次访问速度,但会缩短所有后续访问的时间。

  • register_buffers (bool, optional, default = True) –

    适用于 gpu 后端类型。

    警告

    此参数暂时禁用,并保留以实现向后兼容性。它将在未来的版本中重新启用。

    如果为 true,设备 I/O 缓冲区将使用 cuFile 注册。如果样本大小变化很大,则不建议使用。

  • rel_roi_end (floatlist of floatTensorList of float, optional) –

    感兴趣区域的结束位置,以相对坐标表示(范围 [0.0 - 1.0])。

    此参数与 “roi_end”、“roi_shape” 和 “rel_roi_shape” 不兼容。

  • rel_roi_shape (floatlist of floatTensorList of float, optional) –

    感兴趣区域的形状,以相对坐标表示(范围 [0.0 - 1.0])。

    此参数与 “roi_shape”、“roi_end” 和 “rel_roi_end” 不兼容。

  • rel_roi_start (floatlist of floatTensorList of float, optional) –

    感兴趣区域的起始位置,以相对坐标表示(范围 [0.0 - 1.0])。

    此参数与 “roi_start” 不兼容。

  • roi_axes (int or list of int, optional, default = []) –

    用于 ROI 锚点和形状参数的维度顺序,以维度索引表示。

    如果未提供,则应在 ROI 参数中指定所有维度。

  • roi_end (intlist of intTensorList of int, optional) –

    感兴趣区域的结束位置,以绝对坐标表示。

    此参数与 “rel_roi_end”、“roi_shape” 和 “rel_roi_shape” 不兼容。

  • roi_shape (intlist of intTensorList of int, optional) –

    感兴趣区域的形状,以绝对坐标表示。

    此参数与 “rel_roi_shape”、“roi_end” 和 “rel_roi_end” 不兼容。

  • roi_start (intlist of intTensorList of int, optional) –

    感兴趣区域的起始位置,以绝对坐标表示。

    此参数与 “rel_roi_start” 不兼容。

  • seed (int, optional, default = -1) – 随机种子;如果未设置,将自动分配一个。

  • shard_id (int, optional, default = 0) – 要读取的分片的索引。

  • shuffle_after_epoch (bool, optional, default = False) –

    如果设置为 True,则读取器会在每个 epoch 后混洗整个数据集。

    当此参数设置为 True 时,不能使用 stick_to_shardrandom_shuffle

  • skip_cached_images (bool, optional, default = False) –

    如果设置为 True,则当样本在解码器缓存中时,将跳过加载数据。

    在这种情况下,加载器的输出将为空。

  • stick_to_shard (bool, optional, default = False) –

    确定读取器是否应坚持数据分片,而不是遍历整个数据集。

    如果使用解码器缓存,它可以显著减少要缓存的数据量,但可能会影响训练的准确性。

  • tensor_init_bytes (int, optional, default = 1048576) – 每个图像要分配多少内存的提示。

  • use_o_direct (bool, optional, default = False) –

    如果设置为 True,则数据将直接从存储读取,绕过系统缓存。

    dont_use_mmap=False 互斥。

__call__(*, bytes_per_sample_hint=[0], cache_header_information=False, dont_use_mmap=False, file_filter='*.npy', file_list=None, file_root=None, files=None, fill_value=0.0, initial_fill=1024, lazy_init=False, num_shards=1, out_of_bounds_policy='error', pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, register_buffers=True, rel_roi_end=None, rel_roi_shape=None, rel_roi_start=None, roi_axes=[], roi_end=None, roi_shape=None, roi_start=None, seed=-1, shard_id=0, shuffle_after_epoch=False, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, use_o_direct=False, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.readers.Sequence(*, bytes_per_sample_hint=[0], dont_use_mmap=False, file_root=None, image_type=DALIImageType.RGB, initial_fill=1024, lazy_init=False, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, sequence_length=None, shard_id=0, skip_cached_images=False, step=1, stick_to_shard=False, stride=1, tensor_init_bytes=1048576, device=None, name=None)#

警告

此算子现已弃用。

此运算符可能会在未来的版本中移除。

external_source() 可用于实现自定义读取模式。对于读取视频序列,可以使用 nvidia.dali.fn.readers.video()nvidia.dali.fn.experimental.readers.video()nvidia.dali.fn.experimental.decoders.video()nvidia.dali.fn.experimental.inputs.video() 中的一个。

从表示流集合的目录中读取 [帧] 序列。

此运算符期望 file_root 包含一组目录,其中每个目录代表一个提取的视频流。此流由每个帧一个文件表示,并按字典顺序排序。序列不会跨越流边界,并且仅考虑完整的序列,因此没有填充。

示例目录结构

- file_root
  - 0
    - 00001.png
    - 00002.png
    - 00003.png
    - 00004.png
    - 00005.png
    - 00006.png
    ....

  - 1
    - 00001.png
    - 00002.png
    - 00003.png
    - 00004.png
    - 00005.png
    - 00006.png
    ....

注意

此运算符类似于视频读取器,它处理提取为单独图像的视频帧。其主要目的是用于测试基线。对于常规用法,建议使用视频读取器。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • dont_use_mmap (bool, optional, default = False) –

    如果设置为 True,则加载器将使用普通文件 I/O,而不是尝试在内存中映射文件。

    当访问本地文件系统时,映射提供了一定的性能优势,但大多数网络文件系统都无法提供最佳性能。

  • file_root (str) – 包含流的目录的路径,其中目录表示流。

  • image_type (nvidia.dali.types.DALIImageType, optional, default = DALIImageType.RGB) – 输入和输出图像的色彩空间。

  • initial_fill (int, optional, default = 1024) –

    用于洗牌的缓冲区大小。

    如果 random_shuffle 为 False,则忽略此参数。

  • lazy_init (bool, optional, default = False) – 仅在首次运行时(而不是在构造函数中)解析和准备数据集元数据。

  • num_shards (int, optional, default = 1) –

    将数据划分为指定数量的部分(分片)。

    这通常用于多 GPU 或多节点训练。

  • pad_last_batch (bool, optional, default = False) –

    如果设置为 True,则通过重复最后一个样本来填充分片。

    注意

    如果各个分片之间的批次数不同,则此选项可能会导致将整个重复样本批次添加到数据集。

  • prefetch_queue_depth (int, optional, default = 1) –

    指定内部加载器要预取的批次数。

    当 pipeline 受 CPU 阶段限制时,应增加此值,以内存消耗换取与加载器线程的更好交错。

  • 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,则当样本在解码器缓存中时,将跳过加载数据。

    在这种情况下,加载器的输出将为空。

  • step (int, optional, default = 1) – 连续序列的起始帧之间的距离。

  • stick_to_shard (bool, optional, default = False) –

    确定读取器是否应坚持数据分片,而不是遍历整个数据集。

    如果使用解码器缓存,它可以显著减少要缓存的数据量,但可能会影响训练的准确性。

  • stride (int, optional, default = 1) – 序列中连续帧之间的距离。

  • tensor_init_bytes (int, optional, default = 1048576) – 每个图像要分配多少内存的提示。

__call__(*, bytes_per_sample_hint=[0], dont_use_mmap=False, file_root=None, image_type=DALIImageType.RGB, initial_fill=1024, lazy_init=False, num_shards=1, pad_last_batch=False, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, sequence_length=None, shard_id=0, skip_cached_images=False, step=1, stick_to_shard=False, stride=1, tensor_init_bytes=1048576, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.readers.TFRecord(path, index_path, features, **kwargs)#

从 TensorFlow TFRecord 文件中读取样本。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • dont_use_mmap (bool, 可选, 默认值 = False) –

    如果设置为 True,则加载器将使用普通文件 I/O,而不是尝试在内存中映射文件。

    当访问本地文件系统时,映射提供了一定的性能优势,但大多数网络文件系统都无法提供最佳性能。

  • features (dict of (string, nvidia.dali.tfrecord.Feature)) –

    一个字典,将要提取的 TFRecord 特征的名称映射到特征类型。

    通常通过使用 dali.tfrecord.FixedLenFeaturedali.tfrecord.VarLenFeature 辅助函数获得,它们分别等同于 TensorFlow 的 tf.FixedLenFeaturetf.VarLenFeature 类型。为了获得额外的灵活性,dali.tfrecord.VarLenFeature 支持 partial_shape 参数。如果提供,数据将被重塑以匹配其值,并且第一维度将从数据大小中推断出来。

    如果命名的特征在处理的 TFRecord 条目中不存在,则返回一个空张量。

  • index_path (strstr 列表) –

    索引文件路径的列表。每个 TFRecord 文件应该有一个索引文件。

    索引文件可以通过使用 DALI 发布的 tfrecord2idx 脚本从 TFRecord 文件中获得。

  • initial_fill (int, 可选, 默认值 = 1024) –

    用于洗牌的缓冲区大小。

    如果 random_shuffle 为 False,则忽略此参数。

  • lazy_init (bool, 可选, 默认值 = False) – 仅在首次运行时解析和准备数据集元数据,而不是在构造函数中。

  • num_shards (int, 可选, 默认值 = 1) –

    将数据划分为指定数量的部分(分片)。

    这通常用于多 GPU 或多节点训练。

  • pad_last_batch (bool, 可选, 默认值 = False) –

    如果设置为 True,则通过重复最后一个样本来填充分片。

    注意

    如果各个分片之间的批次数不同,则此选项可能会导致将整个重复样本批次添加到数据集。

  • path (strstr 列表) – TFRecord 文件路径的列表。

  • prefetch_queue_depth (int, 可选, 默认值 = 1) –

    指定内部加载器要预取的批次数。

    当 pipeline 受 CPU 阶段限制时,应增加此值,以内存消耗换取与加载器线程的更好交错。

  • preserve (bool, 可选, 默认值 = False) – 阻止运算符从图中移除,即使其输出未使用。

  • random_shuffle (bool, 可选, 默认值 = False) –

    确定是否随机打乱数据。

    大小等于 initial_fill 的预取缓冲区用于顺序读取数据,然后随机选择样本以形成批次。

  • read_ahead (bool, 可选, 默认值 = False) –

    确定是否应预读访问的数据。

    对于大型文件,例如 LMDB、RecordIO 或 TFRecord,此参数会减慢首次访问速度,但会缩短所有后续访问的时间。

  • seed (int, 可选, 默认值 = -1) – 随机种子;如果未设置,将自动分配一个。

  • shard_id (int, 可选, 默认值 = 0) – 要读取的分片索引。

  • skip_cached_images (bool, 可选, 默认值 = False) –

    如果设置为 True,则当样本在解码器缓存中时,将跳过加载数据。

    在这种情况下,加载器的输出将为空。

  • stick_to_shard (bool, 可选, 默认值 = False) –

    确定读取器是否应坚持数据分片,而不是遍历整个数据集。

    如果使用解码器缓存,它可以显著减少要缓存的数据量,但可能会影响训练的准确性。

  • tensor_init_bytes (int, 可选, 默认值 = 1048576) – 每个图像要分配多少内存的提示。

  • use_o_direct (bool, 可选, 默认值 = False) –

    如果设置为 True,数据将直接从存储读取,绕过系统缓存。

    dont_use_mmap=False 互斥。

class nvidia.dali.ops.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=None, 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, 可选, 默认值 = 2) –

    超出最低要求之外要使用的额外解码表面。

    当解码器无法确定最少解码表面数量时,将忽略此参数。

    注意

    当驱动程序版本较旧时,可能会发生这种情况。

    此参数可用于权衡内存使用量和性能。

  • bytes_per_sample_hint (int 或 int 列表, 可选, 默认值 = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • channels (int, 可选, 默认值 = 3) – 通道数。

  • dont_use_mmap (bool, 可选, 默认值 = False) –

    如果设置为 True,则加载器将使用普通文件 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, 可选, 默认值 = ‘’) –

    包含 文件 标签 [起始帧 [结束帧]] 值列表的文件的路径。

    正值表示确切的帧,负值表示从末尾开始的第 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,则忽略此参数。

  • labels (intint 列表, 可选) –

    filenames 参数中列出的文件关联的标签。

    如果提供空列表,则顺序的从 0 开始的索引将用作标签。 如果未提供,则不会生成标签。

  • lazy_init (bool, 可选, 默认值 = False) – 仅在首次运行时解析和准备数据集元数据,而不是在构造函数中。

  • normalized (bool, 可选, 默认值 = False) – 获取归一化数据作为输出。

  • num_shards (int, 可选, 默认值 = 1) –

    将数据划分为指定数量的部分(分片)。

    这通常用于多 GPU 或多节点训练。

  • pad_last_batch (bool, 可选, 默认值 = False) –

    如果设置为 True,则通过重复最后一个样本来填充分片。

    注意

    如果各个分片之间的批次数不同,则此选项可能会导致将整个重复样本批次添加到数据集。

  • pad_sequences (bool, 可选, 默认值 = False) –

    如果视频末尾的帧数不足,则允许创建不完整的序列。

    冗余帧将被置零。 相应的时间戳和帧号将设置为 -1。

  • prefetch_queue_depth (int, 可选, 默认值 = 1) –

    指定内部加载器要预取的批次数。

    当 pipeline 受 CPU 阶段限制时,应增加此值,以内存消耗换取与加载器线程的更好交错。

  • preserve (bool, 可选, 默认值 = False) – 阻止运算符从图中移除,即使其输出未使用。

  • random_shuffle (bool, 可选, 默认值 = False) –

    确定是否随机打乱数据。

    大小等于 initial_fill 的预取缓冲区用于顺序读取数据,然后随机选择样本以形成批次。

  • read_ahead (bool, 可选, 默认值 = False) –

    确定是否应预读访问的数据。

    对于大型文件,例如 LMDB、RecordIO 或 TFRecord,此参数会减慢首次访问速度,但会缩短所有后续访问的时间。

  • seed (int, 可选, 默认值 = -1) – 随机种子;如果未设置,将自动分配一个。

  • sequence_length (int) – 每个序列要加载的帧数。

  • shard_id (int, 可选, 默认值 = 0) – 要读取的分片索引。

  • 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) – 序列中连续帧之间的距离。

  • tensor_init_bytes (int, 可选, 默认值 = 1048576) – 每个图像要分配多少内存的提示。

__call__(*, 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=None, 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)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.readers.VideoResize(*, 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=None, 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, optional, default = 2) –

    超出最低要求之外要使用的额外解码表面。

    当解码器无法确定最少解码表面数量时,将忽略此参数。

    注意

    当驱动程序版本较旧时,可能会发生这种情况。

    此参数可用于权衡内存使用量和性能。

  • antialias (bool, optional, default = True) –

    如果启用,则在缩小比例时应用抗锯齿滤波器。

    注意

    最近邻插值不支持抗锯齿。

  • 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,则加载器将使用普通文件 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,则忽略此参数。

  • interp_type (nvidia.dali.types.DALIInterpType or TensorList of nvidia.dali.types.DALIInterpType, optional, default = DALIInterpType.INTERP_LINEAR) –

    要使用的插值类型。

    使用 min_filtermag_filter 来指定用于缩小和放大的不同滤波。

    注意

    现在不建议使用 INTERP_TRIANGULAR,应将其替换为

    启用 antialias 的 INTERP_LINEAR。

  • labels (intlist of int, optional) –

    filenames 参数中列出的文件关联的标签。

    如果提供空列表,则顺序的从 0 开始的索引将用作标签。 如果未提供,则不会生成标签。

  • lazy_init (bool, optional, default = False) – 仅在第一次运行时(而不是在构造函数中)解析和准备数据集元数据。

  • mag_filter (nvidia.dali.types.DALIInterpType or TensorList of nvidia.dali.types.DALIInterpType, optional, default = DALIInterpType.INTERP_LINEAR) – 放大时使用的滤波器。

  • max_size (floatlist of float, optional) –

    输出尺寸的限制。

    当操作符配置为保持宽高比且仅指定较小尺寸时,其他尺寸可能会变得非常大。当使用 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 or TensorList of nvidia.dali.types.DALIInterpType, optional, default = DALIInterpType.INTERP_LINEAR) – 缩小时使用的滤波器。

  • minibatch_size (int, optional, default = 32) – 内核调用中处理的最大图像数。

  • mode (str, optional, default = ‘default’) –

    调整大小模式。

    以下是支持的模式列表

    • "default" - 图像调整为指定大小。
      缺失的范围将使用提供的范围的平均比例进行缩放。
    • "stretch" - 图像调整为指定大小。
      缺失的范围根本不缩放。
    • "not_larger" - 图像被调整大小,保持宽高比,以使输出图像的任何范围都不超过指定的大小。
      例如,对于 1280x720 的图像,期望的输出大小为 640x480,实际生成 640x360 的输出。
    • "not_smaller" - 图像被调整大小,保持宽高比,以使输出图像的任何范围都不小于指定的大小。
      例如,对于 640x480 的图像,期望的输出大小为 1920x1080,实际生成 1920x1440 的输出。

      此参数与 resize_longerresize_shorter 互斥

  • 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) –

    指定内部加载器要预取的批次数。

    当 pipeline 受 CPU 阶段限制时,应增加此值,以内存消耗换取与加载器线程的更好交错。

  • preserve (bool, optional, default = False) – 阻止操作符从图中移除,即使其输出未使用。

  • random_shuffle (bool, optional, default = False) –

    确定是否随机打乱数据。

    大小等于 initial_fill 的预取缓冲区用于顺序读取数据,然后随机选择样本以形成批次。

  • read_ahead (bool, optional, default = False) –

    确定是否应预读访问的数据。

    对于大型文件,例如 LMDB、RecordIO 或 TFRecord,此参数会减慢首次访问速度,但会缩短所有后续访问的时间。

  • resize_longer (float or TensorList of float, optional, default = 0.0) –

    调整大小后图像的较长边的长度。

    此选项与 resize_shorter 和显式 size 参数互斥,并且操作符保持原始图像的宽高比。此选项等效于为所有维度指定相同的大小和 mode="not_larger"

  • resize_shorter (float or TensorList of float, optional, default = 0.0) –

    调整大小后图像的较短边的长度。

    此选项与 resize_longer 和显式 size 参数互斥,并且操作符保持原始图像的宽高比。此选项等效于为所有维度指定相同的大小和 mode="not_smaller"。较长维度可以通过设置 max_size 参数来限制。有关更多信息,请参见 max_size 参数文档。

  • resize_x (float or TensorList of float, optional, default = 0.0) –

    调整大小后图像的 X 维度长度。

    此选项与 resize_shorterresize_longersize 互斥。如果未指定或为 0,则操作符保持原始图像的宽高比。resize_y 负值会翻转图像。

  • resize_y (float or TensorList of float, optional, default = 0.0) –

    调整大小后图像的 Y 维度长度。

    此选项与 resize_shorterresize_longersize 互斥。如果未指定或为 0,则操作符保持原始图像的宽高比。resize_x 负值会翻转图像。

  • resize_z (float or TensorList of float, optional, default = 0.0) –

    调整大小后体积的 Z 维度长度。

    此选项与 resize_shorterresize_longersize 互斥。如果 resize_xresize_y 保持未指定或为 0,则操作将保持原始体积的宽高比。负值会翻转体积。

  • roi_end (floatlist of floatTensorList of float, optional) –

    输入感兴趣区域 (ROI) 的结束坐标。

    必须与 roi_start 一起指定。坐标遵循张量形状顺序,与 size 相同。坐标可以是绝对坐标(以像素为单位,这是默认值)或相对坐标 (0..1),具体取决于 relative_roi 参数的值。如果任何维度中的 ROI 起点大于 ROI 终点,则该区域在该维度中翻转。

  • roi_relative (bool, optional, default = False) – 如果为 true,则 ROI 坐标相对于输入大小,其中 0 表示顶部/左侧,1 表示底部/右侧

  • roi_start (floatlist of floatTensorList of float, optional) –

    输入感兴趣区域 (ROI) 的起始坐标。

    必须与 roi_end 一起指定。坐标遵循张量形状顺序,与 size 相同。坐标可以是绝对坐标(以像素为单位,这是默认值)或相对坐标 (0..1),具体取决于 relative_roi 参数的值。如果任何维度中的 ROI 起点大于 ROI 终点,则该区域在该维度中翻转。

  • seed (int, optional, default = -1) – 随机种子;如果未设置,将自动分配一个。

  • sequence_length (int) – 每个序列加载的帧数。

  • shard_id (int, optional, default = 0) – 要读取的分片索引。

  • size (floatlist of floatTensorList of float, optional) –

    期望的输出尺寸。

    必须是每个空间维度(不包括视频帧和通道)一个条目的列表/元组。维度为 0 的范围被视作不存在,输出大小将基于其他范围和 mode 参数计算。

  • 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) – 序列中连续帧之间的距离。

  • subpixel_scale (bool, optional, default = True) –

    如果为 True,则直接指定或计算出的分数尺寸将导致调整输入 ROI 以保持缩放比例。

    否则,将调整缩放比例,以使源图像映射到舍入后的输出尺寸。

  • temp_buffer_hint (int, optional, default = 0) –

    重采样的临时缓冲区的初始大小(以字节为单位)。

    注意

    此参数对于 CPU 变体将被忽略。

  • tensor_init_bytes (int, 可选, 默认 = 1048576) – 每个图像要分配多少内存的提示。

__call__(*, 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=None, 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)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

class nvidia.dali.ops.readers.Webdataset(*, bytes_per_sample_hint=[0], case_sensitive_extensions=True, dont_use_mmap=False, dtypes=None, ext=None, index_paths=[], initial_fill=1024, lazy_init=False, missing_component_behavior='', num_shards=1, pad_last_batch=False, paths=None, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

用于 webdataset 格式的读取器。

webdataset 格式是一种提供对存储在 tar 归档文件中的数据集进行高效访问的方法。

将数据存储在 POSIX tar 归档文件中可以极大地加快机械存储设备和网络文件系统上的 I/O 操作,因为它允许操作系统减少 I/O 操作的数量并预读数据。

WebDataset 履行了类似于 Tensorflow 的 TFRecord/tf.Example 类的功能,但更容易采用,因为它实际上不需要任何数据转换。数据以与磁盘上完全相同的格式存储在 tar 文件内部,并且所有预处理和数据增强代码保持不变。

数据集由一个或多个 tar 归档文件组成,每个归档文件进一步拆分为样本。一个样本包含一个或多个组件,这些组件对应于归档文件中包含的实际文件。属于特定样本的组件按不带扩展名的文件名聚合(有关扩展名的详细信息,请阅读下面 ext 参数的描述)。请注意,文件名以点开头的样本以及不是常规文件的条目将不会被加载。

除了包含数据的 tar 归档文件外,每个归档文件还应附带相应的索引文件。索引文件可以使用专用脚本生成

<path_to_dali>/tools/wds2idx.py <path_to_archive> <path_to_index_file>

如果未提供索引文件,则将从 tar 文件中自动推断出来。但请记住,对于大型数据集,这将增加相当可观的启动时间。

索引文件的格式为

v1.2 <num_samples>
<component1_ext> <component1_data_offset> <component1_size> <component2_ext> <component2_data_offset> <component2_size> ...
...

基于 webdataset/webdataset

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int 或 int 列表, 可选, 默认 = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • case_sensitive_extensions (bool, 可选, 默认 = True) –

    确定通过 ext 提供的扩展名是否应区分大小写。

    允许在 ext 参数以及 webdataset 容器中混合大小写。例如,当关闭此选项时:jpg、JPG、jPG 应该可以工作。

    如果扩展字符无法表示为 ASCI,则关闭此选项的结果是未定义的。

  • dont_use_mmap (bool, 可选, 默认 = False) –

    如果设置为 True,则加载器将使用普通文件 I/O,而不是尝试在内存中映射文件。

    当访问本地文件系统时,映射提供了一定的性能优势,但大多数网络文件系统都无法提供最佳性能。

  • dtypes (DALIDataTypeDALIDataType列表, 可选) –

    各个输出的数据类型。

    默认输出数据类型为 UINT8。但是,如果设置了此参数,则应指定每个输出数据类型。此外,应构造 tar 文件,使其仅输出字节大小可被数据类型大小整除的样本。

  • ext (strstr列表) –

    为每个生成的输出设置扩展名集合。

    扩展名集合的数量决定了读取器的输出数量。组件的扩展名被计算为文件名中第一个点之后的文本(不包括以点开头的样本)。不同的扩展名选项应以分号(“;”)分隔,并且可能包含点。

    示例:“left.png;right.jpg”

  • index_paths (str 或 str 列表, 可选, 默认 = []) –

    与各自的 webdataset 归档文件相对应的索引文件列表。

    必须与 paths 参数的长度相同。如果未提供,则将从 webdataset 归档文件中自动推断出来。

  • initial_fill (int, 可选, 默认 = 1024) –

    用于洗牌的缓冲区大小。

    如果 random_shuffle 为 False,则忽略此参数。

  • lazy_init (bool, 可选, 默认 = False) – 仅在第一次运行时而不是在构造函数中解析和准备数据集元数据。

  • missing_component_behavior (str, 可选, 默认 = ‘’) –

    指定在样本中没有任何文件对应于某个输出时该怎么做。

    可能的行为
    • “empty”(默认)- 在这种情况下,未设置的输出将只包含一个空张量

    • “skip” - 在这种情况下,整个样本将被跳过(除了减少归档文件的缓存外,对性能没有损失)

    • “error” - 在这种情况下,将引发异常并停止执行

  • num_shards (int, 可选, 默认 = 1) –

    将数据划分为指定数量的部分(分片)。

    这通常用于多 GPU 或多节点训练。

  • pad_last_batch (bool, 可选, 默认 = False) –

    如果设置为 True,则通过重复最后一个样本来填充分片。

    注意

    如果各个分片之间的批次数不同,则此选项可能会导致将整个重复样本批次添加到数据集。

  • paths (strstr列表) –

    webdataset 归档文件的(一个或多个)路径列表。

    必须与 index_paths 参数的长度相同。

  • prefetch_queue_depth (int, 可选, 默认 = 1) –

    指定内部加载器要预取的批次数。

    当 pipeline 受 CPU 阶段限制时,应增加此值,以内存消耗换取与加载器线程的更好交错。

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未使用。

  • random_shuffle (bool, 可选, 默认 = False) –

    确定是否随机打乱数据。

    使用大小等于 initial_fill 的预取缓冲区顺序读取数据,然后随机选择样本以形成批次。

  • read_ahead (bool, 可选, 默认 = False) –

    确定是否应预读访问的数据。

    对于大型文件,例如 LMDB、RecordIO 或 TFRecord,此参数会减慢首次访问速度,但会缩短所有后续访问的时间。

  • seed (int, 可选, 默认 = -1) – 随机种子;如果未设置,将自动分配一个。

  • shard_id (int, 可选, 默认 = 0) – 要读取的分片的索引。

  • skip_cached_images (bool, 可选, 默认 = False) –

    如果设置为 True,则当样本在解码器缓存中时,将跳过加载数据。

    在这种情况下,加载器的输出将为空。

  • stick_to_shard (bool, 可选, 默认 = False) –

    确定读取器是否应坚持数据分片,而不是遍历整个数据集。

    如果使用解码器缓存,它可以显著减少要缓存的数据量,但可能会影响训练的准确性。

  • tensor_init_bytes (int, 可选, 默认 = 1048576) – 每个图像要分配多少内存的提示。

__call__(*, bytes_per_sample_hint=[0], case_sensitive_extensions=True, dont_use_mmap=False, dtypes=None, ext=None, index_paths=[], initial_fill=1024, lazy_init=False, missing_component_behavior='', num_shards=1, pad_last_batch=False, paths=None, prefetch_queue_depth=1, preserve=False, random_shuffle=False, read_ahead=False, seed=-1, shard_id=0, skip_cached_images=False, stick_to_shard=False, tensor_init_bytes=1048576, device=None, name=None)#

要在图定义中使用的运算符调用。此运算符没有任何输入。

nvidia.dali.ops.reductions#

class nvidia.dali.ops.reductions.Max(*, axes=None, axis_names=None, bytes_per_sample_hint=[0], keep_dims=False, preserve=False, device=None, name=None)#

获取沿指定轴的最大输入元素。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axes (intint列表, 可选) –

    执行归约的轴或轴。

    接受范围为 [-ndim, ndim-1]。负索引从后往前计数。

    不提供任何轴将导致所有元素的归约。

  • axis_names (布局字符串, 可选) –

    执行归约的轴或轴的名称。

    输入布局用于将轴名称转换为轴索引,例如,对于输入布局 “FHWC”axis_names="HW" 等效于指定 axes=[1,2]。此参数不能与 axes 一起使用。

  • bytes_per_sample_hint (int 或 int 列表, 可选, 默认 = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • keep_dims (bool, 可选, 默认 = False) – 如果为 True,则保持原始输入维度。

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未使用。

__call__(__input, /, *, axes=None, axis_names=None, bytes_per_sample_hint=[0], keep_dims=False, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.reductions.Mean(*, axes=None, axis_names=None, bytes_per_sample_hint=[0], dtype=None, keep_dims=False, preserve=False, device=None, name=None)#

获取沿指定轴的元素的平均值。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axes (int or list of int, optional) –

    执行归约的轴或轴。

    接受范围为 [-ndim, ndim-1]。负索引从后往前计数。

    不提供任何轴将导致所有元素的归约。

  • axis_names (layout str, optional) –

    执行归约的轴或轴的名称。

    输入布局用于将轴名称转换为轴索引,例如,对于输入布局 “FHWC”axis_names="HW" 等价于指定 axes=[1,2]。此参数不能与 axes 一起使用。

  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • dtype (nvidia.dali.types.DALIDataType, optional) – 输出数据类型。此类型用于累积结果。

  • keep_dims (bool, optional, default = False) – 如果为 True,则保持原始输入维度。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__input, /, *, axes=None, axis_names=None, bytes_per_sample_hint=[0], dtype=None, keep_dims=False, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.reductions.MeanSquare(*, axes=None, axis_names=None, bytes_per_sample_hint=[0], dtype=None, keep_dims=False, preserve=False, device=None, name=None)#

获取沿指定轴的元素的均方值。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axes (int or list of int, optional) –

    执行归约的轴或轴。

    接受范围为 [-ndim, ndim-1]。负索引从后往前计数。

    不提供任何轴将导致所有元素的归约。

  • axis_names (layout str, optional) –

    执行归约的轴或轴的名称。

    输入布局用于将轴名称转换为轴索引,例如,对于输入布局 “FHWC”axis_names="HW" 等价于指定 axes=[1,2]。此参数不能与 axes 一起使用。

  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • dtype (nvidia.dali.types.DALIDataType, optional) – 输出数据类型。此类型用于累积结果。

  • keep_dims (bool, optional, default = False) – 如果为 True,则保持原始输入维度。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__input, /, *, axes=None, axis_names=None, bytes_per_sample_hint=[0], dtype=None, keep_dims=False, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.reductions.Min(*, axes=None, axis_names=None, bytes_per_sample_hint=[0], keep_dims=False, preserve=False, device=None, name=None)#

获取沿指定轴的元素的最小值。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axes (int or list of int, optional) –

    执行归约的轴或轴。

    接受范围为 [-ndim, ndim-1]。负索引从后往前计数。

    不提供任何轴将导致所有元素的归约。

  • axis_names (layout str, optional) –

    执行归约的轴或轴的名称。

    输入布局用于将轴名称转换为轴索引,例如,对于输入布局 “FHWC”axis_names="HW" 等价于指定 axes=[1,2]。此参数不能与 axes 一起使用。

  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • keep_dims (bool, optional, default = False) – 如果为 True,则保持原始输入维度。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__input, /, *, axes=None, axis_names=None, bytes_per_sample_hint=[0], keep_dims=False, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.reductions.RMS(*, axes=None, axis_names=None, bytes_per_sample_hint=[0], dtype=None, keep_dims=False, preserve=False, device=None, name=None)#

获取沿指定轴的元素的均方根值。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axes (int or list of int, optional) –

    执行归约的轴或轴。

    接受范围为 [-ndim, ndim-1]。负索引从后往前计数。

    不提供任何轴将导致所有元素的归约。

  • axis_names (layout str, optional) –

    执行归约的轴或轴的名称。

    输入布局用于将轴名称转换为轴索引,例如,对于输入布局 “FHWC”axis_names="HW" 等价于指定 axes=[1,2]。此参数不能与 axes 一起使用。

  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • dtype (nvidia.dali.types.DALIDataType, optional) – 输出数据类型。此类型用于累积结果。

  • keep_dims (bool, optional, default = False) – 如果为 True,则保持原始输入维度。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__input, /, *, axes=None, axis_names=None, bytes_per_sample_hint=[0], dtype=None, keep_dims=False, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.reductions.StdDev(*, axes=None, axis_names=None, bytes_per_sample_hint=[0], ddof=0, keep_dims=False, preserve=False, device=None, name=None)#

获取沿指定轴的元素的标准差。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axes (int or list of int, optional) –

    执行归约的轴或轴。

    接受范围为 [-ndim, ndim-1]。负索引从后往前计数。

    不提供任何轴将导致所有元素的归约。

  • axis_names (layout str, optional) –

    执行归约的轴或轴的名称。

    输入布局用于将轴名称转换为轴索引,例如,对于输入布局 “FHWC”axis_names="HW" 等价于指定 axes=[1,2]。此参数不能与 axes 一起使用。

  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • ddof (int, optional, default = 0) – 自由度增量。调整计算中使用的除数,即 N - ddof

  • keep_dims (bool, optional, default = False) – 如果为 True,则保持原始输入维度。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__data, __mean, /, *, axes=None, axis_names=None, bytes_per_sample_hint=[0], ddof=0, keep_dims=False, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __data (TensorList) – 运算符的输入。

  • __mean (float or TensorList of float) – 用于计算的均值。

class nvidia.dali.ops.reductions.Sum(*, axes=None, axis_names=None, bytes_per_sample_hint=[0], dtype=None, keep_dims=False, preserve=False, device=None, name=None)#

获取沿指定轴的元素的总和。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axes (int or list of int, optional) –

    执行归约的轴或轴。

    接受范围为 [-ndim, ndim-1]。负索引从后往前计数。

    不提供任何轴将导致所有元素的归约。

  • axis_names (layout str, optional) –

    执行归约的轴或轴的名称。

    输入布局用于将轴名称转换为轴索引,例如,对于输入布局 “FHWC”axis_names="HW" 等价于指定 axes=[1,2]。此参数不能与 axes 一起使用。

  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • dtype (nvidia.dali.types.DALIDataType, optional) – 输出数据类型。此类型用于累积结果。

  • keep_dims (bool, optional, default = False) – 如果为 True,则保持原始输入维度。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__input, /, *, axes=None, axis_names=None, bytes_per_sample_hint=[0], dtype=None, keep_dims=False, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.reductions.Variance(*, axes=None, axis_names=None, bytes_per_sample_hint=[0], ddof=0, keep_dims=False, preserve=False, device=None, name=None)#

获取沿指定轴的元素的方差。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • axes (int or list of int, optional) –

    执行归约的轴或轴。

    接受范围为 [-ndim, ndim-1]。负索引从后往前计数。

    不提供任何轴将导致所有元素的归约。

  • axis_names (layout str, optional) –

    执行归约的轴或轴的名称。

    输入布局用于将轴名称转换为轴索引,例如,对于输入布局 “FHWC”axis_names="HW" 等价于指定 axes=[1,2]。此参数不能与 axes 一起使用。

  • bytes_per_sample_hint (int or list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • ddof (int, optional, default = 0) – 自由度增量。调整计算中使用的除数,即 N - ddof

  • keep_dims (bool, optional, default = False) – 如果为 True,则保持原始输入维度。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未被使用。

__call__(__data, __mean, /, *, axes=None, axis_names=None, bytes_per_sample_hint=[0], ddof=0, keep_dims=False, preserve=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __data (TensorList) – 运算符的输入。

  • __mean (float or TensorList of float) – 用于计算的均值。

nvidia.dali.ops.segmentation#

class nvidia.dali.ops.segmentation.RandomMaskPixel(*, bytes_per_sample_hint=[0], foreground=0, preserve=False, seed=-1, threshold=0.0, value=None, device=None, name=None)#

在掩码中选择随机像素坐标,从均匀分布中采样。

基于运行时参数 foreground,它返回仅前景像素或任何像素。

当像素值超过给定的 threshold 或等于特定的 value 时,像素被分类为前景。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • foreground (int 或 TensorList of int, optional, default = 0) –

    如果值不为 0,则像素位置从所有前景像素中均匀采样。

    如果值为 0,则像素位置从所有可用像素中均匀采样。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

  • seed (int, optional, default = -1) – 随机种子;如果未设置,将自动分配一个。

  • threshold (float 或 TensorList of float, optional, default = 0.0) –

    值高于此阈值的所有像素都被解释为前景。

    此参数与 value 参数互斥。

  • value (intTensorList of int, optional) –

    值等于此值的所有像素都被解释为前景。

    此参数与 threshold 参数互斥,并且旨在仅与整数输入一起使用。

__call__(__input, /, *, bytes_per_sample_hint=[0], foreground=0, preserve=False, seed=-1, threshold=0.0, value=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.segmentation.RandomObjectBBox(*, background=0, bytes_per_sample_hint=[0], cache_objects=False, class_weights=None, classes=None, foreground_prob=1.0, format='anchor_shape', ignore_class=False, k_largest=None, output_class=False, preserve=False, seed=-1, threshold=None, device=None, name=None)#

从掩码中随机选择一个对象并返回其边界框。

此运算符将标记的分割图作为输入。以 foreground_prob 的概率,它随机选择一个标签(均匀地或根据作为 class_weights 给出的分布),提取具有所选标签的连接像素块,并随机选择其中一个块。可以根据 k_largestthreshold 进一步过滤这些块。输出是以 format 中描述的格式之一表示的所选块的边界框。

以 1-foreground_prob 的概率,返回输入的整个区域。

支持的后端
  • ‘cpu’

关键词参数:
  • background (int 或 TensorList of int, optional, default = 0) –

    背景标签。

    如果未指定,则为 0 或不在 classes 中的任何值。

  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • cache_objects (bool, optional, default = False) –

    缓存对象边界框,以避免在先前看到的输入中查找对象块的计算成本。

    搜索连接像素块和查找框可能需要很长时间。当数据集的项目很少,但项目大小很大时,您可以使用缓存来保存框并在再次看到相同的输入时重用它们。输入基于 256 位哈希进行比较,这比重新计算对象框要快得多。

  • class_weights (floatlist of floatTensorList of float, optional) –

    前景类别的相对概率。

    每个值对应于 classes 中的一个类别标签。如果未指定 classes,则分配连续的从 1 开始的标签。

    权重的总和不必等于 1 - 如果不等于 1,权重将被归一化。

  • classes (intlist of intTensorList of int, optional) –

    被视为前景的标签列表。

    如果未指定,则所有不等于 background 的标签都被视为前景。

  • foreground_prob (float 或 TensorList of float, optional, default = 1.0) – 选择前景边界框的概率。

  • format (str, optional, default = ‘anchor_shape’) –

    返回数据的格式。

    可能的选择是:
    • ”anchor_shape”(默认)- 有两个输出:anchor 和 shape

    • ”start_end” - 有两个输出:边界框的起始坐标和终止坐标(不包含)

    • ”box” - 有一个输出,其中包含连接的起始和终止坐标

  • ignore_class (bool, optional, default = False) –

    如果为 True,则以相等的概率选择所有对象,而与其所属的类别无关。否则,首先选择一个类别,然后从此类别中随机选择一个对象。

    此参数与 classes, class_weightsoutput_class 不兼容。

    注意

    此标志仅影响选择块的概率。它不会导致合并不同类别的块。

  • k_largest (int, optional) –

    如果指定,则框按体积降序排序,并且仅考虑 k_largest 个最大的框。

    如果 ignore_class 为 True,则 k_largest 指的是所有框;否则,它指的是所选类别。

  • output_class (bool, optional, default = False) –

    如果为 True,则会生成一个额外的输出,其中包含所选框所属类别的标签,如果所选框不是对象边界框,则包含背景标签。

    当发生以下任何情况时,输出可能不是对象边界框
    • 样本是随机选择的(根据 foreground_prob),而不是前景框

    • 样本不包含前景对象

    • 没有边界框满足所需的大小阈值。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

  • seed (int, optional, default = -1) – 随机种子;如果未设置,将自动分配一个。

  • threshold (intlist of intTensorList of int, optional) –

    要返回的边界框的每轴最小尺寸。

    如果所选类别不包含任何满足此条件的边界框,则会拒绝它并选择另一个类别。 如果没有类别包含令人满意的框,则返回整个输入区域。

__call__(__input, /, *, background=0, bytes_per_sample_hint=[0], cache_objects=False, class_weights=None, classes=None, foreground_prob=1.0, format='anchor_shape', ignore_class=False, k_largest=None, output_class=False, preserve=False, seed=-1, threshold=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.segmentation.SelectMasks(*, bytes_per_sample_hint=[0], preserve=False, reindex_masks=False, device=None, name=None)#

按掩码 ID 选择多边形的子集。

该运算符需要三个输入,描述属于不同掩码 ID 的多个分割掩码多边形和一个选定的掩码 ID 列表。

每个样本可以包含属于不同掩码的多个多边形,并且每个多边形可以由任意数量的顶点(至少 3 个)组成。 掩码多边形由输入 polygonsvertices 描述,运算符生成输出 polygonsvertices,其中仅存在与所选掩码关联的多边形。

注意

polygonsvertices 的格式与 COCOReader 生成的格式相同。

示例

让我们假设以下输入掩码,其中符号坐标用于更清晰的示例

polygons = [[0, 0, 3], [1, 3, 7], [2, 7, 10]]
vertices = [[x0, y0], [x1, y1], [x2, y2], [x3, y3], [x4, y4], [x5, y5],
            [x6, y6], [x7, y7], [x8, y8], [x9, y9]]

示例 1:选择 ID 为 1 的单个掩码,保持原始 ID

mask_ids = [1], :paramref:`~nvidia.dali.ops.segmentation.SelectMasks.reindex_masks` = False
out_polygons = [[1, 0, 4]]
out_vertices = [[x3, y3], [x4, y4], [x5, y5], [x6, y6]]

示例 2:从三个掩码中选择两个,将掩码 ID 替换为它们在 mask_ids 输入中出现的索引

mask_ids = [2, 0]
reindex_masks = True
out_polygons = [[0, 3, 6], [1, 0, 3]]
out_vertices = [[x0, y0], [x1, y1], [x2, y2], [x7, y7], [x8, y8], [x9, y9]]
支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

  • reindex_masks (bool, optional, default = False) – 如果设置为 True,则输出掩码 ID 将替换为它们在 mask_ids 输入中出现的索引。

__call__(__mask_ids, __polygons, __vertices, /, *, bytes_per_sample_hint=[0], preserve=False, reindex_masks=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:
  • __mask_ids (1D TensorList of int) – 要选择的掩码的标识符列表。 该列表不应包含重复项。

  • __polygons (2D TensorList of int) –

    由 3 列描述的多边形

    [[mask_id0, start_vertex_idx0, end_vertex_idx0],
     [mask_id1, start_vertex_idx1, end_vertex_idx1],
     ...,
     [mask_idn, start_vertex_idxn, end_vertex_idxn],]
    

    其中 mask_id 是此多边形所属的掩码的标识符,[start_vertex_idx, end_vertex_idx) 描述了 vertices 中属于此多边形的索引范围(左闭右开区间)。

  • __vertices (2D TensorList) –

    以交错格式存储的顶点数据

    [[x0, y0, ...],
     [x1, y1, ...],
     ... ,
     [xn, yn, ...]]
    

    运算符接受具有任意数量坐标的顶点。

nvidia.dali.ops.transforms#

此模块中的所有运算符仅支持 CPU 设备,因为它们旨在作为命名关键字运算符参数的输入提供。 有关更多详细信息,请查看相关的 pipeline documentation section

class nvidia.dali.ops.transforms.Combine(*, bytes_per_sample_hint=[0], preserve=False, reverse_order=False, device=None, name=None)#

组合两个或多个仿射变换。

默认情况下,变换组合的方式是,将结果变换应用于一个点等效于

按列出的顺序应用输入变换。

示例:组合 [T1, T2, T3] 对于默认顺序等效于 T3(T2(T1(…))),对于反向顺序等效于 T1(T2(T3(…)))。

对于反向顺序。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int 或 list of int, optional, default = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • preserve (bool, optional, default = False) – 阻止运算符从图中移除,即使其输出未使用。

  • reverse_order (bool, optional, default = False) –

    确定组合仿射变换时的顺序。

    如果设置为 False(默认值),则运算符的仿射变换将应用于输入变换。 如果设置为 True,则输入变换将应用于运算符的变换。

    如果没有输入,则忽略此参数。

__call__(__input_0, __input_1, /, *__input_, bytes_per_sample_hint=[0], preserve=False, reverse_order=False, device=None, name=None)#

有关完整信息,请参阅 nvidia.dali.ops.transforms.Combine() 类。

class nvidia.dali.ops.transforms.Crop(*, absolute=False, bytes_per_sample_hint=[0], from_end=[1.0], from_start=[0.0], preserve=False, reverse_order=False, to_end=[1.0], to_start=[0.0], device=None, name=None)#

生成一个仿射变换矩阵,将参考坐标空间映射到另一个坐标空间。

此变换可用于调整裁剪操作后的坐标,以便 from_start 点将被映射到 to_start,而 from_end 将被映射到 to_end

如果另一个变换矩阵作为输入传递,则此运算符会将变换应用于提供的矩阵。

注意

此运算符的输出可以直接馈送到 CoordTransformWarpAffine 运算符。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

关键词参数:
  • absolute (bool, 可选, 默认 = False) – 如果设置为 true,则当 start > end 时,起始和结束坐标将被交换。

  • bytes_per_sample_hint (int 或 int 列表, 可选, 默认 = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • from_end (float 或 float 列表或 TensorList of float, 可选, 默认 = [1.0]) –

    原始坐标空间的上限。

    注意

    如果留空,则将假定为单位向量。如果提供单个值,则会重复该值以匹配维度数

    支持 per-frame 输入。

  • from_start (float 或 float 列表或 TensorList of float, 可选, 默认 = [0.0]) –

    原始坐标空间的下限。

    注意

    如果留空,则将假定为零向量。如果提供单个值,则会重复该值以匹配维度数

    支持 per-frame 输入。

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未使用。

  • reverse_order (bool, 可选, 默认 = False) –

    确定组合仿射变换时的顺序。

    如果设置为 False(默认值),则运算符的仿射变换将应用于输入变换。 如果设置为 True,则输入变换将应用于运算符的变换。

    如果没有输入,则忽略此参数。

  • to_end (float 或 float 列表或 TensorList of float, 可选, 默认 = [1.0]) –

    目标坐标空间的上限。

    注意

    如果留空,则将假定为单位向量。如果提供单个值,则会重复该值以匹配维度数

    支持 per-frame 输入。

  • to_start (float 或 float 列表或 TensorList of float, 可选, 默认 = [0.0]) –

    目标坐标空间的下限。

    注意

    如果留空,则将假定为零向量。如果提供单个值,则会重复该值以匹配维度数

    支持 per-frame 输入。

__call__(__input=None, /, *, absolute=False, bytes_per_sample_hint=[0], from_end=[1.0], from_start=[0.0], preserve=False, reverse_order=False, to_end=[1.0], to_start=[0.0], device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.transforms.Rotation(*, angle=None, axis=None, bytes_per_sample_hint=[0], center=None, preserve=False, reverse_order=False, device=None, name=None)#

生成一个旋转仿射变换矩阵。

如果另一个变换矩阵作为输入传递,则此运算符会将旋转应用于提供的矩阵。

如果提供了旋转轴,则假定维度数为 3,否则为 2。

注意

此运算符的输出可以直接馈送到 CoordTransformWarpAffine 运算符。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

关键词参数:
  • angle (floatTensorList of float) –

    角度,以度为单位。

    支持 per-frame 输入。

  • axis (floatlist of floatTensorList of float, optional) –

    旋转轴(适用于 3D 变换)。

    该向量不需要归一化,但必须具有非零长度。

    反转向量等效于更改 angle 的符号。

    支持 per-frame 输入。

  • bytes_per_sample_hint (int 或 int 列表, 可选, 默认 = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • center (floatlist of floatTensorList of float, optional) –

    旋转中心。

    如果提供,则元素的数量应与变换的维度相匹配。

    支持 per-frame 输入。

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未使用。

  • reverse_order (bool, 可选, 默认 = False) –

    确定组合仿射变换时的顺序。

    如果设置为 False(默认值),则运算符的仿射变换将应用于输入变换。 如果设置为 True,则输入变换将应用于运算符的变换。

    如果没有输入,则忽略此参数。

__call__(__input=None, /, *, angle=None, axis=None, bytes_per_sample_hint=[0], center=None, preserve=False, reverse_order=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.transforms.Scale(*, bytes_per_sample_hint=[0], center=None, ndim=None, preserve=False, reverse_order=False, scale=None, device=None, name=None)#

生成一个缩放仿射变换矩阵。

如果另一个变换矩阵作为输入传递,则此运算符会将缩放应用于提供的矩阵。

注意

此运算符的输出可以直接馈送到 CoordTransformWarpAffine 运算符。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int 或 int 列表, 可选, 默认 = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • center (floatlist of floatTensorList of float, optional) –

    缩放操作的中心。

    如果提供,则元素的数量应与 scale 参数的数量相匹配。

    支持 per-frame 输入。

  • ndim (int, optional) –

    维度数。

    当无法推断维度数时,应提供此参数。例如,当 scale 是标量值且没有输入变换时。

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未使用。

  • reverse_order (bool, 可选, 默认 = False) –

    确定组合仿射变换时的顺序。

    如果设置为 False(默认值),则运算符的仿射变换将应用于输入变换。 如果设置为 True,则输入变换将应用于运算符的变换。

    如果没有输入,则忽略此参数。

  • scale (floatlist of floatTensorList of float) –

    每个维度的缩放因子。

    变换的维度数从此参数推断。

    支持 per-frame 输入。

__call__(__input=None, /, *, bytes_per_sample_hint=[0], center=None, ndim=None, preserve=False, reverse_order=False, scale=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.transforms.Shear(*, angles=None, bytes_per_sample_hint=[0], center=None, preserve=False, reverse_order=False, shear=None, device=None, name=None)#

生成一个剪切仿射变换矩阵。

如果另一个变换矩阵作为输入传递,则此运算符会将剪切映射应用于提供的矩阵。

注意

此运算符的输出可以直接馈送到 CoordTransformWarpAffine 运算符。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

关键词参数:
  • angles (floatlist of floatTensorList of float, optional) –

    剪切角,以度为单位。

    此参数与 shear 互斥。

    对于 2D,angles 包含两个元素:angle_x, angle_y。

    对于 3D,angles 包含六个元素:angle_xy, angle_xz, angle_yx, angle_yz, angle_zx, angle_zy。

    剪切角按如下方式转换为剪切因子

    shear_factor = tan(deg2rad(shear_angle))
    

    注意

    有效值范围为 -90 到 90 度。此参数与 shear 互斥。如果提供,则变换的维度数从此参数推断。

    支持 per-frame 输入。

  • bytes_per_sample_hint (int 或 int 列表, 可选, 默认 = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • center (floatlist of floatTensorList of float, optional) –

    剪切操作的中心。

    如果提供,则元素的数量应与变换的维度相匹配。

    支持 per-frame 输入。

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未使用。

  • reverse_order (bool, 可选, 默认 = False) –

    确定组合仿射变换时的顺序。

    如果设置为 False(默认值),则运算符的仿射变换将应用于输入变换。 如果设置为 True,则输入变换将应用于运算符的变换。

    如果没有输入,则忽略此参数。

  • shear (floatlist of floatTensorList of float, optional) –

    剪切因子。

    对于 2D,shear 包含两个元素:shear_x, shear_y。

    对于 3D,shear 包含六个元素:shear_xy, shear_xz, shear_yx, shear_yz, shear_zx, shear_zy。

    剪切因子值可以解释为在沿第二个轴方向移动时要在第一个轴上应用的偏移量。

    注意

    此参数与 angles 互斥。如果提供,则变换的维度数从此参数推断。

    支持 per-frame 输入。

__call__(__input=None, /, *, angles=None, bytes_per_sample_hint=[0], center=None, preserve=False, reverse_order=False, shear=None, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

class nvidia.dali.ops.transforms.Translation(*, bytes_per_sample_hint=[0], offset=None, preserve=False, reverse_order=False, device=None, name=None)#

生成一个平移仿射变换矩阵。

如果另一个变换矩阵作为输入传递,则此运算符会将平移应用于提供的矩阵。

注意

此运算符的输出可以直接馈送到 CoordTransformWarpAffine 运算符。

此运算符允许序列输入。

支持的后端
  • ‘cpu’

关键词参数:
  • bytes_per_sample_hint (int 或 int 列表, 可选, 默认 = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • offset (floatlist of floatTensorList of float) –

    平移向量。

    变换的维度数从此参数推断。

    支持 per-frame 输入。

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未使用。

  • reverse_order (bool, 可选, 默认 = False) –

    确定组合仿射变换时的顺序。

    如果设置为 False(默认值),则运算符的仿射变换将应用于输入变换。 如果设置为 True,则输入变换将应用于运算符的变换。

    如果没有输入,则忽略此参数。

__call__(__input=None, /, *, bytes_per_sample_hint=[0], offset=None, preserve=False, reverse_order=False, device=None, name=None)#

要在图形定义中使用的操作符调用。

参数:

__input (TensorList) – 运算符的输入。

nvidia.dali.plugin.numba.experimental#

class nvidia.dali.plugin.numba.experimental.NumbaFunction(run_fn, out_types, in_types, outs_ndim, ins_ndim, setup_fn=None, device='cpu', batch_processing=False, blocks=None, threads_per_block=None, **kwargs)#

调用 njit 编译的 Numba 函数。

run 函数应该是一个可以在 Numba nopython 模式下编译的 Python 函数。 接受单个输入并产生单个输出的函数应遵循以下定义

def run_fn(out0, in0)

其中 out0in0 是输入和输出张量的 numpy 数组视图。 如果运算符配置为在批处理模式下运行,则数组的第一个维度是样本索引。

请注意,该函数最多可以接受 6 个输入和 6 个输出。

此外,可选的 setup 函数计算输出的形状,以便 DALI 可以为输出分配内存,其定义如下

def setup_fn(outs, ins)

setup 函数为整个批次调用一次。 outsins 的第一个维度分别是输出/输入的数量。 第二个维度是样本索引。 例如,可以通过 outs[1][0] 访问第二个输出上的第一个样本。

如果未提供 setup 函数,则输出形状和数据类型将与输入相同。

注意

此运算符是实验性的,其 API 可能会更改,恕不另行通知。

警告

当管道启用条件执行时,必须采取额外的步骤来防止 run_fnsetup_fn 函数被 AutoGraph 重写。 有两种方法可以实现这一点

  1. 在全局作用域(即 pipeline_def 作用域之外)定义函数。

  2. 如果函数是另一个“工厂”函数的结果,则工厂函数必须在管道定义函数之外定义,并使用 @do_not_convert 修饰。

更多详细信息可以在 @do_not_convert 文档中找到。

示例 1

以下示例显示了一个简单的 setup 函数,该函数置换形状中维度的顺序。

def setup_change_out_shape(outs, ins):
    out0 = outs[0]
    in0 = ins[0]
    perm = [1, 0, 2]
    for sample_idx in range(len(out0)):
        for d in range(len(perm)):
            out0[sample_idx][d] = in0[sample_idx][perm[d]]

由于 setup 函数是为整个批次运行的,因此我们需要迭代并单独置换每个样本的形状。 对于 shapes = [(10, 20, 30), (20, 10, 30)],它将生成 shapes = [(20, 10, 30), (10, 20, 30)] 的输出。

此外,让我们提供 run 函数

def run_fn(out0, in0):
    for i in range(in0.shape[0]):
        for j in range(in0.shape[1]):
            out0[j, i] = in0[i, j]

运行函数可以按样本或按批次工作,具体取决于 batch_processing 参数。

按批次工作的 run 函数可能如下所示

def run_fn(out0_samples, in0_samples):
    for out0, in0 in zip(out0_samples, in0_samples):
        for i in range(in0.shape[0]):
            for j in range(in0.shape[1]):
                out0[j, i] = in0[i, j]

按样本工作的 run 函数可能如下所示

def run_fn(out0, in0):
    for i in range(in0.shape[0]):
        for j in range(in0.shape[1]):
            out0[j, i] = in0[i, j]

此运算符允许序列输入并支持体积数据。

此操作符将不会从图中优化掉。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • batch_processing (bool, 可选, 默认 = False) –

    确定函数是为每个批次调用一次,还是为批次中的每个样本单独调用。

    batch_processing 设置为 True 时,该函数处理整个批次。 如果函数必须执行跨样本操作,并且可以重用大部分工作,则这是必要的。 对于其他用例,指定 False 并使用每样本处理函数允许运算符并行处理样本。

  • blocks (intlist of int, optional) –

    3 项列表,指定每个网格的块数,用于

    执行 CUDA 内核

  • bytes_per_sample_hint (int 或 int 列表, 可选, 默认 = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • in_types (DALIDataTypelist of DALIDataType) – 输入的类型。

  • ins_ndim (intlist of int) – 输入形状应具有的维度数。

  • out_types (DALIDataTypelist of DALIDataType) – 输出的类型。

  • outs_ndim (intlist of int) – 输出形状应具有的维度数。

  • preserve (bool, 可选, 默认 = False) – 阻止运算符从图中移除,即使其输出未使用。

  • run_fn (object) – 要调用的函数。 此函数必须在 Numba nopython 模式下工作。

  • setup_fn (object, optional) – 用于设置输出形状的设置函数。此函数在每个批次调用一次。此外,此函数必须在 Numba nopython 模式下工作。

  • threads_per_block (intint 列表, optional) –

    3 项列表,指定每个线程数

    用于执行 CUDA 内核的块

__call__(*inputs, **kwargs)#

有关完整信息,请参见 nvidia.dali.ops.NumbaFunction() 类。

nvidia.dali.plugin.pytorch#

class nvidia.dali.plugin.pytorch.TorchPythonFunction(function, num_outputs=1, device='cpu', batch_processing=False, **kwargs)#

执行在 Torch 张量上运行的函数。

此类类似于 nvidia.dali.fn.python_function(),但张量数据作为 PyTorch 张量处理。

此运算符允许序列输入并支持体积数据。

此操作符将不会从图中优化掉。

支持的后端
  • ‘cpu’

  • ‘gpu’

关键词参数:
  • batch_processing (bool, optional, 默认值 = True) – 确定函数是否将整个批次作为输入。

  • bytes_per_sample_hint (int 或 int 列表, optional, 默认值 = [0]) –

    输出大小提示,以每样本字节数为单位。

    如果指定,则将预先分配驻留在 GPU 或页锁定主机内存中的操作符输出,以容纳此大小的一批样本。

  • function (object) –

    定义操作符功能的可调用对象。

    警告

    该函数不得持有对其使用的 pipeline 的引用。如果持有,将形成对 pipeline 的循环引用,并且 pipeline 将永远不会被释放。

  • num_outputs (int, optional, 默认值 = 1) – 输出数量。

  • output_layouts (layout strlayout str 列表, optional) –

    输出的张量数据布局。

    此参数可以是列表,其中包含每个输出的不同布局。如果列表的元素少于 num_outputs,则仅设置前几个输出的布局,其余输出不分配布局。

  • preserve (bool, optional, 默认值 = False) – 即使运算符的输出未使用,也防止将其从图中删除。

Compose#

class nvidia.dali.ops.Compose(op_list)#

返回一个元运算符,它将 op_list 中的运算符链接在一起。

返回值是一个可调用对象,当调用时,执行以下操作

op_list[n-1](op_list([n-2](...  op_list[0](args))))

只有当列表中前一个运算符的所有输出可以直接被下一个运算符处理时,才能组合运算符。

下面的示例链接了一个图像解码器和一个具有随机正方形尺寸的 Resize 操作。decode_and_resize 对象可以像运算符一样被调用

decode_and_resize = ops.Compose([
    ops.decoders.Image(device="cpu"),
    ops.Resize(size=fn.random.uniform(range=400,500)), device="gpu")
])

files, labels = fn.readers.caffe(path=caffe_db_folder, seed=1)
pipe.set_outputs(decode_and_resize(files), labels)

如果在 op_list 中间存在从 CPU 到 GPU 的转换,就像本例中的情况一样,Compose 会自动安排将数据复制到 GPU 内存。

注意

这是一个实验性功能,如有更改,恕不另行通知。