1

我正在使用 keras(TensorFlow 后端),并且试图了解如何使用 flow_from_directory 引入我的标签/掩码以进行图像分割(3 个标签)。

train_images 的尺寸为 (144, 144, 144) - 灰度,uint8。对应的 label_images 具有相同的尺寸,但这里的值 1 表示标签 1,值 2 = 标签 2,值 3 = 标签 3,值 0 表示未标记的像素。

由于这是语义分割,因此对图像中的每个像素进行分类需要使用逐像素的交叉熵损失函数。正如我在一些帖子中所读到的,keras(或 TensorFlow)要求我的 label_image/mask 是一个热编码的。因此,我希望我的 label_images 是具有 3 个通道的图像,其中每个像素将由一个二进制向量组成。示例:[0, 1, 0]。

如何处理存储为 0 的未标记像素?它们应该被编码为 [0, 0, 0] 吗?

但是我找不到答案的问题是:如何正确地重塑/单热编码我的 label_images?keras 中是否有一个方便的功能可以让我转换我的 image_labels?

from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale=1. / 255)
label_datagen = ImageDataGenerator(rescale=1. / 255)

train_image_generator = train_datagen.flow_from_directory(
    directory='/train_images',
    target_size=(144, 144, 144),
    color_mode='grayscale',
    classes=None,
    class_mode=None,
    batch_size=4)

train_label_generator = label_datagen.flow_from_directory(
    directory='/label_images',
    target_size=(144, 144, 144),
    color_mode='grayscale',
    classes=None,
    class_mode=None,
    batch_size=4)

train_generator = zip(train_image_generator, train_label_generator)
4

1 回答 1

1

目前正在研究非常相似但有 10 个类的东西。仍然不完全存在,但至于您对 keras 的内置功能的疑问,请查看:

one_hot_array = keras.utils.to_categorical(array_of_label_data, nb_classes)

它会为您的掩码/标签数据创建一个单热向量。因此,对于您的情况,假设 100 个掩码的预期输出将是 (100, H, W, 3),其中 3 等于您正在使用的类的数量。我不确定的是你的面具中是否有背景,以及你应该如何为你的数据构建文件夹。希望这会有所帮助。

另外,您target_size的关闭是指图像的尺寸(例如高度和宽度)。不应该有第三个值。

于 2019-07-27T00:06:59.040 回答