更多的内存和速度有效的方式来读入和保存图像?
More memory and velocity efficient way to read in and save images?
我正在训练神经网络。因此,我使用下面的代码读取了 182335 张图片 (png-files)。
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-file:
df.to_pickle(r'data\data_as_pddataframe.pkl')
df.head()
由于图像数量庞大,我有一个相对较大的 pickle 文件 (3GB)。因此,读取该文件需要花费一些时间,并且还需要大量内存。此外,当我准备在Google Colab中训练网络时,恰好Colab因为数据量巨大而崩溃。
因此,是否有更有效的方法 1. 读取数据和 2. 存储数据帧?
谢谢!
我会这样做:
- 确保模型的批量大小足够小,以便输入数据和模型参数适合内存。
- 将图像保存为磁盘上的图像。将非图像数据保存为 Parquet、CSV 或其他格式(不要为此使用 Pickle)。将图像文件名放在 table.
- 将数据保存在磁盘上,不要将其全部加载到内存中。
- 将您的非图像数据加载为常规数据框。仅当您的批次需要 SGD 时才从磁盘加载图像。
我正在训练神经网络。因此,我使用下面的代码读取了 182335 张图片 (png-files)。
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-file:
df.to_pickle(r'data\data_as_pddataframe.pkl')
df.head()
由于图像数量庞大,我有一个相对较大的 pickle 文件 (3GB)。因此,读取该文件需要花费一些时间,并且还需要大量内存。此外,当我准备在Google Colab中训练网络时,恰好Colab因为数据量巨大而崩溃。
因此,是否有更有效的方法 1. 读取数据和 2. 存储数据帧?
谢谢!
我会这样做:
- 确保模型的批量大小足够小,以便输入数据和模型参数适合内存。
- 将图像保存为磁盘上的图像。将非图像数据保存为 Parquet、CSV 或其他格式(不要为此使用 Pickle)。将图像文件名放在 table.
- 将数据保存在磁盘上,不要将其全部加载到内存中。
- 将您的非图像数据加载为常规数据框。仅当您的批次需要 SGD 时才从磁盘加载图像。