代码之家  ›  专栏  ›  技术社区  ›  Chan Kha Vu

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

  •  3
  • Chan Kha Vu  · 技术社区  · 6 年前

    我正在培训Tensorflow模型,我想实施一个有效的 在线数据扩充 ,我希望它工作得足够快,这样就不会成为训练中的瓶颈(这样数据将比GPU上模型的前后循环更快地反馈到GPU)。然而,我之前有过Keras的经验 ImageDataGenerator 看起来效果不错。所以我的问题是:

    我应该使用Keras吗,仅仅因为它 图像数据生成器 ?它是否比我使用OpenCV可能实现的更快(考虑到Keras one缺少我可能需要的一些功能,尽管我不确定我是否真的需要它们)?

    或者,如果您不能明确回答,请分享您的数据增强优化经验。如果您曾经对类似的东西进行过基准测试(比较了速度性能),也请分享。非常感谢您的帮助。提前谢谢。

    PS: 数据从HDD加载。

    3 回复  |  直到 6 年前
        1
  •  5
  •   photeesh    6 年前

    如果有人觉得这很有用,就把它贴出来。

    我建议你看看 imgaug 。 您可以使用pip进行安装:

    pip install imgaug
    

    根据我的经验,它有很多增强选项,速度很快,但我不知道它是否适合你的需要。你可以检查一下。

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

        2
  •  4
  •   Dmitrii    6 年前

    请记住,你不需要全部 ImageDataGenerator 能够使用他们的数据扩充。看看 image.py 的模块 keras-preprocessing -你这里有你需要的一切!只需导入所有需要的内容。例如:

    # 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
    

    看起来像是 图像数据生成器 使用 PIL 读取图像,这比 cv2 根据我的测量。

    此外,作为 马尔科帕 如上所述,您可以优化数据馈送管道(仅消除python tf.Queue )。

        3
  •  2
  •   marcopah    6 年前

    凯拉斯 ImageDataGenerator 根据我的经验,对于大多数用例来说,速度足够快。 This reddit线程对在线数据扩充和 this 本教程对设置有效的数据流有一些指导。