nvidia.dali.fn.decoders.image#

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

解码图像。

对于 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’

参数:

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

关键字参数:
  • 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,则操作符为每个线程预先分配一个请求大小的设备缓冲区。如果正确选择该值,则在 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,则操作符为每个线程预先分配两个(由于双缓冲)请求大小的主机固定缓冲区。如果选择正确,则在 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) –

    由 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 (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 后端类型。

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

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

    图像宽度提示。

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

    此提示用于为 HW 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%,而质量几乎没有降低。

另请参阅