TensorFlow:如何处理图像分割中的空白标记数据?

时间:2017-09-07 13:42:53

标签: python tensorflow neural-network deep-learning image-segmentation

我想知道如何使用TensorFlow处理图像分割中未标记的图像部分。例如,我的输入是高度*宽度*通道的图像。标签尺寸高度*宽度太大,每个像素都有一个标签。

图像的某些部分有注释,其他部分则没有。我希望这些部分对梯度计算没有任何影响。此外,我对网络预测这个“空白”标签不感兴趣。

是否有标签或功能?目前我正在使用tf.nn.sparse_softmax_cross_entropy_with_logits

2 个答案:

答案 0 :(得分:11)

我不熟悉TF。但是,您是否考虑过使用损失的weights参数? 查看tf.loses.sparse_softmax_cross_entropy,它有一个参数weights

  

weights :损失的系数。这必须是标量或与标签相同的等级

你可以设置weight" void"像素为零,从而使损失忽略它们。

您也可以从tf.nn.sparse_softmax_cross_entropy_with_logits中删除缩小,然后使用tf.losses.compute_weighted_loss执行加权。

答案 1 :(得分:2)

如果我理解正确,每个图像的一部分都带有标签无效,而您根本不感兴趣。由于没有一种简单的方法可以获得这个无效点背后的真正价值,为什么不将这些点映射到背景标签并尝试获得模型的结果?我会尝试在预处理状态下清除此void标签中的数据标签,并用背景标签替换它们。

另一种可能的策略,如果你只是想将空标签映射到背景,就是运行一个遮罩(从右到左连续运动从上到下)来检查空白像素中的neigthbooring像素(让我们说一个5x5像素的区域)并为void像素分配除void之外最常见的标签。

此外,您始终可以保留更好的数据子集,过滤空白标签百分比超过阈值的数据。您可以只保留没有空白标签的图像,或者更多的图像,您可以保留仅低于阈值(例如5%)非标记点的图像。在此图像中,您可以实施前面提到的替换空白标签的策略。