了解 Niftynet 的输入形状 (spatial_window_size)

Understanding input shape (spatial_window_size) for Niftynet

我正在使用 Niftynet 进行医学图像分割。我在这里 https://nbviewer.jupyter.org/gist/fepegar/1fb865494cb44ac043c3189ec415d411.

看到了关于 spatial_window_shape 参数约束的精彩教程

但我想知道如何在可能的形状之间进行选择?他们背后的逻辑是什么? 什么时候选择更大或更小的 spatial_window_shape 尺码?为图像、标签和推理设置此参数有何重要意义? 为什么标签和图像的尺寸不同? 我也对 border 参数如何影响这个选择感兴趣。

spatial window_size 参数定义了您希望在数据增强期间从输入图像中获得的裁剪尺寸。

What is important at setting this parameter for image, for labels, and for inference?

此参数在 [TRAINING][INFERENCE] 部分中应该相同,因为管道使用 spatial_window_size 将补丁聚合到原始分辨率中。选择初始 window 大小取决于 CNN 架构的兼容形状、输入形状的维数(2D 切片 v. Voxels)以及内存限制(太大并且可能不适合您的 GPU 内存) .

When to choose bigger or smaller spatial_window_size shapes?

一般来说,较大的补丁尺寸是更可取的(据观察它们会产生稍微更好的性能),我建议你参考这个 来了解基本原理。但是,这取决于您的特定数据集,因此我建议您尝试不同的补丁大小。

但是,您也可以使用一种称为 Building Up Sizes 的技术(请参阅提示 #9),您可以使用较小的 spatial_window_size 开始训练,然后增加尺寸,并训练相同的模型再次减少过度拟合并提高整体性能。请注意,这仅在您使用完全卷积 CNN 或具有某种形式的空间金字塔池化的 CNN(其中输入图像大小无关紧要)时才有效。

Why are sizes for the label and image different?

这个问题需要更多说明(即配置、原始图像分辨率),但不幸的是,我没有足够的声誉来发表评论。

[INFERENCE] 部分中的 border 参数删除了 [TRAINING] 部分中 volume_padding_size 参数的填充。根据 configuration documention,边框至少应为 floor(N-D)/2,其中 N 表示原始 voxel/slice 大小的元素之一,而 D 表示原始元素之一输出网络的元素 voxel/slice 大小(spatial_window_size)。对于 2D window 大小(即 96 X 96 X 1),border 可以是 (96,96,0),其中最后一个元素必须是 0。因此,边框参数依赖于 window 大小并且不影响我们如何选择它。相反,我们根据我们希望网络在中心像素上关注外部像素的程度来选择边界参数。