我是语义分割的新手。我使用FCN训练我的数据集。在数据集中,有一些未知类的像素。我想从损失中排除此类。因此,我根据整个数据集的类分布定义了一个权重,并将未知类的权重设置为零,如下所示。但是我仍然对这堂课有所预测。您是否知道如何正确排除一个特定的班级?
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”,您可以忽略特定的类。如果这是解决我的问题的正确方法,那么您是否知道张量流中是否存在等效的东西?
答案 0 :(得分:1)
对于语义分割,您有2个“特殊”标签:一个是“背景”(通常为0),另一个是“忽略”(通常为255或-1)。
当目标标签中有“忽略”像素时,您的模型无法(也不应该)输出“忽略”标签。但是,您的模型应该输出 something 。该像素被标记为“忽略”的事实意味着损失函数将忽略模型为该像素输出的任何结果(假设您告诉损失忽略“忽略”像素)。此外,如果您的测试/验证集带有“忽略”标签,则意味着您的模型为这些像素输出的任何内容都将被评分机制忽略,而不会被视为正确或错误的预测。
总结:即使地面真相具有“忽略”标签,模型也不能也不应该输出“忽略”。它只是输出任何感觉上有效的标签,而且完全可以。
对于张量流,您可以检出this thread。