Python中大图像数据集的多处理

时间:2016-11-24 19:22:33

标签: python image-processing deep-learning

我有一个非常大的图像数据集(> 50G,文件夹中的单个图像)用于训练,以便更有效地加载图像,我首先将部分图像加载到RAM上然后将小批量发送到GPU进行训练。

我希望进一步加快数据准备过程 ,然后 将图像提供给GPU,并考虑进行多处理。但是我不确定我该怎么做,有什么想法吗?

2 个答案:

答案 0 :(得分:1)

为了速度,我建议使用HDF5或LMDB:

我已成功使用ml-pyxis创建使用LMDB的深度学习数据集。

它允许创建二进制blob(LMDB),并且可以非常快速地读取它们。 上面的链接提供了一些关于如何创建和读取数据的简单示例。包括python生成器/ iteratos

用于多处理:

我个人使用Keras,并且通过使用python生成器,可以使用fit_generator方法对数据进行多处理。

fit_generator(self, generator, samples_per_epoch,
              nb_epoch, verbose=1, callbacks=[],
              validation_data=None, nb_val_samples=None,
              class_weight={}, max_q_size=10, nb_worker=1,
              pickle_safe=False)

使用Python生成器逐批生成的数据使模型适合。为了提高效率,发电机与模型并行运行。例如,这允许您在CPU上并行处理图像上的实时数据增强,以在GPU上训练模型。您可以找到source code heredocumentation here

答案 1 :(得分:0)

不知道你是否更喜欢tensorflow / keras / torch / caffe。

多处理只是Using Multiple GPUs

基本上,您正在尝试通过为每个GPU委派或生成一个子进程来利用更多硬件,让他们发挥他们的魔力。上面的示例适用于 Logistic回归

当然,你会更热衷于研究Convnets - 这LSU Material(Pgs 48-52 [幻灯片11-14])建立了一些直觉

Keras尚未正式提供支持,但您可以"proceed at your own risk"

对于多处理,张量流是更好的方法(我的意见) 事实上,他们也有一些好的 documentation