Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中导入图像的有效方法_Python_Performance_Image Processing - Fatal编程技术网

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

在Python中导入图像的有效方法,python,performance,image-processing,Python,Performance,Image Processing,我有一个大约22000个图像的数据集(整个数据集大约900MB),我想将它导入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 =

我有一个大约22000个图像的数据集(整个数据集大约900MB),我想将它导入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)
这其中有一些问题

  • 速度太慢了。大约30分钟只将大约1000个图像导入python,并且随着图像数量的增加,导入速度会变慢

  • 它占用了很多内存。导入大约2000个图像需要16GB的RAM(我的机器只有16GB,所以我最终使用的是交换内存,我想这会使它更慢)

  • 图像大小均为640 × 480.

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


    多谢各位

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

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

  • 啊,我明白了。这真的很有帮助。非常感谢你!嗯,附加到数组/列表并不快,可能会占用内存。请注意,追加实际上是整个数组的副本,并在末尾添加新元素。相反,因为您知道数组的大小(您知道要使用多少图像),所以可以预先分配数组(np.zeros()或np.empty())并使用索引将其放置在数组中。应该会加快你的循环速度,也可能有助于解决内存问题…我明白了。我不知道。我会做出改变。非常感谢。让我们知道改变的影响有多大……好吧,就这样吧!