sporco.dictlrn.prlcnscdl¶
Parallel consensus convolutional dictionary learning
Classes
|
Dictionary learning based on Convolutional BPDN [49] and an ADMM Consensus solution of the constrained dictionary update problem [1]. |
|
Dictionary learning based on Convolutional BPDN with Mask Decoupling [28] and the hybrid Mask Decoupling/Consensus solution of the constrained dictionary update problem proposed in [26]. |
Class Descriptions¶
- class sporco.dictlrn.prlcnscdl.ConvBPDNDictLearn_Consensus(*args, **kwargs)[source]¶
Bases:
ConvBPDNDictLearnDictionary learning based on Convolutional BPDN [49] and an ADMM Consensus solution of the constrained dictionary update problem [1].
The dictionary learning algorithm itself is as described in [26]. The sparse coding of each training image and the individual consensus problem components are computed in parallel, giving a substantial computational advantage, on a multi-core host, over
dictlrn.cbpdndl.ConvBPDNDictLearnwith the consensus solver (dmethod='cns') for the constrained dictionary update problem.Solve the optimisation problem
\[\mathrm{argmin}_{\mathbf{d}, \mathbf{x}} \; (1/2) \sum_k \left \| \sum_m \mathbf{d}_m * \mathbf{x}_{k,m} - \mathbf{s}_k \right \|_2^2 + \lambda \sum_k \sum_m \| \mathbf{x}_{k,m} \|_1 \quad \text{such that} \quad \mathbf{d}_m \in C \;\; \forall m \;,\]where \(C\) is the feasible set consisting of filters with unit norm and constrained support, via interleaved alternation between the ADMM steps of the sparse coding and dictionary update algorithms. Multi-channel signals with multi-channel dictionaries are supported. Unlike
dictlrn.cbpdndl.ConvBPDNDictLearn, multi-channel signals with single-channel dictionaries are not supported; it is the responsibility of the user to convert the multi-channel input signal to a single-channel input with channels converted into additional single-channel signal instances.This class is derived from
dictlrn.cbpdndl.ConvBPDNDictLearnso that the variable initialisation of its parent can be re-used. The entiresolveinfrastructure is overidden in this class, without any use of inherited functionality. Variables initialised by the parent class that are non-singleton on axisaxisKhave this axis swapped with axis 0 for simpler and more computationally efficient indexing. Note that automatic penalty parameter selection (see optionAutoRhoinadmm.ADMM.Options) is not supported, the option settings being silently ignored.After termination of the
solvemethod, attributeitstatis a list of tuples representing statistics of each iteration. The fields of the named tupleIterationStatsare:
Iter: Iteration number
ObjFun: Objective function value
DFid: Value of data fidelity term \((1/2) \sum_k \| \sum_m \mathbf{d}_m * \mathbf{x}_{k,m} - \mathbf{s}_k \|_2^2\)
RegL1: Value of regularisation term \(\sum_k \sum_m \| \mathbf{x}_{k,m} \|_1\)
Time: Cumulative run time
- Parameters:
- D0array_like
Initial dictionary array
- Sarray_like
Signal array
- lmbdafloat
Regularisation parameter
- opt
dictlrn.cbpdndl.ConvBPDNDictLearn.OptionsobjectAlgorithm options
- nprocint
Number of parallel processes to use
- dimKint, optional (default 1)
Number of signal dimensions. If there is only a single input signal (e.g. if S is a 2D array representing a single image) dimK must be set to 0.
- dimNint, optional (default 2)
Number of spatial/temporal dimensions
- class Options(opt=None)[source]¶
Bases:
OptionsConvBPDNDictLearn_Consensus algorithm options
Options are the same as defined in
cbpdndl.ConvBPDNDictLearn.Options.
- Parameters:
- optdict or None, optional (default None)
ConvBPDNDictLearn_Consensus algorithm options
- fwiter = 4¶
Field width for iteration count display column
- fpothr = 2¶
Field precision for other display columns
- step()[source]¶
Do a single iteration over all cbpdn and ccmod steps. Those that are not coupled on the K axis are performed in parallel.
- solve()[source]¶
Start (or re-start) optimisation. This method implements the framework for the alternation between X and D updates in a dictionary learning algorithm.
If option
VerboseisTrue, the progress of the optimisation is displayed at every iteration. At termination of this method, attributeitstatis a list of tuples representing statistics of each iteration.Attribute
timeris an instance ofutil.Timerthat provides the following labelled timers:
- getdict(crop=True)[source]¶
Get final dictionary. If
cropisTrue, applycnvrep.bcropto returned array.
- class sporco.dictlrn.prlcnscdl.ConvBPDNMaskDcplDictLearn_Consensus(*args, **kwargs)[source]¶
Bases:
ConvBPDNMaskDictLearnDictionary learning based on Convolutional BPDN with Mask Decoupling [28] and the hybrid Mask Decoupling/Consensus solution of the constrained dictionary update problem proposed in [26].
The dictionary learning algorithm itself is as described in [26]. The sparse coding of each training image and the individual consensus problem components are computed in parallel, giving a substantial computational advantage, on a multi-core host, over
cbpdndlmd.ConvBPDNMaskDictLearnwith the consensus solver (method='cns') for the constrained dictionary update problem.Solve the optimisation problem
\[\mathrm{argmin}_{\mathbf{d}, \mathbf{x}} \; (1/2) \sum_k \left \| W ( \sum_m \mathbf{d}_m * \mathbf{x}_{k,m} - \mathbf{s}_k ) \right \|_2^2 + \lambda \sum_k \sum_m \| \mathbf{x}_{k,m} \|_1 \quad \text{such that} \quad \mathbf{d}_m \in C \;\; \forall m \;,\]where \(W\) is a mask array and \(C\) is the feasible set consisting of filters with unit norm and constrained support, via interleaved alternation between the ADMM steps of the sparse coding and dictionary update algorithms. Multi-channel signals with multi-channel dictionaries are supported. Unlike
dictlrn.cbpdndl.ConvBPDNDictLearn, multi-channel signals with single-channel dictionaries are not supported; it is the responsibility of the user to convert the multi-channel input signal to a single-channel input with channels converted into additional single-channel signal instances.This class is derived from
cbpdndlmd.ConvBPDNMaskDictLearnso that the variable initialisation of its parent can be re-used. The entiresolveinfrastructure is overidden in this class, without any use of inherited functionality. Variables initialised by the parent class that are non-singleton on axisaxisKhave this axis swapped with axis 0 for simpler and more computationally efficient indexing. Note that automatic penalty parameter selection (see optionAutoRhoinadmm.ADMM.Options) is not supported, the option settings being silently ignored.After termination of the
solvemethod, attributeitstatis a list of tuples representing statistics of each iteration. The fields of the named tupleIterationStatsare:
Iter: Iteration number
ObjFun: Objective function value
DFid: Value of data fidelity term \((1/2) \sum_k \| W ( \sum_m \mathbf{d}_m * \mathbf{x}_{k,m} - \mathbf{s}_k ) \|_2^2\)
RegL1: Value of regularisation term \(\sum_k \sum_m \| \mathbf{x}_{k,m} \|_1\)
Time: Cumulative run time
- Parameters:
- D0array_like
Initial dictionary array
- Sarray_like
Signal array
- lmbdafloat
Regularisation parameter
- Warray_like
Mask array. The array shape must be such that the array is compatible for multiplication with the internal shape of input array S (see
cnvrep.CDU_ConvRepIndexingfor a discussion of the distinction between external and internal data layouts) after reshaping to the shape determined bycnvrep.mskWshape.- opt
cbpdndlmd.ConvBPDNMaskDictLearn.OptionsobjectAlgorithm options
- nprocint
Number of parallel processes to use
- dimKint, optional (default 1)
Number of signal dimensions. If there is only a single input signal (e.g. if S is a 2D array representing a single image) dimK must be set to 0.
- dimNint, optional (default 2)
Number of spatial/temporal dimensions
- class Options(opt=None)[source]¶
Bases:
OptionsConvBPDNMaskDcplDictLearn_Consensus algorithm options
Options are the same as defined in
cbpdndlmd.ConvBPDNMaskDictLearn.Options.
- Parameters:
- optdict or None, optional (default None)
ConvBPDNMaskDcplDictLearn_Consensus algorithm options
- fwiter = 4¶
Field width for iteration count display column
- fpothr = 2¶
Field precision for other display columns
- step()[source]¶
Do a single iteration over all cbpdn and ccmod steps. Those that are not coupled on the K axis are performed in parallel.
- solve()[source]¶
Start (or re-start) optimisation. This method implements the framework for the alternation between X and D updates in a dictionary learning algorithm.
If option
VerboseisTrue, the progress of the optimisation is displayed at every iteration. At termination of this method, attributeitstatis a list of tuples representing statistics of each iteration.Attribute
timeris an instance ofutil.Timerthat provides the following labelled timers:
- getdict(crop=True)[source]¶
Get final dictionary. If
cropisTrue, applycnvrep.bcropto returned array.