如何在语义分割中删除特定标记的像素
How to to drop a specific labeled pixels in semantic segmentation
我是语义分割的新手。我使用 FCN 来训练我的数据集。在数据集中有一些未知的像素 class。我想将这个 class 从我的损失中排除。因此,我根据整个数据集的 class 分布定义了一个权重,并将未知 class 的权重设置为零,如下所示。但是我仍然得到对此 class 的预测。您知道如何正确排除一个特定的 class 吗?
loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits
(logits=logits, labels=tf.squeeze(annotation,
squeeze_dims=[3]),name="entropy"))
weighted_losses = (loss * weights)
train_op = optimizer.minimize(weighted_losses,
var_list=tf.trainable_variables(),
global_step=tf.train.get_global_step())
我不知道pytorch,但是我听说在损失函数中有一些用于此目的的东西"ignore_index",你可以忽略特定的class。如果这是解决我的问题的正确方法,你知道张量流中是否有等效的东西吗?
对于语义分割,您有 2 个 "special" 标签:一个是 "background"(通常为 0),另一个是 "ignore"(通常为 255 或 -1)。
- "Background" 与所有其他语义标签一样,意思是 "I know this pixel does not belong to any of the semantic categories I am working with"。重要的是您的模型在适用时正确输出 "background"。
- "Ignore" 标签不是您的模型可以预测的标签 - 它是 "outside" 它的范围。这个标签只存在于训练标注中,意思是"we were unsure how this pixel should be labeled, so just ignore it".
当目标标签中有 "ignore" 个像素时,您的模型不能(也不应该)输出 "ignore" 个标签。尽管如此,您的模型应该输出 something。这个像素被标记为 "ignore" 这一事实意味着无论你的模型为该像素输出什么,都会被损失函数忽略(假设你告诉损失忽略 "ignore" 像素)。此外,如果您的 test/validation 集有 "ignore" 标签,则意味着无论您的模型为这些像素输出什么,它都会被评分机制简单地忽略,并且不会被计为正确或错误的预测。
总结一下:即使 ground truth 有 "ignore" 个标签,模型也不能也不应该输出 "ignore"。它只是输出它感觉的任何有效标签,这完全没问题。
对于 tensorflow,您可以查看 。
我是语义分割的新手。我使用 FCN 来训练我的数据集。在数据集中有一些未知的像素 class。我想将这个 class 从我的损失中排除。因此,我根据整个数据集的 class 分布定义了一个权重,并将未知 class 的权重设置为零,如下所示。但是我仍然得到对此 class 的预测。您知道如何正确排除一个特定的 class 吗?
loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits
(logits=logits, labels=tf.squeeze(annotation,
squeeze_dims=[3]),name="entropy"))
weighted_losses = (loss * weights)
train_op = optimizer.minimize(weighted_losses,
var_list=tf.trainable_variables(),
global_step=tf.train.get_global_step())
我不知道pytorch,但是我听说在损失函数中有一些用于此目的的东西"ignore_index",你可以忽略特定的class。如果这是解决我的问题的正确方法,你知道张量流中是否有等效的东西吗?
对于语义分割,您有 2 个 "special" 标签:一个是 "background"(通常为 0),另一个是 "ignore"(通常为 255 或 -1)。
- "Background" 与所有其他语义标签一样,意思是 "I know this pixel does not belong to any of the semantic categories I am working with"。重要的是您的模型在适用时正确输出 "background"。
- "Ignore" 标签不是您的模型可以预测的标签 - 它是 "outside" 它的范围。这个标签只存在于训练标注中,意思是"we were unsure how this pixel should be labeled, so just ignore it".
当目标标签中有 "ignore" 个像素时,您的模型不能(也不应该)输出 "ignore" 个标签。尽管如此,您的模型应该输出 something。这个像素被标记为 "ignore" 这一事实意味着无论你的模型为该像素输出什么,都会被损失函数忽略(假设你告诉损失忽略 "ignore" 像素)。此外,如果您的 test/validation 集有 "ignore" 标签,则意味着无论您的模型为这些像素输出什么,它都会被评分机制简单地忽略,并且不会被计为正确或错误的预测。
总结一下:即使 ground truth 有 "ignore" 个标签,模型也不能也不应该输出 "ignore"。它只是输出它感觉的任何有效标签,这完全没问题。
对于 tensorflow,您可以查看