PSNR
- class deepinv.loss.metric.PSNR(max_pixel=1, **kwargs)[source]
Bases:
Metric
Peak Signal-to-Noise Ratio (PSNR) metric.
Calculates the PSNR \(\text{PSNR}(\hat{x},x)\) where \(\hat{x}=\inverse{y}\). If the tensors have size
(B, C, H, W)
, then the PSNR is computed as\[\text{PSNR} = \frac{20}{B} \log_{10} \frac{\text{MAX}_I}{\sqrt{\|\hat{x}-x\|^2_2 / (CHW) }}\]where \(\text{MAX}_I\) is the maximum possible pixel value of the image (e.g. 1.0 for a normalized image).
To set the max pixel on the fly (as is the case in fastMRI evaluation code), set
max_pixel=None
.Note
By default, no reduction is performed in the batch dimension.
- Example:
>>> import torch >>> from deepinv.loss.metric import PSNR >>> m = PSNR() >>> x_net = x = torch.ones(3, 2, 8, 8) # B,C,H,W >>> m(x_net, x) tensor([80., 80., 80.])
- Parameters:
max_pixel (float) – maximum pixel value. If None, uses max pixel value of x.
complex_abs (bool) – perform complex magnitude before passing data to metric function. If
True
, the data must either be of complex dtype or have size 2 in the channel dimension (usually the second dimension after batch).reduction (str) – a method to reduce metric score over individual batch scores.
mean
: takes the mean,sum
takes the sum,none
or None no reduction will be applied (default).norm_inputs (str) – normalize images before passing to metric.
l2``normalizes by L2 spatial norm, ``min_max
normalizes by min and max of each input.
- metric(x_net, x, *args, **kwargs)[source]
Calculate metric on data.
Override this function to implement your own metric. Always include
args
andkwargs
arguments.- Parameters:
x_net (torch.Tensor) – Reconstructed image \(\hat{x}=\inverse{y}\) of shape
(B, ...)
or(B, C, ...)
.x (torch.Tensor) – Reference image \(x\) (optional) of shape
(B, ...)
or(B, C, ...)
.
- Return torch.Tensor:
calculated metric, the tensor size might be
(1,)
or(B,)
.