HaarPSI#

class deepinv.loss.metric.HaarPSI(C=5.0, alpha=4.9, preprocess_with_subsampling=True, **kwargs)[source]#

Bases: Metric

HaarPSI metric with tuned parameters.

The metric was proposed by Reisenhofer et al. and the parameters are taken from Karner et al.. The metric computes similarities in the Haar wavelet domain and it is shown to closely match human evaluation. See original papers for more details. The metric range is \([0,1]\). The higher the metric, the better.

Code is adapted from this implementation by Sören Dittmer, Clemens Karner and Anna Breger, adapted from David Neumann, adapted from Rafael Reisenhofer.

Note

Images must be scaled to \([0,1]\). You can use norm_inputs = clip or min_max to achieve this.

The parameters should be set as follows depending on the image domain:

  • Natural images: \(C=30,\alpha=4.2\).

  • Medical images: \(C=5,\alpha=4.9\).

Note

By default, no reduction is performed in the batch dimension.

Example:

>>> import torch
>>> from deepinv.loss.metric import HaarPSI
>>> m = HaarPSI(norm_inputs="clip")
>>> x_net = x = torch.ones(3, 1, 8, 8) # B,C,H,W
>>> m(x_net, x)
tensor([1.0000, 1.0000, 1.0000])
Parameters:
  • C (float) – metric parameter \(C\in[5, 100]\).

  • alpha (float) – metric paramter \(\alpha\in[2, 8]\).

  • preprocess_with_subsampling (bool) – Determines if subsampling is performed.

  • 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.