Publication#

Summary#

Imaging is the process of transforming noisy, incomplete data into a space that humans can interpret. NIFTy is a Bayesian framework for imaging and has already successfully been applied to many fields in astrophysics. Previous design decisions held the performance and the development of methods in NIFTy back. We present a rewrite of NIFTy, coined NIFTy.re, which reworks the modeling principle, extends the inference strategies, and outsources much of the heavy lifting to JAX. The rewrite dramatically accelerates models written in NIFTy, lays the foundation for new types of inference machineries, improves maintainability, and enables interoperability between NIFTy and the JAX machine learning ecosystem.

Statement of Need#

Imaging commonly involves millions to billions of pixels. Each pixel usually corresponds to one or more correlated degrees of freedom in the model space. Modeling this many degrees of freedom is computationally demanding. However, imaging is not only computationally demanding but also statistically challenging. The noise in the data requires a statistical treatment and needs to be accurately propagated from the data to the uncertainties in the final image. To do this, we require an inference machinery that not only handles extremely high-dimensional spaces, but one that does so in a statistically rigorous way.

NIFTy is a Bayesian imaging library [39], [41], [22] designed to infer million- to billion-dimensional posterior distributions from noisy data. At its core are Gaussian Process (GP) models and Variational Inference (VI) algorithms.

NIFTy.re is a rewrite of NIFTy in JAX [3] with all relevant previous GP models, new, more flexible GP models, and a more flexible machinery for approximating posterior distributions. Being written in JAX, NIFTy.re effortlessly runs on accelerator hardware such as the GPU and TPU, vectorizes models whenever possible, and just-in-time compiles code for additional performance. NIFTy.re switches from a home-grown automatic differentiation engine that was used in NIFTy to JAX’s automatic differentiation engine. This lays the foundation for new types of inference machineries that make use of the higher order derivatives provided by JAX. Through these changes, we envision to harness significant gains in maintainability of NIFTy.re compared to NIFTy and a faster development cycle for new features.

We expect NIFTy.re to be highly useful for many imaging applications and envision many applications within and outside of astrophysics [8, 23, 24, 25, 28, 29, 30, 32, 33, 34, 36, 37, 38, 42, 43, 44]. NIFTy.re has already been successfully used in two galactic tomography publications [26, 31].

NIFTy.re competes with other GP libraries as well as with probabilistic programming languages and frameworks. Compared to GPyTorch [14], GPflow [6], george [21], or TinyGP [10], NIFTy.re focuses on GP models for structured spaces and does not assume the posterior to be analytically accessible. Instead, NIFTy.re tries to approximate the true posterior using VI. Compared to classical probabilistic programming languages such as Stan [5] and frameworks such as Pyro [1], NumPyro [35], pyMC3 [20], emcee [27], dynesty [17, 40], or BlackJAX [4], NIFTy.re focuses on inference in extremely high-dimensional spaces. NIFTy.re exploits the structure of probabilistic models in its VI techniques [12]. With NIFTy.re, the GP models and the VI machinery are now fully accessible in the JAX ecosystem and NIFTy.re components interact seamlessly with other JAX packages such as BlackJAX and JAXopt/Optax [2, 7].

Core Components#

NIFTy.re brings tried and tested structured GP models and VI algorithms to JAX. GP models are highly useful for imaging problems, and VI algorithms are essential to probe high-dimensional posteriors, which are often encountered in imaging problems. NIFTy.re infers the parameters of interest from noisy data via a stochastic mapping that goes in the opposite direction, from the parameters of interest to the data.

NIFTy and NIFTy.re build up hierarchical models for the posterior inference. The log-posterior function reads \(\ln{p(\theta|d)} := \ell(d, f(\theta)) + \ln{p}(\theta) + \mathrm{const}\) with log-likelihood \(\ell\), forward model \(f\) mapping the parameters of interest \(\theta\) to the data space, and log-prior \(\ln{p(\theta)}\). The goal of the inference is to draw samples from the posterior \(p(\theta|d)\).

What is considered part of the likelihood versus part of the prior is ill-defined. Without loss of generality, NIFTy and NIFTy.re re-formulate models such that the prior is always standard Gaussian. They implicitly define a mapping from a new latent space with a priori standard Gaussian parameters \(\xi\) to the parameters of interest \(\theta\). The mapping \(\theta(\xi)\) is incorporated into the forward model \(f(\theta(\xi))\) in such a way that all relevant details of the prior model are encoded in the forward model. This choice of re-parameterization [19] is called standardization. It is often carried out implicitly in the background without user input.

Gaussian Processes#

One standard tool from the NIFTy.re toolbox is the so-called correlated field GP model from NIFTy. This model relies on the harmonic domain being easily accessible. For example, for pixels spaced on a regular Cartesian grid, the natural choice to represent a stationary kernel is the Fourier domain. In the generative picture, a realization \(s\) drawn from a GP then reads \(s = \mathrm{FT} \circ \sqrt{P} \circ \xi\) with \(\mathrm{FT}\) the (fast) Fourier transform, \(\sqrt{P}\) the square-root of the power-spectrum in harmonic space, and \(\xi\) standard Gaussian random variables. In the implementation in NIFTy.re and NIFTy, the user can choose between two adaptive kernel models, a non-parametric kernel \(\sqrt{P}\) and a Matérn kernel \(\sqrt{P}\) [13, 23] for details on their implementation]. A code example that initializes a non-parametric GP prior for a \(128 \times 128\) space with unit volume is shown in the following.

from nifty import re as jft

dims = (128, 128)
cfm = jft.CorrelatedFieldMaker("cf")
cfm.set_amplitude_total_offset(offset_mean=2, offset_std=(1e-1, 3e-2))
# Parameters for the kernel and the regular 2D Cartesian grid for which
# it is defined
cfm.add_fluctuations(
  dims,
  distances=tuple(1.0 / d for d in dims),
  fluctuations=(1.0, 5e-1),
  loglogavgslope=(-3.0, 2e-1),
  flexibility=(1e0, 2e-1),
  asperity=(5e-1, 5e-2),
  prefix="ax1",
  non_parametric_kind="power",
)
# Get the forward model for the GP prior
correlated_field = cfm.finalize()

Not all problems are well described by regularly spaced pixels. For more complicated pixel spacings, NIFTy.re features Iterative Charted Refinement [9], a GP model for arbitrarily deformed spaces. This model exploits nearest neighbor relations on various coarsenings of the discretized modeled space and runs very efficiently on GPUs. For one-dimensional problems with arbitrarily spaced pixels, NIFTy.re also implements multiple flavors of Gauss-Markov processes.

Building Up Complex Models#

Models are rarely just a GP prior. Commonly, a model contains at least a few non-linearities that transform the GP prior or combine it with other random variables. For building more complex models, NIFTy.re provides a Model class that offers a somewhat familiar object-oriented design yet is fully JAX compatible and functional under the hood. The following code shows how to build a slightly more complex model using the objects from the previous example.

from jax import numpy as jnp


class Forward(jft.Model):
  def __init__(self, correlated_field):
    self._cf = correlated_field
    # Tracks a callable with which the model can be initialized. This
    # is not strictly required, but comes in handy when building deep
    # models. Note, the init method (short for "initialization" method)
    # is not to be confused with the prior, which is always standard
    # Gaussian.
    super().__init__(init=correlated_field.init)

  def __call__(self, x):
    # NOTE, any kind of masking of the output, non-linear and linear
    # transformation could be carried out here. Models can also be
    # combined and nested in any way and form.
    return jnp.exp(self._cf(x))


forward = Forward(correlated_field)

data = jnp.load("data.npy")
lh = jft.Poissonian(data).amend(forward)

All GP models in NIFTy.re as well as all likelihoods behave like instances of jft.Model, meaning that JAX understands what it means if a computation involves self, other jft.Model instances, or their attributes. In other words, correlated_field, forward, and lh from the code snippets shown here are all so-called pytrees in JAX, and, for example, the following is valid code jax.jit(lambda l, x: l(x))(lh, x0) with x0 some arbitrarily chosen valid input to lh. Inspired by equinox [15], individual attributes of the class can be marked as non-static or static via dataclass.field(metadata=dict(static=...)) for the purpose of compiling. Depending on the value, JAX will either treat the attribute as an unknown placeholder or as a known concrete attribute and potentially inline it during compilation. This mechanism is extensively used in likelihoods to avoid inlining large constants such as the data and to avoid expensive re-compilations whenever possible.

Variational Inference#

NIFTy.re is built for models with millions to billions of degrees of freedom. To probe the posterior efficiently and accurately, NIFTy.re relies on VI. Specifically, NIFTy.re implements Metric Gaussian Variational Inference (MGVI) and its successor geometric Variational Inference (geoVI) [11, 12, 16]. At the core of both MGVI and geoVI lies an alternating procedure in which one switches between optimizing the Kullback–Leibler divergence for a specific shape of the variational posterior and updating the shape of the variational posterior. MGVI and geoVI define the variational posterior via samples, specifically, via samples drawn around an expansion point. The samples in MGVI and geoVI exploit model-intrinsic knowledge of the posterior’s approximate shape, encoded in the Fisher information metric and the prior curvature [12].

NIFTy.re allows for much finer control over the way samples are drawn and updated compared to NIFTy. NIFTy.re exposes stand-alone functions for drawing MGVI and geoVI samples from any arbitrary model with a likelihood from NIFTy.re and a forward model that is differentiable by JAX. In addition to stand-alone sampling functions, NIFTy.re provides tools to configure and execute the alternating Kullback–Leibler divergence optimization and sample adaption at a lower abstraction level. These tools are provided in a JAXopt/Optax-style optimizer class [2, 7]. A typical minimization with NIFTy.re is shown in the following. It retrieves six independent, antithetically mirrored samples from the approximate posterior via 25 iterations of alternating between optimization and sample adaption. The final result is stored in the samples variable. A convenient one-shot wrapper for the code below is jft.optimize_kl. By virtue of all modeling tools in NIFTy.re being written in JAX, it is also possible to combine NIFTy.re tools with BlackJAX [4] or any other posterior sampler in the JAX ecosystem.

from jax import random

key = random.PRNGKey(42)
key, sk = random.split(key, 2)
# NIFTy is agnostic w.r.t. the type of inputs it gets as long as they
# support core arithmetic properties. Tell NIFTy to treat our parameter
# dictionary as a vector.
samples = jft.Samples(pos=jft.Vector(lh.init(sk)), samples=None)

delta = 1e-4
absdelta = delta * jft.size(samples.pos)

opt_vi = jft.OptimizeVI(lh, n_total_iterations=25)
opt_vi_st = opt_vi.init_state(
  key,
  # Implicit definition for the accuracy of the KL-divergence
  # approximation; typically on the order of 2-12
  n_samples=lambda i: 1 if i < 2 else (2 if i < 4 else 6),
  # Parametrize the conjugate gradient method at the heart of the
  # sample-drawing
  draw_linear_kwargs=dict(
    cg_name="SL", cg_kwargs=dict(absdelta=absdelta / 10.0, maxiter=100)
  ),
  # Parametrize the minimizer in the nonlinear update of the samples
  nonlinearly_update_kwargs=dict(
    minimize_kwargs=dict(
      name="SN", xtol=delta, cg_kwargs=dict(name=None), maxiter=5
    )
  ),
  # Parametrize the minimization of the KL-divergence cost potential
  kl_kwargs=dict(minimize_kwargs=dict(name="M", xtol=delta, maxiter=35)),
  sample_mode="nonlinear_resample",
)
for i in range(opt_vi.n_total_iterations):
  print(f"Iteration {i+1:04d}")
  # Continuously update the samples of the approximate posterior
  # distribution
  samples, opt_vi_st = opt_vi.update(samples, opt_vi_st)
  print(opt_vi.get_status_message(samples, opt_vi_st))
Data (left), posterior mean (middle), and posterior uncertainty (right) for a simple toy example.

Fig. 3 Data (left), posterior mean (middle), and posterior uncertainty (right) for a simple toy example.#

Fig. 3 shows an exemplary posterior reconstruction employing the above model. The posterior mean agrees with the data but removes noisy structures. The posterior standard deviation is approximately equal to typical differences between the posterior mean and the data.

Performance of NIFTy.re compared to NIFTy#

We test the performance of NIFTy.re against NIFTy for the simple yet representative model from above. To assess the performance, we compare the time required to apply \(M_p := F_p + \mathbb{1}\) to random input with \(F_p\) denoting the Fisher metric of the overall likelihood at position \(p\) and \(\mathbb{1}\) the identity matrix. Within NIFTy.re, the Fisher metric of the overall likelihood is decomposed into \(J_{f,p}^\dagger N^{-1} J_{f,p}\) with \(J_{f,p}\) the implicit Jacobian of the forward model \(f\) at \(p\) and \(N^{-1}\) the Fisher-metric of the Poisson likelihood. We choose to benchmark \(M_p\) as a typical VI minimization in NIFTy.re and NIFTy is dominated by calls to this function.

Median evaluation time of applying the Fisher metric plus the identity metric to random input for ``NIFTy.re`` and ``NIFTy`` on the CPU (one and eight core(s) of an Intel Xeon Platinum 8358 CPU clocked at 2.60G Hz) and the GPU (A100 SXM4 80 GB HBM2). The quantile range from the 16%- to the 84%-quantile is obscured by the marker symbols.

Fig. 4 Median evaluation time of applying the Fisher metric plus the identity metric to random input for NIFTy.re and NIFTy on the CPU (one and eight core(s) of an Intel Xeon Platinum 8358 CPU clocked at 2.60G Hz) and the GPU (A100 SXM4 80 GB HBM2). The quantile range from the 16%- to the 84%-quantile is obscured by the marker symbols.#

Fig. 4 shows the median evaluation time in NIFTy of applying \(M_p\) to new, random tangent positions and the evaluation time in NIFTy.re of building \(M_p\) and applying it to new, random tangent positions for exponentially larger models. The 16%-quantiles and the 84%-quantiles of the timings are obscured by the marker symbols. We chose to exclude the build time of \(M_p\) in NIFTy from the comparison, putting NIFTy at an advantage, as its automatic differentiation is built around calls to \(M_p\) with \(p\) rarely varying. We ran the benchmark on one CPU core, eight CPU cores, and on a GPU on a compute-node with an Intel Xeon Platinum 8358 CPU clocked at 2.60G Hz and an NVIDIA A100 SXM4 80 GB HBM2 GPU. The benchmark used jax==0.4.23 and jaxlib==0.4.23+cuda12.cudnn89. We vary the size of the model by increasing the size of the two-dimensional square image grid.

For small image sizes, NIFTy.re on the CPU is about one order of magnitude faster than NIFTy. Both reach about the same performance at an image size of roughly 15,000 pixels and continue to perform roughly the same for larger image sizes. The performance increases by a factor of three to four with eight cores for NIFTy.re and NIFTy, although NIFTy.re is slightly better at using the additional cores. On the GPU, NIFTy.re is consistently about one to two orders of magnitude faster than NIFTy for images larger than 100,000 pixels.

We believe the performance benefits of NIFTy.re on the CPU for small models stem from the reduced Python overhead by just-in-time compiling computations. At image sizes larger than roughly 15,000 pixels, both evaluation times are dominated by the fast Fourier transform and are hence roughly the same as both use the same underlying implementation [18]. Models in NIFTy.re and NIFTy are often well aligned with GPU programming models and thus consistently perform well on the GPU. Modeling components such as the new GP models implemented in NIFTy.re are even better aligned with GPU programming paradigms and yield even higher performance gains [9].

Conclusion#

NIFTy.re implements the core GP and VI machinery of the Bayesian imaging package NIFTy in JAX. The rewrite moves much of the heavy-lifting from home-grown solutions to JAX, and we envision significant gains in maintainability of NIFTy.re and a faster development cycle moving forward. The rewrite accelerates typical models written in NIFTy by one to two orders of magnitude, lays the foundation for new types of inference machineries by enabling higher order derivatives via JAX, and enables the interoperability of NIFTy’s VI and GP methods with the JAX machine learning ecosystem.

Acknowledgements#

Gordian Edenhofer acknowledges support from the German Academic Scholarship Foundation in the form of a PhD scholarship (“Promotionsstipendium der Studienstiftung des Deutschen Volkes”). Philipp Frank acknowledges funding through the German Federal Ministry of Education and Research for the project “ErUM-IFT: Informationsfeldtheorie für Experimente an Großforschungsanlagen” (Förderkennzeichen: 05D23EO1). Jakob Roth acknowledges financial support by the German Federal Ministry of Education and Research (BMBF) under grant 05A20W01 (Verbundprojekt D-MeerKAT). Matteo Guardiani, Vincent Eberle, and Margret Westerkamp acknowledge financial support from the “Deutsches Zentrum für Luft- und Raumfahrt e.V.” (DLR) through the project Universal Bayesian Imaging Kit (UBIK, Förderkennzeichen 50OO2103). Lukas Scheel-Platz acknowledges funding from the European Research Council (ERC) under the European Union’s Horizon Europe research and innovation programme under grant agreement No 101041936 (EchoLux).

Bibiography#

[1]

Eli Bingham, Jonathan P. Chen, Martin Jankowiak, Fritz Obermeyer, Neeraj Pradhan, Theofanis Karaletsos, Rohit Singh, Paul A. Szerlip, Paul Horsfall, and Noah D. Goodman. Pyro: deep universal probabilistic programming. Journal of Machine Learning Research, 20:28:1–28:6, 2019. URL: http://jmlr.org/papers/v20/18-403.html.

[2] (1,2)

Mathieu Blondel, Quentin Berthet, Marco Cuturi, Roy Frostig, Stephan Hoyer, Felipe Llinares-Lopez, Fabian Pedregosa, and Jean-Philippe Vert. Efficient and modular implicit differentiation. Advances in Neural Information Processing Systems, 35:5230–5242, 2022. URL: https://proceedings.neurips.cc/paper_files/paper/2022/file/228b9279ecf9bbafe582406850c57115-Paper-Conference.pdf.

[3]

James Bradbury, Roy Frostig, Peter Hawkins, Matthew James Johnson, Chris Leary, Dougal Maclaurin, George Necula, Adam Paszke, Jake VanderPlas, Skye Wanderman-Milne, and Qiao Zhang. JAX: composable transformations of Python+NumPy programs. 2018. URL: google/jax.

[4] (1,2)

Cabezas, Alberto, Lao, Junpeng, Louf, and Rémi. Blackjax: a sampling library for JAX. 2023. URL: blackjax-devs/blackjax.

[5]

Bob Carpenter, Andrew Gelman, Matthew D. Hoffman, Daniel Lee, Ben Goodrich, Michael Betancourt, Marcus Brubaker, Jiqiang Guo, Peter Li, and Allen Riddell. Stan: a probabilistic programming language. Journal of Statistical Software, 76(1):1–32, 2017. URL: https://www.jstatsoft.org/index.php/jss/article/view/v076i01, doi:10.18637/jss.v076.i01.

[6]

Alexander G. De G. Matthews, Mark Van Der Wilk, Tom Nickson, Keisuke Fujii, Alexis Boukouvalas, Pablo León-Villagrá, Zoubin Ghahramani, and James Hensman. Gpflow: a gaussian process library using tensorflow. Journal of Machine Learning Research, 18(1):1299–1304, jan 2017.

[7] (1,2)

DeepMind, Igor Babuschkin, Kate Baumli, Alison Bell, Surya Bhupatiraju, Jake Bruce, Peter Buchlovsky, David Budden, Trevor Cai, Aidan Clark, Ivo Danihelka, Antoine Dedieu, Claudio Fantacci, Jonathan Godwin, Chris Jones, Ross Hemsley, Tom Hennigan, Matteo Hessel, Shaobo Hou, Steven Kapturowski, Thomas Keck, Iurii Kemaev, Michael King, Markus Kunesch, Lena Martens, Hamza Merzic, Vladimir Mikulik, Tamara Norman, George Papamakarios, John Quan, Roman Ring, Francisco Ruiz, Alvaro Sanchez, Laurent Sartran, Rosalia Schneider, Eren Sezener, Stephen Spencer, Srivatsan Srinivasan, Miloš Stanojević, Wojciech Stokowiec, Luyu Wang, Guangyao Zhou, and Fabio Viola. The DeepMind JAX Ecosystem. 2020. URL: google-deepmind.

[8]

Vincent Eberle, Philipp Frank, Julia Stadler, Silvan Streit, and Torsten Enßlin. Efficient representations of spatially variant point spread functions with butterfly transforms in bayesian imaging algorithms. Physical Sciences Forum, 2022. URL: https://www.mdpi.com/2673-9984/5/1/33, doi:10.3390/psf2022005033.

[9] (1,2)

Gordian Edenhofer, Reimar H. Leike, Philipp Frank, and Torsten A. Enßlin. Sparse kernel gaussian processes through iterative charted refinement (icr). 2022. URL: https://arxiv.org/abs/2206.10634, doi:10.48550/ARXIV.2206.10634.

[10]

Daniel Foreman-Mackey, Weixiang Yu, Sachin Yadav, McCoy Reynolds Becker, Neven Caplar, Daniela Huppenkothen, Thomas Killestein, René Tronsgaard, Theo Rashid, and Steve Schmerler. dfm/tinygp: The tiniest of Gaussian Process libraries. January 2024. URL: https://doi.org/10.5281/zenodo.10463641, doi:10.5281/zenodo.10463641.

[11]

Philipp Frank. Geometric variational inference and its application to bayesian imaging. Physical Sciences Forum, 2022. URL: https://www.mdpi.com/2673-9984/5/1/6, doi:10.3390/psf2022005006.

[12] (1,2,3)

Philipp Frank, Reimar H. Leike, and Torsten A. Enßlin. Geometric variational inference. Entropy, 23(7):853, jul 2021. URL: https://doi.org/10.3390%2Fe23070853, doi:10.3390/e23070853.

[13]

Matteo Guardiani, Philipp Frank, Andrija Kostić, Gordian Edenhofer, Jakob Roth, Berit Uhlmann, and Torsten Enßlin. Causal, bayesian, & non-parametric modeling of the sars-cov-2 viral load distribution vs. patient's age. PLOS ONE, 17(10):1–21, 10 2022. URL: https://doi.org/10.1371/journal.pone.0275011, doi:10.1371/journal.pone.0275011.

[14]

James Hensman, Alexander G. de G. Matthews, and Zoubin Ghahramani. Scalable variational gaussian process classification. In Guy Lebanon and S. V. N. Vishwanathan, editors, AISTATS, volume 38 of JMLR Workshop and Conference Proceedings. JMLR.org, 2015. URL: http://dblp.uni-trier.de/db/conf/aistats/aistats2015.html#HensmanMG15.

[15]

Patrick Kidger and Cristian Garcia. Equinox: neural networks in JAX via callable PyTrees and filtered transformations. Differentiable Programming workshop at Neural Information Processing Systems 2021, 2021.

[16]

Jakob Knollmüller and Torsten A. Enßlin. Metric gaussian variational inference. 2019. URL: https://arxiv.org/abs/1901.11033, doi:10.48550/ARXIV.1901.11033.

[17]

Sergey Koposov, Josh Speagle, Kyle Barbary, Gregory Ashton, Ed Bennett, Johannes Buchner, Carl Scheffler, Ben Cook, Colm Talbot, James Guillochon, Patricio Cubillos, Andrés Asensio Ramos, Ben Johnson, Dustin Lang, Ilya, Matthieu Dartiailh, Alex Nitz, Andrew McCluskey, and Anne Archibald. Joshspeagle/dynesty: v2.1.3. October 2023. URL: https://doi.org/10.5281/zenodo.8408702, doi:10.5281/zenodo.8408702.

[18]

Martin Reinecke. DUCC: distinctly useful code collection. 2024. URL: https://gitlab.mpcdf.mpg.de/mtr/ducc.

[19]

Danilo Jimenez Rezende and Shakir Mohamed. Variational inference with normalizing flows. In Proceedings of the 32nd International Conference on International Conference on Machine Learning - Volume 37, ICML'15, 1530–1538. JMLR.org, 2015. URL: http://proceedings.mlr.press/v37/rezende15.html.

[20]

John Salvatier, Thomas V. Wiecki, and Christopher Fonnesbeck. Probabilistic programming in python using pymc3. PeerJ Computer Science, 2:e55, April 2016. URL: https://doi.org/10.7717/peerj-cs.55, doi:10.7717/peerj-cs.55.

[21]

Sivaram Ambikasaran, Daniel Foreman-Mackey, Leslie Greengard, David W. Hogg, and Michael O'Neil. Fast Direct Methods for Gaussian Processes. IEEE Transactions on Pattern Analysis and Machine Intelligence, 38:252, June 2015. arXiv:1403.6015, doi:10.1109/TPAMI.2015.2448083.

[22]

Philipp Arras, Mihai Baltac, Torsten A. Ensslin, Philipp Frank, Sebastian Hutschenreuter, Jakob Knollmueller, Reimar Leike, Max-Niklas Newrzella, Lukas Platz, Martin Reinecke, and Julia Stadler. NIFTy5: Numerical Information Field Theory v5. Astrophysics Source Code Library, record ascl:1903.008, March 2019.

[23] (1,2)

Philipp Arras, Philipp Frank, Philipp Haim, Jakob Knollmüller, Reimar H. Leike, Martin Reinecke, and Torsten A. Enßlin. Variable structures in M87* from space, time and frequency resolved interferometry. Nature Astronomy, 6:259–269, January 2022. arXiv:2002.05218, doi:10.1038/s41550-021-01548-0.

[24]

Philipp Arras, Philipp Frank, Reimar Leike, Rüdiger Westermann, and Torsten A. Enßlin. Unified radio interferometric calibration and imaging with joint uncertainty quantification. Astronomy & Astrophysics, 627:A134, July 2019. arXiv:1903.11169, doi:10.1051/0004-6361/201935555.

[25]

Vincent Eberle, Philipp Frank, Julia Stadler, Silvan Streit, and Torsten Enßlin. Butterfly Transforms for Efficient Representation of Spatially Variant Point Spread Functions in Bayesian Imaging. Entropy, 25(4):652, April 2023. doi:10.3390/e25040652.

[26]

Gordian Edenhofer, Catherine Zucker, Philipp Frank, Andrew K. Saydjari, Joshua S. Speagle, Douglas Finkbeiner, and Torsten A. Enßlin. A parsec-scale Galactic 3D dust map out to 1.25 kpc from the Sun. Astronomy & Astrophysics, 685:A82, May 2024. arXiv:2308.01295, doi:10.1051/0004-6361/202347628.

[27]

Daniel Foreman-Mackey, David W. Hogg, Dustin Lang, and Jonathan Goodman. emcee: The MCMC Hammer. Publications of the Astronomical Society of the Pacific, 125(925):306, March 2013. arXiv:1202.3665, doi:10.1086/670067.

[28]

Philipp Frank, Theo Steininger, and Torsten A. Enßlin. Field dynamics inference via spectral density estimation. Physical Review E, 96(5):052104, November 2017. arXiv:1708.05250, doi:10.1103/PhysRevE.96.052104.

[29]

S. Hutschenreuter, C. S. Anderson, S. Betti, G. C. Bower, J. -A. Brown, M. Brüggen, E. Carretti, T. Clarke, A. Clegg, A. Costa, S. Croft, C. Van Eck, B. M. Gaensler, F. de Gasperin, M. Haverkorn, G. Heald, C. L. H. Hull, M. Inoue, M. Johnston-Hollitt, J. Kaczmarek, C. Law, Y. K. Ma, D. MacMahon, S. A. Mao, C. Riseley, S. Roy, R. Shanahan, T. Shimwell, J. Stil, C. Sobey, S. P. O'Sullivan, C. Tasse, V. Vacca, T. Vernstrom, P. K. G. Williams, M. Wright, and T. A. Enßlin. The Galactic Faraday rotation sky 2020. Astronomy & Astrophysics, 657:A43, January 2022. arXiv:2102.01709, doi:10.1051/0004-6361/202140486.

[30]

Sebastian Hutschenreuter, Marijke Haverkorn, Philipp Frank, Nergis C. Raycheva, and Torsten A. Enßlin. Disentangling the Faraday rotation sky. arXiv e-prints, pages arXiv:2304.12350, April 2023. arXiv:2304.12350, doi:10.48550/arXiv.2304.12350.

[31]

R. H. Leike, G. Edenhofer, J. Knollmüller, C. Alig, P. Frank, and T. A. Enßlin. The Galactic 3D large-scale dust distribution via Gaussian process regression on spherical coordinates. arXiv e-prints, pages arXiv:2204.11715, April 2022. arXiv:2204.11715, doi:10.48550/arXiv.2204.11715.

[32]

R. H. Leike and T. A. Enßlin. Charting nearby dust clouds using Gaia data only. Astronomy & Astrophysics, 631:A32, November 2019. arXiv:1901.05971, doi:10.1051/0004-6361/201935093.

[33]

R. H. Leike, M. Glatzle, and T. A. Enßlin. Resolving nearby dust clouds. Astronomy & Astrophysics, 639:A138, July 2020. arXiv:2004.06732, doi:10.1051/0004-6361/202038169.

[34]

P. Mertsch and V. H. M. Phan. Bayesian inference of three-dimensional gas maps. II. Galactic HI. Astronomy & Astrophysics, 671:A54, March 2023. arXiv:2202.02341, doi:10.1051/0004-6361/202243326.

[35]

Du Phan, Neeraj Pradhan, and Martin Jankowiak. Composable Effects for Flexible and Accelerated Probabilistic Programming in NumPyro. arXiv e-prints, pages arXiv:1912.11554, December 2019. arXiv:1912.11554, doi:10.48550/arXiv.1912.11554.

[36]

J. Roth, G. Li Causi, V. Testa, P. Arras, and T. A. Ensslin. Fast-cadence High-contrast Imaging with Information Field Theory. The Astronomical Journal, 165(3):86, March 2023. arXiv:2212.07714, doi:10.3847/1538-3881/acabc1.

[37]

Jakob Roth, Philipp Arras, Martin Reinecke, Richard A. Perley, Rüdiger Westermann, and Torsten A. Enßlin. Bayesian radio interferometric imaging with direction-dependent calibration. Astronomy & Astrophysics, 678:A177, October 2023. arXiv:2305.05489, doi:10.1051/0004-6361/202346851.

[38]

L. I. Scheel-Platz, J. Knollmüller, P. Arras, P. Frank, M. Reinecke, D. Jüstel, and T. A. Enßlin. Multicomponent imaging of the Fermi gamma-ray sky in the spatio-spectral domain. Astronomy & Astrophysics, 680:A2, December 2023. arXiv:2204.09360, doi:10.1051/0004-6361/202243819.

[39]

M. Selig, M. R. Bell, H. Junklewitz, N. Oppermann, M. Reinecke, M. Greiner, C. Pachajoa, and T. A. Enßlin. NIFTY - Numerical Information Field Theory. A versatile PYTHON library for signal inference. June 2013. arXiv:1301.4499, doi:10.1051/0004-6361/201321236.

[40]

Joshua S. Speagle. DYNESTY: a dynamic nested sampling package for estimating Bayesian posteriors and evidences. Monthly Notices of the RAS, 493(3):3132–3158, April 2020. arXiv:1904.02180, doi:10.1093/mnras/staa278.

[41]

Theo Steininger, Jait Dixit, Philipp Frank, Maksim Greiner, Sebastian Hutschenreuter, Jakob Knollmüller, Reimar H. Leike, Natalia Porqueres, Daniel Pumpe, Martin Reinecke, Matevž Šraml, Csongor Varady, and Torsten A. Enßlin. NIFTy 3 - Numerical Information Field Theory: A Python Framework for Multicomponent Signal Inference on HPC Clusters. Annalen der Physik, 531(3):1800290, March 2019. doi:10.1002/andp.201800290.

[42]

Alexandros Tsouros, Gordian Edenhofer, Torsten Enßlin, Michalis Mastorakis, and Vasiliki Pavlidou. Reconstructing Galactic magnetic fields from local measurements for backtracking ultra-high-energy cosmic rays. Astronomy & Astrophysics, 681:A111, January 2024. arXiv:2303.10099, doi:10.1051/0004-6361/202346423.

[43]

C. Welling, P. Frank, T. Enßlin, and A. Nelles. Reconstructing non-repeating radio pulses with Information Field Theory. Journal of Cosmology and Astroparticle Physics, 2021(4):071, April 2021. arXiv:2102.00258, doi:10.1088/1475-7516/2021/04/071.

[44]

Margret Westerkamp, Vincent Eberle, Matteo Guardiani, Philipp Frank, Lukas Platz, Philipp Arras, Jakob Knollmüller, Julia Stadler, and Torsten Enßlin. First spatio-spectral Bayesian imaging of SN1006 in X-ray. arXiv e-prints, pages arXiv:2308.09176, August 2023. arXiv:2308.09176, doi:10.48550/arXiv.2308.09176.