图像馈入深度神经网络

时间:2018-08-02 10:12:42

标签: tensorflow machine-learning deep-learning

假设您有一个文件夹,数据集位于该文件夹中(很多图像)。 您想将这些图像提供给Deep Neuro Network进行训练(对我而言,我现在使用Tensorflow)。

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

解决方案是分批读取数据。

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

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返回一个ana数组,在该数组中我们使用路径存储实际图像。数组的大小为batch_size,从images_path和labes读取的索引为(current_batch_index,current_batch_index + batch_size)。 (我使用scipy.misc.imread读取图像,并将其重塑为固定形状(200x200)(使用usig scipy.misc.reshape)。

这样,我将使用对象仅将一批存储在内存中,并在训练循环中使用该对象将其馈送到网络。

问题:您对此有何看法?正常情况下,您如何将图像输入到上网本?有工具吗?是否有用于拆分数据集的工具?

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

对您表示感谢,并为冗长的帖子表示歉意

1 个答案:

答案 0 :(得分:1)

Tensorflow允许根据需要从磁盘中批量读取数据,并具有提前缓冲数据以减少延迟的方法(即,当批处理3通过网络运行时,批处理4位于内存中,而批处理5位于网络中)将其加载到批次2以前的内存中。)签出tf.data库。 cifar10 example的功能与您的要求类似,但是cifar10格式很怪异,因此需要进行一些调整。

有人有更好的例子吗?