Keras:ImageDataGenerator 性能不佳

Keras: poor performance with ImageDataGenerator

我尝试使用 Keras ImageDataGenerator 来增强我的图像数据。我的任务是回归任务,其中输入图像生成另一个转换后的图像。到目前为止一切顺利,效果很好。

在这里,我想通过使用 ImageDataGenerator 来应用数据扩充。为了以相同的方式转换两个图像,我使用了 Keras docs, where a transformation of an image with a corresponding mask is described. My case is a little bit different, as my images are already loaded and don't need to be fetched from a directory. This procedure was already described in .

中描述的方法

为了验证我的实现,我首先在没有扩充的情况下使用它,并在没有指定任何参数的情况下使用 ImageDataGenerator。根据 Keras docs 中的 class 参考,这不应该改变图像。请参阅此片段:

img_val = img[0:split_seperator]
img_train = img[split_seperator:]

target_val = target[0:split_seperator]
target_train = target[split_seperator:]

data_gen_args = dict()

# define data preparation
src_datagen = ImageDataGenerator(**data_gen_args)
target_datagen = ImageDataGenerator(**data_gen_args)

# fit parameters from data
seed = 1
src_datagen.fit(img_train, augment=False, seed=seed)
target_datagen.fit(target_train, augment=False, seed=seed)

training_generator = zip(
    src_datagen.flow(img_train, batch_size=batch_size_training, seed=seed),
    target_datagen.flow(target_train, batch_size=batch_size_training, seed=seed))

_ = model.fit_generator(
    generator=training_generator,
    steps_per_epoch=image_train.shape[0] // batch_size_training,
    epochs=num_epochs, verbose=1,
    validation_data=(img_val, target_val), callbacks=callbacks)

不幸的是,我的实现似乎有一些问题。我没有得到预期的表现。验证损失在某种程度上稳定在某个值附近并且仅略有下降(见下图)。在这里我期望,因为我没有使用任何增强,与非增强基线相同的损失。

相比之下,我没有 ImageDataGenerator 的训练看起来像

_ = model.fit(img, target,
              batch_size=batch_size_training,
              epochs=num_epochs, verbose=1,
              validation_split=0.2, callbacks=cb)

我想我有点混淆了 ImageDataGeneratorflowfit 函数的用法。所以我的问题是:

更新(2019-01-23 及续): 到目前为止我已经尝试过的(回答答案):

这些方法都没有帮助改善结果。

我终于明白你要做什么了,这应该可以完成工作。

aug = ImageDataGenerator(**data_gen_args)

# train the network
H = model.fit_generator(aug.flow(img_train, target_train, batch_size=image_train.shape[0]),
    validation_data=(img_val, target_val), steps_per_epoch=image_train.shape[0] // BS,
    epochs=EPOCHS)

让我知道这是否有效。