Python 我可以在Keras中使用ImageDataGenerator()和flow_从_目录()生成uint8标签吗?

Python 我可以在Keras中使用ImageDataGenerator()和flow_从_目录()生成uint8标签吗?,python,keras,dataset,image-preprocessing,Python,Keras,Dataset,Image Preprocessing,我正在处理二维语义分割任务 在KerasAPI文档中,这些示例仅显示如何安排用于图像分类的数据集,而不是语义分割 所以我像这样排列我的图像和标签 SEED = 111 batch_size = 2 image_datagen = ImageDataGenerator( horizontal_flip=True, zca_epsilon=9, # fill_mode='nearest', ) image_generator = image_datagen.flow_from

我正在处理二维语义分割任务

在KerasAPI文档中,这些示例仅显示如何安排用于图像分类的数据集,而不是语义分割

所以我像这样排列我的图像和标签

SEED = 111
batch_size = 2
image_datagen = ImageDataGenerator(
    horizontal_flip=True,
    zca_epsilon=9,
    # fill_mode='nearest',
)
image_generator = image_datagen.flow_from_directory(
    directory="/xxx/images",
    class_mode=None,
    batch_size=batch_size,
    seed=SEED,
)


def preprocessing_function(image):
    return image.astype(np.uint8)


label_datagen = ImageDataGenerator(
    horizontal_flip=True,
    zca_epsilon=9,
    rescale=1,
    preprocessing_function=preprocessing_function,
    # fill_mode='nearest',
)
label_generator = image_datagen.flow_from_directory(
    directory="/xxx/labels",
    class_mode=None,
    batch_size=batch_size,
    seed=SEED,
)

train_generator = zip(image_generator, label_generator)
print(len(image_generator))
i = 0
for image_batch, label_batch in iter(train_generator):
    print(image_batch.shape, label_batch.shape) # (2, 256, 256, 3) (2, 256, 256, 3)
    print(image_batch.dtype, label_batch.dtype) # float32 float32
    i += 1
    if i == 5:
        break
但是我发现生成的标签图像的类型是float32,因此我添加了一个预处理函数到label\u datagen,只是为了将数据类型强制转换为uint8,但是生成的标签图像的数据类型仍然是float32,似乎预处理函数什么都没有做

我怎样才能修复这个问题

如何将我的标签数据更改为uint8

添加预处理函数以强制转换标签图像的数据类型是否是“常见做法”


谢谢你的建议!

我遇到了同样的问题,并将发电机包装到了另一个问题中。这是可行的,但有点混乱

label_generator = (x.astype(np.uint8) for x in label_generator)
train_generator = zip(image_generator, label_generator)

为什么要将其转换为uint8?如果你想把它输入一个神经网络,那么它应该是一个浮点数据类型。我只想把我的(语义分割)标签图像转换成uint8,因为我认为它更适合计算损失值和保存RAM@ShouyuChen你想出来了吗?我也在想同样的问题