optim.ADMMBlock#

class bartorch.optim.ADMMBlock#

Bases: Module

One step of the alternating direction method of multipliers, admm.c’s admm.

For min 0.5 ||A x - y||^2 + sum_j f_j(G_j x - b_j): conjugate gradients on A^H A + cclambda + rho sum_j G_j^H G_j from the previous x, then each term’s split and dual. The state’s done is Boyd’s residual test, and invokes counts inner iterations, the quantity BART’s maxiter budgets. Each step takes its own rho unless dynamic_rho or hogwild moves it, in which case the state carries it. A sequence of rho is a schedule, one per step and the last repeated beyond its end, with the scaled duals rescaled by the ratio of consecutive values so that the unscaled ones carry over: the increasing penalty of annealed plug-and-play, rho_k = lambda / sigma_k ** 2 against a denoiser’s schedule of sigma. With a term that introduces auxiliary variables the state vector is the image followed by those variables, and output() returns the image alone.

start()#

The run’s state: the start, zero splits and duals, and A^H y.

forward()#

Define the computation performed at every call.

Should be overridden by all subclasses.

Note

Although the recipe for forward pass needs to be defined within this function, one should call the Module instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.

output()#

Examples using ADMMBlock#

MoDL, on BART’s ADMM

MoDL, on BART's ADMM

Annealed plug-and-play

Annealed plug-and-play