【问题标题】:Keras multi-class semantic segmentation labelKeras 多类语义分割标签
【发布时间】:2019-01-06 12:28:27
【问题描述】:

对于语义分割,您通常最终会得到最后一层类似

output = Conv2D(num_classes, (1, 1), activation='softmax')

我的问题是,我该如何为此准备标签?例如,如果我要识别 10 个类,每个类都有不同的颜色。对于每个标签图像,我是否需要对一种特定颜色应用遮罩,将其转换为灰度图像,以便我可以与模型输出中的 1 个过滤器进行比较?或者有没有办法将一张完整的 RGB 图片作为标签传入?

【问题讨论】:

  • 可能你想对分割的标签图像进行一次热编码,这样输出中的每个像素都与一个二进制向量相关联,例如在 10 个类的情况下[0,0,0,1,0,0,0,0,0,0]
  • @sdcbr 抱歉,您能否详细说明一个热编码标签图像?是不是和我说的方法一样?
  • 您的网络的输出将是具有 10 个通道的图像,其中每个像素将包含一个概率向量,其总和为 1(由于 softmax)。示例:[0.1,0.1,0.1,0.05,0.05,0.1,0.1,0.1,0.1,0.2]。您希望标签图像具有相同的形状:具有 10 个通道的图像,每个像素是一个二进制向量,在类的索引处为 1,在其他地方为 0。您的分割损失函数就是像素级交叉熵。
  • @sdcbr 好的,我明白了,谢谢。只是另一个问题,我认为 softmax 将单独应用于每个通道(因此一个通道中的所有像素总和为 1),或者 Keras 是否足够聪明,知道我希望所有通道中的相同像素总和为 1?跨度>
  • 这实际上是一个好问题。可能您将不得不稍微修改输出。或许看看this例子

标签: keras deep-learning conv-neural-network


【解决方案1】:

您的网络的输出将是具有 10 个通道的图像,其中每个像素将包含一个概率向量,其总和为 1(由于 softmax)。示例:[0.1,0.1,0.1,0.05,0.05,0.1,0.1,0.1,0.1,0.2]。您希望标签图像具有相同的形状:具有 10 个通道的图像,每个像素是一个二进制向量,在类的索引处为 1,在其他地方为 0。您的分割损失函数就是像素级交叉熵。

对于实现:keras中的softmax有一个axis参数:https://keras.io/activations/#softmax

【讨论】:

    【解决方案2】:
    np_utils.to_categorical(labels, num_classes)
    

    当标签为 (row,col) 时,输出形状为:(row, col, num_classes)

    示例: https://github.com/naomifridman/Unet_Brain_tumor_segmentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-19
      • 2021-03-09
      • 2019-05-21
      • 2021-03-17
      • 2020-04-18
      • 2019-12-20
      • 2018-08-04
      • 2019-02-26
      相关资源
      最近更新 更多