如何使用python快速加载图像?

时间:2017-05-20 08:16:23

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

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

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

本文中有数据集(此数据集包含每个网址/图像的图像和标签的网址),而我遇到的问题是按网址下载图片并为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针对处理数据进行了优化,但我不是在处理数据而是预处理。

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

谢谢

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

现在,您已经将映像下载到磁盘上-如果使用的是keras,则可以使用keras的“生成器”。这将使您仅加载以下几张图像就可以有效地使用RAM,并且还可以大大加快代码的速度。

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

mysqli_fetch_assoc()