【发布时间】:2021-06-23 10:33:08
【问题描述】:
我有一个从 Google 驱动器导入的大约 10,000 张图像的大型数据集,我希望将它们变成一个 numpy 数组,以便我可以训练我的机器学习模型。问题是我的方式耗时太长,而且在 RAM 上非常占用空间。
from PIL import Image
import glob
train_images = glob.glob('/content/drive/MyDrive/AICW/trainy/train/*.jpg')
x_train = np.array([np.array(Image.open(image)) for image in train_images])
这些代码行即使在 30 分钟后仍在运行,即使我设法获得了一个 numpy 数组。它是不同尺寸和尺寸的图像的集合(例如,一些是 450 X 600,另一些是 500 X 600),当我将它们输入我的模型时会出现问题。一定有一种更节省时间和空间的方法吧?
P.s 我在 Google colab 上运行所有这些。图像总数为 10,270。尺寸因图像而异,但它们的尺寸通常为 450 x 600 x 3。
【问题讨论】:
-
将图像调整为更小并批量训练?
-
在
Image中查找调整大小的方法。在尝试将它们组合到数组之前执行此操作。你的机器学习模型是什么?来自keras之类的导入,还是您自己的numpy?从您的描述中很难判断缓慢是由于图像数量的剪切,还是您达到了内存管理限制。 -
450*600*3*10270/1e9是 8Gb 元素。将其乘以 1、4 或 8,具体取决于dtype。 -
将最后一行的列表转换为 numpy 数组并没有太大的优势,而且您可以更灵活地使用列表(例如,用于内存管理)。
-
您可以并行加载它们,尽管这在 Python 中很麻烦(您需要使用多处理,这不太适合您进行计算...
标签: python numpy python-imaging-library google-colaboratory