首页 > 解决方案 > 读取和保存图像的内存和速度更高效的方式?

问题描述

我正在训练一个神经网络。因此,我使用下面的代码读取了 182335 个图像(png 文件)。

folders = glob.glob(r'path\to\images\*')
imagenames_list = []
for folder in folders:
    for f in glob.glob(folder+'/*.png'):
        imagenames_list.append(f)
read_images = []        

for image in imagenames_list:
    read_images.append(cv2.imread(image))

在对数据进行一些预处理后,我创建了一个 pandas 数据框并将其保存为一个 pickle 文件:

df.to_pickle(r'data\data_as_pddataframe.pkl')

df.head()

标题

由于图像数量巨大,我有一个相对较大的泡菜文件(3GB)。正因为如此,读取该文件需要一些时间,并且还需要大量内存。此外,当我准备在 Google Colab 中训练网络时,恰巧 Colab 因为数据量大而崩溃。

因此,是否有更有效的方法 1. 读取数据和 2. 存储数据帧?

谢谢!

标签: pythonpandaspickle

解决方案


我会做这样的事情:

  1. 确保模型的批量大小足够小,以使输入数据和模型参数适合内存。
  2. 将图像保存为磁盘上的图像。将非图像数据保存为 Parquet、CSV 或其他格式(不要为此使用 Pickle)。将图像文件名放在表中。
  3. 将数据保存在磁盘上,不要将其全部加载到内存中。
  4. 将非图像数据加载为常规数据框。仅当 SGD 中的批处理需要时才从磁盘加载图像。

推荐阅读