Skip to main content

Quadratic Majorize-Minimize Python toolbox

Project description

Q-MM: A Python toolbox for Quadratic Majorization-Minimization

DOI licence pypi status version maintained Documentation Status

image

Q-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.

See documentation for more background. If you use this code, please cite the references above and a citation of this toolbox will also be appreciated, see below. You can also click ⭐ on the repo.

Quadratic Majorize-Minimize

The Q-MM optimization algorithms compute the minimizer of objective function like

J(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 of

J(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.

image

Features

  • The mmmg, Majorize-Minimize Memory Gradient algorithm. See documentation and [2] for details.
  • The mmcg, 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. The mmcg algorithm 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 with pip.
  • Comes with examples of implemented linear operator.

Installation and documentation

Q-MM is essentially just one file qmm.py. We recommend using poetry for installation

poetry add qmm

The package can also be installed with pip. More options are described in the documentation.

Q-MM only depends on numpy and Python 3.6.

Example

The demo.py presents an example on image deconvolution. The first step is to implement the operators V and the adjoint Vᵀ as callable (function or methods). The user is in charge of these operators and these callable must accept a unique Numpy array x and a unique return value (partial in the functools module in the standard library is usefull here). There is no constraints on the shape, everything is vectorized internally.

After import of qmm, user must instantiate Potential objects that implement φ and Objective objects 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 algorithm

res = 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, see documentation.

Contribute

Author

If you are having issues, please let us know

orieux AT l2s.centralesupelec.fr

More information about me here. F. Orieux and R. Abirizk are affiliated to the Signal and Systems Laboratory L2S.

Citation

Q-MM has a DOI with Zenodo DOI. Specific version can also be cited. Citation can be

François Orieux, & Ralph Abirizk. (2022). Q-MM: The Quadratic Majorize-Minimize
Python toolbox (v0.12.0). Zenodo. https://doi.org/10.5281/zenodo.6373070

A 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}
}

Acknowledgement

Author would like to thanks J. Idier, S. Moussaoui and É. Chouzenoux. É. Chouzenoux has also a Matlab package that implements 3MG for image deconvolution that can be found on her webpage.

License

The project is licensed under the GPLv3 license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qmm-0.12.1.tar.gz (31.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qmm-0.12.1-py3-none-any.whl (41.9 kB view details)

Uploaded Python 3

File details

Details for the file qmm-0.12.1.tar.gz.

File metadata

  • Download URL: qmm-0.12.1.tar.gz
  • Upload date:
  • Size: 31.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.4 Linux/5.15.0-39-generic

File hashes

Hashes for qmm-0.12.1.tar.gz
Algorithm Hash digest
SHA256 0e641911f16b6f9546cabe3a9bf5d20fa9c3fb8bf0f33f4e3ad3f0c1a7850fa3
MD5 00cbeb299a6d20c151f80841c8b21bc8
BLAKE2b-256 8b81feb6a292c827511d8f02d28f4929b5170d8b1b064aed57a96180f8d566f8

See more details on using hashes here.

File details

Details for the file qmm-0.12.1-py3-none-any.whl.

File metadata

  • Download URL: qmm-0.12.1-py3-none-any.whl
  • Upload date:
  • Size: 41.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.13 CPython/3.10.4 Linux/5.15.0-39-generic

File hashes

Hashes for qmm-0.12.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a0d1e6f859c418b3c768f3fb2cef401ce80a7c69654eb3f262110db49e240da4
MD5 57ad981364874a568b24f56314fe4a91
BLAKE2b-256 1da6326cdf820803e3f7cb75fe76f5793f9f43f5a3d501c390a7fd6289812d2c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page