donggong1 / learn-optimizer-rgdn

Learning Deep Gradient Descent Optimization for Image Deconvolution. Dong Gong, Zhen Zhang, Qinfeng Shi, Anton van den Hengel, Chunhua Shen, Yanning Zhang. In IEEE Transactions on Neural Networks and Learning Systems (TNNLS), 2020.
https://arxiv.org/pdf/1804.03368.pdf
MIT License
32 stars 11 forks source link

I want to test on Levin, However, the results seem to be failed. #9

Open LiuzhuForFun opened 2 years ago

LiuzhuForFun commented 2 years ago

Can you give me some suggestions? `

for im_index in range(4): gt_name = r'data/levindata/img%d.png' % (im_index + 1) gt = cv2.imread(gt_name,0) gt = gt / 255

gt= gty[..., np.newaxis]

    # gt = np.concatenate([gt,gt,gt],axis=2)
    for ker_index in range(8):
        im_name = r'data/levin_data/im_%d_ker_%d.png' % (im_index + 1, ker_index + 1)
        ker_name = r'data/levin_data/kernel_%d.dlm' % (ker_index + 1)
        ker = np.loadtxt(ker_name).astype(np.float)
        ker = np.clip(ker, 0, 1)
        ker = ker / np.sum(ker)
        y =cv2.imread(im_name)/255.0
        # y = ndimage.convolve(gt, ker, mode='wrap')
        np.random.seed(1512818945)
        y = y
        y = np.clip(y, 0, 1.0)
        y = ((y * 255.0).astype(np.uint8) / 255.0).astype(np.float32)

        # y = np.concatenate([y,y,y],axis=2)
        # y = y+ test_sigma * np.random.standard_normal(size=y.shape)
        y = to_tensor(y,device)
        x = to_tensor(gt,device)
        k = to_tensor(ker,device)
        kt =torch.flip(k, [1, 2])
        y, kt, k = y.to(device), kt.to(device), k.to(device)

        k_size = k.size()[2]
        padding_size = int((k_size / 2) * 1.5)
        y = conv2d_same_padding(x, k).to(device)
        # nl = np.random.uniform(0.003, 0.015)
        y = y + 0.01 * torch.randn_like(y).to(device)
        y = torch.clamp(y * 255.0, 0, 255)
        y = y.type(torch.ByteTensor)
        y = y.float() / 255.0
        y = y.to(device)

        y = torch.nn.functional.pad(y, [padding_size, padding_size, padding_size, padding_size], mode='replicate')

        start = time.time()
        y = torch.cat([y,y,y],dim=1)
        output_seq = trained_model(y, k, kt)
        # output_len = len(output_seq)
        x_final = output_seq[-1]
        # print('Time {}'.format(time.time() - start))

        ##
        # if (opt.ImgPad):
        y = utils.truncate_image(y, padding_size)
        x_final = utils.truncate_image(x_final, padding_size)

        x_est_np = x_final.cpu()

        print(np.shape(x_est_np))
        x_est_np = utils.tensor_to_np_img(x_est_np)
        #

        x_est_np = utils.box_proj(x_est_np)

        # sample_name_full = sample_name[0]
        # sample_name = sample_name_full[0:len(sample_name_full) - 4]
        x_est_np = np.array(x_est_np).astype(np.float)
        PSNR_list.append(psnr(gt,x_est_np[:,:,0]))
        SSIM_list.append(compute_ssim(gt,x_est_np[:,:,0],L=1.0))
        # sio.savemat(outpath + sample_name + '_estx.mat', {'x_est': x_est_np})
        scipy.misc.imsave('./data/levin_test/' + str(im_index+1)+'_'+str(ker_index+1) + '_estx.png', x_est_np * 255)
        torch.cuda.empty_cache()

`

LiuzhuForFun commented 2 years ago

@donggong1 Thanks

LiuzhuForFun commented 2 years ago

On the gray scale of levin, the test results are 10.92dB and 0.085 SSIM