公式:
MSEMSEMSE:模型的输出图像与真实图像之间的均方误差
MAXMAXMAX:nnn位RGB图像所能取到的最大值(例如nnn===888,此时MAXMAXMAX===2228^{8}8?-?111===255255255)
意义(重点,面试常考):峰值信号的能量与噪声的平均能量之比
代码实现:
def psnr(pred, gt):pred = pred.clamp(0, 1).cpu().numpy()gt = gt.clamp(0, 1).cpu().numpy()imdff = pred - gtrmse = math.sqrt(np.mean(imdff ** 2))if rmse == 0:return 100return 20 * math.log10(1.0 / rmse)
题外话:PSNR越高图像质量真的越好吗?其实不一定,之前有些工作也已经证明了PSNR越高图像质量不一定好。问题在于PSNR与MSE成反比例关系,而MSE作为损失函数,最小化MSE的同时会造成生成图像模糊,生成图像会丢失很多细节信息(故在图像超分领域很多科研工作者引入生成式对抗网络方法)。