0

我正在尝试像您的实验一样训练我自己的数据集(2 类包括背景),但我得到空白输出标签图像是具有 2 种颜色的 PNG 格式图像(0 用于背景,1 用于前景)

SEG_INFORMATION = DatasetDescriptor(
splits_to_sizes={
    'train': 250, # number of file in the train folder
     'trainval': 255,
     'val': 5,
},
     num_classes=2, # number of classes in your dataset

ignore_label=255, # white edges that will be ignored to be class

not_ignore_mask = tf.to_float(tf.equal(scaled_labels, 0)) * 1 + tf.to_float(tf. equal(scaled_labels, 1)) * 500 + tf.to_float(tf.equal(scaled_labels, ignore_label)) * 0

https://user-images.githubusercontent.com/23016323/52344967-fb472600-2a13-11e9-8841-0d0c5c7dde72.png

这些是我尝试过的配置和我使用的示例标签图像

我期望输出为分段但得到空白图像

4

1 回答 1

1

所以你的数据集的一般定义对我来说看起来不错。不过,250 张训练图像并不多。我从未使用过这种大小的数据集,所以我不能保证以下内容对您有帮助......

我有一些建议/问题,可能会有所帮助:

1)您的网络预测哪个标签(==“空白”图像是什么意思)?您是指原始预测标签(在两种情况下都应该是“黑色”,因为 0 和 1 都是相当黑色的灰度值)还是彩色图像,那么有趣的是您使用的是哪个颜色图(Pascal?)以及两者中的哪一个标签由黑色表示。

2)如果你的网络总是预测“前景”,那么你的权重因子 500 可能太高了。您的网络可能会不惜一切代价尝试避免对前景进行 FN 预测,从而生成全前景图像。

3)出于调试目的:尝试您的网络是否能够记住一些训练图像(使用相同的图像进行测试和训练)。如果您的标签和训练设置正确,您的网络可能会过度拟合某些训练示例。

4) 确保您提供给网络的groundtruth 确实具有两个有效标签,0 和1。如果您将附加的图像作为groundtruth 提供给网络,则标签0 将被学习,而“白色”对象将被忽略为255 是被忽略的标签

5) 在 deeplab 的情况下,确保您使用的是预训练的主干初始化!此外,您正在使用哪个骨干网络会很有趣?我希望使用小型/紧凑型网络(deeplab 与 mobilenet、inception 等)将有利于基于 250 幅图像的训练。

我希望其中一个建议对您有所帮助。干杯;)

于 2019-02-13T10:21:29.800 回答