【问题标题】:How to load images fast with python?如何使用 python 快速加载图像?
【发布时间】:2017-10-20 09:07:16
【问题描述】:

我正在使用卷积神经网络 (CNN) 进行实验。

我想做的是实现与CNN相关的论文。

我有这篇论文的数据集(这个数据集有图像的 url 和每个 url/图像的标签),我被困的地方是按 url 下载图像并为 CNN 提取像素。

我的代码如下:

pixels = np.array(data["IMAGE_URL"].apply(image_from_url).tolist())

def image_from_url(_url=None):
    with urllib.request.urlopen(_url) as url:
        f = BytesIO(url.read())

    img = Image.open(f)
    img = img.resize((224, 224), Image.ANTIALIAS)
    arr = array(img,dtype="float32")

样本大小为 50000,使用此代码,我收到以下错误:

ConnectionResetError: [Errno 104] 对等方重置连接

我花了几个小时来检查是否出现了错误。 我需要一些更有效的方法来处理这个。

Numpy 和 pandas 已针对处理数据进行了优化,但我被困在的不是数据而是预处理。

对这种情况有什么建议吗?

谢谢

【问题讨论】:

  • 看起来你正在将所有图像加载到内存中,你够了吗?另外,你为什么不下载一次,到本地磁盘,然后从那里处理,这样你重新运行时就不必重新下载?您能否编辑您的问题以包含指向论文和数据集的链接?
  • @barny 感谢您的建议,然后将图像下载到磁盘后,我认为问题仍然存在于将图像加载到内存中。我应该逐渐加载图像并处理它们吗?
  • 新的错误是什么?
  • @hpaulj 谢谢我刚刚解决了错误“文件太多”,现在我遇到了进程在运行时被终止的问题

标签: python numpy neural-network conv-neural-network pillow


【解决方案1】:

如果您使用 Keras,请使用 ImageGenerator。 如果您使用 Pytorch,请使用 torchvision。

简而言之,当您无法将所有内容加载到内存中时,您必须使用生成器批量加载和训练。

【讨论】:

    【解决方案2】:

    现在您已将图像下载到磁盘 - 如果您使用的是 keras,您可以使用 keras“生成器”。这将允许您通过仅加载接下来的几个图像来有效地使用 RAM,并且它还将大大加快您的代码速度。

    这是因为 keras 异步加载下一批图像,而 GPU 在当前补丁上进行训练。试试这样的:

    from keras.preprocessing.image import ImageDataGenerator
    
    datagen = ImageDataGenerator()
    
    model.fit_generator(datagen.flow(x_train, y_train, batch_size=32),
                        steps_per_epoch=len(x_train) / 32, max_queue_size=50)
    

    【讨论】:

      猜你喜欢
      • 2015-04-22
      • 2018-12-29
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 2013-04-03
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多