首页 > 解决方案 > 如何使用 ImageDataGenerator.flow_from_directory 将每个类/标签保存在其他子文件夹中?

问题描述

编辑:
设置:

Win 10 x64
Python 3.8.7
TF version 2.4.0
Keras version 2.4.3 #not needed I think but

我有图像的数据集,其结构如下:

dataset/
  class1/
    img1class1.jpg
    ...
  class2/
    img1class2.jpg
    ...

我正在使用带有以下选项的flow_from_directory方法:tensorflow.keras.preprocessing.image.ImageDataGenerator

gen = imgen.flow_from_directory(
  'dataset/',
  target_size = (160, 120),
  batch_size = 25,
  class_mode = 'binary',
  save_to_dir = 'new_dataset/',
  save_prefix = 'new',
  save_format = 'jpg'
)

但它将每个类中的每个图像都放在一个文件夹中new_dataset/

new_dataset/
  new1.jpg #while that could be from class 1
  new2.jpg # and that from class 2
  ...

是否可以“强制”flow_from_directory使文件夹结构为:

new_dataset/
  class1/
    new1.jpg
    ...
  class2/
    new1.jpg
    ...

batch_size 是否也有可能只从一个特定的 img“创建”图像,我的意思是这img1class1.jpg将是整批但有其他转换?我想做某事,比如从 1 张旧图像中提取 25 张新图像。

对不起我的工程师,我希望你能理解(:

标签: python-3.xkerastensorflow2.0tensorflow-datasetstf.keras

解决方案


我找到了“解决方法”,所以这里是:

import os

labels = {}

for i, one_class in enumerate(os.listdir('dataset')):
  gen = idg.flow_from_directory(
    'dataset',
    target_size = (160, 120),
    batch_size = 25,
    class_mode = 'binary',
    classes = [one_class],
    save_to_dir = f'dataset/{one_class}',
    save_prefix = 'new_image',
    save_format = 'jpg'
  )

  ...
  
  labels[one_class] = i #If u need them...


推荐阅读