我在使用 image_dataset_from_directory
创建 tf.data.Dataset
时遇到了一些问题,用于一对一任务。这意味着我将给模型输入一张图像,输出将是另一张图像。
我的数据集目录结构如下:
Dataset/...input/......a_image_1.jpg......a_image_2.jpg...output/......a_image_1.jpg......a_image_2.jpg
在数据集目录中,对应的输入图像和目标图像具有相同的名称。我尝试以以下方式加载数据集:
dataset_url = "Project/Dataset"input_size= 300batch_size = 8train_ds = image_dataset_from_directory( dataset_url, labels='inferred', batch_size=batch_size, image_size=(input_size, input_size), validation_split=0.2, subset="training", seed=1337, label_mode='int',)valid_ds = image_dataset_from_directory( dataset_url, labels='inferred', batch_size=batch_size, image_size=(input_size, input_size), validation_split=0.2, subset="validation", seed=1337, label_mode='int',)
这个过程将两个文件夹中的所有图像加载为类别1和2。现在我该如何将这两个类别映射为 input
和 target
?我走在正确的轨道上吗?还有其他方法吗?
回答:
创建一个名为 data 的目录。在 data 目录内创建两个子目录 image 和 target。在 image 目录中放置你的图像。在 target 目录中放置你的目标图像。确保你的图像和目标图像具有完全相同的文件名。这是必要的,以便在获取一批图像时,其对应的目标图像能以相同的顺序获取。我使用 ImageDataGenerator.flow_from_directory 如下所示:
image_dir=r'c:\data\image'target_dirr'c:\data\target'target_size=(224,224) # 将此设置为你想要的目标尺寸channels=3 # 对于彩色图像color_mode='rgb'shuffle=True,seed=123class_mode=Nonebatch_size=10 # 将此设置为所需的批量大小vsplit=.2 # 将此设置为验证集分割比例gen=ImageDataGenerator(rescale=1/255, validation_split=vsplit)image_gen=gen.flow_from_directory(img_dir, target_size=target_size, color_mode=color_mode,class_mode=class_mode,seed=seed, batch_size=batch_size, subset='training')valid_image_gen=gen.flow_from_directory(img_dir, target_size=target_size, color_mode=color_mode,class_mode=class_mode,seed=seed, batch_size=batch_size, subset='validation')target_gen=gen.flow_from_directory(target_dir,target_size=target_size, color_mode=color_mode,class_mode=class_mode,seed=seed, batch_size=batch_size, subset='training') valid_target_gen=gen.flow_from_directory(target_dir,target_size=target_size, color_mode=color_mode,class_mode=class_mode,seed=seed, batch_size=batch_size, subset='validation') composite_gen=zip(image_gen, target_gen)valid_gen=zip(valid_image_gen, valid_target_gen)
composite_gen 将生成 (图像, 目标图像) 的元组。要测试它
images, targets=next(composite_gen)print (images.shape, targets.shape)img1= images[0]target1=targets[0]# 显示这两张图像以确保图像和目标按要求匹配plt.subplot(1,2,1)plt.imshow(img1)plt.subplot(1,2,2)plt.imshow(target1)
你可以对 valid_gen 运行相同的测试。然后使用 composite_gen 和 valid_gen 作为 model.fit 的输入