我试图使用来自 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,)”
我是张量流的新手,但这个问题看起来很奇怪。
在所附图像中的行中(顺便说一下,不要将代码作为图像附加):
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)
你应该得到你期望的输出。