Package: qmm
Q-MM: A Python toolbox for Quadratic Majorization-MinimizationQ-MM is a Python implementation of Majorize-Minimize Quadratic
optimization algorithms. Algorithms provided here come from[1] C. Labat and J. Idier, “Convergence of Conjugate Gradient Methods with a
Closed-Form Stepsize Formula,” J Optim Theory Appl, p. 18, 2008.and[2] E. Chouzenoux, J. Idier, and S. Moussaoui, “A Majorize–Minimize Strategy
for Subspace Optimization Applied to Image Restoration,” IEEE Trans. on
Image Process., vol. 20, no. 6, pp. 1517–1528, Jun. 2011, doi:
10.1109/TIP.2010.2103083.Seedocumentationfor more
background. If you use this code, please cite the references above and a
citation of this toolbox will also be appreciated, seebelow. You
can also click ⭐ on the repo.Quadratic Majorize-MinimizeThe Q-MM optimization algorithms compute the minimizer of objective
function likeJ(x) = ∑ₖ μₖ ψₖ(Vₖ·x - ωₖ)where x is the unknown vector, Vₖ a linear operator, ωₖ a fixed data, μₖ
a scalar, ψₖ(u) = ∑ᵢφₖ(uᵢ), and φₖ a function that must be
differentiable, even, coercive, φ(√·) concave, and 0 < φ'(u) / u <
+∞.The optimization is done thanks to quadratic sugorate function. In
particular, no linesearch or sub-iteration is necessary, and close form
formula for the step are used with guaranteed convergence.A classical example, like in the figure below that show an image
deconvolution problem, is the resolution of an inverse problem with the
minimization ofJ(x) = ||² + μ ψ(V·x)where H is a low-pass forward model, V a regularization operator that
approximate gradient (kind of high-pass filter) and ψ an edge preserving
function like Huber. The above objective is obtained with k ∈ {1, 2},
ψ₁(·) = ||², V₁ = H, ω₁ = y, and ω₂ = 0.FeaturesThemmmg, Majorize-Minimize Memory Gradient algorithm. See
documentation and [2] for details.Themmcg, Majorize-Minimize Conjugate Gradient algorithm. See
documentation and [1] for details.No linesearch: the step is obtained from a close form formula
without sub-iteration.No conjugacy choice: a conjugacy strategy is not necessary
thanks to the subspace nature of the algorithms. Themmcgalgorithm use a Polak-Ribière formula.Generic and flexible: there is no restriction on the number of
regularizer, their type, ..., as well as for data adequacy.Provided base class for objectives and losses allowing easy and fast
implementation.Just one file if you like quick and dirty installation, but
available withpip.Comes with examples of implemented linear operator.Installation and documentationQ-MM is essentially just one fileqmm.py. We recommend using poetry
for installationpoetry add qmmThe package can also be installed with pip. More options are described
in thedocumentation.Q-MM only depends onnumpyand Python 3.6.ExampleThedemo.pypresents an example on image deconvolution. The first step
is to implement the operatorsVand the adjointVᵀas callable
(function or methods). The user is in charge of these operators and
these callable must accept a unique Numpy arrayxand a unique return
value
(partialin thefunctoolsmodule in the standard library is usefull here).
There is no constraints on the shape, everything is vectorized
internally.After import ofqmm, user must instantiatePotentialobjects that
implementφandObjectiveobjects that implementμ ψ(V·x - ω)import qmm
phi = qmm.Huber(delta=10)  # φ

data_adeq = qmm.QuadObjective(H, Ht, HtH, data=data)  # ||y - H·x||²
prior = qmm.Objective(V, Vt, phi, hyper=0.01)  # μ ψ(V·x) = μ ∑ᵢ φ(vᵢᵗ·x)Then you can run the algorithmres = qmm.mmmg([data_adeq, prior], init, max_iter=200)where[data_adeq, prior]{.sourceCode} means that the two objective
functions are summed. For more details, seedocumentation.ContributeSource code:https://github.com/forieux/qmmIssue tracker:https://github.com/forieux/qmm/issuesAuthorIf you are having issues, please let us knoworieux AT l2s.centralesupelec.frMore information about mehere. F. Orieux and
R. Abirizk are affiliated to the Signal and Systems LaboratoryL2S.CitationQ-MM has a DOI with Zenodo.
Specific version can also be cited. Citation can beFrançois Orieux, & Ralph Abirizk. (2022). Q-MM: The Quadratic Majorize-Minimize
Python toolbox (v0.12.0). Zenodo. https://doi.org/10.5281/zenodo.6373070A example of bibtex is@software{francois_orieux_2022_6373070,
  author       = {François Orieux and Ralph Abirizk},
  title        = {Q-MM: The Quadratic Majorize-Minimize Python toolbox},
  month        = mar,
  year         = 2022,
  publisher    = {Zenodo},
  version      = {0.12.0},
  doi          = {10.5281/zenodo.6373069},
  url          = {https://doi.org/10.5281/zenodo.6373069}
}AcknowledgementAuthor would like to thanksJ.
Idier,S.
MoussaouiandÉ. Chouzenoux. É.
Chouzenoux has also a Matlab package that implements 3MG for image
deconvolution that can be found on herwebpage.LicenseThe project is licensed under the GPLv3 license.