分割掩码放入keras数据生成器后变成一维数组

问题描述 投票:0回答:1

我试图使用来自 https://www.kaggle.com/datasets/metavision/accurate-plane-shapessegmentation?resource=download

的平面图像数据集创建分割模型

图像和掩模都是 1280x720px,我将它们放入单独的图像和数据生成器中,然后将其压缩到训练和验证数据集中。但由于某种原因,掩模图像变成一维数组,一个数字。我一直在尝试绘制图像,但没有任何反应,因为我收到 matplotlib“TypeError: Invalid shape (1,) for image data”。

我写了 2 个生成器,运行没有问题

SEED = 100

train_image_generator = ImageDataGenerator(
    rescale=1./255,
    #width_shift_range = 0.1,
    #height_shift_range = 0.1,
    #rotation_range = 10,
    #zoom_range = 0.1,
    validation_split=0.2
)


train_image_flow = train_image_generator.flow_from_directory(data_directory + "images/",
                                                             batch_size = 16, 
                                                             target_size = (720, 1280),
                                                             subset='training',
                                                             seed = SEED)

train_mask_generator = ImageDataGenerator(
    rescale=1./255,
    #rescale -= 1,
    #width_shift_range = 0.1,
    #height_shift_range = 0.1,
    #rotation_range = 10,
    #zoom_range = 0.1,
    #preprocessing_function = mask_preprocessing,
    validation_split=0.2
)



train_mask_flow = train_mask_generator.flow_from_directory(data_directory +"masks/", 
                                                           batch_size = 16, 
                                                           target_size = (720, 1280), 
                                                           subset='training',
                                                           seed = SEED)


valid_image_flow = train_image_generator.flow_from_directory(data_directory + "images/",
                                                             batch_size = 16, 
                                                             target_size = (720, 1280), 
                                                             subset='validation',
                                                             seed = SEED)

valid_mask_flow = train_mask_generator.flow_from_directory(data_directory +"masks/", 
                                                           batch_size = 16, 
                                                           target_size = (720, 1280), 
                                                           subset='validation',
                                                           seed = SEED)


print(train_mask_flow[0][1])

def my_image_mask_generator(image_data_generator, mask_data_generator): 
    train_generator = zip(image_data_generator, mask_data_generator)
    for (img, mask) in train_generator:
        yield (img, mask)

train_generator = my_image_mask_generator(train_image_flow, train_mask_flow)
valid_generator = my_image_mask_generator(valid_image_flow, valid_mask_flow)

但由于某种原因,每个图像的掩码变成了一位数数组。当我打印掩码数组时,我只得到 [[1,]]。如果我尝试绘制图像和蒙版,我会得到“ValueError:预期图像数组的等级为 3(单个图像)。得到的数组形状为:(1,)”

enter image description here

我是张量流的新手,但这个问题看起来很奇怪。

tensorflow keras mask image-segmentation
1个回答
0
投票

在所附图像中的行中(顺便说一下,不要将代码作为图像附加):

for images, masks in next(train_generator):

图像和蒙版都在变量中返回

images
- 检查形状。

如果您将

img
mask
压缩到
my_image_mask_generator
函数中:

def my_image_mask_generator(image_data_generator, mask_data_generator):
    train_generator = zip(image_data_generator, mask_data_generator)
    for img, mask in train_generator:
        yield zip(img, mask)

你应该得到你期望的输出。

© www.soinside.com 2019 - 2024. All rights reserved.