VirtualLinearPhysics#

class deepinv.physics.VirtualLinearPhysics(*, physics, transform, g_params)[source]#

Bases: LinearPhysics

Virtual linear operator

A virtual operator is an operator of the form

\[A = \tilde{A} T_g\]

where \(\tilde{A}\) is a linear operator and \(T_g\) is an invertible transformation with parameters \(g\).

Unlike general composition of linear operators, like for deepinv.physics.ComposedLinearPhysics, the invertibility of \(T_g\) allows to compute the pseudo-inverse of \(A\) in a computationally efficient closed form, i.e.,

\[A^\dagger = T_g^{-1} \tilde{A}^\dagger.\]

Virtual operators are used in deepinv.models.EquivariantReconstructor. For more details, see Sechaud et al.[1].

Warning

The adjoint and pseudo-inverse might be incorrect if the transformation is not invertible, for instance due to boundary effects.

Parameters:
  • physics (LinearPhysics) – linear physics operator \(\tilde{A}\).

  • transform (Transform) – transformation \(T_g\)

  • g_params (dict) – parameters of the transformation \(g\).


References:

A(x, **kwargs)[source]#

Apply the virtual operator to an input

Parameters:

x (torch.Tensor) – input image.

Returns:

(torch.Tensor) output of the virtual operator.

Return type:

Tensor

A_adjoint(y, **kwargs)[source]#

Apply the adjoint of the virtual operator to an input

Parameters:

y (torch.Tensor) – input measurement.

Returns:

(torch.Tensor) output of the adjoint of the virtual operator.

Return type:

Tensor

A_dagger(y, **kwargs)[source]#

Apply the pseudo-inverse of the virtual operator to an input

Parameters:

y (torch.Tensor) – input measurement.

Returns:

(torch.Tensor) output of the pseudo-inverse of the virtual operator.

Return type:

Tensor

Examples using VirtualLinearPhysics:#

Self-supervised learning with Equivariant Splitting

Self-supervised learning with Equivariant Splitting