【问题标题】:Data Augmentation: keras ImageDataGenerator vs manual loading and augmenting数据增强:keras ImageDataGenerator 与手动加载和增强
【发布时间】:2018-05-15 12:55:42
【问题描述】:

我正在 Tensorflow 中训练一个模型,我想实现一个有效的在线数据增强,并且我希望它工作得足够快,这样它就不会成为训练的瓶颈(这样数据将比 GPU 上模型的前后循环更快地馈送到 GPU)。然而,我之前有过 Keras 的经验,它的 ImageDataGenerator 似乎工作得非常整洁。所以我的问题是:

我应该使用 Keras 来代替它吗,只是因为它的 ImageDataGenerator?它是否比我使用 OpenCV 可能实现的更快(考虑到 Keras 缺少一些我可能需要的功能,但我不确定我是否真的需要它们)?

或者,如果您不能肯定回答,请分享您在数据增强优化方面的经验。如果您曾经对类似的东西进行过基准测试(比较速度性能),请也分享一下。任何帮助表示赞赏。提前致谢。

PS:数据是从硬盘加载的。

【问题讨论】:

  • 为什么不能在 TensorFlow 训练管道中使用 ImageDataGenerator?
  • @marcopah 也许我对问题的表述不太正确(将很快编辑),我的问题是 ImageDataGenerator 是如何优化的?

标签: tensorflow machine-learning keras deep-learning computer-vision


【解决方案1】:

只是发布这个以防有人觉得这有帮助。

我建议看看imgaug。 您可以使用 pip 安装它:

pip install imgaug

根据我的经验,它有很多增强选项,而且速度非常快,但我不知道它是否符合您的需要。你可能想检查一下。

这里有一些例子:

【讨论】:

  • imgaug 它比 Keras 的图像增强功能更强大,并且更可定制。它(这是一个经验性陈述)慢了 15%,但提供了更大的灵活性。我推荐的一件事是进行增强之前重塑图像。
【解决方案2】:

请记住,您不需要整个 ImageDataGenerator 就可以使用他们的数据增强功能。看看keras-preprocessingimage.py 模块——这里有你需要的一切!只需导入您需要的所有内容。例如:

# For any rotation/skewing/shifting/zooming
from keras.preprocessing.image import apply_affine_transform

# To play with brightness
from keras.preprocessing.image import random_brightness
from keras.preprocessing.image import apply_brightness_shift

# ... and more

似乎ImageDataGenerator 使用PIL 读取图像,根据我的测量,这比cv2 慢得多。

此外,正如 ma​​rcopah 所述,您可以优化数据馈送管道(消除 python,仅 tf.Queue)。

【讨论】:

    【解决方案3】:

    根据我的经验,Keras ImageDataGenerator 对于大多数用例来说足够快。 This reddit 线程有一些关于在线数据增强的讨论,this 教程有一些关于设置高效数据流的指导。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 2020-03-09
      相关资源
      最近更新 更多