使用flow_from_directory()使用keras(TensforFlow后端)进行语义图像分割的输入管道(3个标签)

时间:2019-07-02 09:36:42

标签: python keras image-segmentation semantic-segmentation

我正在使用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)

1 个答案:

答案 0 :(得分:0)

当前正在研究非常相似的东西,但是有10个类。仍然还不完全存在,但是关于您关于keras内置函数的问题,请结帐:

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

会创建蒙版/标签数据的一个矢量。因此,对于您的情况,假设100个蒙版的预期输出为(100,H,W,3),其中3等于您正在使用的类的数量。我不确定的是您的蒙版是否有背景,以及如何为数据构建文件夹。希望能有所帮助。

此外,您的target_size处于关闭状态,这是指图像的尺寸(例如,高度和宽度)。不应有第三个值。