nvidia.dali.fn.decoders.image_crop#

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

解码图像并提取由固定窗口尺寸和可变锚点指定的感兴趣区域 (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’

参数:

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

关键字参数:
  • affine (bool, 可选, 默认值 = True) –

    适用于 mixed 后端类型。

    如果设置为 True,则内部线程池中的每个线程将绑定到特定的 CPU 核心。否则,线程可以由操作系统重新分配到任何 CPU 核心。

  • 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_d, crop_hcrop_w)不兼容。

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

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

    crop_w, crop_hcrop_d 必须一起指定。为 crop_w, crop_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)不兼容。

  • device_memory_padding (int, 可选, 默认值 = 16777216) –

    适用于 mixed 后端类型。

    nvJPEG 设备内存分配的填充,以字节为单位。此参数有助于避免在遇到更大的图像时 nvJPEG 中重新分配,并且需要重新分配内部缓冲区以解码图像。

    如果提供大于 0 的值,则操作符会为每个线程预先分配一个请求大小的设备缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。查找理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

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

    适用于 mixed 后端类型。

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

    如果提供大于 0 的值,则操作符会根据提供的提示预先分配必要数量的缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。查找理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • host_memory_padding (int, 可选, 默认值 = 8388608) –

    适用于 mixed 后端类型。

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

    如果提供大于 0 的值,则操作符会为每个线程预先分配两个(由于双缓冲)请求大小的主机固定缓冲区。如果选择正确,则在 pipeline 执行期间不会发生额外的分配。查找理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

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

    适用于 mixed 后端类型。

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

    如果提供大于 0 的值,则操作符会根据提供的提示预先分配必要数量的缓冲区。如果正确选择该值,则在 pipeline 执行期间不会发生额外的分配。查找理想值的一种方法是使用设置为 True 的 memory_stats 参数对数据集进行完整运行,然后复制统计信息中打印的最大分配值。

  • hw_decoder_load (float, 可选, 默认值 = 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, 可选, 默认值 = 1000000) –

    适用于 mixed 后端类型。

    像素总数(height * width)高于此阈值的图像将使用 nvJPEG 混合 Huffman 解码器。像素较少的图像将使用 nvJPEG 主机端 Huffman 解码器。

    注意

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

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

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

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

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

    适用于 mixed 后端类型。

    打印有关 nvJPEG 分配的调试信息。有关最大分配的信息可能有助于确定数据集的 device_memory_paddinghost_memory_padding 的合适值。

    注意

    统计信息是针对整个进程全局的,而不是每个操作符实例,并且包括在构造期间进行的分配(如果填充提示为非零)。

  • output_type (nvidia.dali.types.DALIImageType, 可选, 默认值 = DALIImageType.RGB) –

    输出图像的色彩空间。

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

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

    图像宽度提示。

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

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

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

    图像宽度提示。

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

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

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

  • rounding (str, 可选, 默认值 = ‘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, 可选, 默认值 = False) –

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

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

另请参阅