推理方法#
推理器 (Inferers)#
- class monai.inferers.Inferer[source]#
模型推理的基类。继承此类以支持推理过程中的操作,例如滑动窗口方法。
示例代码
device = torch.device("cuda:0") transform = Compose([ToTensor(), LoadImage(image_only=True)]) data = transform(img_path).to(device) model = UNet(...).to(device) inferer = SlidingWindowInferer(...) model.eval() with torch.no_grad(): pred = inferer(inputs=data, network=model) ...
PatchInferer#
- class monai.inferers.PatchInferer(splitter=None, merger_cls=<class 'monai.inferers.merger.AvgMerger'>, batch_size=1, preprocessing=None, postprocessing=None, output_keys=None, match_spatial_shape=True, buffer_size=0, **merger_kwargs)[source]#
基于 Splitter 和 Merger 对图像块而不是整个图像进行推理。这会将输入图像分割成图像块,然后合并结果图像块。
- 参数:
splitter – 用于将输入分割成图像块的 Splitter 对象。默认为 None。如果未提供或为 None,则认为输入已经被分割成图像块。在这种情况下,无法推断输出 merged_shape 和可选的 cropped_shape,应明确提供。
merger_cls – 一个 Merger 子类,可实例化用于合并图像块输出。它也可以是一个与继承自 Merger 类的类名匹配的字符串。默认为 AvgMerger。
batch_size – 图像块的批次大小。如果输入张量已经分批 [BxCxWxH],这会为图像块上的推理添加额外的批处理 [(Bp*B)xCxWpxHp]。默认为 1。
preprocessing – 一个可调用对象,用于在将图像块馈送到网络之前处理它们。默认为 None。
postprocessing – 一个可调用对象,用于处理网络的输出。默认为 None。
output_keys – 如果网络输出是一个字典,这定义了用于合并的输出字典的键。默认为 None,此时使用所有键。
match_spatial_shape – 是否裁剪输出以匹配输入形状。默认为 True。
buffer_size – 在单独线程中用于批次采样而在缓冲区中保存的图像块数量。默认为 0。
merger_kwargs – 传递给 merger_cls 用于实例化的参数。merged_shape 会根据输入形状和输出图像块形状自动计算,除非在此处传递。
- __call__(inputs, network, *args, **kwargs)[source]#
- 参数:
inputs – 用于推理的输入数据,一个 torch.Tensor,代表一个图像或一批图像。然而,如果数据已经被分割,可以通过提供元组列表 (patch, location) 或具有 PatchKeys.LOCATION 元数据的 MetaTensor 来馈送。在这两种情况下,不应提供 splitter。
network – 执行推理的目标模型。支持可调用对象,例如
lambda x: my_torch_model(x, additional_config)
args – 可选参数,将传递给
network
。kwargs – 可选关键字参数,将传递给
network
。
SimpleInferer#
- class monai.inferers.SimpleInferer[source]#
SimpleInferer 是直接运行模型 forward() 的普通推理方法。使用示例可在
monai.inferers.Inferer
基类中找到。
SlidingWindowInferer#
- class monai.inferers.SlidingWindowInferer(roi_size, sw_batch_size=1, overlap=0.25, mode=constant, sigma_scale=0.125, padding_mode=constant, cval=0.0, sw_device=None, device=None, progress=False, cache_roi_weight_map=False, cpu_thresh=None, buffer_steps=None, buffer_dim=-1, with_coord=False)[source]#
模型推理的滑动窗口方法,每次 model.forward() 包含 sw_batch_size 个窗口。使用示例可在
monai.inferers.Inferer
基类中找到。- 参数:
roi_size – 执行 SlidingWindow 评估的窗口大小。如果包含非正数分量,将使用相应的 inputs 大小。如果 roi_size 的分量是非正数,则转换将使用 img 大小的相应分量。例如,如果 img 的第二个空间维度大小为 64,roi_size=(32, -1) 将适应为 (32, 64)。
sw_batch_size – 运行窗口切片的批次大小。
overlap – 每个空间维度上的扫描之间的重叠量,默认为
0.25
。mode –
{
"constant"
,"gaussian"
} 如何混合重叠窗口的输出。默认为"constant"
。"constant
”:对所有预测给予相同的权重。"gaussian
”:对窗口边缘的预测给予较小的权重。
sigma_scale – 当 mode 为
"gaussian"
时,高斯窗口的标准差系数。默认值:0.125。实际窗口 sigma 为sigma_scale
*dim_size
。当 sigma_scale 是浮点数序列时,这些值表示相应空间维度上的 sigma_scale。padding_mode – {
"constant"
,"reflect"
,"replicate"
,"circular"
} 当roi_size
大于 inputs 时的填充模式。默认为"constant"
。另请参见:https://pytorch.ac.cn/docs/stable/generated/torch.nn.functional.pad.htmlcval – ‘constant’ 填充模式的填充值。默认值:0
sw_device – 窗口数据所在的设备。默认情况下,使用 inputs 的设备(以及相应的内存)。通常 sw_device 应与定义 predictor 的设备保持一致。
device – 拼接输出预测的设备。默认情况下,使用 inputs 的设备(以及相应的内存)。例如,如果设置为 device=torch.device(‘cpu’),GPU 内存消耗会减少,并且与 inputs 和 roi_size 无关。输出位于 device 上。
progress – 是否打印 tqdm 进度条。
cache_roi_weight_map – 是否预先计算 ROI 权重图。
cpu_thresh – 提供时,当输入图像体积大于此阈值(以像素/体素为单位)时,动态切换到在 CPU 上拼接(以节省 GPU 内存)。否则使用
"device"
。因此,输出可能最终位于 CPU 或 GPU 上。buffer_steps – 沿着
buffer_dim
的滑动窗口迭代次数,这些迭代结果会在sw_device
上缓冲,然后写入device
。(通常,sw_device
是cuda
,device
是cpu
。)默认值为 None,不进行缓冲。对于 buffer dim,当空间大小可被 buffer_steps*roi_size 整除时(即缓冲区之间没有重叠),为了提高效率,可能会自动启用 non_blocking copy。buffer_dim – 创建缓冲区的空间维度。0 表示第一个空间维度。默认为 -1,最后一个空间维度。
with_coord – 是否将窗口坐标传递给
network
。默认为 False。如果为 True,network
的第二个输入参数应接受窗口坐标。
注意
sw_batch_size
表示每次网络推理迭代的最大窗口数,而不是输入的批次大小。
SlidingWindowInfererAdapt#
- class monai.inferers.SlidingWindowInfererAdapt(roi_size, sw_batch_size=1, overlap=0.25, mode=constant, sigma_scale=0.125, padding_mode=constant, cval=0.0, sw_device=None, device=None, progress=False, cache_roi_weight_map=False, cpu_thresh=None, buffer_steps=None, buffer_dim=-1, with_coord=False)[source]#
SlidingWindowInfererAdapt 扩展了 SlidingWindowInferer,以便在 GPU 上发生 OOM 时自动切换到缓冲,然后切换到 CPU 拼接。它还会记录此类大图像的大小,以便在遇到类似大小的下一个大图像时自动尝试 CPU 拼接。如果提供了拼接 ‘device’ 输入参数,将不尝试自动适配,请保持默认选项 device = None 以实现自适应行为。注意:如果 GPU 内存不足,输出可能位于 CPU 上(即使输入位于 GPU 上)。
SaliencyInferer#
- class monai.inferers.SaliencyInferer(cam_name, target_layers, class_idx=None, *args, **kwargs)[source]#
SaliencyInferer 是使用激活图进行的推理。
- 参数:
cam_name – 预期的 CAM 方法名称,应为:“CAM”、“GradCAM” 或 “GradCAMpp”。
target_layers – 用于生成特征图的模型层名称。
class_idx – 要可视化的类别索引。如果为 None,则默认为 argmax(logits)。
args – 传递给 cam 的 __init__ 的其他可选参数。
kwargs – 传递给 cam 的 __init__ 的其他可选关键字参数。
SliceInferer#
- class monai.inferers.SliceInferer(spatial_dim=0, *args, **kwargs)[source]#
SliceInferer 扩展了 SlidingWindowInferer,以便在提供 3D 体积时提供逐切片(2D)推理。典型的用例可以是 2D 模型(如 2D 分割 UNet)对来自 3D 体积的切片进行操作,并且输出是聚合了 2D 切片的 3D 体积。示例
# sliding over the `spatial_dim` inferer = SliceInferer(roi_size=(64, 256), sw_batch_size=1, spatial_dim=1) output = inferer(input_volume, net)
- 参数:
spatial_dim (
int
) – 在 3D 体积上运行逐切片推理的空间维度。例如,0
可以沿着轴向切片滑动,1
沿着冠状切片滑动,2
沿着矢状切片滑动。args (
Any
) – 传递给基类 SlidingWindowInferer 的 __init__ 的其他可选参数。kwargs (
Any
) – 传递给基类 SlidingWindowInferer 的 __init__ 的其他可选关键字参数。
注意
在 SliceInferer 中,当提供 3D 体积时,
roi_size
预期是一个 2D 元组。这允许使用选定的spatial_dim
沿着 3D 体积的切片进行滑动。
DiffusionInferer#
- class monai.inferers.DiffusionInferer(scheduler)[source]#
DiffusionInferer 接受一个训练好的扩散模型和一个调度器,可用于执行训练迭代的信号前向传递,并从模型中采样。
- 参数:
scheduler (
Scheduler
) – 扩散调度器。
- __call__(inputs, diffusion_model, noise, timesteps, condition=None, mode='crossattn', seg=None)[source]#
实现监督训练迭代的前向传递。
- 参数:
inputs – 添加噪声的输入图像。
diffusion_model – 扩散模型。
noise – 随机噪声,与输入形状相同。
timesteps – 随机时间步。
condition – 网络输入的条件。
mode – 网络的条件模式。
seg – 如果模型是 SPADEDiffusionModelUnet 的实例,则必须提供分割。
forward (在)
- get_likelihood(inputs, diffusion_model, scheduler=None, save_intermediates=False, conditioning=None, mode='crossattn', original_input_range=(0, 255), scaled_input_range=(0, 1), verbose=True, seg=None)#
计算输入的对数似然。
- 参数:
inputs – 输入图像,NxCxHxW[xD]
diffusion_model – 计算似然的模型
scheduler – 扩散调度器。如果未提供,将使用类属性调度器。
save_intermediates – 保存中间空间 KL 图
conditioning – 网络输入的条件。
mode – 网络的条件模式。
original_input_range – 在应用任何缩放之前输入数据的 [min,max] 强度范围。
scaled_input_range – 缩放后输入数据的 [min,max] 强度范围。
verbose – 如果为 True,打印采样过程的进度条。
seg – 如果扩散模型是 SPADEDiffusionModel 的实例,则必须提供分割。
- sample(input_noise, diffusion_model, scheduler=None, save_intermediates=False, intermediate_steps=100, conditioning=None, mode='crossattn', verbose=True, seg=None)#
- 参数:
input_noise – 随机噪声,与所需采样形状相同。
diffusion_model – 用于采样的模型。
scheduler – 扩散调度器。如果未提供,将使用类属性调度器。
save_intermediates – 是否返回采样链中的中间结果。
intermediate_steps – 如果 save_intermediates 为 True,则每 n 步保存一次。
conditioning – 网络输入的条件。
mode – 网络的条件模式。
verbose – 如果为 True,打印采样过程的进度条。
seg – 如果扩散模型是 SPADEDiffusionModel 的实例,则必须提供分割。
LatentDiffusionInferer#
- class monai.inferers.LatentDiffusionInferer(scheduler, scale_factor=1.0, ldm_latent_shape=None, autoencoder_latent_shape=None)[source]#
LatentDiffusionInferer 接受一个阶段 1 模型 (VQVAE 或 AutoencoderKL)、一个扩散模型和一个调度器,可用于执行训练迭代的信号前向传递,并从模型中采样。
- 参数:
scheduler – 与 unet 结合使用的调度器,用于对编码后的图像潜空间表示去噪。
scale_factor – 在由第二阶段处理之前,用于乘以潜空间表示值的大小因子。
ldm_latent_shape – 期望的空间潜空间形状。如果在自编码器模型的潜空间形状上存在差异,则使用此参数。
autoencoder_latent_shape – autoencoder_latent_shape:自编码器空间潜空间形状。如果在自编码器的潜空间形状和 DM 形状之间存在差异,则使用此参数。
- __call__(inputs, autoencoder_model, diffusion_model, noise, timesteps, condition=None, mode='crossattn', seg=None)[source]#
实现监督训练迭代的前向传递。
- 参数:
inputs – 输入图像,将从中提取潜空间表示并添加噪声。
autoencoder_model – 第一阶段模型。
diffusion_model – 扩散模型。
noise – 随机噪声,形状与潜空间表示相同。
timesteps – 随机时间步。
condition – 网络输入的条件。
mode – 网络的条件模式。
seg – 如果扩散模型是 SPADEDiffusionModel 的实例,则必须提供分割。
- get_likelihood(inputs, autoencoder_model, diffusion_model, scheduler=None, save_intermediates=False, conditioning=None, mode='crossattn', original_input_range=(0, 255), scaled_input_range=(0, 1), verbose=True, resample_latent_likelihoods=False, resample_interpolation_mode='nearest', seg=None)#
计算输入潜空间表示的对数似然。
- 参数:
inputs – 输入图像,NxCxHxW[xD]
autoencoder_model – 第一阶段模型。
diffusion_model – 计算似然的模型
scheduler – 扩散调度器。如果未提供,将使用类属性调度器。
save_intermediates – 保存中间空间 KL 图
conditioning – 网络输入的条件。
mode – 网络的条件模式。
original_input_range – 在应用任何缩放之前输入数据的 [min,max] 强度范围。
scaled_input_range – 缩放后输入数据的 [min,max] 强度范围。
verbose – 如果为 True,打印采样过程的进度条。
resample_latent_likelihoods – 如果为 True,则将中间似然图重采样到与输入图像相同的空间维度。
resample_interpolation_mode – 如果使用 resample_latent_likelihoods,选择插值模式 'nearest'、'bilinear' 或 'trilinear'。
seg – 如果扩散模型是 SPADEDiffusionModel 的实例,或 autoencoder_model 是 SPADEAutoencoderKL 的实例,则必须提供分割。
- sample(input_noise, autoencoder_model, diffusion_model, scheduler=None, save_intermediates=False, intermediate_steps=100, conditioning=None, mode='crossattn', verbose=True, seg=None)#
- 参数:
input_noise – 随机噪声,与所需潜空间表示形状相同。
autoencoder_model – 第一阶段模型。
diffusion_model – 用于采样的模型。
scheduler – 扩散调度器。如果未提供,将使用类属性调度器。
save_intermediates – 是否返回采样链中的中间结果。
intermediate_steps – 如果 save_intermediates 为 True,则每 n 步保存一次。
conditioning – 网络输入的条件。
mode – 网络的条件模式。
verbose – 如果为 True,打印采样过程的进度条。
seg – 如果扩散模型是 SPADEDiffusionModel 的实例,或 autoencoder_model 是 SPADEAutoencoderKL 的实例,则必须提供分割。
ControlNetDiffusionInferer#
- class monai.inferers.ControlNetDiffusionInferer(scheduler)[source]#
ControlNetDiffusionInferer 接受一个训练好的扩散模型和一个调度器,可用于执行训练迭代的信号前向传递,并从模型中采样,支持基于 ControlNet 的条件控制。
- 参数:
scheduler (
Scheduler
) – 扩散调度器。
- __call__(inputs, diffusion_model, controlnet, noise, timesteps, cn_cond, condition=None, mode='crossattn', seg=None)[source]#
实现监督训练迭代的前向传递。
- 参数:
inputs – 添加噪声的输入图像。
diffusion_model – 扩散模型。
controlnet – ControlNet 子网络。
noise – 随机噪声,与输入形状相同。
timesteps – 随机时间步。
cn_cond – ControlNet 的条件图像。
condition – 网络输入的条件。
mode – 网络的条件模式。
seg – 如果模型是 SPADEDiffusionModelUnet 的实例,则必须提供分割。
forward (在)
- get_likelihood(inputs, diffusion_model, controlnet, cn_cond, scheduler=None, save_intermediates=False, conditioning=None, mode='crossattn', original_input_range=(0, 255), scaled_input_range=(0, 1), verbose=True, seg=None)#
计算输入的对数似然。
- 参数:
inputs – 输入图像,NxCxHxW[xD]
diffusion_model – 计算似然的模型
controlnet – ControlNet 子网络。
cn_cond – ControlNet 的条件图像。
scheduler – 扩散调度器。如果未提供,将使用类属性调度器。
save_intermediates – 保存中间空间 KL 图
conditioning – 网络输入的条件。
mode – 网络的条件模式。
original_input_range – 在应用任何缩放之前输入数据的 [min,max] 强度范围。
scaled_input_range – 缩放后输入数据的 [min,max] 强度范围。
verbose – 如果为 True,打印采样过程的进度条。
seg – 如果扩散模型是 SPADEDiffusionModel 的实例,则必须提供分割。
- sample(input_noise, diffusion_model, controlnet, cn_cond, scheduler=None, save_intermediates=False, intermediate_steps=100, conditioning=None, mode='crossattn', verbose=True, seg=None)#
- 参数:
input_noise – 随机噪声,与所需采样形状相同。
diffusion_model – 用于采样的模型。
controlnet – ControlNet 子网络。
cn_cond – ControlNet 的条件图像。
scheduler – 扩散调度器。如果未提供,将使用类属性调度器。
save_intermediates – 是否返回采样链中的中间结果。
intermediate_steps – 如果 save_intermediates 为 True,则每 n 步保存一次。
conditioning – 网络输入的条件。
mode – 网络的条件模式。
verbose – 如果为 True,打印采样过程的进度条。
seg – 如果扩散模型是 SPADEDiffusionModel 的实例,则必须提供分割。
ControlNetLatentDiffusionInferer#
- class monai.inferers.ControlNetLatentDiffusionInferer(scheduler, scale_factor=1.0, ldm_latent_shape=None, autoencoder_latent_shape=None)[source]#
ControlNetLatentDiffusionInferer 接受一个阶段 1 模型 (VQVAE 或 AutoencoderKL)、一个扩散模型、一个 ControlNet 和一个调度器,可用于执行训练迭代的信号前向传递,并从模型中采样。
- 参数:
scheduler – 与 unet 结合使用的调度器,用于对编码后的图像潜空间表示去噪。
scale_factor – 在由第二阶段处理之前,用于乘以潜空间表示值的大小因子。
ldm_latent_shape – 期望的空间潜空间形状。如果在自编码器模型的潜空间形状上存在差异,则使用此参数。
autoencoder_latent_shape – autoencoder_latent_shape:自编码器空间潜空间形状。如果在自编码器的潜空间形状和 DM 形状之间存在差异,则使用此参数。
- __call__(inputs, autoencoder_model, diffusion_model, controlnet, noise, timesteps, cn_cond, condition=None, mode='crossattn', seg=None)[source]#
实现监督训练迭代的前向传递。
- 参数:
inputs – 输入图像,将从中提取潜空间表示并添加噪声。
autoencoder_model – 第一阶段模型。
diffusion_model – 扩散模型。
controlnet – ControlNet 模型实例。
noise – 随机噪声,形状与潜空间表示相同。
timesteps – 随机时间步。
cn_cond – ControlNet 网络的条件张量。
condition – 网络输入的条件。
mode – 网络的条件模式。
seg – 如果扩散模型是 SPADEDiffusionModel 的实例,则必须提供分割。
- get_likelihood(inputs, autoencoder_model, diffusion_model, controlnet, cn_cond, scheduler=None, save_intermediates=False, conditioning=None, mode='crossattn', original_input_range=(0, 255), scaled_input_range=(0, 1), verbose=True, resample_latent_likelihoods=False, resample_interpolation_mode='nearest', seg=None)#
计算输入潜空间表示的对数似然。
- 参数:
inputs – 输入图像,NxCxHxW[xD]
autoencoder_model – 第一阶段模型。
diffusion_model – 计算似然的模型
controlnet – ControlNet 模型实例。
cn_cond – ControlNet 网络的条件张量。
scheduler – 扩散调度器。如果未提供,将使用类属性调度器。
save_intermediates – 保存中间空间 KL 图
conditioning – 网络输入的条件。
mode – 网络的条件模式。
original_input_range – 在应用任何缩放之前输入数据的 [min,max] 强度范围。
scaled_input_range – 缩放后输入数据的 [min,max] 强度范围。
verbose – 如果为 True,打印采样过程的进度条。
resample_latent_likelihoods – 如果为 True,则将中间似然图重采样到与输入图像相同的空间维度。
resample_interpolation_mode – 如果使用 resample_latent_likelihoods,选择插值模式 'nearest'、'bilinear' 或 'trilinear'。
seg – 如果扩散模型是 SPADEDiffusionModel 的实例,或 autoencoder_model 是 SPADEAutoencoderKL 的实例,则必须提供分割。
- sample(input_noise, autoencoder_model, diffusion_model, controlnet, cn_cond, scheduler=None, save_intermediates=False, intermediate_steps=100, conditioning=None, mode='crossattn', verbose=True, seg=None)#
- 参数:
input_noise – 随机噪声,与所需潜空间表示形状相同。
autoencoder_model – 第一阶段模型。
diffusion_model – 用于采样的模型。
controlnet – ControlNet 模型实例。
cn_cond – ControlNet 网络的条件张量。
scheduler – 扩散调度器。如果未提供,将使用类属性调度器。
save_intermediates – 是否返回采样链中的中间结果。
intermediate_steps – 如果 save_intermediates 为 True,则每 n 步保存一次。
conditioning – 网络输入的条件。
mode – 网络的条件模式。
verbose – 如果为 True,打印采样过程的进度条。
seg – 如果扩散模型是 SPADEDiffusionModel 的实例,或 autoencoder_model 是 SPADEAutoencoderKL 的实例,则必须提供分割。
切分器 (Splitters)#
- class monai.inferers.Splitter(patch_size, device=None)[source]#
用于将输入分割成可迭代的图像块和位置元组的基类。继承此类以支持 PatchInference 的操作,例如 SlidingPatchSplitter。
- 参数:
patch_size – 要生成的图像块的大小。
device – 生成图像块的设备。
- abstract __call__(inputs)[source]#
将输入图像(或一批图像)分割成图像块,并返回 (patch, location) 对。其中 location 是图像块左上角 [前] 角的坐标。
- 参数:
inputs (
Any
) – 具有 BCHW[D] 形状的张量,代表一批图像;或者文件名(字符串)或图像文件名的列表。- 抛出:
NotImplementedError – 当子类未覆盖此方法时。
- 返回类型:
Iterable
[tuple
[Tensor
,Sequence
[int
]]]
SlidingWindowSplitter#
- class monai.inferers.SlidingWindowSplitter(patch_size, overlap=0.0, offset=0, filter_fn=None, pad_mode='constant', pad_value=0, device=None)[source]#
使用滑动窗口策略和可能的重叠将输入分割成图像块。它还允许偏移起始位置和过滤图像块。
- 参数:
patch_size – 要生成的图像块的大小。
offset – 相对于原始输入图像块的偏移量。默认为 0。
overlap – 每个维度上图像块之间的重叠量。它可以是范围 [0.0, 1.0) 内的浮点数,表示相对于图像块大小的重叠,或者它可以是非负整数,表示重叠的像素数。默认为 0.0。
filter_fn – 用于过滤图像块的可调用对象。它应恰好接受两个参数(patch, location),并为保留的图像块返回 True。默认为不进行过滤。
pad_mode – 定义 torch.nn.functional.pad 模式的字符串。可接受的值为 “constant”、“reflect”、“replicate”、“circular” 或 None。默认为 “constant”。如果为 None,将不应用填充,因此会丢弃超出图像边界的图像块(当偏移量为负或图像不可被 patch_size 整除时)。
pad_value – 用于 “constant” 填充的值。默认为 0。
device – 生成图像块的设备。默认为输入的设备。
注意
- 当为 patch_size、offset 或 overlap 提供标量值时,
它会被广播到所有空间维度。
- __call__(inputs)[source]#
将输入张量分割成图像块,并返回图像块和位置。
- 参数:
inputs (
Any
) – 具有 BCHW[D] 维度的 torch.Tensor,表示一个图像或一批图像- 生成:
tuple[torch.Tensor, Sequence[int]] – 生成图像块和位置的元组
- 返回类型:
Iterable
[tuple
[Tensor
,Sequence
[int
]]]
WSISlidingWindowSplitter#
- class monai.inferers.WSISlidingWindowSplitter(patch_size, overlap=0.0, offset=0, filter_fn=None, pad_mode='constant', device=None, reader='OpenSlide', **reader_kwargs)[source]#
使用滑动窗口策略和可能的重叠将整个玻片图像输入分割成块。这从文件中提取块,而无需将整个玻片加载到内存中。它还允许偏移起始位置和过滤块。
- 参数:
patch_size – 要生成的图像块的大小。
offset – 相对于原始输入图像块的偏移量。默认为 0。
overlap – 每个维度上图像块之间的重叠量。它可以是范围 [0.0, 1.0) 内的浮点数,表示相对于图像块大小的重叠,或者它可以是非负整数,表示重叠的像素数。默认为 0.0。
filter_fn – 用于过滤图像块的可调用对象。它应恰好接受两个参数(patch, location),并为保留的图像块返回 True。默认为不进行过滤。
pad_mode – 定义填充模式。可以是“constant”或 None。默认为“constant”。填充仅支持“OpenSlide”或“cuCIM”后端,填充值为 256。
device – 生成图像块的设备。默认为输入的设备。
reader –
用于加载整个玻片成像的模块。如果 reader 是
字符串,它定义了 monai.data.WSIReader 的后端。默认为“OpenSlide”。
类(继承自 BaseWSIReader),它被初始化并设置为 wsi_reader。
继承自 BaseWSIReader 的类的实例,它被设置为 wsi_reader。
为了获得最佳性能,请使用“cuCIM”或“OpenSlide”后端。
reader_kwargs – 传递给 WSIReader 或提供的整个玻片读取器类的参数。例如,level=2, dtype=torch.float32 等。请注意,如果未提供 level,则假定 level=0。
注意
当为 patch_size、offset 或 overlap 提供标量值时,它将被广播到所有空间维度。
合并器#
- class monai.inferers.Merger(merged_shape, cropped_shape=None, device=None)[source]#
一个用于合并块的基础类。扩展此类以支持 PatchInference 的操作。具体类中必须实现两个方法
aggregate:在相应位置聚合值
finalize:执行任何最终处理并返回合并后的输出
- 参数:
merged_shape – 合并块所需的张量形状。
cropped_shape – 最终合并输出张量的形状。如果未提供,将与 merged_shape 相同。
device – Merger 张量应驻留的设备。
AvgMerger#
- class monai.inferers.AvgMerger(merged_shape, cropped_shape=None, value_dtype=torch.float32, count_dtype=torch.uint8, device='cpu')[source]#
通过对重叠区域取平均值来合并块
- 参数:
merged_shape – 合并块所需的张量形状。
cropped_shape – 最终合并输出张量的形状。如果未提供,将与 merged_shape 相同。
device – 用于聚合器张量和最终结果的设备。
value_dtype – 值聚合张量和最终结果的数据类型。
count_dtype – 样本计数张量的数据类型。
- aggregate(values, location)[source]#
聚合值进行合并。
- 参数:
values (
Tensor
) – BCHW[D] 形状的张量,表示推理输出的值。location (
Sequence
[int
]) – 提供块在原始图像中左上角位置的元组/列表。
- 抛出:
NotImplementedError – 当子类未覆盖此方法时。
- 返回类型:
None
ZarrAvgMerger#
- class monai.inferers.ZarrAvgMerger(merged_shape, cropped_shape=None, dtype='float32', value_dtype='float32', count_dtype='uint8', store='merged.zarr', value_store=None, count_store=None, compressor='default', value_compressor=None, count_compressor=None, chunks=True, thread_locking=True)[source]#
通过对重叠区域取平均值来合并块,并将结果存储在 zarr 数组中。
Zarr 是一种用于存储分块、压缩的 N 维数组的格式。Zarr 数据可以存储在任何可以表示为键值存储的存储系统中,如 POSIX 文件系统、云对象存储、zip 文件以及关系型和文档数据库。更多详情请参见 https://zarr.readthedocs.io/en/stable/。它对于存储过大而无法完全放入内存的 N 维数组特别有用。此类的一个特定用例是合并从整个玻片图像(WSI)中提取的块,其中合并结果不适合内存,需要存储在文件系统上。
- 参数:
merged_shape – 合并块所需的张量形状。
cropped_shape – 最终合并输出张量的形状。如果未提供,将与 merged_shape 相同。
dtype – 最终合并结果的数据类型。默认为 float32。
value_dtype – 值聚合张量和最终结果的数据类型。默认为 float32。
count_dtype – 样本计数张量的数据类型。默认为 uint8。
store – 用于保存最终结果的 zarr 存储。默认为“merged.zarr”。
value_store – 用于保存值聚合张量的 zarr 存储。默认为临时存储。
count_store – 用于保存样本计数张量的 zarr 存储。默认为临时存储。
compressor – 最终合并 zarr 数组的压缩器。默认为“default”。
value_compressor – 值聚合 zarr 数组的压缩器。默认为 None。
count_compressor – 样本计数 zarr 数组的压缩器。默认为 None。
chunks – 定义块形状的整数或整数元组,或布尔值。默认为 True。如果为 True,块形状将根据 shape 和 dtype 推断。如果为 False,它将被设置为 shape,即整个数组的单个块。如果为整数,每个维度的块大小将由 chunks 的值确定。
- aggregate(values, location)[source]#
聚合值进行合并。
- 参数:
values (
Tensor
) – BCHW[D] 形状的张量,表示推理输出的值。location (
Sequence
[int
]) – 提供块在原始图像中左上角位置的元组/列表。
- 返回类型:
None
滑动窗口推理函数#
- monai.inferers.sliding_window_inference(inputs, roi_size, sw_batch_size, predictor, overlap=0.25, mode=constant, sigma_scale=0.125, padding_mode=constant, cval=0.0, sw_device=None, device=None, progress=False, roi_weight_map=None, process_fn=None, buffer_steps=None, buffer_dim=-1, with_coord=False, *args, **kwargs)[source]#
使用 predictor 对 inputs 进行滑动窗口推理。
predictor 的输出可以是张量、元组或张量字典。元组或字典值中的每个输出相对于输入可以具有不同的分辨率。例如,输入块空间大小为 [128,128,128],输出(由两个块组成的元组)块大小可以是 ([128,64,256], [64,32,128])。在这种情况下,需要仔细选择参数 overlap 和 roi_size,以确保输出 ROI 仍为整数。如果预测器的输入和输出空间大小不相等,我们建议选择参数,使得对于每个空间维度,overlap*roi_size*output_size/input_size 为整数。
当 roi_size 大于输入的空间大小时,输入图像在推理过程中会被填充。为了保持相同的空间大小,输出图像将被裁剪到原始输入大小。
- 参数:
inputs – 要处理的输入图像(假定为 NCHW[D] 格式)
roi_size – 推理的空间窗口大小。当其分量为 None 或非正值时,将使用相应的输入维度。如果 roi_size 的分量为非正值,转换将使用 img 大小的相应分量。例如,如果 img 的第二个空间维度大小为 64,则 roi_size=(32, -1) 将被调整为 (32, 64)。
sw_batch_size – 运行窗口切片的批次大小。
predictor – 给定形状为 NCHW[D] 的输入张量
patch_data
,函数调用predictor(patch_data)
的输出应为张量、元组或带有张量值的字典。元组或字典值中的每个输出应具有相同的批大小,即 NM’H’W’[D’];其中 H’W’[D’] 表示输出块的空间大小,M 是输出通道数,N 是 sw_batch_size,例如,输入形状为 (7, 1, 128,128,128),输出可以是包含两个张量的元组,形状为:((7, 5, 128, 64, 256), (7, 4, 64, 32, 128))。在这种情况下,需要仔细选择参数 overlap 和 roi_size,以确保缩放后的输出 ROI 大小仍为整数。如果 predictor 的输入和输出空间大小不同,我们建议选择参数,使得对于每个维度,overlap*roi_size*zoom_scale
为整数。overlap – 每个空间维度上的扫描之间的重叠量,默认为
0.25
。mode –
{
"constant"
,"gaussian"
} 如何混合重叠窗口的输出。默认为"constant"
。"constant
”:对所有预测给予相同的权重。"gaussian
”:对窗口边缘的预测给予较小的权重。
sigma_scale – 当 mode 为
"gaussian"
时,高斯窗口的标准差系数。默认值:0.125。实际窗口 sigma 为sigma_scale
*dim_size
。当 sigma_scale 是浮点数序列时,这些值表示相应空间维度上的 sigma_scale。padding_mode – {
"constant"
,"reflect"
,"replicate"
,"circular"
} 当roi_size
大于输入时,inputs
的填充模式。默认为"constant"
另请参阅:https://pytorch.ac.cn/docs/stable/generated/torch.nn.functional.pad.htmlcval – ‘constant’ 填充模式的填充值。默认值:0
sw_device – 窗口数据所在的设备。默认情况下,使用 inputs 的设备(以及相应的内存)。通常 sw_device 应与定义 predictor 的设备保持一致。
device – 拼接输出预测的设备。默认情况下,使用 inputs 的设备(以及相应的内存)。例如,如果设置为 device=torch.device(‘cpu’),GPU 内存消耗会减少,并且与 inputs 和 roi_size 无关。输出位于 device 上。
progress – 是否打印 tqdm 进度条。
roi_weight_map – 每个 ROI 的预计算(非负)权重图。如果未给定,并且
mode
不是 constant,则此图将在运行时计算。process_fn – 处理推理输出并调整每个窗口的重要性图
buffer_steps – 沿着
buffer_dim
的滑动窗口迭代次数,这些迭代结果会在sw_device
上缓冲,然后写入device
。(通常,sw_device
是cuda
,device
是cpu
。)默认值为 None,不进行缓冲。对于 buffer dim,当空间大小可被 buffer_steps*roi_size 整除时(即缓冲区之间没有重叠),为了提高效率,可能会自动启用 non_blocking copy。buffer_dim – 创建缓冲区的空间维度。0 表示第一个空间维度。默认为 -1,最后一个空间维度。
with_coord – 是否将窗口坐标传递给
predictor
。默认为 False。如果为 True,predictor
的签名应为predictor(patch_data, patch_coord, ...)
。args – 传递给
predictor
的可选参数。kwargs – 传递给
predictor
的可选关键字参数。
注意
输入必须是通道在前且有批处理维度,支持 N 维滑动窗口。