如何在文件名中保存带有类标签的增强图像?或者,它有没有办法知道新图像属于哪个类?
编辑:
datagen = ImageDataGenerator(horizontal_flip=True, vertical_flip=True)
i = 0
for batch in datagen.flow_from_directory('data/train', target_size=
(100,100),
shuffle=False, batch_size=batch_size, save_to_dir='data/train/'):
i += 1
if i > 20: # save 20 images
break # otherwise the generator would loop indefinitely
print("Saved flipped images")
我在 data/train 中有三个类子目录。运行此命令后,我无法判断哪些图像已被增强,但我确实看到图像总数的大约三分之一已被保存。我的代码中是否缺少某些内容来指定按类命名图像,以及循环遍历每个类以创建新图像?
编辑#2: 文件夹结构:data/train 单独文件夹中的 3 个类:n02088364、n02096585、n02108089 新创建的图像保存到 data/train,而不是单独的类文件夹。
最佳答案
如果您想将图像保存在与标签同名的文件夹下,那么您可以遍历标签列表并在循环中调用增强代码。
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Augmentation + save augmented images under augmented folder
IMAGE_SIZE = 224
BATCH_SIZE = 500
LABELS = ['lbl_a','lbl_b','lbl_c']
for label in LABELS:
datagen_kwargs = dict(rescale=1./255)
dataflow_kwargs = dict(target_size=(IMAGE_SIZE, IMAGE_SIZE),
batch_size=BATCH_SIZE, interpolation="bilinear")
train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(
rotation_range=40,
horizontal_flip=True,
width_shift_range=0.1, height_shift_range=0.1,
shear_range=0.1, zoom_range=0.1,
**datagen_kwargs)
train_generator = train_datagen.flow_from_directory(
'original_images', subset="training", shuffle=True, save_to_dir='aug_images/'+label, save_prefix='aug', classes=[label], **dataflow_kwargs)
# Following line triggers execution of train_generator
batch = next(train_generator)
那么当生成器可以直接传递给模型时为什么要这样做呢?如果您想使用 tflite-model-maker
,它不接受生成器并接受每个标签的文件夹下的标签数据:
from tflite_model_maker import ImageClassifierDataLoader
data = ImageClassifierDataLoader.from_folder('aug_images')
结果
aug_images
|
|__ lbl_a
| |
| |_____aug_img_a.png
|
|__ lbl_b
| |
| |_____aug_img_b.png
|
|__ lbl_c
| |
| |_____aug_img_c.png
注意:您需要确保文件夹已经存在。
关于python - Keras ImageDataGenerator——作为 Save_Prefix 分类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44161940/