簡體   English   中英

將打亂的圖像以原始文件名批量保存到磁盤

[英]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")

我需要對圖像進行洗牌,因為它們的文件名使得字母數字排序會導致集合之間的數據泄漏

我遇到的問題似乎是數據集迭代器具有隨機初始化。 文件路徑 object 只是一個我可以切片的列表,我已經驗證每個種子總是返回相同的文件路徑。

但是,調用數據集總是返回不同的元素。 我已經嘗試過Dataset.unbatch() 方法、as_numpy_iterator() 等方法。每次我第一次調用迭代器時,它都會返回一個不同的元素。

通過使用更簡單和更快的方法解決了這個問題

因為我已經在數據集的每個拆分中都有圖像列表,所以我可以簡單地使用 shutil 來復制或移動項目。

這種方法使我想用圖像做的其他一些事情變得更加困難,但可以解決

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM