在深度学习中使用 numpy 数组图像和使用图像文件有什么区别?

数据挖掘 深度学习 喀拉斯 张量流 计算机视觉 卷积神经网络
2022-03-11 06:39:49

在深度学习中使用numpy 数组图像和使用图像文件有什么区别?

哪种方式更好?

2个回答

为了将图像作为输入传递给模型,首先需要将其转换为 numpy 数组。当您将其加载到 python 中时,每个图像实际上都表示为一个值数组。即使您没有明确地这样做(即通过 keras' ImageDataGenerator),它也是在幕后完成的。

如果您的问题是:使用生成器是否比在大型 numpy 数组中加载图像更好?

答案是:视情况而定数据集是否足够小以适合您的记忆?

如果没有,您将被迫使用生成器来批量加载图像并将每批图像传递给模型。

如果,您可以使用生成器为其他事物(例如模型)节省内存,或者您可以将图像加载到 numpy 数组中,这样您就可以节省计算时间(即一次又一次地加载图像的开销)。

原则上,它们完全相同。

一个 numpy 数组将保存在磁盘上的图像的 RGB 值保存在内存容器 ( numpy.ndarray) 中。这个容器提供了某些内置功能,例如进行一些花哨的切片的能力。一个例子是在垂直轴上翻转图像,给出一个镜像:

flipped =image[:, ::-1]         # memory efficient and therefore fast

Numpy 数组无法完成我们建模所需的一切,尤其是在使用 Tensorflow 或 PyTorch 的 GPU 上。因此,我们将 numpy 数组传递给这些框架,它们在它们上放置了另一个包装器,使它们成为张量对象。

这些对象具有根据我们对深度学习的需求量身定制的特殊方法和属性。他们可以做一些事情,比如存储梯度信息或在操作之前/之后推断张量的形状——所有这些都让我们的生活更轻松。

使用他们自己的工具将图像直接加载到深度学习框架中,将跳过 numpy 步骤并直接进入张量。当您的管道已经设置并且您不需要执行任何预处理时,这很好。

PyTorch 有它的基本张量对象;但是,它允许您执行大多数可以在标准 numpy 数组上执行的操作,许多人认为这是该框架的一大优势。