Tensorflow .image.decode_ 内存释放

这篇博客探讨了在使用TensorFlow处理图像时遇到的内存问题。作者发现随着遍历并处理更多图像,程序运行速度减缓且物理内存持续增加。通过调试,确定原因在于decode操作后未正确释放图像内存。解决方案是在with语句外调用`tf.reset_default_graph()`来释放内存。提供了示例代码展示了解决内存泄漏问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写一个遍历文件夹内所有图像的函数,用tensorflow打开图像,crop成batch后在存到本地disk;

过程中随着打开图像的增加,代码的运行速度会越来越慢;

用内存管理工具看到物理内存会逐渐增加;

Debug了一下,应该是代码在decode图像之后并没有释放掉图像内存导致的;

在with外添加“tf.reset_default_graph()”即可解决;

实例代码如下(最后一行可以完成内存的释放,解决打开图像越多运行速度越慢的问题):

def get_imgpair(file_list):

    counter = 0
    for files in file_list:
        img_raw_data = tf.gfile.FastGFile(files, 'rb').read()
        with tf.Session() as sess:
            img_data = tf.image.decode_png(img_raw_data)
            for ln in range(0, DATA_HEIGHT, 100):
                for px in range(0, DATA_WIDTH, 100):
                    if ln+BATCH_HEIGHT >= DATA_HEIGHT or px+BATCH_WIDTH >= DATA_WIDTH:
                        continue
                    else:
                        counter = counter + 1
                        img_crop = tf.image.crop_to_bounding_box(img_data, ln, px, BATCH_HEIGHT, BATCH_WIDTH)
                        img_sv = tf.image.encode_png(img_crop)
                        with tf.gfile.GFile(train_batch_path+'src/'+str(counter), 'wb') as f:
                            f.write(img_sv.eval())
        tf.reset_default_graph()    # release pic memory

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值