【发布时间】:2021-12-10 20:47:00
【问题描述】:
我尝试将大量 (54K) 512x512x3 .png 图像读入一个数组,然后创建一个数据集并提供给 Keras 模型。我正在使用下面的代码,但是我得到了指向我代码第四行的 cv2.OutofMemory 错误(在图像 50K 左右...)。我一直在阅读有关它的信息,并且:我使用的是 64 位版本,并且图像无法调整大小,因为它是固定的输入表示。有什么可以从内存管理方面做的事情来使它工作吗?
''' #图片 (512x512x3) X_data = [] 文件 = glob.glob ('C:\Users\77901677\Projects\images1\*.png') 对于文件中的 myFile: 图像 = cv2.imread (myFile) X_data.append(图片)
dataset_image = np.array(X_data)
# Annontations (multilabel) 512x512x2
Y_data = []
files = glob.glob ('C:\\Users\\77901677\\Projects\\annotations1\\*.png')
for myFile in files:
mask = cv2.imread (myFile)
# Gets rid of first channel which is empty
mask = mask[:,:,1:]
Y_data.append (mask)
dataset_mask = np.array(Y_data)
'''
欢迎任何想法或建议
【问题讨论】:
-
又快又脏可能是在错误之前停止加载?丢弃约 10% 的数据不会对您造成太大影响……
-
感谢@Julien 的回复。是的,这是一个很好的观点,如果没有更好的结果,肯定会这样做:)
-
不要一次将所有图像加载到内存中。见machinelearningmastery.com/…
-
嗨@Miki,这也是个好主意。但是,查看 image_dataset_from_directory 我不确定它的“标签”参数是否可以支持我的用例。我想做多标签语义分割,所以我的标签是 512x512x2,每个像素包含两个类。
标签: python numpy tensorflow keras