将打乱的图像以原始文件名批量保存到磁盘
saving the shuffled images in a batch to disk with original filename
我在一个目录中有一个数据集,我希望将其分成训练集和验证集,然后将每个集的所有图像保存到不同的目录
我正在尝试使用 tf.keras.preprocessing.image_dataset_from_directory() 和 tf.keras.preprocessing.image.save_img() 函数以及 tf.data.Dataset.file_paths 属性
代码看起来像这样:
train_dataset = image_dataset_from_directory(PATH_DS,
shuffle=True,
labels='inferred',
label_mode='categorical',
class_names=class_names,
batch_size=1,
image_size=[1080, 1920],
validation_split=0.15,
subset="training",
seed=456)
validation_dataset = image_dataset_from_directory(PATH_DS,
shuffle=True,
labels='inferred',
label_mode='categorical',
class_names=class_names,
batch_size=1,
image_size=[1080, 1920],
validation_split=0.15,
subset="validation",
seed=456)
filepaths_val = validation_dataset.file_paths
filepaths_train = train_dataset.file_paths
for idx, (batch, filepath) in enumerate(zip(train_dataset.as_numpy_iterator(), train_dataset.file_paths)):
images, labels = batch
tf.keras.preprocessing.image.save_img(os.path.join(PATH_WD, f"test/train/{class_names[np.argmax(labels[0])]}/{os.path.basename(filepath)}"), images[0], "channels_last", "png")
我需要打乱图像,因为它们的文件名使得字母数字排序会导致集合之间的数据泄漏
我 运行 遇到的问题似乎是数据集迭代器具有随机初始化。文件路径对象只是一个我可以切片的列表,我已经验证每个种子总是 returns 相同的文件路径。
但是,调用数据集总是 returns 不同的元素。我试过 Dataset.unbatch() 方法、as_numpy_iterator() 等。每次我第一次调用迭代器时,它 returns 一个不同的元素。
使用更简单、更快速的方法解决了这个问题
因为我已经有了数据集每个分割中的图像列表,所以我可以简单地使用 shutil 来复制或移动项目。
这种方法使我想用图像做的其他一些事情变得更加困难,但可以解决
我在一个目录中有一个数据集,我希望将其分成训练集和验证集,然后将每个集的所有图像保存到不同的目录
我正在尝试使用 tf.keras.preprocessing.image_dataset_from_directory() 和 tf.keras.preprocessing.image.save_img() 函数以及 tf.data.Dataset.file_paths 属性
代码看起来像这样:
train_dataset = image_dataset_from_directory(PATH_DS,
shuffle=True,
labels='inferred',
label_mode='categorical',
class_names=class_names,
batch_size=1,
image_size=[1080, 1920],
validation_split=0.15,
subset="training",
seed=456)
validation_dataset = image_dataset_from_directory(PATH_DS,
shuffle=True,
labels='inferred',
label_mode='categorical',
class_names=class_names,
batch_size=1,
image_size=[1080, 1920],
validation_split=0.15,
subset="validation",
seed=456)
filepaths_val = validation_dataset.file_paths
filepaths_train = train_dataset.file_paths
for idx, (batch, filepath) in enumerate(zip(train_dataset.as_numpy_iterator(), train_dataset.file_paths)):
images, labels = batch
tf.keras.preprocessing.image.save_img(os.path.join(PATH_WD, f"test/train/{class_names[np.argmax(labels[0])]}/{os.path.basename(filepath)}"), images[0], "channels_last", "png")
我需要打乱图像,因为它们的文件名使得字母数字排序会导致集合之间的数据泄漏
我 运行 遇到的问题似乎是数据集迭代器具有随机初始化。文件路径对象只是一个我可以切片的列表,我已经验证每个种子总是 returns 相同的文件路径。
但是,调用数据集总是 returns 不同的元素。我试过 Dataset.unbatch() 方法、as_numpy_iterator() 等。每次我第一次调用迭代器时,它 returns 一个不同的元素。
使用更简单、更快速的方法解决了这个问题
因为我已经有了数据集每个分割中的图像列表,所以我可以简单地使用 shutil 来复制或移动项目。
这种方法使我想用图像做的其他一些事情变得更加困难,但可以解决