【发布时间】:2019-08-11 11:17:58
【问题描述】:
我正在构建一个具有多个输入的模型,如 pyimagesearch 所示,但是我无法将所有图像加载到 RAM 中,我正在尝试创建一个使用 flow_from_directory 并从 CSV 文件中获取所有额外内容的生成器每个正在处理的图像的属性。
问题:如何从 CSV 中获取属性以与图像生成器中每批中的图像相对应?
def get_combined_generator(images_dir, csv_dir, split, *args):
"""
Creates train/val generators on images and csv data.
Arguments:
images_dir : string
Path to a directory with subdirectories for each class.
csv_dir : string
Path to a directory containing train/val csv files with extra attributes.
split : string
Current split being used (train, val or test)
"""
img_width, img_height, batch_size = args
datagen = ImageDataGenerator(
rescale=1. / 255)
generator = datagen.flow_from_directory(
f'{images_dir}/{split}',
target_size=(img_width, img_height),
batch_size=batch_size,
shuffle=True,
class_mode='categorical')
df = pd.read_csv(f'{csv_dir}/{split}.csv', index_col='image')
def my_generator(image_gen, data):
while True:
i = image_gen.batch_index
batch = image_gen.batch_size
row = data[i * batch:(i + 1) * batch]
images, labels = image_gen.next()
yield [images, row], labels
csv_generator = my_generator(generator, df)
return csv_generator
【问题讨论】:
-
csv文件是否包含不能包含在图像文件名中的信息?如果是这样,那么创建自定义生成器可能会更容易。 -
确实如此,csv 具有与每个图像相关的属性,我正在处理建筑物的图像,它具有纬度、经度、故事数和其他属性,例如每个图像。
-
你如何喂它你的模型?我认为可以使用数据集 api 功能创建这样的批处理。你能提供更多细节吗?
-
我正在使用 fit_generator 并从我的代码中传递 csv_generator,我使用此代码创建了 train_gen 和 val_gen。
-
为什么不直接使用自定义生成器?