SurePoissonLoss

class deepinv.loss.SurePoissonLoss(gain, tau=0.001, rng: Generator | None = None)[source]

Bases: Loss

SURE loss for Poisson noise

The loss is designed for the following noise model:

\[y = \gamma z \quad \text{with}\quad z\sim \mathcal{P}(\frac{u}{\gamma}), \quad u=A(x).\]

The loss is computed as

\[\frac{1}{m}\|y-A\inverse{y}\|_2^2-\frac{\gamma}{m} 1^{\top}y +\frac{2\gamma}{m\tau}(b\odot y)^{\top} \left(A\inverse{y+\tau b}-A\inverse{y}\right)\]

where \(R\) is the trainable network, \(y\) is the noisy measurement vector of size \(m\), \(b\) is a Bernoulli random variable taking values of -1 and 1 each with a probability of 0.5, \(\tau\) is a small positive number, and \(\odot\) is an elementwise multiplication.

See https://ieeexplore.ieee.org/abstract/document/6714502/ for details. If the measurement data is truly Poisson this loss is an unbiased estimator of the mean squared loss \(\frac{1}{m}\|u-A\inverse{y}\|_2^2\) where \(z\) is the noiseless measurement.

Warning

The loss can be sensitive to the choice of \(\tau\), which should be proportional to the size of \(y\). The default value of 0.01 is adapted to \(y\) vectors with entries in \([0,1]\).

Parameters:
  • gain (float) – Gain of the Poisson Noise.

  • tau (float) – Approximation constant for the Monte Carlo approximation of the divergence.

  • rng (torch.Generator) – Optional random number generator. Default is None.

forward(y, x_net, physics, model, **kwargs)[source]

Computes the SURE loss.

Parameters:
Returns:

torch.nn.Tensor loss of size (batch_size,)

Examples using SurePoissonLoss:

Self-supervised denoising with the SURE loss.

Self-supervised denoising with the SURE loss.