【问题标题】:Ignore label(s) when training Fully Convolutional Network训练全卷积网络时忽略标签
【发布时间】:2018-10-07 05:00:56
【问题描述】:

我在 Caffe 中使用完全卷积网络进行语义分割,使用 Cityscapes 数据集。

script 允许转换类的 ID,并表示将要忽略的类 ID 设置为 255,并“在训练期间忽略这些标签”。我们如何在实践中做到这一点?我的意思是,我如何“告诉”我的网络 255 不像其他整数那样是一个真正的类?

感谢你给了我背后的直觉。

【问题讨论】:

  • 我不知道如何在 Caffe 中做到这一点,但您是否考虑过在开始训练之前从数据集中实际剥离这些样本?
  • 我提到了 Caffe,但这更像是一个概念问题。语义分割意味着为图像的每个像素分配一个类,所以我的标签也是一个图像,每个像素都有一个类。因此,我的图像中只有一部分应该被忽略(例如背景区域......),我不能因为它包含背景而丢弃图像

标签: neural-network deep-learning caffe image-segmentation convolutional-neural-network


【解决方案1】:

使用,例如"SoftmaxWithLoss"层,你可以加一个loss_param { ignore_label: 255 }告诉caffe忽略这个标签:

layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "prediction"
  bottom: "labels_with_255_as_ignore"
  loss_weight: 1
  loss_param: { ignore_label: 255 }
}

我没查,但我相信ignore_label也被InfogainLoss loss和其他一些loss layer使用了。

【讨论】:

  • 太好了,谢谢。我仍然有一个我不明白的概念点:我的网络将从这些区域“学到”什么?例如,如果我的网络为汽车预测背景(天空)溢出的区域,则损失不会因此受到惩罚,尽管它是错误的。一旦经过训练,它在分割汽车时仍然会包括天空,不是吗?
  • @Mean-Street AFAIK 您没有将“忽略”标签分配给背景 - 而是分配给注释不准确的边界区域:因此,如果您错过了几个像素的边界,您不会得到惩罚(因为它可能是由于标签不准确),但背景区域/标签不会被忽略。顺便说一句,使用"InfogainLoss",您可以为每个错误分配不同的“权重”:一个成本用于预测对象的 BG,另一个成本用于预测 BG 区域中的对象...
  • 在这种情况下你是对的。但是,让我们来建立一个只分割汽车和行人的网络。其他所有东西都会有一个“不是汽车也不是行人”的标签,有很多带有这个标签的大区域。在那种情况下,我不应该忽视那个“不是汽车也不是行人”的标签,对吧?因为我之前说过。但是这个类的表现如何?可能有很多东西,我觉得网络将无法为它学习特征。会不会有问题?我希望我很清楚
  • @Mean-Street 你很清楚。这里有两个问题:1.“非汽车/ped”类有很大的类内变化。 2. 你的训练数据严重失衡。关于第一个问题,通常如果您的网络足够大,那应该不是问题。第二个问题更难,尝试阅读“focal loss”
  • @Shai 非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 2018-05-01
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 2017-11-21
相关资源
最近更新 更多