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