将图像转换为numpy数组时如何减少RAM使用量?

时间:2019-07-25 20:20:37

标签: python machine-learning

我正在尝试将3618和480x480大小的大型RGB图像数据集转换为numpy数组,但是由于RAM问题而停止了操作。

我尝试了许多解决方案,但没有一个起作用。

这是我尝试的代码:

   def batching_function(imlist, batchsize):
       ims = []
       if batchsize < len(imlist):
         batch = imlist[:batchsize]
       elif batchsize == len(imlist):
         batch = imlist[:batchsize-1]
       else:
         batch = imlist[:len(imlist)-1]

       ims = np.array(batch,dtype='float32')
       new_imlist = imlist[batchsize:]
       return ims, new_imlist



   imlist = dataset # list of arrays of images : size = 3617 , dataset[1].shape = (480, 480, 3)
   batchsize = 100
   total_files =  3618
   ims0 = np.empty((0,480, 480, 3))
   for i in range(int(total_files/batchsize)+1):    
           imsnew, imlist = batching_function(imlist, batchsize)
           ims0 = np.concatenate((ims0, imsnew))

1 个答案:

答案 0 :(得分:0)

函数numpy.savez_compressed可以作为第一个参数bufor而不是文件路径来获取。与numpy.load相同。因此,您可以压缩部分图像以暂时减小图像的大小。

但是,如果这样做会花费您额外的计算时间。

numpy.ndarray以无限制的形式存储数据以加快访问速度。并且不能减少RAM使用而不会丢失信息(例如转换为numpy.float16