我正在使用 Niftynet 进行医学图像分割。我在这里看到了一个关于 spatial_window_shape 参数约束的很棒的教程 https://nbviewer.jupyter.org/gist/fepegar/1fb865494cb44ac043c3189ec415d411 .
但我想知道如何在可能的形状之间进行选择?他们背后的逻辑是什么? 何时选择更大或更小的 spatial_window_shape 尺寸?为图像、标签和推理设置此参数有何重要意义? 为什么标签和图像的尺寸不同? 我也对边框参数如何影响此选择感兴趣。
最佳答案
spatial window_size
参数定义您希望在数据增强期间从输入图像中获得的裁剪尺寸。
What is important at setting this parameter for image, for labels, and for inference?
此参数在 [TRAINING]
中应相同, 和 [INFERENCE]
部分,因为管道使用 spatial_window_size
将补丁聚合到原始分辨率中。选择初始窗口大小取决于 CNN 架构的兼容形状、输入形状的维数(2D 切片与体素)以及内存限制(太大并且可能不适合您的 GPU 内存)。
When to choose bigger or smaller spatial_window_size shapes?
一般来说,较大的补丁尺寸是更可取的(他们被观察到产生稍微更好的性能),我建议你引用这个 answer为理由。但是,这取决于您的特定数据集,因此我建议您尝试不同的补丁大小。
但是,您也可以使用一种称为 Building Up Sizes 的技术(引用技巧 #9),您可以使用较小的 spatial_window_size
开始训练,然后增加尺寸,再次训练相同的模型以减少过度拟合并提高整体性能。请注意,这仅在您使用完全卷积 CNN 或具有某种形式的空间金字塔池化的 CNN(其中输入图像大小无关紧要)时才有效。
Why are sizes for the label and image different?
这个问题需要更多的说明(即配置、原始图像分辨率),但不幸的是,我没有足够的声誉来发表评论。
border
[INFERENCE]
中的参数部分从 volume_padding_size
中删除填充[TRAINING]
中的参数部分。根据 configuration documention , 边框至少应为 floor(N-D)/2
, 其中N
表示原始体素/切片大小的元素之一,D
表示输出网络体素/切片大小的元素之一(spatial_window_size
)。对于 2D 窗口大小(即 96 X 96 X 1),border
可能是 (96,96,0),其中最后一个元素必须是 0。 因此,border 参数取决于窗口大小,不会影响我们如何选择它。相反,我们根据我们希望网络在中心像素上关注外部像素的程度来选择边界参数。
关于image-segmentation - 了解 Niftynet 的输入形状 (spatial_window_size),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52074042/