Exemplo n.º 1
0
# mode(str)- 模式选择,有 min 和 max 两种模式, min 表示当指标不再降低(如监测loss), max 表示当指标不再升高(如监测 accuracy)。
# factor(float)- 学习率调整倍数(等同于其它方法的 gamma),即学习率更新为 lr = lr * factor
# patience(int)- 忍受该指标多少个 step 不变化,当忍无可忍时,调整学习率。
# verbose(bool)- 是否打印学习率信息, print(‘Epoch {:5d}: reducing learning rate of group {} to {:.4e}.’.format(epoch, i, new_lr))
# threshold_mode(str)- 选择判断指标是否达最优的模式,有两种模式, rel 和 abs。
# 当 threshold_mode == rel,并且 mode == max 时, dynamic_threshold = best * ( 1 +threshold );
# 当 threshold_mode == rel,并且 mode == min 时, dynamic_threshold = best * ( 1 -threshold );
# 当 threshold_mode == abs,并且 mode== max 时, dynamic_threshold = best + threshold ;
# 当 threshold_mode == abs,并且 mode == max 时, dynamic_threshold = best - threshold;
# threshold(float)- 配合 threshold_mode 使用。
# cooldown(int)- “冷却时间“,当调整学习率之后,让学习率调整策略冷静一下,让模型再训练一段时间,再重启监测模式。
# min_lr(float or list)- 学习率下限,可为 float,或者 list,当有多个参数组时,可用 list 进行设置。
# eps(float)- 学习率衰减的最小值,当学习率变化小于 eps 时,则不调整学习率。

MSE_fun = nn.MSELoss()
SSIM_fun = SSIM()
CrossEntropyLoss = nn.CrossEntropyLoss()
with torch.no_grad():
    loss_network = LossNetwork()
    loss_network.to(device)
loss_network.eval()

# Training
mse_train = []
ssim_train = []
loss_train = []
mse_val = []
ssim_val = []
loss_val = []
gradient_train = []
mkdir(train_path)
Exemplo n.º 2
0
    mean_fid = cfd(mf, sf, mr, sr)
    
    print(FOLDER)
    print('FID: ', mean_fid)
    print('Mean PSNR: ', mean_psnr / len(file_chunks))
    print('Mean SSIM: ', mean_ssim / len(file_chunks))
    print('Mean MS_SSIM: ', mean_msssim / len(file_chunks))
        
    with open(FOLDER + '_metrics.txt', 'w') as f:
        f.write('FID: %.6f\n' % mean_fid)
        f.write('Mean PSNR: %.6f\n' % (mean_psnr / len(file_chunks)))
        f.write('Mean SSIM: %.6f\n' % (mean_ssim / len(file_chunks)))
        f.write('Mean MS_SSIM: %.6f\n' % (mean_msssim / len(file_chunks)))
    
if __name__ == '__main__':
    ssim = SSIM(window_size=11, window_sigma=1.5, data_range=1., channel=3, use_padding=False).cuda()
    msssim = MS_SSIM(window_size=11, window_sigma=1.5, data_range=1., channel=3, use_padding=False).cuda()
    block_idx = InceptionV3.BLOCK_INDEX_BY_DIM[2048]
    fid_model = InceptionV3([block_idx]).cuda()
    
    #FOLDER = '/home/lingbo.ylb/projects/pg_spade_face_v4/results/face_enhan_dixian.wp_16x'
    #FOLDER = '/home/lingbo.ylb/projects/pg_spade_face_v4/results/face_enhan_lingbo.ylb_16x_subadd_encoder'
    #FOLDER = '/home/lingbo.ylb/projects/pg_spade_face_v4/results/face_enhan_lingbo.ylb_16x_spade'
    
    #FOLDER = '/home/lingbo.ylb/projects/pg_spade_face_v4/results/face_enhan_lingbo.ylb_3mix_LIP_encoder'
    #FOLDER = '/home/lingbo.ylb/projects/pg_spade_face_v4/results/face_enhan_lingbo.ylb_motion_blur_LIP_encoder'
    #FOLDER = '/home/lingbo.ylb/projects/face_sr_sota/PyTorch-ARCNN/results'
    #FOLDER = '/home/lingbo.ylb/projects/pg_spade_face_v4/results/face_enhan_lingbo.ylb_jpeg_LIP_encoder'
    #FOLDER = '/home/lingbo.ylb/projects/pg_spade_face_v4/results/mixed2jpeg'
    #FOLDER = '/home/lingbo.ylb/projects/face_sr_sota/ESRGAN/results/ESRGAN-V1-FFHQ-16x'
    #FOLDER = '/home/lingbo.ylb/projects/face_sr_sota/VDNet-master/results/noise'
Exemplo n.º 3
0
counter = 0

for i, data in enumerate(dataset):
    if i >= opt.how_many:
        break
    counter = i
    model.set_input(data)
    model.test()
    visuals = model.get_current_visuals()
    if opt.dataset_mode != 'single':
        real_B = util.tensor2im(data['B1'])

        avgPSNR += PSNR(visuals['Restored_Train'], real_B)
        pilFake = Image.fromarray(visuals['Restored_Train'])
        pilReal = Image.fromarray(real_B)
        avgSSIM += SSIM(pilFake).cw_ssim_value(pilReal)
    img_path = model.get_image_paths()

    if opt.dataset_mode != 'single':
        real_B = util.tensor2im(data['B1'])
        psnr = PSNR(visuals['Restored_Train'], real_B)
        avgPSNR += psnr
        pilFake = Image.fromarray(visuals['Restored_Train'])
        pilReal = Image.fromarray(real_B)
        pilBlur = Image.fromarray(visuals['Blurred_Train'])
        ssim = SSIM(pilFake).cw_ssim_value(pilReal)
        avgSSIM += ssim
    img_path = model.get_image_paths()
    print('process image... {} {:.4f} {:.4f}'.format(img_path, psnr, ssim))
    # visualizer.save_images(webpage, visuals, img_path)
Exemplo n.º 4
0
def compare_ssim(im1, im2):
    similar = SSIM(im1).cw_ssim_value(im2) * 100
    if similar > 90:
        return 'Same Image'
    else:
        return 'Different Image'
Exemplo n.º 5
0
Arquivo: loss.py Projeto: owsas/oidn
 def __init__(self):
     super(SSIMLoss, self).__init__()
     self.ssim = SSIM(data_range=1.)
Exemplo n.º 6
0
    img = Image.fromarray(img, 'YCbCr')
    img = img.convert('RGB')
    return np.array(img)


def Y_UV2RGB(y, img):
    # print img[:, :, 0] == np.array(y)
    img[:, :, 0] = np.array(y)
    yuv = img
    img = Image.fromarray(yuv, 'YCbCr')
    img = img.convert('RGB')
    return img


transform = transforms.Compose([transforms.ToTensor()])
ssim_loss = SSIM(window_size=11).cuda()
mse_loss = nn.MSELoss().cuda()


def ssim_covers(stegos, imgs):
    imgs = imgs.numpy()
    stegos = to_np(stegos)
    for i in range(len(stegos)):
        img = stegos[i]
        img = (((img - img.min()) * 255) / (img.max() - img.min())).astype(
            np.uint8)
        stegos[i] = img
    origin = deepcopy(imgs)
    stegos = [Y_UV2RGB(stego, img) for stego, img in zip(stegos, origin)]
    covers = [Image.fromarray(YUV2RGB(img), 'RGB') for img in imgs]
    else:
        print(restored + fileN)
        img_restored = cv2.imread(restored + fileN)
        img_gray_restored = cv2.cvtColor(img_restored, cv2.COLOR_RGB2GRAY)
        image_restored = Image.open(restored + fileN)
        # before
        img_corrupted = cv2.imread(corrupted + fileN)
        image_corrupted = Image.open(corrupted + fileN)
        img_gray_corrupted = cv2.cvtColor(img_corrupted, cv2.COLOR_RGB2GRAY)

    # restored vs original
    if grayscale:
        vifp_value_B = QCM.vifp_mscale(img_gray_original, img_gray_corrupted)
        psnr_value_B = QCM.psnr(img_gray_original, img_gray_corrupted)
        reco_value_B = QCM.reco(img_gray_original, img_gray_corrupted)
        ssim_value_B = SSIM(img_gray_original,
                            gaussian_kernel_1d).ssim_value(img_gray_corrupted)
        # restored vs original
        vifp_value_A = QCM.vifp_mscale(img_gray_original, img_gray_restored)
        psnr_value_A = QCM.psnr(img_gray_original, img_gray_restored)
        reco_value_A = QCM.reco(img_gray_original, img_gray_restored)
        ssim_value_A = SSIM(img_gray_original,
                            gaussian_kernel_1d).ssim_value(img_gray_restored)
    else:
        vifp_value_B = QCM.vifp_mscale(img_clean, img_corrupted)
        psnr_value_B = QCM.psnr(img_clean, img_corrupted)
        # reco_value_B = QCM.reco(img_clean, img_corrupted)
        ssim_value_B = SSIM(image_clean,
                            gaussian_kernel_1d).ssim_value(image_corrupted)
        # restored vs original
        vifp_value_A = QCM.vifp_mscale(img_clean, img_restored)
        psnr_value_A = QCM.psnr(img_clean, img_restored)
Exemplo n.º 8
0
def main():

    global opt, name, logger, netG, netD, vgg, curriculum_ssim_mask, curriculum_ssim_clean, loss_mse, rgb2yuv, instance_ssim, loss_bce

    opt = parser.parse_args()

    name = "ShadowRemoval"

    print(opt)

    # Tag_ResidualBlocks_BatchSize

    logger = SummaryWriter("./runs_sr/" +
                           time.strftime("/%Y-%m-%d-%H/", time.localtime()))

    cuda = opt.cuda

    if 'WORLD_SIZE' in os.environ:
        opt.distributed = int(os.environ['WORLD_SIZE']) > 1

    if cuda and not torch.cuda.is_available():

        raise Exception("No GPU found, please run without --cuda")

    if opt.distributed:
        opt.gpu = opt.local_rank
        torch.cuda.set_device(opt.gpu)
        torch.distributed.init_process_group(backend='nccl',
                                             init_method='env://')
        opt.world_size = torch.distributed.get_world_size()

    seed = 1334

    torch.manual_seed(seed)

    if cuda:

        torch.cuda.manual_seed(seed)

    cudnn.benchmark = True

    print("==========> Loading datasets")
    train_dataset = DatasetFromFolder(
        opt.train,
        transform=Compose([ToTensor()]),
        training=True,
        experiments="ShadowRemoval",
    )
    test_dataset = DatasetFromFolder(opt.test,
                                     transform=Compose([ToTensor()]),
                                     training=False,
                                     experiments="ShadowRemoval")

    train_data_loader = DataLoader(dataset=train_dataset,
                                   num_workers=4,
                                   batch_size=opt.batchSize,
                                   pin_memory=True,
                                   shuffle=True)
    test_data_loader = DataLoader(dataset=test_dataset,
                                  num_workers=4,
                                  batch_size=opt.batchSize,
                                  pin_memory=True,
                                  shuffle=False)

    print("==========> Building model")
    netG = ShadowRemoval(channels=64)
    netD = Discrimator(in_channels=6, channels=64, depth=3)

    print("=========> Building criterion")
    loss_smooth_l1 = nn.SmoothL1Loss()
    loss_l1 = nn.L1Loss()
    loss_mse = torch.nn.MSELoss()
    loss_bce = torch.nn.BCELoss()
    loss_perceptual = perceptual()

    instance_ssim = SSIM(reduction='mean', window_size=7)
    rgb2yuv = rgb2yuv()
    curriculum_ssim_mask = CLBase(lossfunc=nn.BCELoss(reduce=False))
    curriculum_ssim_clean = CLBase()

    # optionally copy weights from a checkpoint
    if opt.pretrained and opt.continue_training:
        if os.path.isfile(opt.pretrained):
            print("=> loading model '{}'".format(opt.pretrained))
            weights = torch.load(opt.pretrained)
            netG.load_state_dict(weights['state_dict'])

        else:
            print("=> no model found at '{}'".format(opt.pretrained))

    print("==========> Setting Optimizer")
    optimizerG = optim.Adam(filter(lambda p: p.requires_grad,
                                   netG.parameters()),
                            lr=opt.lr_g,
                            betas=(0.9, 0.999))
    #optimizerD = optim.Adam(filter(lambda p: p.requires_grad, netD.module.parameters() if opt.parallel else netD.parameters()), lr=opt.lr_d, betas = (0.5, 0.999))
    optimizerD = optim.SGD(filter(lambda p: p.requires_grad,
                                  netD.parameters()),
                           lr=opt.lr_d)

    print("==========> Setting GPU")
    if cuda:
        netG = netG.cuda()
        netD = netD.cuda()

        instance_ssim = instance_ssim.cuda()
        loss_smooth_l1 = loss_smooth_l1.cuda()
        loss_mse = loss_mse.cuda()
        loss_l1 = loss_l1.cuda()
        loss_bce = loss_bce.cuda()
        curriculum_ssim_mask = curriculum_ssim_mask.cuda()
        curriculum_ssim_clean = curriculum_ssim_clean.cuda()
        loss_perceptual = loss_perceptual.cuda()
        rgb2yuv = rgb2yuv.cuda()

        if opt.acceleration:
            print("FP 16 Trianing")
            amp.register_float_function(torch, 'sigmoid')
            [netD,
             netG], [optimizerD,
                     optimizerG] = amp.initialize([netD, netG],
                                                  [optimizerD, optimizerG],
                                                  opt_level=opt.opt_level)

        if opt.parallel:
            print("Parallel Training")
            netG = nn.DataParallel(netG)
            netD = nn.DataParallel(netD)
        elif opt.distributed:
            netG = DDP(netG, delay_allreduce=True)
            netD = DDP(netD, delay_allreduce=True)

    else:
        netG = netG.cpu()
        netD = netD.cpu()

        instance_ssim = instance_ssim.cpu()
        loss_smooth_l1 = loss_smooth_l1.cpu()
        loss_mse = loss_mse.cpu()
        loss_l1 = loss_l1.cpu()
        loss_bce = loss_bce.cpu()
        curriculum_ssim = curriculum_ssim.cpu()
        loss_perceptual = loss_perceptual.cpu()
        rgb2yuv = rgb2yuv.cpu()

    lr_schedulerG = optim.lr_scheduler.CosineAnnealingLR(optimizerG,
                                                         opt.epoch,
                                                         eta_min=1e-7)
    lr_schedulerD = optim.lr_scheduler.CosineAnnealingLR(optimizerD,
                                                         opt.epoch,
                                                         eta_min=1e-7)

    print("==========> Training")
    for epoch in range(opt.epoch + 1):

        train(train_data_loader,
              netG,
              netD,
              optimizerG,
              optimizerD,
              epoch,
              logger=logger)
        #test(test_data_loader, netG)

        if epoch % opt.save_model_freq == 0:
            save_checkpoint(netG, epoch, name, opt)

        lr_schedulerG.step()
        lr_schedulerD.step()

    logger.close()
Exemplo n.º 9
0
def main():

    global opt, name, logger, netG, netD, vgg, curriculum_ssim, loss_mse, rgb2yuv, instance_ssim 

    opt = parser.parse_args()
    
    name = "ShadowSyns"
    
    print(opt)

    # Tag_ResidualBlocks_BatchSize

    cuda = opt.cuda

    if cuda and not torch.cuda.is_available():

        raise Exception("No GPU found, please run without --cuda")

    seed = 1334

    torch.manual_seed(seed)

    if cuda:

        torch.cuda.manual_seed(seed)

    cudnn.benchmark = True

    print("==========> Loading datasets")
    train_dataset = DatasetFromFolder(
        opt.train, 
        transform=Compose([ToTensor()]),
        training = True,        
        )

    test_dataset = DatasetFromFolder(
        opt.test, 
        transform=Compose([ToTensor()]),
        training = False,
        )

    train_data_loader = DataLoader(dataset=train_dataset, num_workers=4, batch_size=opt.batchSize,
                                      pin_memory=True, shuffle=True)
    test_data_loader = DataLoader(dataset=test_dataset, num_workers=4, batch_size=opt.batchSize,
                                      pin_memory=True, shuffle=True)


    print("==========> Building model")
    netG = ShadowMattingNet(channels =64, depth = 9)
    netD = Discrimator(in_channels = 7, channels = 64, depth = 5)

    
    print("=========> Building criterion")
    loss_smooth_l1 = nn.SmoothL1Loss()
    loss_l1 = nn.L1Loss()
    loss_mse = torch.nn.MSELoss()
    instance_ssim = SSIM(reduction = 'mean', window_size = 7)
    curriculum_ssim  = CLBase()
    loss_perceptual = perceptual() 
    rgb2yuv = rgb2yuv()
    
    # optionally copy weights from a checkpoint
    if opt.pretrained:
        if os.path.isfile(opt.pretrained):
            print("=> loading model '{}'".format(opt.pretrained))
            weights = torch.load(opt.pretrained)
            netG.load_state_dict(weights['state_dict_g'])

        else:
            print("=> no model found at '{}'".format(opt.pretrained))

    print("==========> Setting GPU")
    if cuda:
        if opt.parallel:
          netG = nn.DataParallel(netG, [0, 1, 2, 3]).cuda()
          netD = nn.DataParallel(netD, [0, 1, 2, 3]).cuda()
        
          instance_ssim = nn.DataParallel(instance_ssim, [0, 1, 2, 3]).cuda()
          loss_smooth_l1 = nn.DataParallel(loss_smooth_l1, [0, 1, 2, 3]).cuda()        
          loss_mse = nn.DataParallel(loss_mse, [0, 1, 2, 3]).cuda()
          loss_l1 = nn.DataParallel(loss_l1, [0, 1, 2, 3]).cuda()
          curriculum_ssim = nn.DataParallel(curriculum_ssim, [0, 1, 2, 3]).cuda()
          rgb2yuv = nn.DataParallel(rgb2yuv, [0, 1, 2, 3]).cuda()
        else:
          netG = netG.cuda()
          netD = netD.cuda()
        
          instance_ssim = instance_ssim.cuda()
          loss_smooth_l1 = loss_smooth_l1.cuda()        
          loss_mse = loss_mse.cuda()
          loss_l1 = loss_l1.cuda()
          curriculum_ssim = curriculum_ssim.cuda()
          loss_perceptual = loss_perceptual.cuda()
          rgb2yuv = rgb2yuv.cuda()
    else:
        netG = netG.cpu()
        netD = netD.cpu()
        
        instance_ssim = instance_ssim.cpu()
        loss_smooth_l1 = loss_smooth_l1.cpu()        
        loss_mse = loss_mse.cpu()
        loss_l1 = loss_l1.cpu()
        curriculum_ssim = curriculum_ssim.cpu()
        loss_perceptual = loss_perceptual.cpu()
        rgb2yuv = rgb2yuv.cpu()
    
    print("==========> Setting Optimizer")
    
    optimizerG = optim.Adam(filter(lambda p: p.requires_grad, netG.module.parameters() if opt.parallel else netG.parameters()), lr=opt.lr_g, betas = (0.5, 0.99))
    #optimizerD = optim.Adam(filter(lambda p: p.requires_grad, netD.module.parameters() if opt.parallel else netD.parameters()), lr = opt.lr_d, betas = (0.5, 0.999))
    optimizerD = optim.SGD(filter(lambda p: p.requires_grad, netD.module.parameters() if opt.parallel else netD.parameters()), lr = opt.lr_d)

    
    lr_schedulerG = optim.lr_scheduler.CosineAnnealingLR(optimizerG, opt.epoch, eta_min = 1e-7)
    lr_schedulerD = optim.lr_scheduler.CosineAnnealingLR(optimizerD, opt.epoch, eta_min = 1e-7)

   
    print("==========> Training")
    for epoch in range(opt.epoch + 1):

        train(train_data_loader, netG, netD, optimizerG, optimizerD, epoch)
        test(test_data_loader, netG)
        
        if epoch % opt.save_model_freq == 0:
          save_checkpoint(netG, epoch, name)

        lr_schedulerG.step()
        lr_schedulerD.step()     
Exemplo n.º 10
0
            # plt.savefig('figs/' + speaker + '_' + basefile + '_mean.png')
            # plt.close()

            ult_all[speaker + '-' + basefile] = ult_data_3d_mean

        # now all ult files are loaded

        SSIM_all = np.zeros((len(ult_all), len(ult_all)))

        # calculate SSIM utterance by utterance
        ult_keys = list(sorted(ult_all.keys()))
        for i in range(len(ult_all)):
            for j in range(len(ult_all)):
                print('calc SSIM', speaker, i, j, '      ', end='\r')
                SSIM_all[i, j] = SSIM( \
                    Image.fromarray(ult_all[ult_keys[i]].reshape(NumVectors, PixPerVector), 'L'), \
                    gaussian_kernel_1d).ssim_value( \
                    Image.fromarray(ult_all[ult_keys[j]].reshape(NumVectors, PixPerVector), 'L'))
        print('calc SSIM', speaker, 'done')

        # serialize results to file
        pickle.dump(SSIM_all,
                    open('measures/' + speaker + '_SSIM_avg.pkl', 'wb'))
    else:
        SSIM_all = pickle.load(
            open('measures/' + speaker + '_SSIM_avg.pkl', 'rb'))

    print(speaker, ', len:', len(SSIM_all), ', SSIM min/max: ',
          np.min(SSIM_all), np.max(SSIM_all))

    # visualize results
    # vmax set according to manual checking