in src/evaluate.py [0:0]
def generate_diff_data(train_config, test, reference, q_container, images, flags):
# image dimensions
dim_h = train_config.dataset_info.h
dim_w = train_config.dataset_info.w
# calculate diff of test and reference
diff_base = torch.abs(test - reference.view(dim_w * dim_h, -1))
# calculate mse between test and reference
mse = calculate_mse(diff_base)
q_container.mse.append(mse.item())
# calculate peak signal-to-noise ratio
if "psnr" in flags:
psnr = calculate_psnr(mse)
q_container.psnr.append(psnr)
# calculate ssim
if "ssim" in flags:
# NOTE: can be moved to the top if pyrtools available on Windows or other image pyramid library is used
from util.IW_SSIM_PyTorch import IW_SSIM
iw_ssim = IW_SSIM(use_cuda=True)
ssim = iw_ssim.test(rgb2gray(reference.view(dim_w, dim_h, -1)), rgb2gray(test.view(dim_w, dim_h, -1)))
q_container.ssim.append(ssim)
diff_base = t2np(diff_base)
# convert diff to image data
if not images:
diff = np.clip(diff_base.reshape(dim_h, dim_w, -1)[:, :, :3], 0., 1.)
diff_img8bit = (diff[None] * 255).astype(np.uint8)
if q_container.diff_data is None:
q_container.diff_data = diff_img8bit
else:
q_container.diff_data = np.concatenate((q_container.diff_data, diff_img8bit), axis=0)
else:
if q_container.diff_data is None:
q_container.diff_data = []
q_container.diff_data.append(diff_base)
if not images:
square_diff = np.clip(np.multiply(diff_base, diff_base).reshape(dim_h, dim_w, -1)[:, :, :3], 0., 1.)
square_diff_img8bit = (square_diff[None] * 255).astype(np.uint8)
if q_container.square_diff_data is None:
q_container.square_diff_data = square_diff_img8bit
else:
q_container.square_diff_data = np.concatenate((q_container.square_diff_data, square_diff_img8bit), axis=0)
else:
if q_container.square_diff_data is None:
q_container.square_diff_data = []
q_container.square_diff_data.append(np.multiply(diff_base, diff_base))