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

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

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

def create_dataset(img_folder):
    img_data_array=[]
    class_name=[]

    for path in os.listdir(img_folder):
        for file in os.listdir(os.path.join(img_folder, path)):
                continue

            image_path = os.path.join(img_folder, path,  file)

            image = cv2.imread( image_path, cv2.COLOR_BGR2GRAY)

            image = cv2.resize(image, (HEIGHT, WIDTH),interpolation = cv2.INTER_AREA)

            image = np.array(image)
            
            image = image.astype('float') / 255 # <-- Here
         
            img_data_array.append(image)
            class_name.append(path)

    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倍。

相关问题