Keras中ImageDataGenerator的flow_from_directory生成文件名如何管理?
解决Keras ImageDataGenerator.flow_from_directory 数据增强保留原始文件名的方案
原生flow_from_directory开启save_to_dir参数时,默认生成的文件名仅包含前缀、序号、随机哈希值,无法关联原始文件名,我们可以通过关闭自动保存、手动生成并命名增强图像的方式实现需求,具体方案如下:
核心思路
- 先实例化数据生成器,关闭随机打乱(必须将shuffle参数设为False),保证迭代顺序和生成器内置的
filenames列表顺序完全对应 - 去掉
save_to_dir参数,自己处理增强后的图像保存逻辑,自定义文件名规则保留原始文件名信息
可直接运行的修改后代码
from tensorflow.keras.preprocessing.image import ImageDataGenerator from PIL import Image import os import numpy as np # 原有增强配置保持不变 aug = ImageDataGenerator( rotation_range=20, zoom_range=0.15, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.15, horizontal_flip=True, fill_mode="nearest" ) # 实例化数据生成器,注意关闭shuffle data_gen = aug.flow_from_directory( extract_dir, batch_size=1, color_mode='grayscale', target_size=(28, 28), shuffle=False, class_mode=None ) # 提前创建保存目录 save_root = os.path.join(extract_dir, 'augmented') os.makedirs(save_root, exist_ok=True) # 可自定义配置:每张原始图像生成的增强图像数量 aug_count_per_img = 10 # 可自定义配置:总共生成的增强图像上限 total_aug_limit = 100 generated_count = 0 for img_idx in range(len(data_gen.filenames)): # 获取当前迭代对应的原始文件名 original_full_name = os.path.basename(data_gen.filenames[img_idx]) name_no_ext, ext = os.path.splitext(original_full_name) # 生成单张原图对应的多组增强图 for aug_idx in range(aug_count_per_img): # 取出增强后的图像数据 aug_img = next(data_gen)[0].astype(np.uint8) # 灰度图去掉最后一维的通道数 if aug_img.ndim == 3 and aug_img.shape[-1] == 1: aug_img = aug_img.squeeze(-1) # 自定义保存文件名,保留原始文件名信息 save_name = f"{name_no_ext}_aug_{aug_idx}{ext}" save_path = os.path.join(save_root, save_name) Image.fromarray(aug_img).save(save_path) generated_count += 1 if generated_count >= total_aug_limit: break if generated_count >= total_aug_limit: break
扩展优化方案
如果需要保留原始文件的分类目录结构,方便后续直接按目录分类,可在保存时增加子目录创建逻辑:
- 解析原始文件的父目录:
original_subdir = os.path.dirname(data_gen.filenames[img_idx]) - 拼接完整保存目录:
final_save_dir = os.path.join(save_root, original_subdir) - 提前创建目录:
os.makedirs(final_save_dir, exist_ok=True) - 保存路径改为
os.path.join(final_save_dir, save_name)即可
内容的提问来源于stack exchange,提问作者talha06
相关产品推荐
相关产品推荐

