nvidia.dali.fn.experimental.decoders.image#
- nvidia.dali.fn.experimental.decoders.image(__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)#
解码图像。
支持的格式: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’
- 参数:
__input¶ (TensorList) – 操作符的输入。
- 关键字参数:
adjust_orientation¶ (bool, optional, default = True) – 使用 EXIF 方向元数据来校正图像
affine¶ (bool, optional, default = True) –
仅适用于
mixed
后端类型。如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。否则,线程可以由操作系统重新分配给任何 CPU 核心。
bytes_per_sample_hint¶ (int 或 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 执行期间不会发生额外的分配。
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) –
要由硬件 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¶ –
- output_type
nvidia.dali.types.DALIImageType
, optional, default = DALIImageType.RGB 输出图像的色彩空间。
注意:当解码为 YCbCr 时,图像将被解码为 RGB,然后转换为 YCbCr,遵循 ITU-R BT.601 中的 YCbCr 定义。
- preallocate_height_hintint, optional, default = 0
图像宽度提示。
仅适用于 NVIDIA Ampere GPU 架构中的
mixed
后端类型。该提示用于为硬件 JPEG 解码器预分配内存。
- preallocate_width_hintint, optional, default = 0
图像宽度提示。
仅适用于 NVIDIA Ampere GPU 架构中的
mixed
后端类型。该提示用于为硬件 JPEG 解码器预分配内存。
- preservebool, optional, default = False
防止即使操作符的输出未使用,也将其从图中删除。
split_stages : bool, optional, default = False
警告
参数 split_stages 现在已弃用,不建议使用。
use_chunk_allocator : bool, optional, default = False
警告
参数 use_chunk_allocator 现在已弃用,不建议使用。
- use_fast_idctbool, optional, default = False
在基于 libjpeg-turbo 的 CPU 解码器中启用快速 IDCT,当
device
设置为 “cpu” 时,或者当设置为 “mixed” 但特定图像无法由 GPU 实现处理时使用。根据 libjpeg-turbo 文档,解压缩性能最多可提高 14%,而质量几乎没有降低。