Modular and scalable computational imaging in Python with GPU/out-of-core computing.

pyxu-org pyxu-org Last update: Feb 12, 2024
Pyxu logo

Pyxu: Modular and Scalable Computational Imaging

Documentation PyPI Version Python 3.9 | 3.10 | 3.11 Part of PyData License: MIT Maturity Level: Production/Stable Code style: black pre-commit enabled GitHub code size in bytes Number of Commits Last Commit Number of Contributors PRs Welcome Total PyPI downloads (Pycsou + Pyxu) Monthly PyPI downloads

Pyxu (pronounced [piksu], formerly known as Pycsou) is an open-source Python framework allowing scientists at any level to quickly prototype/deploy hardware accelerated and out-of-core computational imaging pipelines at scale. Thanks to its microservice architecture and tight integration with the PyData ecosystem, Pyxu supports a wide range of imaging applications, scales, and computation architectures.

Banner

What Makes Pyxu Special?

  • Universal & Modular ๐ŸŒ: Unlike other frameworks which are specialized for particular imaging types, Pyxu is a general-purpose computational imaging tool. No more wrestling with one-size-fits-all solutions that don't quite fit!
  • Plug-and-Play Functionality ๐ŸŽฎ: Craft imaging pipelines effortlessly with advanced operator algebra logic. Pyxu automates the tedious bits, like computing gradients, proximal operators, and computing hyperparameters.
  • High-Performance Computing ๐Ÿš€: Whether you're using CPUs or GPUs, Pyxu works with both. It employs Duck arrays, just-in-time compilation via Numba, and relies on CuPy and Dask for GPU/distributed computing needs.
  • Flexible & Adaptable ๐Ÿ› ๏ธ: Combat the common woes of software rigidity with Pyxu's ultra-flexible framework. Bayesian techniques requiring extensive software flexibility are a breeze here.
  • Hardware Acceleration ๐Ÿ–ฅ๏ธ: Leverage built-in support for hardware acceleration to ramp up your computational speed, all thanks to our module-agnostic codebase.
  • Distributed Computing ๐Ÿ”—: Got a lot of data? No worries! Pyxu works at scale and is easily deployable on institutional clusters using industry-standard technologies like Kubernetes and Docker.
  • Deep Learning Interoperability ๐Ÿค–: Integrate with major deep learning frameworks like PyTorch and JAX for state-of-the-art computational imaging techniques.

Why is Pyxu Necessary?

In the realm of computer vision ๐Ÿ“ท, digital image restoration and enhancement techniques have established themselves as indispensable pillars. These techniques, aiming to restore and elevate the quality of degraded or partially observed images, have witnessed unprecedented progress ๐Ÿ“ˆ in recent times. Thanks to potent image priors, we've now reached an era where image restoration and enhancement methods are incredibly advanced โœจ โ€”so much so that we might be approaching a pinnacle in terms of performance and accuracy.

However, it's not all roses ๐ŸŒน.

Despite their leaps in progress, advanced image reconstruction methods often find themselves trapped in a vicious cycle of limited adaptability, usability, and reproducibility. Many advanced computational imaging solutions, while effective, are tailored for specific use-cases and seldom venture beyond the confines of a proof-of-concept ๐Ÿšง. These niche solutions demand deep expertise to customize and deploy, making their adoption in production pipelines challenging.

In essence, the imaging domain is desperately seeking what the deep learning community found in frameworks like PyTorch, TensorFlow, or Keras โ€”a flexible, modular, and powerful environment that accelerates the adoption of cutting-edge methods in real-world settings. Pyxu stands as an answer to this call: a groundbreaking, open-source computational imaging software framework tailored for Python enthusiasts ๐Ÿ.

Basic Installation

The core of Pyxu is lightweight and straightforward to install. You'll need Python (>= 3.9, < 3.12) and a few mandatory dependencies. While these dependencies will be automatically installed via pip, we highly recommend installing NumPy and SciPy via conda to benefit from optimized math libraries.

First, to install NumPy and SciPy from conda-forge:

conda install -c conda-forge numpy scipy

And then install Pyxu:

pip install pyxu

That's it for the basic installation; you're ready to go! Check out the install guide for instructions on how to build from source, or for more advanced options.

Comparison with other Frameworks

Pyxu offers a comprehensive suite of algorithms, including the latest primal-dual splitting methods for nonsmooth optimization. The feature set is robust and mature, positioning it as a leader in the computational imaging arena.

Feature Maturity - Comparison
Package Name ๐Ÿ“ฆ Operator Types ๐Ÿ› ๏ธ Operator Algebra ๐ŸŽฏ Algorithmic Suite ๐Ÿ“š Application Focus ๐ŸŽฏ Remarks ๐Ÿ’ฌ
PyLops ๐Ÿ”ด Linear oeprators ๐ŸŸก Partial ๐Ÿ”ด Least-squares & sparse reconstructions ๐ŸŸก Wave-processing, geophysics ๐Ÿ”ด Linear operators based on NumPy's old matrix interface
PyProximal ๐Ÿ”ด Proximable functionals ๐Ÿ”ด None ๐Ÿ”ด Non-smooth convex optimization ๐ŸŸข None ๐Ÿ”ด Under early development, unstable API
Operator Discretization Library (ODL) ๐ŸŸข (Non)linear operators, differentiable/proximable functionals ๐ŸŸข Full ๐ŸŸข Smooth, non-smooth & hybrid (non-)convex optimization ๐ŸŸข None ๐Ÿ”ด Domain-specific language for mathematicians
GlobalBioIm ๐ŸŸข (Non)linear operators, differentiable/proximable functionals ๐ŸŸข Full ๐ŸŸข Smooth, non-smooth & hybrid convex optimization ๐ŸŸข None ๐Ÿ”ด MATLAB-based, unlike most DL frameworks
SigPy ๐ŸŸก Linear operators, proximable functionals ๐ŸŸก Partial ๐ŸŸก Smooth & non-smooth convex optimization ๐Ÿ”ด MRI ๐Ÿ”ด Very limited suite of operators, functionals, and algorithms
SCICO ๐ŸŸข (Non)linear operators, differentiable/proximable functionals ๐ŸŸข Full ๐ŸŸข Smooth, non-smooth & hybrid (non-)convex optimization ๐ŸŸข None ๐ŸŸก JAX-based (pure functions only, no mutation, etc.)
DeepInv ๐ŸŸข (Non)linear operators, differentiable/proximable functionals ๐ŸŸก Partial ๐ŸŸข Smooth, non-smooth & hybrid (non-)convex optimization ๐ŸŸก Deep Learning ๐ŸŸก PyTorch-based (lots of dependencies)
Pyxu ๐ŸŸข (Non)linear operators, differentiable/proximable functionals ๐ŸŸข Full ๐ŸŸข Smooth, non-smooth & hybrid (non-)convex optimization ๐ŸŸข None ๐ŸŸข Very rich suite of operators, functionals, algorithms & HPC features

Pyxu is unique in supporting both out-of-core and distributed computing. Additionally, it offers robust support for JIT compilation and GPU computing via Numba and CuPy respectively. Most contenders either offer partial support or lack these features altogether.

HPC Features - Comparison
Package Name ๐Ÿ“ฆ Auto Diff/Prox โš™๏ธ GPU Computing ๐Ÿ–ฅ๏ธ Out-of-core Computing ๐ŸŒ JIT Compiling โฑ๏ธ
PyLops ๐Ÿ”ด No ๐ŸŸข Yes (CuPy) ๐Ÿ”ด No ๐ŸŸก Partial (LLVM via Numba)
PyProximal ๐Ÿ”ด No ๐Ÿ”ด No ๐Ÿ”ด No ๐Ÿ”ด No
Operator Discretization Library (ODL) ๐ŸŸข Yes ๐ŸŸก Very limited (CUDA) ๐Ÿ”ด No ๐Ÿ”ด No
GlobalBioIm ๐ŸŸข Yes ๐ŸŸข Yes (MATLAB) ๐Ÿ”ด No ๐Ÿ”ด No
SigPy ๐Ÿ”ด No ๐ŸŸข Yes (CuPy) ๐ŸŸก Manual (MPI) ๐Ÿ”ด No
SCICO ๐ŸŸข Yes ๐ŸŸข Yes + TPU (JAX) ๐Ÿ”ด No ๐ŸŸข Yes (XLA via JAX)
DeepInv ๐ŸŸข Autodiff support ๐ŸŸข Yes (PyTorch) ๐Ÿ”ด No ๐ŸŸก Partial(XLA via torch.compile)
Pyxu ๐ŸŸข Yes ๐ŸŸข Yes (CuPy) ๐ŸŸข Yes (Dask) ๐ŸŸข Yes (LLVM and CUDA via Numba)

Get Started Now!

Ready to dive in? ๐ŸŠโ€โ™€๏ธ Our tutorial kicks off with an introductory overview of computational imaging and Bayesian reconstruction. Our user guide then provides an in-depth tour of Pyxu's multitude of features through concrete examples.

So, gear up to embark on a transformative journey in computational imaging.

Join Our Community

Pyxu is open-source and ever-evolving ๐Ÿš€. Your contributions, whether big or small, can make a significant impact. So come be a part of the community that's setting the pace for computational imaging ๐ŸŒฑ.

Let's accelerate the transition from research prototypes to production-ready solutions. Dive into Pyxu today and make computational imaging more powerful, efficient, and accessible for everyone! ๐ŸŽ‰

Cite us

@software{pyxu-framework,
  author       = {Matthieu Simeoni and
                  Sepand Kashani and
                  Joan Ruรฉ-Queralt and
                  Pyxu Developers},
  title        = {matthieumeo/pyxu: pyxu},
  publisher    = {Zenodo},
  doi          = {10.5281/zenodo.4486431},
  url          = {https://doi.org/10.5281/zenodo.4486431}
}

Subscribe to our newsletter