Comparison with other Frameworks#

This document aims to provide a comprehensive comparison between Pyxu and its main contenders in the field of computational imaging frameworks. Various attributes such as features, maturity, ease-of-use, and support for distributed and GPU computing are discussed.

Main Contenders#

  • PyLops: PyLops is an open-source Python library focused on providing a backend-agnostic, idiomatic, matrix-free library of linear operators and related computations.

  • PyProximal: Proximal Operators and Algorithms in Python.

  • ODL: The Operator Discretization Library (ODL) is a Python library that enables research in inverse problems on realistic or real data.

  • SCICO: SCICO is a JAX-powered Python package for solving the inverse problems that arise in scientific imaging applications.

  • DeepInv: Deep Inverse is a Pytorch based library for solving imaging inverse problems with deep learning.

  • SigPy: SigPy is a package for signal processing, with emphasis on iterative methods. It is built on NumPy and CuPy.

  • GlobalBioIm (MATLAB): A unifying Matlab framework for the development of reconstruction algorithms (solving inverse problems) in computational imaging.

Note

This comparison excludes traditional medical imaging frameworks like TomoPy and ASTRA, as well as general-purpose optimization frameworks (e.g., scipy.optimize, MATLAB’s Optimization or CVX toolboxes) and deep learning frameworks (e.g., scikit-learn, PyTorch, TensorFlow, Keras). These exclusions are due to their architectural limitations or the narrow focus of their optimization methods, which are unsuitable for the diverse requirements of modern computational imaging.

Comparative Analysis#

Features and Maturity#

Pyxu offers a comprehensive suite of algorithms, including the latest primal-dual splitting methods for hybrid 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 operators

🟑 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

Ease-of-Use#

Pyxu stands out in its ease-of-use, providing well-documented code and a user-friendly interface. Most of its contenders either lack comprehensive documentation or have steeper learning curves.

Support for HPC Computing#

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)

SCICO: A Closer Look#

Although SCICO is almost feature-complete, it relies on JAX, which has some drawbacks:

  1. Experimental Framework: JAX is relatively young and is still officially considered experimental. If you’re looking for a stable, long-term solution, this could be a concern.

  2. Expertise Required: Working with JAX requires a deep understanding of functional programming to avoid pitfalls and debugging headaches.

  3. CPU Optimization: JAX is not optimized for CPU computing, making it less versatile than NumPy in some scenarios.

  4. Platform Support: JAX doesn’t support Windows, limiting its adoption among those who use Windows-based systems.

DeepInv: A Note on Usability#

DeepInv is based on PyTorch, making it less portable due to its numerous dependencies. Moreover, it’s primarily designed for deep learning users, making it less accessible for imaging scientists who may not be as well-versed in deep learning paradigms.

Conclusion#

While all the frameworks discussed here have their merits, Pyxu appears to offer the most well-rounded set of features, robustness, and ease-of-use. Its support for distributed and GPU computing adds to its advantages, making it a leading choice for computational imaging applications.