コード例 #1
0
  def update(self, gt, pred):
    C, H, W = gt.size()[-3:]
    if isinstance(gt, torch.Tensor):
      gt = Variable(gt)
    if isinstance(pred, torch.Tensor):
      pred = Variable(pred)

    mse_score = self.mse_loss(pred, gt)
    eps = 1e-4
    pred.data[pred.data < eps] = eps
    pred.data[pred.data > 1 - eps] = 1 -eps
    bce_score = self.bce_loss(pred, gt)

    # https://github.com/Po-Hsun-Su/pytorch-ssim
    ssim_score = pytorch_ssim.ssim(pred[:,:,0], gt[:,:,0])
    psnr_score = 10 * math.log10(1 / mse_score.item())

    bce_score = bce_score.item() * C * H * W
    mse_score = mse_score.item() * C * H * W

    self.bce_results.append(bce_score)
    self.mse_results.append(mse_score)
    self.psnr_results.append(psnr_score)
    self.ssim_results.append(ssim_score)
コード例 #2
0
ファイル: __init__.py プロジェクト: haoyinfan/fusion-network
def get_ssim_torch(tensor1, tensor2):
    torch_ssim = ssim(tensor1, tensor2)
    return torch_ssim
コード例 #3
0
                    batch_size = val_lr.size(0)
                    valing_results['batch_sizes'] += batch_size
                    lr = val_lr.float()
                    hr = val_hr.float()
                    if torch.cuda.is_available():
                        lr = lr.cuda()
                        hr = hr.cuda()
                    sr = netG(lr)
                    if cfg.TRAIN.use_seg:
                        seg = netSeg(sr)[:, :cfg.DATASET.n_classes, ...].cuda()
                        val_seg = val_seg.cuda()
                        validate_seg(val_seg, seg, valing_results, batch_size,
                                     cfg)
                    batch_mse = ((sr - hr)**2).data.mean()
                    valing_results['mse'] += batch_mse * batch_size
                    batch_ssim = pytorch_ssim.ssim(sr, hr).item()
                    valing_results['ssims'] += batch_ssim * batch_size
                    valing_results['psnr'] = 10 * log10(
                        (hr.max()**2) / (valing_results['mse'] /
                                         valing_results['batch_sizes']))
                    valing_results['ssim'] = valing_results[
                        'ssims'] / valing_results['batch_sizes']
                    val_bar.set_description(
                        desc=
                        '[Stats on validation set] PSNR: %.4f dB SSIM: %.4f' %
                        (valing_results['psnr'], valing_results['ssim']))

                writer.add_scalars('stats/val', valing_results, epoch)

                # Saving validation results
                save_val_stats(cfg, epoch, valing_results)
コード例 #4
0
                netG.eval()
                out_path = '../output/training_results/SRF_' + str(
                    default_config['upscale_factor']) + '/'
                if not os.path.exists(out_path):
                    os.makedirs(out_path)

                val_bar = tqdm(val_loader)
                valing_results = {'mse': 0, 'ssims': 0, 'psnr': 0, 'ssim': 0}
                val_images = []
                for val_step, (lr, hr) in enumerate(val_bar):
                    lr = lr.to(device1)
                    hr = hr.to(device2)
                    with torch.no_grad():
                        sr = netG(lr).to(device2)
                    valing_results['mse'] += ((sr - hr)**2).data.mean()
                    valing_results['ssims'] += ssim(sr, hr).data.item()

                    if val_step < 20:
                        val_images.extend([
                            display_transform()(lr[0].cpu()),
                            display_transform()(hr.data.cpu().squeeze(0)),
                            display_transform()(sr.data.cpu().squeeze(0))
                        ])
                netG.train()

                valing_results[
                    'mse'] = valing_results['mse'] / val_loader.__len__()
                valing_results['psnr'] = 10 * log10(1 / valing_results['mse'])
                valing_results[
                    'ssim'] = valing_results['ssims'] / val_loader.__len__()