nvidia.dali.fn.experimental.decoders.image_random_crop#

nvidia.dali.fn.experimental.decoders.image_random_crop(__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)#

解码图像并随机裁剪它们。

支持的格式:JPEG、JPEG 2000、TIFF、PNG、BMP、PNM、PPM、PGM、PBM、WebP。

解码器的输出采用 HWC 布局。

该实现使用 NVIDIA nvImageCodec 解码图像。

裁剪窗口的区域(相对于整个图像)和宽高比可以限制为由 areaaspect_ratio 参数分别指定的值范围。

如果可能,操作符会使用 ROI 解码,从而减少解码时间和内存消耗。

注意

GPU 加速解码仅适用于部分图像格式(JPEG 和 JPEG2000)。对于其他格式,将使用基于 CPU 的解码器。对于 JPEG,在可用时将使用专用 HW 解码器。

注意

WebP 解码目前仅支持简单的文件格式(有损和无损压缩)。有关不同 WebP 文件格式的详细信息,请参阅 https://developers.google.com/speed/webp/docs/riff_container

支持的后端
  • ‘cpu’

  • ‘mixed’

参数:

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

关键字参数:
  • 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,则操作符会为每个线程预先分配两个(由于双缓冲)请求大小的主机固定缓冲区。如果选择正确,则在 pipeline 执行期间不会发生额外的分配。

  • host_memory_padding_jpeg2k (int, optional, default = 0) –

    适用于 mixed 后端类型。

    nvJPEG2k 主机内存分配的填充,以字节为单位。此参数有助于防止在遇到更大的图像时 nvJPEG2k 重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供的值大于 0,则操作符会根据提供的提示预先分配必要数量的缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。

  • hw_decoder_load (float, optional, default = 0.9) –

    由 HW JPEG 解码器处理的图像数据百分比。

    适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

    确定将卸载到硬件解码器(如果可用)的工作负载百分比。最佳工作负载取决于提供给 DALI pipeline 的线程数,应通过经验找到。有关更多详细信息,请访问 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 混合 Huffman 解码器。像素较少的图像将使用 nvJPEG 主机端 Huffman 解码器。

    注意

    混合 Huffman 解码器仍然主要使用 CPU。

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

    使 mixed 后端使用与 cpu 后端相同的色度上采样方法。

    此选项对应于 libjpegturbo 或 ImageMagick 中提供的 JPEG 精细上采样

  • memory_stats

num_attemptsint, 可选, 默认值 = 10

用于选择随机区域和宽高比的最大尝试次数。

output_typenvidia.dali.types.DALIImageType, 可选, 默认值 = DALIImageType.RGB

输出图像的色彩空间。

注意:当解码为 YCbCr 时,图像将先解码为 RGB,然后再转换为 YCbCr,遵循 ITU-R BT.601 中的 YCbCr 定义。

preallocate_height_hintint, 可选, 默认值 = 0

图像宽度提示。

适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

该提示用于为 HW JPEG 解码器预分配内存。

preallocate_width_hintint, 可选, 默认值 = 0

图像宽度提示。

适用于 NVIDIA Ampere GPU 架构中的 mixed 后端类型。

该提示用于为 HW JPEG 解码器预分配内存。

preservebool, 可选, 默认值 = False

即使操作符的输出未使用,也阻止将其从图中移除。

random_areafloat 或 float 列表, 可选, 默认值 = [0.08, 1.0]

从中选择随机区域比例 A 的范围。

裁剪图像的面积将等于 A * 原始图像的面积。

random_aspect_ratiofloat 或 float 列表, 可选, 默认值 = [0.75, 1.333333]

从中选择随机宽高比(宽度/高度)的范围。

seedint, 可选, 默认值 = -1

随机种子;如果未设置,将自动分配一个。

split_stages : bool, optional, default = False

警告

参数 split_stages 现已弃用,不建议使用。

use_chunk_allocator : bool, optional, default = False

警告

参数 use_chunk_allocator 现已弃用,不建议使用。

use_fast_idctbool, 可选, 默认值 = False

在基于 libjpeg-turbo 的 CPU 解码器中启用快速 IDCT,当 device 设置为 “cpu”,或者设置为 “mixed” 但特定图像无法由 GPU 实现处理时使用。

根据 libjpeg-turbo 文档,解压缩性能最多可提高 14%,而质量几乎没有降低。