AODNet复现: 用gpu批量处理图片

import cv2
import os
import torch
import torch.optim
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt



def dehaze_image(image_addr, name):
    data_hazy = Image.open(image_addr)
    data_hazy = np.array(data_hazy) / 255.0

    data_hazy = torch.from_numpy(data_hazy).float()
    data_hazy = data_hazy.permute(2, 0, 1)
    data_hazy = data_hazy.unsqueeze(0)
    # print(type(data_hazy))
    dehaze_net = torch.load('saved_models/dehaze_net_epoch_17.pth', map_location=torch.device('cuda'))
    data_hazy_cuda = data_hazy.cuda()
    # print(type(data_hazy_cuda))
    # clean_image = dehaze_net(data_hazy).detach().numpy().squeeze()
    clean_image = dehaze_net(data_hazy_cuda).cpu()
    clean_image = clean_image.detach().numpy().squeeze()
    clean_image = np.swapaxes(clean_image, 0, 1)
    clean_image = np.swapaxes(clean_image, 1, 2)

    # save_addr = './results/' + name + '.png'
    save_addr = './results/' + name# ots
    # print('saveaddr:', save_addr)
    # print('yes')
    plt.imsave(save_addr, clean_image)


def dehazeFile(img_Dir):
        img_pathDir = os.listdir(img_Dir)                           # 提取所有文件名,并存在列表中
        print("img_Dir:", img_Dir)                                              # 输出文件路径
        print("img_pathDir:", img_pathDir)                                          # 输出文件名列表
        print(len(img_pathDir))                                     # 输出文件数
        num = 0
        for i in img_pathDir:
            addr = r"./test_images/" + i
            name = i.split("_")[0]
            # dehaze_image(addr, name)
            # print(i)
            dehaze_image(addr, i) #ots
            num = num + 1
            print('handling:{}/{}'.format(num, len(img_pathDir)))
        return


if __name__ == '__main__':
    img_Dir = './test_images'#本地文件路径
    dehazeFile(img_Dir)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用TensorFlow 2.0时,使用GPU进行计算可能会导致结果不能复现的问题。这是由于GPU计算的特点所致。 首先,GPU计算与CPU计算存在一定的差异。GPU具有高并行计算的能力,可以同时处理多个计算任务,而CPU则是逐个处理。这使得GPU在处理同一批次的数据时可能会出现微小的浮点计算误差,导致结果的微小差异。 其次,TensorFlow 2.0中的GPU计算还涉及到多线程和异步调度等机制。这些机制可以提高计算效率,但也可能导致计算的顺序不确定,进而导致结果的不确定性。 为了解决结果不能复现的问题,可以采取以下措施: 1. 使用相同的随机种子:在代码中设置随机种子,确保每次运行前相同的随机数生成序列。 2. 控制GPU的随机性:通过设置环境变量CUDA_VISIBLE_DEVICES为特定的GPU ID,限制使用固定的GPU设备。这样可以减少多GPU时计算顺序的不确定性。 3. 使用tf.config.run_functions_eagerly()开启即时执行模式:即时执行模式强制TensorFlow按照代码的书写顺序执行,避免了多线程和异步调度引起的结果不确定性。 4. 运行多次并取平均结果:由于GPU计算的微小差异可能会导致结果的微小变化,可以运行多次实验并取平均结果来减少误差。 值得注意的是,虽然采取了上述措施可以减小结果的不确定性,但由于GPU计算的特性,完全的结果复现可能是不可行的。因此,在进行科学研究或开发时,应该根据实际需求来评估是否需要对结果进行严格的复现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值