OSEMIteration#

class deepinv.optim.optim_iterators.OSEMIteration(eps=1e-6, cost_fn=None, **kwargs)[source]#

Bases: OptimIterator

Performs a single iteration of the OSEM algorithm, which is a classic baseline reconstruction method for inverse problems with Poisson noise statistics. Note that deepinv.optim.optim_iterators.MLEMIteration is a special case with one subset only. More details on the algorithm can be found in the documentation of the deepinv.optim.optimizers.OSEM optimizer.

forward(X, cur_data_fidelity, cur_prior, cur_params, y, physics, sensitivities, *args, **kwargs)[source]#

Perform one Ordered-Subsets Expectation-Maximization step.

Parameters:
  • X (dict) – Dictionary containing the current iterate and the estimated cost.

  • cur_data_fidelity (deepinv.optim.DataFidelity) – Instance of the DataFidelity class defining the current data fidelity.

  • cur_prior (deepinv.optim.Prior) – Instance of the Prior class defining the current prior.

  • cur_params (dict) – Dictionary containing the current parameters of the algorithm.

  • y (deepinv.utils.TensorList) – Measurement subsets.

  • physics (deepinv.physics.StackedLinearPhysics) – Physics operators corresponding to the measurement subsets.

  • sensitivities (list[torch.Tensor]) – Precomputed sensitivity maps \(A_l^T \mathbf{1}\) for each subset.

Returns:

Dictionary {"est": (x, None), "cost": F, "it": k + 1} containing the updated iterate and estimated cost.

Return type:

dict[str, tuple[torch.Tensor, None] | torch.Tensor | int | None]