使用 Keras 图像生成器进行数据扩充使训练非常缓慢

Data augmentation using Keras image generator makes training very slow

我有一个大数据集。数据约为100k。我使用 ImageDataGenerator 进一步增强了数据。但它使训练过程非常缓慢。如果没有 keras 图像生成器功能,训练过程大约需要 3 分钟,但是当我使用 ImageDataGenerator 功能时,它需要大约 3 个多小时。我使用此代码进行图像增强。如何提高性能?

datagen = ImageDataGenerator(horizontal_flip=True,
                             vertical_flip=True,
                             featurewise_center=True,
                             featurewise_std_normalization=True,
                             zoom_range=0.2,
                             rotation_range=90.)
datagen.fit(data)
epochs = 50

model.fit_generator(datagen.flow(data, label, batch_size=128),
                    steps_per_epoch=patches.shape[0],
                    epochs=epochs)

这里有一些尝试。

预处理输入

我不熟悉使用此参数 featurewise_std_normalization=True,但我会尝试使用预处理函数。如果它在每个批次上计算这种转换,那么它可能会消耗大量资源。您可以在训练之前转换所有数据以避免不断的计算。

降维

如果图片大于 224x224,您可以缩小图片的尺寸。在许多情况下,您甚至可以尝试变小。

减少每个时期的步数

看看每个时期的步数。根据上面的代码 (patches.shape[0]),我不确定现在输入的是什么,但如果训练是,我不会比 data_size // batch_size 高多少这么慢(你可以走得更高,因为它正在增加数据,但它需要更多时间)。

升级装备 如果 none 有效,我建议您购买 GPU(如果您还没有的话)。如果这是在 CPU 上完成的,那就可以解释了。图像变换是 CPU.

相对较大的矩阵计算