Python 如何将光栅格式的标签数据加载到Keras/Tensorflow中

Python 如何将光栅格式的标签数据加载到Keras/Tensorflow中,python,tensorflow,keras,conv-neural-network,convolution,Python,Tensorflow,Keras,Conv Neural Network,Convolution,我想使用CNN网络将2个对象(二进制:“0:object not present,1:object present”)分割成形状,但我对数据有一个问题。列车数据为150张图像,采用“jpg”格式,地面真实值(标签数据)也为150张0和1的“png”光栅图像(产生黑白图像) 现在的问题是如何在Keras/Tensorflow中加载火车图像和标签图像的混合,如果有关于如何在Python中加载的虚拟示例和/或演示,我将不胜感激。您可以定义一个用于读取输入图像的生成器,另一个用于使用类及其方法读取标签,

我想使用CNN网络将2个对象(二进制:“0:object not present,1:object present”)分割成形状,但我对数据有一个问题。列车数据为150张图像,采用“jpg”格式,地面真实值(标签数据)也为150张0和1的“png”光栅图像(产生黑白图像)


现在的问题是如何在Keras/Tensorflow中加载火车图像和标签图像的混合,如果有关于如何在Python中加载的虚拟示例和/或演示,我将不胜感激。

您可以定义一个用于读取输入图像的生成器,另一个用于使用类及其方法读取标签,然后将这两台发电机合并成一台发电机。只需确保输入图像和标签图像的目录结构和(顺序)文件名相同:

data_image_gen = ImageDataGenerator(...)
data_label_gen = ImageDataGenerator(...)

image_gen = data_image_gen.flow_from_directory(image_directory,
                # no need to return labels
                class_mode=None,
                # don't shuffle to have the same order as labels
                shuffle=False)

image_gen = data_image_gen.flow_from_directory(label_directory,
                color_mode='grayscale',
                # no need to return labels
                class_mode=None,
                # don't shuffle to have the same order as images 
                shuffle=False)

def final_gen(image_gen, label_gen):
    for data, labels in zip(image_gen, label_gen):
        # divide labels by 255 to make them like masks i.e. 0 and 1
        labels /= 255.
        # remove the last axis, i.e. (batch_size, n_rows, n_cols, 1) --> (batch_size, n_rows, n_cols)
        labels = np.squeeze(labels, axis=-1)

        yield data, labels

# ... define your model

# fit the model
model.fit_generator(final_gen(image_gen, label_gen), ...)

你的意思是说标签不是文本(0或1)本身就是图像吗?另外,我假设标签图像文件名中没有提到0或1?@AtulShanbhag是的,你是对的。标签不是文本,而是图像,因此每个训练图像都有一个标签图像,该标签图像是0和1的光栅(0表示不存在特征,1表示存在特征)。换句话说,标签图像是每个训练图像中存在的功能的掩码。我的假设是,文件名没有0或1,因此我们可以从文件名中找出它的类,对吗?@AtulShanbhag是的。基本上,标签只是根据特征形状遮罩的训练图像。你能解释一下你的解决方案吗,到底是怎么回事。因为让我困惑的是标签数据本质上是以对象形状作为遮罩的训练图像(例如,我们正在检测汽车,因此汽车像素被指定为1,周围区域被指定为0)@aminevsaziz您熟悉Keras中的
ImageDataGenerator
?它用于从numpy阵列或硬盘加载映像批(动态)。现在,在我的回答中,我定义了两个生成器,一个用于输入图像,另一个用于相应的标签,这些标签也是图像。它们一起从硬盘读取训练数据并生成成批的训练数据。然后,您可以使用
fit_generator
方法使用生成器来拟合您的模型。此外,如果标签是“png”文件,那么当您读取它们时,值将在[0255]范围内,因此答案是除以255。感谢您的详细解释。在我将您的答案指定为解决方案之前,是否有任何方法可以在不使用keras api的情况下处理/加载tensorflow中的数据(培训和标签)。如果有办法,请包括在上面的答案中。@aminevsaziz有。但是,我对它不太熟悉,所以我不能把它包括在我的答案中(至少在我对它有了很好的理解之前)。谢谢。我会将您的答案指定为解决方案,我希望有人能够在没有KerasAPI的情况下总结出一些有用的东西。