在Python中导入图像的有效方法

问题描述 投票:1回答:1

我有一个大约22,000张图像的数据集(整个过程大约900 Mb)我想将它导入Python以训练CNN。

我使用以下代码导入它并将其全部保存在一个名为X的数组中:

import scipy.misc as sm

for i in range (start, end):

    imageLink = "./dataSet/" + str(dataSet[i, 0]) + "/" + str(dataSet[i, 1])
    image = sm.imread(imageLink)
    X = np.append(X, image, axis = 0)

这有几个问题,

  1. 它非常慢。大约30分钟只将大约1000个图像导入到python中,随着图像数量的增加它变慢。
  2. 它占用了大量的RAM。导入大约2000个图像需要大约16 GB的RAM(我的机器只有16GB,所以我最终使用交换内存,这使得它更慢,我想)。

图像大小均为640×480。

我做错了什么或这是正常的吗?是否有更好/更快的方法来导入图像?

谢谢。

python performance image-processing
1个回答
1
投票

以下是此类任务的一些常规建议:

  1. 升级到快速SSD,如果你还没有。无论处理是什么,快速硬件都至关重要。
  2. 不要将整个数据集加载到内存中。构建一个加载的批处理机制,例如一次100个文件,处理它们,并释放下一批的内存。
  3. 在处理第一个批处理时,使用第二个线程构建下一个批处理。
  4. 引入一个单独的预处理步骤,将通过imread读取的JPEG图像转换为Numpy数据结构,并执行所有必需的规范化步骤。将Numpy对象存储到磁盘,以便您的主要培训过程只需要使用numpy.fromfile()读取它们。
© www.soinside.com 2019 - 2024. All rights reserved.