【问题标题】:What are the criteria for the weight of deeplab my custom dataset?deeplab 我的自定义数据集的权重标准是什么?
【发布时间】:2019-07-14 01:22:57
【问题描述】:

我正在训练 Deeplab v3,通过在三个类中制作自定义数据集,包括背景

那么,我的类是背景,熊猫,瓶子,有1949张图片。

我正在使用 moblienetv2 模型

segmentation_dataset.py 已修改如下。

_MYDATA_INFORMATION = DatasetDescriptor(
        splits_to_sizes={
            'train': 975,  # num of samples in images/training
            'trainval': 1949,
            'val': 974,  # num of samples in images/validation
        },


        num_classes=3,
        ignore_label=0,
)

train.py修改如下。

flags.DEFINE_boolean('initialize_last_layer', False,
                 'Initialize the last layer.')

flags.DEFINE_boolean('last_layers_contain_logits_only', True,
                 'Only consider logits as last layers or not.')

train_utils.py 未被修改。

not_ignore_mask = tf.to_float(tf.not_equal(scaled_labels, ignore_label)) * loss_weight

我得到了一些结果,但不是完美的。

例如熊猫和瓶子的面具颜色相同或不同

我想要的结果是红色的熊猫和绿色的瓶子

所以,我判断是重量有问题。

根据其他人的问题,train_utils.py配置如下

irgore_weight = 0
label0_weight =1
label1_weight = 10
label2_weight = 15
not_ignore_mask = 
    tf.to_float(tf.equal(scaled_labels, 0)) * label0_weight +
    tf.to_float(tf.equal(scaled_labels, 1)) * label1_weight +
    tf.to_float(tf.equal(scaled_labels, 2)) * label2_weight +
    tf.to_float(tf.equal(scaled_labels, ignore_label)) * irgore_weight 

tf.losses.softmax_cross_entropy(
    one_hot_labels,
    tf.reshape(logits, shape=[-1, num_classes]),
    weights=not_ignore_mask,
    scope=loss_scope)

我有一个问题。

权重的标准是什么?

我的数据集包含以下内容。

enter image description here

它是自动生成的,所以我不确切知道哪个更多,但它的数量相似。

另外,我使用的是 Pascal 的颜色映射类型。

这是第一个黑色背景,第二个红色第三个绿色。

我想准确地将熊猫指定为红色,将瓶子指定为绿色。我该怎么办?

【问题讨论】:

    标签: tensorflow dataset image-segmentation tensorflow-datasets deeplab


    【解决方案1】:

    我认为您可能混淆了您的标签定义。也许我可以帮你。请再次检查您的 segmentation_dataset.py。在这里,您将“0”定义为被忽略的标签。这意味着所有标记为“0”的像素都被排除在训练过程之外(更具体地说,在损失函数的计算中被排除在外,因此对权重的更新没有影响)。鉴于这种情况,重要的是不要“忽略”背景类,因为它也是您想要正确预测的类。在 train_utils.py 中,您为被忽略的类分配了一个权重因子,这将不会产生任何影响---> 确保不要将您的三个训练类 [background、panada、bottle] 与“忽略”标签。

    在您的情况下,num_classes=3 应该是正确的,因为它指定了要预测的标签数量(模型自动假设这些标签是 0、1 和 2。如果您想忽略某些标签,您必须用第四个标签类注释它们(只需为此选择一个 >2 的数字),然后将此标签分配给ignored_label。如果您没有要忽略的像素,仍然设置 ignored_label=255 和它不会影响你的训练;)

    【讨论】:

      猜你喜欢
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2011-11-05
      相关资源
      最近更新 更多