面向Tensorflow学习的Opencv预处理内存增长

jxct1oxe  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(183)

使用tensorflow 学习图像模型。
在opencv中读取图像,并从0归一化为1。
但是记忆会增长很多。
原因是什么?

  1. def create_dataset(img_folder):
  2. img_data_array=[]
  3. class_name=[]
  4. for path in os.listdir(img_folder):
  5. for file in os.listdir(os.path.join(img_folder, path)):
  6. continue
  7. image_path = os.path.join(img_folder, path, file)
  8. image = cv2.imread( image_path, cv2.COLOR_BGR2GRAY)
  9. image = cv2.resize(image, (HEIGHT, WIDTH),interpolation = cv2.INTER_AREA)
  10. image = np.array(image)
  11. image = image.astype('float') / 255 # <-- Here
  12. img_data_array.append(image)
  13. class_name.append(path)
  14. return img_data_array, class_name

image =图像类型("浮点型")/255
我在这部分用了太多内存。

ws51t4hk

ws51t4hk1#

内存会增加,因为在每次迭代中都要向列表添加numpy数组。
根据数据集的大小,你可能无法在ram中加载完整的数据集,这个问题通常可以通过加载器来缓解,pytorch有dataloaders,tensorflow有tf.data
对于这个特定的调整大小操作,将这些调整大小的图像输出到一个目录,并根据需要成批读取图像可能更好(也是常规的)。
在image.astype('float')/ 255期间内存不足的原因是因为从uint 8到float 32,对于调整大小的图像,内存使用增加了4倍。

相关问题