Skip to content

Releases: odlgroup/odl

ODL 0.7.0

09 Sep 20:44
Compare
Choose a tag to compare

This release is a big one as it includes the cumulative work over a period of 1 1/2 years. It is planned to be the last release before version 1.0.0 where we expect to land a number of exciting new features.

What follows are the highlights of the release. For a more detailed list of all changes, please refer to the release notes in the documentation.

Native multi-indexing of ODL space elements

The DiscreteLpElement and Tensor (renamed from FnBaseVector) data structures now natively support almost all kinds of Numpy "fancy" indexing.
At the same time, the spaces DiscreteLp and Tensorspace (renamed from FnBase) have more advanced indexing capabilities as well. Up to few exceptions, elem[indices] in space[indices] is always fulfilled.
Alongside, ProductSpace and its elements also support more advanced indexing, in particular in the case of power spaces.

Furthermore, integration with Numpy has been further improved with the implementation of the __array_ufunc__ interface. This allows to transparently use ODL objects in calls to Numpy UFuncs, e.g., np.cos(odl_obj, out=odl_obj) or np.add.reduce(odl_in, axis=0, out=odl_out) — both these examples were not possible with the __array__ and __array_wrap__ interfaces.

Unfortunately, this changeset makes the odlcuda plugin unusable since it only supports linear indexing. A much more powerful replacement based on CuPy will be added in version 1.0.0.

Integration with deep learning frameworks

ODL is now integrated with three major deep learning frameworks: TensorFlow, PyTorch and Theano. In particular, ODL Operator and Functional objects can be used as layers in neural networks, with support for automatic differentiation and backpropagation. This makes a lot of (inverse) problems that ODL can handle well, e.g., tomography, accessible to the computation engines of the deep learning field, and opens up a wide range of possibilities to combine the two.

The implementation of this functionality and examples of its usage can be found in the packages tensorflow, torch and theano in the odl.contrib sub-package (see below).

New contrib sub-package

The core ODL library is intended to stay focused on general-purpose classes and data structures, and good code quality is a major goal. This implies that contributions need to undergo scrutiny in a review process, and that some contributions might not be a good fit if they are too specific for certain applications.

For this reason, we have created a new contrib sub-package that is intended for exactly this kind of code. As of writing this, contrib already contains a number of highly useful modules:

  • datasets: Loaders and utility code for publicly available datasets (currently FIPS CT, Mayo clinic human CT, Tu Graz MRI and some image data)
  • fom: Implementations of Figures-of-Merit for image quality assessment
  • mrc: Reader and writer for the MRC 2014 data format in electron microscopy
  • param_opt: Optimization strategies for method hyperparameters
  • pyshearlab: Integration of the pyshearlab Python library for shearlet decomposition and analysis
  • shearlab: Integration of the Shearlab.jl Julia shearlet library
  • solvers: More exotic functionals and optimization methods than in the core ODL library
  • tomo: Vendor- or application-specific geometries (currently Elekta ICON and XIV)
  • tensorflow: Integration of ODL with TensorFlow
  • theano: Integration of ODL with Theano
  • torch: Integration of ODL with PyTorch

Overhaul of tomographic geometries

The classes for representing tomographic geometries in odl.tomo have undergone a major update, resulting in a consistent definition of coordinate systems across all cases, proper documentation, vectorization and broadcasting semantics in all methods that compute vectors, and significant speed-up of backprojection due to better axis handling.
Additionally, factory functions cone_beam_geometry and helical_geometry have been added as a simpler and more accessible way to create cone beam geometries.

ODL 0.6.0

20 Apr 15:44
Compare
Choose a tag to compare

Besides many small improvements and additions, this release is the first one under the new Mozilla Public License 2.0 (MPL-2.0).

For a more detailed list of changes, see the release notes.

ODL 0.5.3

17 Jan 20:17
Compare
Choose a tag to compare

Lots of small improvements and feature additions in this release. Most notable are the remarkable performance improvements to the ASTRA bindings (up to 10x), the addition of fbp_op to create filtered back-projection operators with several filter and windowing options, as well as further performance improvements to operator compositions and the show methods.

For a more detailed list of changes, see the release notes.

ODL 0.5.2

02 Nov 17:34
Compare
Choose a tag to compare

Another maintenance release that fixes a number of issues with installation and testing, see #674, #679 #692 and #696.

ODL 0.5.1

24 Oct 14:23
Compare
Choose a tag to compare

This is a maintenance release since the test suite was not bundled with PyPI and Conda packages as intended already in 0.5.0. From this version on, users can run python -c "import odl; odl.test()" with all types of installations (from PyPI, Conda or from source).

ODL 0.5.0

21 Oct 18:08
Compare
Choose a tag to compare

This release features a new important top level class Functional that is intended to be used in optimization methods.
Beyond its parent Operator, it provides special methods and properties like gradient or proximal which are useful in advanced smooth or non-smooth optimization schemes.
The interfaces of all solvers in odl.solvers have been updated to make use of functionals instead of their proximals, gradients etc. directly.

Further notable changes are the implementation of an as_writable_array context manager that exposes arbitrary array storage as writable Numpy arrays, and the generalization of the wavelet transform to arbitrary dimensions.

See the detailed release notes for a complete list of changes.

ODL 0.4.0

17 Aug 15:04
Compare
Choose a tag to compare

This release marks the addition of the deform package to ODL, adding functionality for the deformation
of DiscreteLp elements.

New features

  • Add deform package with linearized deformations (#488)
  • Add option to interface with ProxImaL solvers using ODL operators. (#494)

ODL 0.3.1

15 Aug 16:53
Compare
Choose a tag to compare

This release mainly fixes an issue that made it impossible to pip install odl with version 0.3.0. It also adds the first really advanced solvers based on forward-backward and Douglas-Rachford splitting.

See Release Notes for a full list of changes.

v0.3.0

30 Jun 16:05
Compare
Choose a tag to compare

ODL 0.3.0 Release Notes (2016-06-29)

This release marks the removal of odlpp from the core library. It has instead been moved to a separate library, odlcuda.

New features

  • To enable cuda backends for the odl spaces, an entry point 'odl.space' has been added where external libraries can hook in to add FnBase and NtuplesBase type spaces.
  • Add pytest fixtures 'fn_impl' and 'ntuple_impl' to the test config conf.py. These can now be accessed from any test.
  • Allow creation of general spaces using the fn, cn and rn methods. This functions now take an impl parameter which defaults to 'numpy' but with odlcuda installed it may also be set to 'cuda'. The old numpy specific Fn, Cn and Rn functions have been removed.

Changes

  • Moved all CUDA specfic code out of the library into odlcuda. This means that cu_ntuples.py and related files have been removed.
  • rename ntuples.py to npy_ntuples.py.
  • Added Numpy to the numy based spaces. They are now named NumpyFn and NumpyNtuples.
  • Prepended npy_ to all methods specific to ntuples such as weightings.

v0.2.4

28 Jun 13:18
Compare
Choose a tag to compare

ODL 0.2.4 Release Notes (2016-06-28)

New features

  • Add uniform_discr_fromdiscr (PR 467).
  • Add conda build files (commit 86ff166).

Bugfixes

  • Fix bug in submarine phantom with non-centered space (PR 469).
  • Fix crash when plotting in 1d (commit 3255fa3).

Changes

  • Move phantoms to new module odl.phantom (PR 469).
  • Rename RectPartition.is_regular to RectPartition.is_uniform
    (PR 468).