sporco.fista.cbpdn

Classes for FISTA algorithm for the Convolutional BPDN problem

Classes

ConvBPDN(D, S[, lmbda, opt, dimK, dimN]) Base class for FISTA algorithm for the Convolutional BPDN (CBPDN) [17] problem.
ConvBPDNMask(D, S, lmbda[, W, opt, dimK, dimN]) FISTA algorithm for Convolutional BPDN with a spatial mask.

Class Descriptions

class sporco.fista.cbpdn.ConvBPDN(D, S, lmbda=None, opt=None, dimK=None, dimN=2)[source]

Bases: sporco.fista.fista.FISTADFT

Base class for FISTA algorithm for the Convolutional BPDN (CBPDN) [17] problem.


Inheritance diagram of ConvBPDN


The generic problem form is

\[\mathrm{argmin}_\mathbf{x} \; f( \{ \mathbf{x}_m \} ) + \lambda g( \{ \mathbf{x}_m \} )\]

where \(f = (1/2) \left\| \sum_m \mathbf{d}_m * \mathbf{x}_m - \mathbf{s} \right\|_2^2\), and \(g(\cdot)\) is a penalty term or the indicator function of a constraint; with input image \(\mathbf{s}\), dictionary filters \(\mathbf{d}_m\), and coefficient maps \(\mathbf{x}_m\). It is solved via the FISTA formulation

Proximal step

\[\mathbf{x}_k = \mathrm{prox}_{t_k}(g) (\mathbf{y}_k - 1/L \nabla f(\mathbf{y}_k) ) \;\;.\]

Combination step

\[\mathbf{y}_{k+1} = \mathbf{x}_k + \left( \frac{t_k - 1}{t_{k+1}} \right) (\mathbf{x}_k - \mathbf{x}_{k-1}) \;\;,\]

with \(t_{k+1} = \frac{1 + \sqrt{1 + 4 t_k^2}}{2}\).

After termination of the solve method, attribute itstat is a list of tuples representing statistics of each iteration. The fields of the named tuple IterationStats are:

Iter : Iteration number

ObjFun : Objective function value

DFid : Value of data fidelity term \((1/2) \| \sum_m \mathbf{d}_m * \mathbf{x}_m - \mathbf{s} \|_2^2\)

RegL1 : Value of regularisation term \(\sum_m \| \mathbf{x}_m \|_1\)

Rsdl : Residual

L : Inverse of gradient step parameter

Time : Cumulative run time

This class supports an arbitrary number of spatial dimensions, dimN, with a default of 2. The input dictionary D is either dimN + 1 dimensional, in which case each spatial component (image in the default case) is assumed to consist of a single channel, or dimN + 2 dimensional, in which case the final dimension is assumed to contain the channels (e.g. colour channels in the case of images). The input signal set S is either dimN dimensional (no channels, only one signal), dimN + 1 dimensional (either multiple channels or multiple signals), or dimN + 2 dimensional (multiple channels and multiple signals). Determination of problem dimensions is handled by cnvrep.CSC_ConvRepIndexing.


Call graph

../_images/fista_cbpdn_init.svg

Parameters:
D : array_like

Dictionary array

S : array_like

Signal array

lmbda : float

Regularisation parameter

opt : ConvBPDN.Options object

Algorithm options

dimK : 0, 1, or None, optional (default None)

Number of dimensions in input signal corresponding to multiple independent signals

dimN : int, optional (default 2)

Number of spatial/temporal dimensions

class Options(opt=None)[source]

Bases: sporco.fista.fista.Options

ConvBPDN algorithm options

Options include all of those defined in fista.FISTADFT.Options, together with additional options:

NonNegCoef : Flag indicating whether to force solution to be non-negative.

NoBndryCross : Flag indicating whether all solution coefficients corresponding to filters crossing the image boundary should be forced to zero.

L1Weight : An array of weights for the \(\ell_1\) norm. The array shape must be such that the array is compatible for multiplication with the X/Y variables. If this option is defined, the regularization term is \(\lambda \sum_m \| \mathbf{w}_m \odot \mathbf{x}_m \|_1\) where \(\mathbf{w}_m\) denotes slices of the weighting array on the filter index axis.

Parameters:
opt : dict or None, optional (default None)

ConvBPDN algorithm options

setdict(D=None)[source]

Set dictionary array.

getcoef()[source]

Get final coefficient array.

eval_gradf()[source]

Compute gradient in Fourier domain.

eval_proxop(V)[source]

Compute proximal operator of \(g\).

eval_Rf(Vf)[source]

Evaluate smooth term in Vf.

rsdl()[source]

Compute fixed point residual in Fourier domain.

eval_objfn()[source]

Compute components of objective function as well as total contribution to objective function.

obfn_dfd()[source]

Compute data fidelity term \((1/2) \| \sum_m \mathbf{d}_m * \mathbf{x}_m - \mathbf{s} \|_2^2\).

obfn_reg()[source]

Compute regularisation term and contribution to objective function.

reconstruct(X=None)[source]

Reconstruct representation.

solve()

Call graph

../_images/fista_cbpdn_solve.svg
class sporco.fista.cbpdn.ConvBPDNMask(D, S, lmbda, W=None, opt=None, dimK=None, dimN=2)[source]

Bases: sporco.fista.cbpdn.ConvBPDN

FISTA algorithm for Convolutional BPDN with a spatial mask.


Inheritance diagram of ConvBPDNMask


Solve the optimisation problem

\[\mathrm{argmin}_\mathbf{x} \; (1/2) \left\| W \left(\sum_m \mathbf{d}_m * \mathbf{x}_m - \mathbf{s}\right) \right\|_2^2 + \lambda \sum_m \| \mathbf{x}_m \|_1 \;\;,\]

where \(W\) is a mask array.

See ConvBPDN for interface details.


Parameters:
D : array_like

Dictionary matrix

S : array_like

Signal vector or matrix

lmbda : float

Regularisation parameter

W : array_like

Mask array. The array shape must be such that the array is compatible for multiplication with input array S (see cnvrep.mskWshape for more details).

opt : ConvBPDNMask.Options object

Algorithm options

dimK : 0, 1, or None, optional (default None)

Number of dimensions in input signal corresponding to multiple independent signals

dimN : int, optional (default 2)

Number of spatial dimensions

eval_gradf()[source]

Compute gradient in Fourier domain.

obfn_dfd()[source]

Compute data fidelity term \((1/2) \| W (\sum_m \mathbf{d}_m * \mathbf{x}_{m} - \mathbf{s}) \|_2^2\)