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-turbo 和 nvJPEG)来减少解码时间和内存使用量。如果给定图像格式不支持 ROI 解码,它将解码整个图像并裁剪选定的 ROI。
解码器的输出采用 HWC 布局。
支持的格式:JPG、BMP、PNG、TIFF、PNM、PPM、PGM、PBM、JPEG 2000、WebP。
注意
JPEG 2000 感兴趣区域 (ROI) 解码在 GPU 上未加速,并且无论选择哪个后端都将使用 CPU 实现。对于 GPU 加速实现,请考虑使用单独的
decoders.image
和crop
运算符。注意
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 或分页锁定主机内存中的运算符输出,以容纳此大小的样本批次。
crop¶ (float 或 list of float 或 TensorList of float, optional) –
裁剪图像的形状,指定为值列表(例如,2D 裁剪为
(crop_H, crop_W)
,体积裁剪为(crop_D, crop_H, crop_W)
)。crop_d¶ (float or TensorList of float, optional, default = 0.0) –
仅适用于体积输入;裁剪窗口深度(以体素为单位)。
crop_w
、crop_h
和crop_d
必须一起指定。为crop_w
、crop_h
和crop_d
提供值与提供固定裁剪窗口尺寸(参数crop
)不兼容。crop_h¶ (float or TensorList of float, optional, default = 0.0) –
裁剪窗口高度(以像素为单位)。
crop_pos_x¶ (float or TensorList of float, 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 or TensorList of float, 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 or TensorList of float, 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 or TensorList of float, optional, default = 0.0) –
裁剪窗口宽度(以像素为单位)。
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_padding
和host_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_x
,crop_pos_y
,crop_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%,而质量几乎没有降低。
另请参阅