使用 image_dataset_from_directory 的 TensorFlow 加载图像
TensorFlow load image with image_dataset_from_directory
我在使用 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= 300
batch_size = 8
train_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',
)
此过程加载两个文件夹中的所有图像作为 class 1 和 2。现在如何将两个 classes 映射为 input
和 target
?我在正确的轨道上吗?还有其他办法吗?
创建目录数据。在数据中创建两个子目录 image、target。在图像目录中放置您的图像。在目标目录中放置您的目标图像。确保您的图像和目标图像具有完全相同的文件名。这是必需的,以便在获取一批图像时,以相同的顺序获取其相应的目标图像。我使用 ImageDataGenerator.flow_from_directory 如下:
image_dir=r'c:\data\image'
target_dirr'c:\data\target'
target_size=(224,224) # set this to the target size you want
channels=3 # for color images
color_mode='rgb'
shuffle=True,
seed=123
class_mode=None
batch_size=10 # set this to desired batch size
vsplit=.2 # set this to the validation split you want
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]
# show these two images to ensure the image and targets are matched as required
plt.subplot(1,2,1)
plt.imshow(img1)
plt.subplot(1,2,2)
plt.imshow(target1)
您可以 运行 在 valid_gen 上进行相同的测试。然后使用 composite_gen 和 valid_gen 作为 model.fit
的输入
我在使用 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= 300
batch_size = 8
train_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',
)
此过程加载两个文件夹中的所有图像作为 class 1 和 2。现在如何将两个 classes 映射为 input
和 target
?我在正确的轨道上吗?还有其他办法吗?
创建目录数据。在数据中创建两个子目录 image、target。在图像目录中放置您的图像。在目标目录中放置您的目标图像。确保您的图像和目标图像具有完全相同的文件名。这是必需的,以便在获取一批图像时,以相同的顺序获取其相应的目标图像。我使用 ImageDataGenerator.flow_from_directory 如下:
image_dir=r'c:\data\image'
target_dirr'c:\data\target'
target_size=(224,224) # set this to the target size you want
channels=3 # for color images
color_mode='rgb'
shuffle=True,
seed=123
class_mode=None
batch_size=10 # set this to desired batch size
vsplit=.2 # set this to the validation split you want
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]
# show these two images to ensure the image and targets are matched as required
plt.subplot(1,2,1)
plt.imshow(img1)
plt.subplot(1,2,2)
plt.imshow(target1)
您可以 运行 在 valid_gen 上进行相同的测试。然后使用 composite_gen 和 valid_gen 作为 model.fit
的输入