在Python

时间:2017-12-24 13:46:09

标签: python performance image-processing

我有一个大约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. 占用大量内存。导入大约2000个图像需要大约16 GB的RAM(我的机器只有16GB,所以我最终使用交换内存,这使得它更慢,我想)。

  3. 图像尺寸均为640×480。

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

    谢谢。

1 个答案:

答案 0 :(得分:1)

以下是此类任务的一些一般性建议:

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