我正在Tensorflow中培训模型,我希望实现有效的在线数据增强,我希望它能够以足够快的速度运行,这样它就不会成为瓶颈训练(这样可以比GPU上模型的前后循环更快地将数据提供给GPU)。但是,我以前有过Keras的经验,它的ImageDataGenerator
看起来非常整洁。所以我的问题是:
我应该使用Keras,只是因为它的
ImageDataGenerator
?它是否比我使用OpenCV可能实现的更快(考虑到Keras缺少我可能需要的一些功能,尽管我不确定我是否真的需要它们)?
或者,如果您无法回答,请分享您的数据扩充优化经验。如果您曾经对类似的东西进行基准测试(比较速度性能),请分享。任何帮助表示赞赏。提前谢谢。
PS:数据从硬盘加载。
答案 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)
答案 2 :(得分:0)
只是发布此内容,以防有人觉得有帮助。
我建议看一下imgaug。 您可以使用pip安装它:
pip install imgaug
以我的经验,它有很多增强选项,而且速度很快,但我不知道它是否适合您的需求。您可能想检查一下。