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.
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.
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:
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.
Expertise Required: Working with JAX requires a deep understanding of functional programming to avoid pitfalls and debugging headaches.
CPU Optimization: JAX is not optimized for CPU computing, making it less versatile than NumPy in some scenarios.
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.