数据扩充:keras ImageDataGenerator与手动加载和扩充

时间:2018-05-15 12:55:43

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

我正在Tensorflow中培训模型,我希望实现有效的在线数据增强,我希望它能够以足够快的速度运行,这样它就不会成为瓶颈训练(这样可以比GPU上模型的前后循环更快地将数据提供给GPU)。但是,我以前有过Keras的经验,它的ImageDataGenerator看起来非常整洁。所以我的问题是:

  

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

或者,如果您无法回答,请分享您的数据扩充优化经验。如果您曾经对类似的东西进行基准测试(比较速度性能),请分享。任何帮助表示赞赏。提前谢谢。

PS:数据从硬盘加载。

3 个答案:

答案 0 :(得分:2)

请记住,您不需要整个ImageDataGenerator就能使用其数据扩充功能。看看keras-preprocessing的{​​{3}}模块-您这里拥有所需的一切!只需导入您需要的所有内容即可。例如:

# 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慢得多。

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

答案 1 :(得分:1)

Keras ImageDataGenerator在我的体验中对于大多数用例而言足够快。 This reddit线程有一些关于在线数据扩充的讨论,this教程在设置有效数据流方面有一些指导。

答案 2 :(得分:0)

只是发布此内容,以防有人觉得有帮助。

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

pip install imgaug

以我的经验,它有很多增强选项,而且速度很快,但我不知道它是否适合您的需求。您可能想检查一下。

以下是一些示例: enter image description here