【问题标题】:NiftyNet label_normalization for segmentation用于分割的 NiftyNet label_normalization
【发布时间】:2018-03-23 18:25:32
【问题描述】:

我正在使用NiftyNet 做一些细分项目。对于Segmentation 部分中的Label_normalization 选项,据我了解,它将标签转换为“0,1,...”,对吗?我可能错了。所以我的问题是:

  1. 这对我的培训过程有何影响?如果我的两个标签是“0,1”或“0,10”有区别吗?

  2. 我看到这个标签归一化层只适用于标签图像,所以我想一旦模型训练好它不会影响我的推理结果。但事实上,无论有没有Label_normazation,我都得到了不同的结果。这是为什么呢?

如果您能帮助我解决这些问题,我将不胜感激!

【问题讨论】:

    标签: label normalization niftynet


    【解决方案1】:

    label_normalisation 层是一种元素转换,专为离散分割图的“基本真实”输入量而设计。它主要用于在训练期间有效地计算分割损失。

    例如,两个可能的用例是 1) 我们可以将 {0,1,2,3,4} 的 5 类分割标签映射到 {0,0,1,1,1},因此很容易创建二进制分割任务; 2) 对于 200 类分割问题,我们可以创建一个稀疏矩阵来表示分割图(在标签归一化之后),而不是使用 HxWxDx200 体素的消耗内存的二进制图。

    但是在第一种情况下,当用于训练的映射函数丢失时,我们无法恢复原始标签空间。目前输出在推理时留在映射空间中。

    【讨论】:

    • 感谢您的回复!但是我的情况有一些问题:我想由于某些数据类型问题,ground truth label 中的假定“1”被 NiftyNet 读取为 0.01。生成的histogram.txt 类似于labelfrom 0.01 labelto 1。那么使用label_normalisation 与不使用两类分割问题会有所不同吗?根据你上面的解释,我猜应该是一样的,但是为什么我的结果不一样呢?
    • 感谢您的反馈!首先,如果它在卷中是“1”但加载为“0.01”,那是一个错误。如果您在此处提供有关复制问题的更多详细信息 (github.com/NifTK/NiftyNet/issues),我们将对此进行调查。不同的结果是指不同的训练损失吗?当标签在集合 {0, 0.01} 与 {0, 1} 中时,损失应该是不同的,即有/没有 label_normalisation。
    • 我猜这个错误不在 NiftyNet 中,而是在我的数据管理中,即当我手动为标签设置“1”而没有更改 nifti 文件中的其他标志时。不同之处在于,如果我不进行标签归一化,训练损失不会下降(dice = ~0.5),但如果我这样做,它会下降得很好。
    • 我认为这是合理的,因为分割损失默认使用softmax函数,该函数将强制网络输出在[0, 1]范围内,最终输出总和为1。所以如果分割目标是 {0,0.01},则损失可能不会正确减少。
    • 感谢您的澄清。这对我来说很有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2020-01-22
    • 2020-12-17
    • 1970-01-01
    • 2021-08-17
    • 2016-05-06
    • 2022-08-04
    相关资源
    最近更新 更多