如何在不耗尽内存的情况下将14,000个图像数据集加载到变量中?

问题描述

我正在尝试创建一个函数,以将14,000张图像的大图像数据集加载到变量中,但遇到内存(RAM)问题。

我要制作的是类似cifar100.load_data的函数,但对我来说不起作用。

我定义的函数如下:

    def load_data():
        trn_x_names=os.listdir('data/train_x')
        trn_y_names=os.listdir('data/train_y')
    
        trn_x_list=[] 
        trn_y_list=[]
    
        for image in trn_x_names[0:]:
            img=cv2.imread('data/train_x/%s'%image)
            img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
            trn_x_list.append(img)
        
        for image in trn_y_names[0:]:
            img=cv2.imread('data/train_y/%s'%image)
            img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
            trn_y_list.append(img)
        
        x_train= np.array(trn_x_list)
        y_train= np.array(trn_y_list)
        return x_train,y_train

我首先一张一张地加载所有图像,将它们添加到相应的列表中,最后将这些列表更改为numpy数组,并将其分配给某些变量并返回它们。但是在途中,我遇到了RAM问题,因为它消耗了我100%的RAM。

解决方法

您需要分批读取图像,而不是将整个数据集加载到内存中。如果您正在使用tensorflow,请使用ImageDataGenerator.flowfrom目录。文档为here.。如果您的数据未组织到子目录中,则需要创建一个python生成器,以分批读取数据。您可以看到如何构建这样的生成器here.。将批次大小设置为一个值30,该值将不会占用您的内存。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...