如何在不耗尽内存的情况下将 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。


慕尼黑8549860
浏览 82回答 1
1回答

动漫人物

您需要分批读取图像,而不是将整个数据集加载到内存中。如果您使用的是 tensorflow,请使用 ImageDataGenerator.flowfrom 目录。如果您的数据没有组织到子目录中,那么您将需要创建一个 python 生成器来批量读取数据。您可以在此处查看如何构建这样的生成器。. 将批量大小设置为一个不会填满您的内存的值,例如 30。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python