【问题标题】:Images feeding to deep neural network图像馈送到深度神经网络
【发布时间】:2018-08-02 19:00:37
【问题描述】:

假设您有一个数据集所在的文件夹(很多图像)。 您想将这些图像提供给深度神经网络进行训练(对我来说,我现在使用 Tensorflow)。

想到的第一个解决方案(非常不优雅和初学者的解决方案)是将图像存储在一个数组中。这对于一个小数据集来说是可以的,但是当数据集很大并且图片很大时,这不是一个可行的解决方案,因为我们没有足够的内存。

解决方法是批量读取数据。

我正在尝试实现这一点。我感兴趣的数据集是 cultech 的 Caltech-UCSD Birds 200。该数据集提供了一个文本文件,其中每行包含每个图像的路径。 这有利于事情。 我的解决方案(我正在尝试实现)是定义一个类。模板是:

class Dataset : 
          attributes : 
                  images_paths
                  labels 
                  current_batch_index
                  batch_size
                  classes_names
          methodes : 
                  get_next_batch() 
                  shuffle()
                  normalize()

一旦我实例化了这个类的一个对象,所有图像的路径都存储在变量 images_paths 中,ground_truth 标签存储在标签中 (one_hot_encoded)。 get_next_batch() 方法将使用 current_batch_index 返回一个数组,我们使用路径存储实际图像。数组的大小是 batch_size,从 images_path 和 labes 读取的索引是 (current_batch_index,current_batch_index+batch_size)。 (我使用 scipy.misc.imread 读取图像并将它们重塑为固定形状( 200x200 )使用 scipy.misc.reshape )。

这样我将使用该对象在内存中仅存储一个批次,并在训练循环中使用它来将其提供给网络。

问题:您对此有何看法?您如何正常将图像输入网络?有工具吗?有没有工具可以分割你的数据集?

F.Y.I:我正在使用 python 和 tensorflow。知道 C++ 的这些问题的答案也会很有趣。

谢谢你,很抱歉发了这么长的帖子

【问题讨论】:

    标签: tensorflow machine-learning deep-learning


    【解决方案1】:

    Tensorflow 允许根据需要从磁盘批量读取数据,并具有提前缓冲数据以减少延迟的方法(即,当第 3 批通过网络运行时,第 4 批位于内存中,第 5 批在被加载到批处理 2 曾经所在的内存中。)查看tf.data 库。 cifar10 example 会按照您的要求执行操作,但 cifar10 的格式很奇怪,因此需要进行一些调整。

    谁有更好的例子?

    【讨论】:

    • 在“如何为 TF 读取数据”的汤中添加异国情调的成分。我建议除了提供high-performance 之外,还可以查看bullet-proof LMDBs 和所有its advantagestfrecord 的一个缺点是缺少随机读取功能(是的,您可以通过分片和本地随机播放来伪造它)。
    • 谢谢,我正在阅读 tf.data 的文档。看来我必须为我的数据集创建一个 tfrecord。这个小数据集(大约 12000 张图像)是否工作量太大?
    • @Volta,这不是那么的工作。不过,关于你的具体情况,我没有足够的信息来做出判断。
    猜你喜欢
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2019-12-02
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    相关资源
    最近更新 更多