Building your diffusion posterior sampling method using SDEs#

This demo shows you how to use deepinv.sampling.PosteriorDiffusion to perform posterior sampling. It also can be used to perform unconditional image generation with arbitrary denoisers, if the data fidelity term is not specified.

This method requires:

The deepinv.sampling.PosteriorDiffusion class can be used to perform posterior sampling for inverse problems. Consider the acquisition model:

\[y = \noise{\forw{x}}\]

where \(\forw{x}\) is the forward operator (e.g., a convolutional operator) and \(\noise{\cdot}\) is the noise operator (e.g., Gaussian noise). This class defines the reverse-time SDE for the posterior distribution \(p(x|y)\) given the data \(y\):

\[d\, x_t = \left( f(x_t, t) - \frac{1 + \alpha}{2} g(t)^2 \nabla_{x_t} \log p_t(x_t | y) \right) d\,t + g(t) \sqrt{\alpha} d\, w_{t}\]

where \(f\) is the drift term, \(g\) is the diffusion coefficient and \(w\) is the standard Brownian motion. The drift term and the diffusion coefficient are defined by the underlying (unconditional) forward-time SDE sde. In this example, we will use 2 well-known SDE in the literature: the Variance-Exploding (VE) and Variance-Preserving (VP or DDPM).

The (conditional) score function \(\nabla_{x_t} \log p_t(x_t | y)\) can be decomposed using the Bayes’ rule:

\[\nabla_{x_t} \log p_t(x_t | y) = \nabla_{x_t} \log p_t(x_t) + \nabla_{x_t} \log p_t(y | x_t).\]

The first term is the score function of the unconditional SDE, which is typically approximated by an MMSE denoiser (denoiser) using the well-known Tweedie’s formula, while the second term is approximated by the (noisy) data-fidelity term (data_fidelity). We implement various data-fidelity terms in the user guide.

Note

In this demo, we limit the number of diffusion steps for the sake of speed, but in practice, you should use a larger number of steps to obtain better results.


Let us import the necessary modules, define the denoiser and the SDE.

In this first example, we use the Variance-Exploding SDE, whose forward process is defined as:

\[d\, x_t = g(t) d\, w_t \quad \mbox{where } g(t) = \sigma_{\mathrm{min}}\left( \frac{\sigma_{\mathrm{max}}}{\sigma_{\mathrm{min}}}\right)^t\sqrt{2\log\frac{\sigma_{\mathrm{max}}}{\sigma_{\mathrm{min}}} }.\]
import torch
import deepinv as dinv
from deepinv.models import NCSNpp

device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.float64
figsize = 2.5
gif_frequency = 10  # Increase this value to save the GIF saving time
from deepinv.sampling import (
    PosteriorDiffusion,
    DPSDataFidelity,
    EulerSolver,
    VarianceExplodingDiffusion,
)
from deepinv.optim import ZeroFidelity

# In this example, we use the pre-trained FFHQ-64 model from the
# EDM framework: https://arxiv.org/pdf/2206.00364 .
# The network architecture is from Song et al: https://arxiv.org/abs/2011.13456 .
denoiser = NCSNpp(pretrained="download").to(device)

# The solution is obtained by calling the SDE object with a desired solver (here, Euler).
# The reproducibility of the SDE Solver class can be controlled by providing the pseudo-random number generator.
num_steps = 150
rng = torch.Generator(device).manual_seed(42)
timesteps = torch.linspace(1, 0.001, num_steps)
solver = EulerSolver(timesteps=timesteps, rng=rng)

sigma_min = 0.005
sigma_max = 5
sde = VarianceExplodingDiffusion(
    sigma_max=sigma_max,
    sigma_min=sigma_min,
    alpha=0.5,
    device=device,
    dtype=dtype,
)
Downloading: "https://huggingface.co/deepinv/edm/resolve/main/ncsnpp-ffhq64-uncond-ve.pt?download=true" to /home/runner/.cache/torch/hub/checkpoints/ncsnpp-ffhq64-uncond-ve.pt

  0%|          | 0.00/240M [00:00<?, ?B/s]
 25%|β–ˆβ–ˆβ–       | 59.2M/240M [00:00<00:00, 621MB/s]
 56%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ    | 134M/240M [00:00<00:00, 715MB/s]
 87%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹ | 209M/240M [00:00<00:00, 746MB/s]
100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 240M/240M [00:00<00:00, 735MB/s]

Reverse-time SDE as sampling process#

When the data fidelity is not given, the posterior diffusion is equivalent to the unconditional diffusion. Sampling is performed by solving the reverse-time SDE. To do so, we generate a reverse-time trajectory.

model = PosteriorDiffusion(
    data_fidelity=ZeroFidelity(),
    sde=sde,
    denoiser=denoiser,
    solver=solver,
    dtype=dtype,
    device=device,
    verbose=True,
)
x, trajectory = model(
    y=None,
    physics=None,
    x_init=(1, 3, 64, 64),
    seed=1,
    get_trajectory=True,
)
dinv.utils.plot(
    x,
    titles="Unconditional generation",
    save_fn="sde_sample.png",
    figsize=(figsize, figsize),
)

dinv.utils.save_videos(
    trajectory.cpu()[::gif_frequency],
    time_dim=0,
    titles=["VE-SDE Trajectory"],
    save_fn="sde_trajectory.gif",
    figsize=(figsize, figsize),
)
  0%|          | 0/149 [00:00<?, ?it/s]
  1%|          | 1/149 [00:00<00:58,  2.51it/s]
  1%|▏         | 2/149 [00:00<00:56,  2.59it/s]
  2%|▏         | 3/149 [00:01<00:55,  2.62it/s]
  3%|β–Ž         | 4/149 [00:01<00:54,  2.66it/s]
  3%|β–Ž         | 5/149 [00:01<00:54,  2.66it/s]
  4%|▍         | 6/149 [00:02<00:53,  2.66it/s]
  5%|▍         | 7/149 [00:02<00:53,  2.67it/s]
  5%|β–Œ         | 8/149 [00:03<00:52,  2.68it/s]
  6%|β–Œ         | 9/149 [00:03<00:52,  2.67it/s]
  7%|β–‹         | 10/149 [00:03<00:52,  2.66it/s]
  7%|β–‹         | 11/149 [00:04<00:51,  2.66it/s]
  8%|β–Š         | 12/149 [00:04<00:51,  2.66it/s]
  9%|β–Š         | 13/149 [00:04<00:51,  2.67it/s]
  9%|β–‰         | 14/149 [00:05<00:50,  2.66it/s]
 10%|β–ˆ         | 15/149 [00:05<00:50,  2.66it/s]
 11%|β–ˆ         | 16/149 [00:06<00:49,  2.67it/s]
 11%|β–ˆβ–        | 17/149 [00:06<00:49,  2.67it/s]
 12%|β–ˆβ–        | 18/149 [00:06<00:49,  2.67it/s]
 13%|β–ˆβ–Ž        | 19/149 [00:07<00:48,  2.67it/s]
 13%|β–ˆβ–Ž        | 20/149 [00:07<00:48,  2.67it/s]
 14%|β–ˆβ–        | 21/149 [00:07<00:47,  2.68it/s]
 15%|β–ˆβ–        | 22/149 [00:08<00:47,  2.68it/s]
 15%|β–ˆβ–Œ        | 23/149 [00:08<00:46,  2.68it/s]
 16%|β–ˆβ–Œ        | 24/149 [00:09<00:46,  2.69it/s]
 17%|β–ˆβ–‹        | 25/149 [00:09<00:45,  2.70it/s]
 17%|β–ˆβ–‹        | 26/149 [00:09<00:45,  2.70it/s]
 18%|β–ˆβ–Š        | 27/149 [00:10<00:45,  2.70it/s]
 19%|β–ˆβ–‰        | 28/149 [00:10<00:44,  2.69it/s]
 19%|β–ˆβ–‰        | 29/149 [00:10<00:44,  2.69it/s]
 20%|β–ˆβ–ˆ        | 30/149 [00:11<00:44,  2.70it/s]
 21%|β–ˆβ–ˆ        | 31/149 [00:11<00:43,  2.69it/s]
 21%|β–ˆβ–ˆβ–       | 32/149 [00:11<00:43,  2.69it/s]
 22%|β–ˆβ–ˆβ–       | 33/149 [00:12<00:43,  2.69it/s]
 23%|β–ˆβ–ˆβ–Ž       | 34/149 [00:12<00:42,  2.70it/s]
 23%|β–ˆβ–ˆβ–Ž       | 35/149 [00:13<00:42,  2.70it/s]
 24%|β–ˆβ–ˆβ–       | 36/149 [00:13<00:41,  2.71it/s]
 25%|β–ˆβ–ˆβ–       | 37/149 [00:13<00:41,  2.70it/s]
 26%|β–ˆβ–ˆβ–Œ       | 38/149 [00:14<00:41,  2.70it/s]
 26%|β–ˆβ–ˆβ–Œ       | 39/149 [00:14<00:40,  2.70it/s]
 27%|β–ˆβ–ˆβ–‹       | 40/149 [00:14<00:40,  2.70it/s]
 28%|β–ˆβ–ˆβ–Š       | 41/149 [00:15<00:40,  2.69it/s]
 28%|β–ˆβ–ˆβ–Š       | 42/149 [00:15<00:39,  2.68it/s]
 29%|β–ˆβ–ˆβ–‰       | 43/149 [00:16<00:39,  2.69it/s]
 30%|β–ˆβ–ˆβ–‰       | 44/149 [00:16<00:38,  2.69it/s]
 30%|β–ˆβ–ˆβ–ˆ       | 45/149 [00:16<00:38,  2.68it/s]
 31%|β–ˆβ–ˆβ–ˆ       | 46/149 [00:17<00:38,  2.67it/s]
 32%|β–ˆβ–ˆβ–ˆβ–      | 47/149 [00:17<00:38,  2.66it/s]
 32%|β–ˆβ–ˆβ–ˆβ–      | 48/149 [00:17<00:37,  2.67it/s]
 33%|β–ˆβ–ˆβ–ˆβ–Ž      | 49/149 [00:18<00:37,  2.68it/s]
 34%|β–ˆβ–ˆβ–ˆβ–Ž      | 50/149 [00:18<00:36,  2.68it/s]
 34%|β–ˆβ–ˆβ–ˆβ–      | 51/149 [00:19<00:36,  2.69it/s]
 35%|β–ˆβ–ˆβ–ˆβ–      | 52/149 [00:19<00:35,  2.69it/s]
 36%|β–ˆβ–ˆβ–ˆβ–Œ      | 53/149 [00:19<00:35,  2.69it/s]
 36%|β–ˆβ–ˆβ–ˆβ–Œ      | 54/149 [00:20<00:35,  2.70it/s]
 37%|β–ˆβ–ˆβ–ˆβ–‹      | 55/149 [00:20<00:34,  2.69it/s]
 38%|β–ˆβ–ˆβ–ˆβ–Š      | 56/149 [00:20<00:34,  2.68it/s]
 38%|β–ˆβ–ˆβ–ˆβ–Š      | 57/149 [00:21<00:34,  2.69it/s]
 39%|β–ˆβ–ˆβ–ˆβ–‰      | 58/149 [00:21<00:33,  2.69it/s]
 40%|β–ˆβ–ˆβ–ˆβ–‰      | 59/149 [00:22<00:33,  2.70it/s]
 40%|β–ˆβ–ˆβ–ˆβ–ˆ      | 60/149 [00:22<00:33,  2.69it/s]
 41%|β–ˆβ–ˆβ–ˆβ–ˆ      | 61/149 [00:22<00:32,  2.68it/s]
 42%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 62/149 [00:23<00:32,  2.68it/s]
 42%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 63/149 [00:23<00:32,  2.68it/s]
 43%|β–ˆβ–ˆβ–ˆβ–ˆβ–Ž     | 64/149 [00:23<00:31,  2.68it/s]
 44%|β–ˆβ–ˆβ–ˆβ–ˆβ–Ž     | 65/149 [00:24<00:31,  2.69it/s]
 44%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 66/149 [00:24<00:30,  2.68it/s]
 45%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 67/149 [00:24<00:30,  2.69it/s]
 46%|β–ˆβ–ˆβ–ˆβ–ˆβ–Œ     | 68/149 [00:25<00:30,  2.68it/s]
 46%|β–ˆβ–ˆβ–ˆβ–ˆβ–‹     | 69/149 [00:25<00:29,  2.68it/s]
 47%|β–ˆβ–ˆβ–ˆβ–ˆβ–‹     | 70/149 [00:26<00:29,  2.68it/s]
 48%|β–ˆβ–ˆβ–ˆβ–ˆβ–Š     | 71/149 [00:26<00:29,  2.68it/s]
 48%|β–ˆβ–ˆβ–ˆβ–ˆβ–Š     | 72/149 [00:26<00:28,  2.68it/s]
 49%|β–ˆβ–ˆβ–ˆβ–ˆβ–‰     | 73/149 [00:27<00:28,  2.68it/s]
 50%|β–ˆβ–ˆβ–ˆβ–ˆβ–‰     | 74/149 [00:27<00:28,  2.68it/s]
 50%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     | 75/149 [00:27<00:27,  2.68it/s]
 51%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     | 76/149 [00:28<00:27,  2.68it/s]
 52%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 77/149 [00:28<00:26,  2.67it/s]
 52%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 78/149 [00:29<00:26,  2.67it/s]
 53%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž    | 79/149 [00:29<00:26,  2.67it/s]
 54%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž    | 80/149 [00:29<00:25,  2.67it/s]
 54%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 81/149 [00:30<00:25,  2.67it/s]
 55%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ    | 82/149 [00:30<00:25,  2.67it/s]
 56%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ    | 83/149 [00:30<00:24,  2.67it/s]
 56%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹    | 84/149 [00:31<00:24,  2.68it/s]
 57%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹    | 85/149 [00:31<00:23,  2.69it/s]
 58%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š    | 86/149 [00:32<00:23,  2.70it/s]
 58%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š    | 87/149 [00:32<00:22,  2.70it/s]
 59%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰    | 88/149 [00:32<00:22,  2.69it/s]
 60%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰    | 89/149 [00:33<00:22,  2.69it/s]
 60%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ    | 90/149 [00:33<00:21,  2.69it/s]
 61%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ    | 91/149 [00:33<00:21,  2.65it/s]
 62%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 92/149 [00:34<00:21,  2.66it/s]
 62%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 93/149 [00:34<00:20,  2.67it/s]
 63%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž   | 94/149 [00:35<00:20,  2.69it/s]
 64%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 95/149 [00:35<00:20,  2.69it/s]
 64%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 96/149 [00:35<00:19,  2.69it/s]
 65%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ   | 97/149 [00:36<00:19,  2.68it/s]
 66%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ   | 98/149 [00:36<00:19,  2.68it/s]
 66%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹   | 99/149 [00:36<00:18,  2.69it/s]
 67%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹   | 100/149 [00:37<00:18,  2.69it/s]
 68%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š   | 101/149 [00:37<00:17,  2.69it/s]
 68%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š   | 102/149 [00:38<00:17,  2.70it/s]
 69%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰   | 103/149 [00:38<00:17,  2.70it/s]
 70%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰   | 104/149 [00:38<00:16,  2.71it/s]
 70%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   | 105/149 [00:39<00:16,  2.71it/s]
 71%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   | 106/149 [00:39<00:15,  2.72it/s]
 72%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 107/149 [00:39<00:15,  2.72it/s]
 72%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 108/149 [00:40<00:15,  2.73it/s]
 73%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž  | 109/149 [00:40<00:14,  2.72it/s]
 74%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 110/149 [00:40<00:14,  2.72it/s]
 74%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 111/149 [00:41<00:13,  2.72it/s]
 75%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ  | 112/149 [00:41<00:13,  2.72it/s]
 76%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ  | 113/149 [00:42<00:13,  2.72it/s]
 77%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹  | 114/149 [00:42<00:12,  2.72it/s]
 77%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹  | 115/149 [00:42<00:12,  2.68it/s]
 78%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š  | 116/149 [00:43<00:12,  2.69it/s]
 79%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š  | 117/149 [00:43<00:11,  2.70it/s]
 79%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰  | 118/149 [00:43<00:11,  2.69it/s]
 80%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰  | 119/149 [00:44<00:11,  2.69it/s]
 81%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  | 120/149 [00:44<00:10,  2.69it/s]
 81%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  | 121/149 [00:45<00:10,  2.70it/s]
 82%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 122/149 [00:45<00:10,  2.70it/s]
 83%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž | 123/149 [00:45<00:09,  2.69it/s]
 83%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž | 124/149 [00:46<00:09,  2.69it/s]
 84%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 125/149 [00:46<00:08,  2.69it/s]
 85%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 126/149 [00:46<00:08,  2.69it/s]
 85%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ | 127/149 [00:47<00:08,  2.69it/s]
 86%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ | 128/149 [00:47<00:07,  2.68it/s]
 87%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹ | 129/149 [00:48<00:07,  2.69it/s]
 87%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹ | 130/149 [00:48<00:07,  2.70it/s]
 88%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š | 131/149 [00:48<00:06,  2.69it/s]
 89%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š | 132/149 [00:49<00:06,  2.70it/s]
 89%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰ | 133/149 [00:49<00:05,  2.71it/s]
 90%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰ | 134/149 [00:49<00:05,  2.70it/s]
 91%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ | 135/149 [00:50<00:05,  2.70it/s]
 91%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 136/149 [00:50<00:04,  2.69it/s]
 92%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 137/149 [00:50<00:04,  2.69it/s]
 93%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž| 138/149 [00:51<00:04,  2.70it/s]
 93%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž| 139/149 [00:51<00:03,  2.71it/s]
 94%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 140/149 [00:52<00:03,  2.71it/s]
 95%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 141/149 [00:52<00:02,  2.72it/s]
 95%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ| 142/149 [00:52<00:02,  2.70it/s]
 96%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ| 143/149 [00:53<00:02,  2.70it/s]
 97%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹| 144/149 [00:53<00:01,  2.69it/s]
 97%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹| 145/149 [00:53<00:01,  2.68it/s]
 98%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š| 146/149 [00:54<00:01,  2.69it/s]
 99%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š| 147/149 [00:54<00:00,  2.68it/s]
 99%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰| 148/149 [00:55<00:00,  2.69it/s]
100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 149/149 [00:55<00:00,  2.69it/s]
100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 149/149 [00:55<00:00,  2.69it/s]

We obtain the following unconditional sample

example of unconditional sampleexample of unconditional trajectory

When the data fidelity is given, together with the measurements and the physics, this class can be used to perform posterior sampling for inverse problems. For example, consider the inpainting problem, where we have a noisy image and we want to recover the original image. We can use the deepinv.sampling.DPSDataFidelity as the data fidelity term.

del trajectory  # clean memory
mask = torch.ones_like(x)
mask[..., 24:40, 24:40] = 0.0
physics = dinv.physics.Inpainting(img_size=x.shape[1:], mask=mask, device=device)
y = physics(x)

weight = 3.0  # guidance strength
dps_fidelity = DPSDataFidelity(denoiser=denoiser, weight=weight)

model = PosteriorDiffusion(
    data_fidelity=dps_fidelity,
    denoiser=denoiser,
    sde=sde,
    solver=solver,
    dtype=dtype,
    device=device,
    verbose=True,
)

# To perform posterior sampling, we need to provide the measurements, the physics and the solver.
# Moreover, when the physics is given, the initial point can be inferred from the physics if not given explicitly.
seed_1 = 11
x_hat, trajectory = model(
    y,
    physics,
    seed=seed_1,
    get_trajectory=True,
)
# Here, we plot the original image, the measurement and the posterior sample
dinv.utils.plot(
    [x, y, x_hat],
    show=True,
    titles=["Original", "Measurement", "Posterior sample"],
    figsize=(figsize * 3, figsize),
)
# We can also save the trajectory of the posterior sample
dinv.utils.save_videos(
    trajectory[::gif_frequency],
    time_dim=0,
    titles=["Posterior sample with VE"],
    save_fn="posterior_trajectory.gif",
    figsize=(figsize, figsize),
)
  0%|          | 0/149 [00:00<?, ?it/s]
  1%|          | 1/149 [00:01<03:18,  1.34s/it]
  1%|▏         | 2/149 [00:02<03:12,  1.31s/it]
  2%|▏         | 3/149 [00:03<03:10,  1.30s/it]
  3%|β–Ž         | 4/149 [00:05<03:08,  1.30s/it]
  3%|β–Ž         | 5/149 [00:06<03:06,  1.29s/it]
  4%|▍         | 6/149 [00:07<03:05,  1.30s/it]
  5%|▍         | 7/149 [00:09<03:04,  1.30s/it]
  5%|β–Œ         | 8/149 [00:10<03:03,  1.30s/it]
  6%|β–Œ         | 9/149 [00:11<03:01,  1.30s/it]
  7%|β–‹         | 10/149 [00:13<03:00,  1.30s/it]
  7%|β–‹         | 11/149 [00:14<02:59,  1.30s/it]
  8%|β–Š         | 12/149 [00:15<02:59,  1.31s/it]
  9%|β–Š         | 13/149 [00:16<02:58,  1.31s/it]
  9%|β–‰         | 14/149 [00:18<02:57,  1.31s/it]
 10%|β–ˆ         | 15/149 [00:19<02:55,  1.31s/it]
 11%|β–ˆ         | 16/149 [00:20<02:54,  1.31s/it]
 11%|β–ˆβ–        | 17/149 [00:22<02:53,  1.32s/it]
 12%|β–ˆβ–        | 18/149 [00:23<02:53,  1.32s/it]
 13%|β–ˆβ–Ž        | 19/149 [00:24<02:51,  1.32s/it]
 13%|β–ˆβ–Ž        | 20/149 [00:26<02:49,  1.31s/it]
 14%|β–ˆβ–        | 21/149 [00:27<02:48,  1.31s/it]
 15%|β–ˆβ–        | 22/149 [00:28<02:47,  1.32s/it]
 15%|β–ˆβ–Œ        | 23/149 [00:30<02:45,  1.31s/it]
 16%|β–ˆβ–Œ        | 24/149 [00:31<02:43,  1.31s/it]
 17%|β–ˆβ–‹        | 25/149 [00:32<02:42,  1.31s/it]
 17%|β–ˆβ–‹        | 26/149 [00:34<02:40,  1.31s/it]
 18%|β–ˆβ–Š        | 27/149 [00:35<02:39,  1.31s/it]
 19%|β–ˆβ–‰        | 28/149 [00:36<02:38,  1.31s/it]
 19%|β–ˆβ–‰        | 29/149 [00:37<02:36,  1.31s/it]
 20%|β–ˆβ–ˆ        | 30/149 [00:39<02:35,  1.31s/it]
 21%|β–ˆβ–ˆ        | 31/149 [00:40<02:34,  1.31s/it]
 21%|β–ˆβ–ˆβ–       | 32/149 [00:41<02:32,  1.30s/it]
 22%|β–ˆβ–ˆβ–       | 33/149 [00:43<02:31,  1.30s/it]
 23%|β–ˆβ–ˆβ–Ž       | 34/149 [00:44<02:29,  1.30s/it]
 23%|β–ˆβ–ˆβ–Ž       | 35/149 [00:45<02:28,  1.30s/it]
 24%|β–ˆβ–ˆβ–       | 36/149 [00:47<02:27,  1.30s/it]
 25%|β–ˆβ–ˆβ–       | 37/149 [00:48<02:26,  1.31s/it]
 26%|β–ˆβ–ˆβ–Œ       | 38/149 [00:49<02:24,  1.30s/it]
 26%|β–ˆβ–ˆβ–Œ       | 39/149 [00:50<02:23,  1.31s/it]
 27%|β–ˆβ–ˆβ–‹       | 40/149 [00:52<02:22,  1.31s/it]
 28%|β–ˆβ–ˆβ–Š       | 41/149 [00:53<02:21,  1.31s/it]
 28%|β–ˆβ–ˆβ–Š       | 42/149 [00:54<02:20,  1.31s/it]
 29%|β–ˆβ–ˆβ–‰       | 43/149 [00:56<02:19,  1.32s/it]
 30%|β–ˆβ–ˆβ–‰       | 44/149 [00:57<02:18,  1.32s/it]
 30%|β–ˆβ–ˆβ–ˆ       | 45/149 [00:58<02:17,  1.33s/it]
 31%|β–ˆβ–ˆβ–ˆ       | 46/149 [01:00<02:16,  1.32s/it]
 32%|β–ˆβ–ˆβ–ˆβ–      | 47/149 [01:01<02:14,  1.32s/it]
 32%|β–ˆβ–ˆβ–ˆβ–      | 48/149 [01:02<02:13,  1.32s/it]
 33%|β–ˆβ–ˆβ–ˆβ–Ž      | 49/149 [01:04<02:12,  1.32s/it]
 34%|β–ˆβ–ˆβ–ˆβ–Ž      | 50/149 [01:05<02:10,  1.32s/it]
 34%|β–ˆβ–ˆβ–ˆβ–      | 51/149 [01:06<02:09,  1.32s/it]
 35%|β–ˆβ–ˆβ–ˆβ–      | 52/149 [01:08<02:08,  1.32s/it]
 36%|β–ˆβ–ˆβ–ˆβ–Œ      | 53/149 [01:09<02:06,  1.32s/it]
 36%|β–ˆβ–ˆβ–ˆβ–Œ      | 54/149 [01:10<02:05,  1.32s/it]
 37%|β–ˆβ–ˆβ–ˆβ–‹      | 55/149 [01:12<02:04,  1.32s/it]
 38%|β–ˆβ–ˆβ–ˆβ–Š      | 56/149 [01:13<02:03,  1.32s/it]
 38%|β–ˆβ–ˆβ–ˆβ–Š      | 57/149 [01:14<02:01,  1.32s/it]
 39%|β–ˆβ–ˆβ–ˆβ–‰      | 58/149 [01:16<01:59,  1.32s/it]
 40%|β–ˆβ–ˆβ–ˆβ–‰      | 59/149 [01:17<01:58,  1.31s/it]
 40%|β–ˆβ–ˆβ–ˆβ–ˆ      | 60/149 [01:18<01:57,  1.32s/it]
 41%|β–ˆβ–ˆβ–ˆβ–ˆ      | 61/149 [01:20<01:55,  1.31s/it]
 42%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 62/149 [01:21<01:54,  1.31s/it]
 42%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 63/149 [01:22<01:52,  1.31s/it]
 43%|β–ˆβ–ˆβ–ˆβ–ˆβ–Ž     | 64/149 [01:23<01:51,  1.31s/it]
 44%|β–ˆβ–ˆβ–ˆβ–ˆβ–Ž     | 65/149 [01:25<01:49,  1.31s/it]
 44%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 66/149 [01:26<01:48,  1.31s/it]
 45%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 67/149 [01:27<01:47,  1.31s/it]
 46%|β–ˆβ–ˆβ–ˆβ–ˆβ–Œ     | 68/149 [01:29<01:46,  1.31s/it]
 46%|β–ˆβ–ˆβ–ˆβ–ˆβ–‹     | 69/149 [01:30<01:44,  1.31s/it]
 47%|β–ˆβ–ˆβ–ˆβ–ˆβ–‹     | 70/149 [01:31<01:43,  1.31s/it]
 48%|β–ˆβ–ˆβ–ˆβ–ˆβ–Š     | 71/149 [01:33<01:41,  1.31s/it]
 48%|β–ˆβ–ˆβ–ˆβ–ˆβ–Š     | 72/149 [01:34<01:40,  1.31s/it]
 49%|β–ˆβ–ˆβ–ˆβ–ˆβ–‰     | 73/149 [01:35<01:39,  1.31s/it]
 50%|β–ˆβ–ˆβ–ˆβ–ˆβ–‰     | 74/149 [01:37<01:38,  1.31s/it]
 50%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     | 75/149 [01:38<01:36,  1.31s/it]
 51%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     | 76/149 [01:39<01:35,  1.31s/it]
 52%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 77/149 [01:40<01:34,  1.31s/it]
 52%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 78/149 [01:42<01:33,  1.31s/it]
 53%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž    | 79/149 [01:43<01:32,  1.31s/it]
 54%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž    | 80/149 [01:44<01:31,  1.32s/it]
 54%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 81/149 [01:46<01:29,  1.32s/it]
 55%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ    | 82/149 [01:47<01:28,  1.33s/it]
 56%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ    | 83/149 [01:48<01:27,  1.32s/it]
 56%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹    | 84/149 [01:50<01:26,  1.32s/it]
 57%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹    | 85/149 [01:51<01:24,  1.32s/it]
 58%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š    | 86/149 [01:52<01:23,  1.32s/it]
 58%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š    | 87/149 [01:54<01:21,  1.32s/it]
 59%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰    | 88/149 [01:55<01:20,  1.32s/it]
 60%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰    | 89/149 [01:56<01:19,  1.33s/it]
 60%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ    | 90/149 [01:58<01:18,  1.33s/it]
 61%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ    | 91/149 [01:59<01:16,  1.33s/it]
 62%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 92/149 [02:00<01:15,  1.33s/it]
 62%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 93/149 [02:02<01:14,  1.32s/it]
 63%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž   | 94/149 [02:03<01:12,  1.32s/it]
 64%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 95/149 [02:04<01:11,  1.32s/it]
 64%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 96/149 [02:06<01:10,  1.32s/it]
 65%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ   | 97/149 [02:07<01:08,  1.32s/it]
 66%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ   | 98/149 [02:08<01:07,  1.32s/it]
 66%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹   | 99/149 [02:10<01:06,  1.32s/it]
 67%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹   | 100/149 [02:11<01:04,  1.32s/it]
 68%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š   | 101/149 [02:12<01:03,  1.32s/it]
 68%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š   | 102/149 [02:14<01:01,  1.32s/it]
 69%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰   | 103/149 [02:15<01:00,  1.31s/it]
 70%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰   | 104/149 [02:16<00:59,  1.31s/it]
 70%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   | 105/149 [02:17<00:57,  1.31s/it]
 71%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   | 106/149 [02:19<00:56,  1.31s/it]
 72%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 107/149 [02:20<00:55,  1.31s/it]
 72%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 108/149 [02:21<00:54,  1.32s/it]
 73%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž  | 109/149 [02:23<00:52,  1.32s/it]
 74%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 110/149 [02:24<00:51,  1.33s/it]
 74%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 111/149 [02:25<00:50,  1.33s/it]
 75%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ  | 112/149 [02:27<00:49,  1.33s/it]
 76%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ  | 113/149 [02:28<00:48,  1.33s/it]
 77%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹  | 114/149 [02:29<00:46,  1.34s/it]
 77%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹  | 115/149 [02:31<00:45,  1.33s/it]
 78%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š  | 116/149 [02:32<00:43,  1.32s/it]
 79%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š  | 117/149 [02:33<00:41,  1.31s/it]
 79%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰  | 118/149 [02:35<00:40,  1.31s/it]
 80%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰  | 119/149 [02:36<00:39,  1.31s/it]
 81%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  | 120/149 [02:37<00:37,  1.31s/it]
 81%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  | 121/149 [02:39<00:36,  1.31s/it]
 82%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 122/149 [02:40<00:35,  1.31s/it]
 83%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž | 123/149 [02:41<00:34,  1.32s/it]
 83%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž | 124/149 [02:42<00:32,  1.31s/it]
 84%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 125/149 [02:44<00:31,  1.30s/it]
 85%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 126/149 [02:45<00:29,  1.30s/it]
 85%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ | 127/149 [02:46<00:28,  1.30s/it]
 86%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ | 128/149 [02:48<00:27,  1.30s/it]
 87%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹ | 129/149 [02:49<00:26,  1.30s/it]
 87%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹ | 130/149 [02:50<00:24,  1.31s/it]
 88%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š | 131/149 [02:52<00:23,  1.31s/it]
 89%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š | 132/149 [02:53<00:22,  1.31s/it]
 89%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰ | 133/149 [02:54<00:20,  1.31s/it]
 90%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰ | 134/149 [02:56<00:19,  1.31s/it]
 91%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ | 135/149 [02:57<00:18,  1.31s/it]
 91%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 136/149 [02:58<00:17,  1.31s/it]
 92%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 137/149 [02:59<00:15,  1.31s/it]
 93%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž| 138/149 [03:01<00:14,  1.31s/it]
 93%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž| 139/149 [03:02<00:13,  1.32s/it]
 94%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 140/149 [03:03<00:11,  1.32s/it]
 95%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 141/149 [03:05<00:10,  1.32s/it]
 95%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ| 142/149 [03:06<00:09,  1.32s/it]
 96%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ| 143/149 [03:07<00:07,  1.31s/it]
 97%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹| 144/149 [03:09<00:06,  1.31s/it]
 97%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹| 145/149 [03:10<00:05,  1.31s/it]
 98%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š| 146/149 [03:11<00:03,  1.30s/it]
 99%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š| 147/149 [03:13<00:02,  1.30s/it]
 99%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰| 148/149 [03:14<00:01,  1.30s/it]
100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 149/149 [03:15<00:00,  1.30s/it]
100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 149/149 [03:15<00:00,  1.31s/it]

We obtain the following posterior sample and trajectory

example of posterior trajectory

Note

Reproducibility: To ensure the reproducibility, if the parameter rng is given, the same sample will be generated when the same seed is used. One can obtain varying samples by using a different seed.

Parallel sampling: one can draw multiple samples in parallel by giving the initial shape, e.g., x_init = (B, C, H, W)

Varying the SDE#

One can also change the underlying SDE for sampling. For example, we can also use the Variance-Preserving (VP or DDPM) in deepinv.sampling.VariancePreservingDiffusion, whose forward drift and diffusion term are defined as:

\[f(x_t, t) = -\frac{1}{2} \beta(t)x_t \qquad \mbox{ and } \qquad g(t) = \beta(t) \qquad \mbox{ with } \beta(t) = \beta_{\mathrm{min}} + t \left( \beta_{\mathrm{max}} - \beta_{\mathrm{min}} \right).\]
from deepinv.sampling import VariancePreservingDiffusion

del trajectory
sde = VariancePreservingDiffusion(device=device, dtype=dtype)
model = PosteriorDiffusion(
    data_fidelity=dps_fidelity,
    denoiser=denoiser,
    sde=sde,
    solver=solver,
    device=device,
    dtype=dtype,
    verbose=True,
)

x_hat_vp, trajectory = model(
    y,
    physics,
    seed=111,
    timesteps=torch.linspace(1, 0.001, 150),
    get_trajectory=True,
)
dinv.utils.plot(
    [x_hat, x_hat_vp],
    titles=[
        "posterior sample with VE",
        "posterior sample with VP",
    ],
    figsize=(figsize * 2, figsize),
)


# We can also save the trajectory of the posterior sample
dinv.utils.save_videos(
    trajectory[::gif_frequency],
    time_dim=0,
    titles=["Posterior sample with VP"],
    save_fn="posterior_trajectory_vp.gif",
    figsize=(figsize, figsize),
)
  0%|          | 0/149 [00:00<?, ?it/s]
  1%|          | 1/149 [00:01<03:11,  1.30s/it]
  1%|▏         | 2/149 [00:02<03:10,  1.29s/it]
  2%|▏         | 3/149 [00:03<03:08,  1.29s/it]
  3%|β–Ž         | 4/149 [00:05<03:06,  1.29s/it]
  3%|β–Ž         | 5/149 [00:06<03:05,  1.29s/it]
  4%|▍         | 6/149 [00:07<03:04,  1.29s/it]
  5%|▍         | 7/149 [00:09<03:02,  1.29s/it]
  5%|β–Œ         | 8/149 [00:10<03:01,  1.29s/it]
  6%|β–Œ         | 9/149 [00:11<03:00,  1.29s/it]
  7%|β–‹         | 10/149 [00:12<02:58,  1.29s/it]
  7%|β–‹         | 11/149 [00:14<02:57,  1.28s/it]
  8%|β–Š         | 12/149 [00:15<02:56,  1.29s/it]
  9%|β–Š         | 13/149 [00:16<02:55,  1.29s/it]
  9%|β–‰         | 14/149 [00:18<02:54,  1.29s/it]
 10%|β–ˆ         | 15/149 [00:19<02:52,  1.29s/it]
 11%|β–ˆ         | 16/149 [00:20<02:51,  1.29s/it]
 11%|β–ˆβ–        | 17/149 [00:21<02:49,  1.29s/it]
 12%|β–ˆβ–        | 18/149 [00:23<02:49,  1.29s/it]
 13%|β–ˆβ–Ž        | 19/149 [00:24<02:47,  1.29s/it]
 13%|β–ˆβ–Ž        | 20/149 [00:25<02:46,  1.29s/it]
 14%|β–ˆβ–        | 21/149 [00:27<02:45,  1.29s/it]
 15%|β–ˆβ–        | 22/149 [00:28<02:44,  1.30s/it]
 15%|β–ˆβ–Œ        | 23/149 [00:29<02:44,  1.30s/it]
 16%|β–ˆβ–Œ        | 24/149 [00:31<02:42,  1.30s/it]
 17%|β–ˆβ–‹        | 25/149 [00:32<02:41,  1.30s/it]
 17%|β–ˆβ–‹        | 26/149 [00:33<02:40,  1.30s/it]
 18%|β–ˆβ–Š        | 27/149 [00:34<02:38,  1.30s/it]
 19%|β–ˆβ–‰        | 28/149 [00:36<02:37,  1.30s/it]
 19%|β–ˆβ–‰        | 29/149 [00:37<02:36,  1.30s/it]
 20%|β–ˆβ–ˆ        | 30/149 [00:38<02:34,  1.30s/it]
 21%|β–ˆβ–ˆ        | 31/149 [00:40<02:33,  1.30s/it]
 21%|β–ˆβ–ˆβ–       | 32/149 [00:41<02:31,  1.30s/it]
 22%|β–ˆβ–ˆβ–       | 33/149 [00:42<02:30,  1.30s/it]
 23%|β–ˆβ–ˆβ–Ž       | 34/149 [00:43<02:29,  1.30s/it]
 23%|β–ˆβ–ˆβ–Ž       | 35/149 [00:45<02:27,  1.30s/it]
 24%|β–ˆβ–ˆβ–       | 36/149 [00:46<02:26,  1.30s/it]
 25%|β–ˆβ–ˆβ–       | 37/149 [00:47<02:25,  1.30s/it]
 26%|β–ˆβ–ˆβ–Œ       | 38/149 [00:49<02:24,  1.30s/it]
 26%|β–ˆβ–ˆβ–Œ       | 39/149 [00:50<02:22,  1.30s/it]
 27%|β–ˆβ–ˆβ–‹       | 40/149 [00:51<02:21,  1.30s/it]
 28%|β–ˆβ–ˆβ–Š       | 41/149 [00:53<02:19,  1.30s/it]
 28%|β–ˆβ–ˆβ–Š       | 42/149 [00:54<02:18,  1.30s/it]
 29%|β–ˆβ–ˆβ–‰       | 43/149 [00:55<02:17,  1.30s/it]
 30%|β–ˆβ–ˆβ–‰       | 44/149 [00:56<02:15,  1.29s/it]
 30%|β–ˆβ–ˆβ–ˆ       | 45/149 [00:58<02:14,  1.29s/it]
 31%|β–ˆβ–ˆβ–ˆ       | 46/149 [00:59<02:13,  1.29s/it]
 32%|β–ˆβ–ˆβ–ˆβ–      | 47/149 [01:00<02:11,  1.29s/it]
 32%|β–ˆβ–ˆβ–ˆβ–      | 48/149 [01:02<02:10,  1.29s/it]
 33%|β–ˆβ–ˆβ–ˆβ–Ž      | 49/149 [01:03<02:08,  1.29s/it]
 34%|β–ˆβ–ˆβ–ˆβ–Ž      | 50/149 [01:04<02:07,  1.29s/it]
 34%|β–ˆβ–ˆβ–ˆβ–      | 51/149 [01:05<02:06,  1.29s/it]
 35%|β–ˆβ–ˆβ–ˆβ–      | 52/149 [01:07<02:05,  1.29s/it]
 36%|β–ˆβ–ˆβ–ˆβ–Œ      | 53/149 [01:08<02:04,  1.29s/it]
 36%|β–ˆβ–ˆβ–ˆβ–Œ      | 54/149 [01:09<02:02,  1.29s/it]
 37%|β–ˆβ–ˆβ–ˆβ–‹      | 55/149 [01:11<02:01,  1.29s/it]
 38%|β–ˆβ–ˆβ–ˆβ–Š      | 56/149 [01:12<02:00,  1.29s/it]
 38%|β–ˆβ–ˆβ–ˆβ–Š      | 57/149 [01:13<01:58,  1.29s/it]
 39%|β–ˆβ–ˆβ–ˆβ–‰      | 58/149 [01:15<01:57,  1.29s/it]
 40%|β–ˆβ–ˆβ–ˆβ–‰      | 59/149 [01:16<01:56,  1.29s/it]
 40%|β–ˆβ–ˆβ–ˆβ–ˆ      | 60/149 [01:17<01:54,  1.29s/it]
 41%|β–ˆβ–ˆβ–ˆβ–ˆ      | 61/149 [01:18<01:53,  1.29s/it]
 42%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 62/149 [01:20<01:52,  1.29s/it]
 42%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 63/149 [01:21<01:51,  1.29s/it]
 43%|β–ˆβ–ˆβ–ˆβ–ˆβ–Ž     | 64/149 [01:22<01:49,  1.29s/it]
 44%|β–ˆβ–ˆβ–ˆβ–ˆβ–Ž     | 65/149 [01:24<01:48,  1.29s/it]
 44%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 66/149 [01:25<01:46,  1.29s/it]
 45%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 67/149 [01:26<01:45,  1.29s/it]
 46%|β–ˆβ–ˆβ–ˆβ–ˆβ–Œ     | 68/149 [01:27<01:44,  1.29s/it]
 46%|β–ˆβ–ˆβ–ˆβ–ˆβ–‹     | 69/149 [01:29<01:43,  1.29s/it]
 47%|β–ˆβ–ˆβ–ˆβ–ˆβ–‹     | 70/149 [01:30<01:42,  1.29s/it]
 48%|β–ˆβ–ˆβ–ˆβ–ˆβ–Š     | 71/149 [01:31<01:41,  1.30s/it]
 48%|β–ˆβ–ˆβ–ˆβ–ˆβ–Š     | 72/149 [01:33<01:39,  1.29s/it]
 49%|β–ˆβ–ˆβ–ˆβ–ˆβ–‰     | 73/149 [01:34<01:38,  1.29s/it]
 50%|β–ˆβ–ˆβ–ˆβ–ˆβ–‰     | 74/149 [01:35<01:36,  1.29s/it]
 50%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     | 75/149 [01:36<01:35,  1.29s/it]
 51%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     | 76/149 [01:38<01:34,  1.29s/it]
 52%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 77/149 [01:39<01:33,  1.29s/it]
 52%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 78/149 [01:40<01:31,  1.29s/it]
 53%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž    | 79/149 [01:42<01:30,  1.30s/it]
 54%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž    | 80/149 [01:43<01:29,  1.30s/it]
 54%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 81/149 [01:44<01:28,  1.30s/it]
 55%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ    | 82/149 [01:46<01:26,  1.30s/it]
 56%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ    | 83/149 [01:47<01:25,  1.29s/it]
 56%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹    | 84/149 [01:48<01:24,  1.29s/it]
 57%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹    | 85/149 [01:49<01:22,  1.30s/it]
 58%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š    | 86/149 [01:51<01:21,  1.30s/it]
 58%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š    | 87/149 [01:52<01:20,  1.30s/it]
 59%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰    | 88/149 [01:53<01:19,  1.30s/it]
 60%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰    | 89/149 [01:55<01:17,  1.30s/it]
 60%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ    | 90/149 [01:56<01:16,  1.30s/it]
 61%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ    | 91/149 [01:57<01:15,  1.30s/it]
 62%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 92/149 [01:59<01:13,  1.30s/it]
 62%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 93/149 [02:00<01:12,  1.29s/it]
 63%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž   | 94/149 [02:01<01:11,  1.29s/it]
 64%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 95/149 [02:02<01:09,  1.29s/it]
 64%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 96/149 [02:04<01:08,  1.29s/it]
 65%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ   | 97/149 [02:05<01:07,  1.29s/it]
 66%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ   | 98/149 [02:06<01:06,  1.29s/it]
 66%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹   | 99/149 [02:08<01:04,  1.29s/it]
 67%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹   | 100/149 [02:09<01:03,  1.29s/it]
 68%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š   | 101/149 [02:10<01:02,  1.29s/it]
 68%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š   | 102/149 [02:11<01:00,  1.30s/it]
 69%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰   | 103/149 [02:13<00:59,  1.30s/it]
 70%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰   | 104/149 [02:14<00:58,  1.30s/it]
 70%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   | 105/149 [02:15<00:57,  1.30s/it]
 71%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   | 106/149 [02:17<00:55,  1.30s/it]
 72%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 107/149 [02:18<00:54,  1.30s/it]
 72%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 108/149 [02:19<00:53,  1.30s/it]
 73%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž  | 109/149 [02:21<00:52,  1.30s/it]
 74%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 110/149 [02:22<00:50,  1.30s/it]
 74%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 111/149 [02:23<00:49,  1.30s/it]
 75%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ  | 112/149 [02:24<00:48,  1.30s/it]
 76%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ  | 113/149 [02:26<00:46,  1.30s/it]
 77%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹  | 114/149 [02:27<00:45,  1.30s/it]
 77%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹  | 115/149 [02:28<00:44,  1.30s/it]
 78%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š  | 116/149 [02:30<00:42,  1.30s/it]
 79%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š  | 117/149 [02:31<00:41,  1.30s/it]
 79%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰  | 118/149 [02:32<00:40,  1.30s/it]
 80%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰  | 119/149 [02:34<00:38,  1.29s/it]
 81%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  | 120/149 [02:35<00:37,  1.29s/it]
 81%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  | 121/149 [02:36<00:36,  1.29s/it]
 82%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 122/149 [02:37<00:34,  1.29s/it]
 83%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž | 123/149 [02:39<00:33,  1.29s/it]
 83%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž | 124/149 [02:40<00:32,  1.29s/it]
 84%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 125/149 [02:41<00:30,  1.29s/it]
 85%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 126/149 [02:43<00:29,  1.29s/it]
 85%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ | 127/149 [02:44<00:28,  1.29s/it]
 86%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ | 128/149 [02:45<00:27,  1.29s/it]
 87%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹ | 129/149 [02:46<00:25,  1.29s/it]
 87%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹ | 130/149 [02:48<00:24,  1.29s/it]
 88%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š | 131/149 [02:49<00:23,  1.28s/it]
 89%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š | 132/149 [02:50<00:21,  1.29s/it]
 89%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰ | 133/149 [02:52<00:20,  1.29s/it]
 90%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰ | 134/149 [02:53<00:19,  1.29s/it]
 91%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ | 135/149 [02:54<00:18,  1.29s/it]
 91%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 136/149 [02:55<00:16,  1.29s/it]
 92%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 137/149 [02:57<00:15,  1.29s/it]
 93%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž| 138/149 [02:58<00:14,  1.30s/it]
 93%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž| 139/149 [02:59<00:12,  1.29s/it]
 94%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 140/149 [03:01<00:11,  1.30s/it]
 95%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 141/149 [03:02<00:10,  1.31s/it]
 95%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ| 142/149 [03:03<00:09,  1.31s/it]
 96%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ| 143/149 [03:05<00:07,  1.31s/it]
 97%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹| 144/149 [03:06<00:06,  1.31s/it]
 97%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹| 145/149 [03:07<00:05,  1.32s/it]
 98%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š| 146/149 [03:09<00:03,  1.32s/it]
 99%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š| 147/149 [03:10<00:02,  1.32s/it]
 99%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰| 148/149 [03:11<00:01,  1.32s/it]
100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 149/149 [03:13<00:00,  1.32s/it]
100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 149/149 [03:13<00:00,  1.30s/it]

We can comparing the sampling trajectory depending on the underlying SDE

posterior trajectory with VEposterior trajectory with VP

Plug-and-play Posterior Sampling with arbitrary denoisers#

The deepinv.sampling.PosteriorDiffusion class can be used together with any (well-trained) denoisers for posterior sampling. For example, we can use the deepinv.models.DRUNet for posterior sampling. We can also change the underlying SDE, for example change the sigma_max value.

del trajectory  # clean memory
sigma_min = 0.001
sigma_max = 10.0
rng = torch.Generator(device)
dtype = torch.float32
timesteps = torch.linspace(1, 0.001, 250)
solver = EulerSolver(timesteps=timesteps, rng=rng)
denoiser = dinv.models.DRUNet(pretrained="download").to(device)

sde = VarianceExplodingDiffusion(
    sigma_max=sigma_max, sigma_min=sigma_min, alpha=0.75, device=device, dtype=dtype
)
x = dinv.utils.load_example(
    "butterfly.png",
    img_size=256,
    resize_mode="resize",
).to(device)

mask = torch.ones_like(x)
mask[..., 70:150, 120:180] = 0
physics = dinv.physics.Inpainting(
    mask=mask,
    img_size=x.shape[1:],
    device=device,
)

y = physics(x)
model = PosteriorDiffusion(
    data_fidelity=DPSDataFidelity(denoiser=denoiser, weight=0.3),
    denoiser=denoiser,
    sde=sde,
    solver=solver,
    dtype=dtype,
    device=device,
    verbose=True,
)

# To perform posterior sampling, we need to provide the measurements, the physics and the solver.
x_hat, trajectory = model(
    y=y,
    physics=physics,
    seed=12,
    get_trajectory=True,
)

# Here, we plot the original image, the measurement and the posterior sample
dinv.utils.plot(
    [x, y, x_hat.clip(0, 1)],
    titles=["Original", "Measurement", "Posterior sample DRUNet"],
    figsize=(figsize * 3, figsize),
)

# We can also save the trajectory of the posterior sample
dinv.utils.save_videos(
    trajectory[::gif_frequency].clip(0, 1),
    time_dim=0,
    titles=["Posterior trajectory DRUNet"],
    save_fn="posterior_sample_DRUNet.gif",
    figsize=(figsize, figsize),
)
  0%|          | 0/249 [00:00<?, ?it/s]
  0%|          | 1/249 [00:03<13:42,  3.32s/it]
  1%|          | 2/249 [00:06<13:43,  3.34s/it]
  1%|          | 3/249 [00:09<13:30,  3.29s/it]
  2%|▏         | 4/249 [00:13<13:23,  3.28s/it]
  2%|▏         | 5/249 [00:16<13:23,  3.29s/it]
  2%|▏         | 6/249 [00:19<13:20,  3.29s/it]
  3%|β–Ž         | 7/249 [00:22<13:11,  3.27s/it]
  3%|β–Ž         | 8/249 [00:26<13:06,  3.26s/it]
  4%|β–Ž         | 9/249 [00:29<13:07,  3.28s/it]
  4%|▍         | 10/249 [00:32<13:03,  3.28s/it]
  4%|▍         | 11/249 [00:36<12:57,  3.27s/it]
  5%|▍         | 12/249 [00:39<12:51,  3.25s/it]
  5%|β–Œ         | 13/249 [00:42<12:47,  3.25s/it]
  6%|β–Œ         | 14/249 [00:45<12:44,  3.25s/it]
  6%|β–Œ         | 15/249 [00:49<12:40,  3.25s/it]
  6%|β–‹         | 16/249 [00:52<12:34,  3.24s/it]
  7%|β–‹         | 17/249 [00:55<12:28,  3.23s/it]
  7%|β–‹         | 18/249 [00:58<12:27,  3.23s/it]
  8%|β–Š         | 19/249 [01:01<12:25,  3.24s/it]
  8%|β–Š         | 20/249 [01:05<12:25,  3.25s/it]
  8%|β–Š         | 21/249 [01:08<12:22,  3.26s/it]
  9%|β–‰         | 22/249 [01:11<12:19,  3.26s/it]
  9%|β–‰         | 23/249 [01:15<12:15,  3.26s/it]
 10%|β–‰         | 24/249 [01:18<12:13,  3.26s/it]
 10%|β–ˆ         | 25/249 [01:21<12:10,  3.26s/it]
 10%|β–ˆ         | 26/249 [01:24<12:06,  3.26s/it]
 11%|β–ˆ         | 27/249 [01:28<12:03,  3.26s/it]
 11%|β–ˆ         | 28/249 [01:31<11:59,  3.26s/it]
 12%|β–ˆβ–        | 29/249 [01:34<11:54,  3.25s/it]
 12%|β–ˆβ–        | 30/249 [01:37<11:48,  3.24s/it]
 12%|β–ˆβ–        | 31/249 [01:40<11:42,  3.22s/it]
 13%|β–ˆβ–Ž        | 32/249 [01:44<11:38,  3.22s/it]
 13%|β–ˆβ–Ž        | 33/249 [01:47<11:34,  3.22s/it]
 14%|β–ˆβ–Ž        | 34/249 [01:50<11:31,  3.21s/it]
 14%|β–ˆβ–        | 35/249 [01:53<11:27,  3.21s/it]
 14%|β–ˆβ–        | 36/249 [01:57<11:25,  3.22s/it]
 15%|β–ˆβ–        | 37/249 [02:00<11:22,  3.22s/it]
 15%|β–ˆβ–Œ        | 38/249 [02:03<11:20,  3.23s/it]
 16%|β–ˆβ–Œ        | 39/249 [02:06<11:18,  3.23s/it]
 16%|β–ˆβ–Œ        | 40/249 [02:09<11:16,  3.24s/it]
 16%|β–ˆβ–‹        | 41/249 [02:13<11:15,  3.25s/it]
 17%|β–ˆβ–‹        | 42/249 [02:16<11:12,  3.25s/it]
 17%|β–ˆβ–‹        | 43/249 [02:19<11:10,  3.25s/it]
 18%|β–ˆβ–Š        | 44/249 [02:23<11:06,  3.25s/it]
 18%|β–ˆβ–Š        | 45/249 [02:26<11:04,  3.26s/it]
 18%|β–ˆβ–Š        | 46/249 [02:29<11:01,  3.26s/it]
 19%|β–ˆβ–‰        | 47/249 [02:32<10:58,  3.26s/it]
 19%|β–ˆβ–‰        | 48/249 [02:36<10:53,  3.25s/it]
 20%|β–ˆβ–‰        | 49/249 [02:39<10:48,  3.24s/it]
 20%|β–ˆβ–ˆ        | 50/249 [02:42<10:43,  3.23s/it]
 20%|β–ˆβ–ˆ        | 51/249 [02:45<10:38,  3.23s/it]
 21%|β–ˆβ–ˆ        | 52/249 [02:48<10:34,  3.22s/it]
 21%|β–ˆβ–ˆβ–       | 53/249 [02:52<10:32,  3.23s/it]
 22%|β–ˆβ–ˆβ–       | 54/249 [02:55<10:28,  3.22s/it]
 22%|β–ˆβ–ˆβ–       | 55/249 [02:58<10:25,  3.22s/it]
 22%|β–ˆβ–ˆβ–       | 56/249 [03:01<10:22,  3.23s/it]
 23%|β–ˆβ–ˆβ–Ž       | 57/249 [03:05<10:20,  3.23s/it]
 23%|β–ˆβ–ˆβ–Ž       | 58/249 [03:08<10:15,  3.22s/it]
 24%|β–ˆβ–ˆβ–Ž       | 59/249 [03:11<10:13,  3.23s/it]
 24%|β–ˆβ–ˆβ–       | 60/249 [03:14<10:11,  3.24s/it]
 24%|β–ˆβ–ˆβ–       | 61/249 [03:18<10:09,  3.24s/it]
 25%|β–ˆβ–ˆβ–       | 62/249 [03:21<10:07,  3.25s/it]
 25%|β–ˆβ–ˆβ–Œ       | 63/249 [03:24<10:05,  3.25s/it]
 26%|β–ˆβ–ˆβ–Œ       | 64/249 [03:27<10:02,  3.26s/it]
 26%|β–ˆβ–ˆβ–Œ       | 65/249 [03:31<09:59,  3.26s/it]
 27%|β–ˆβ–ˆβ–‹       | 66/249 [03:34<09:55,  3.26s/it]
 27%|β–ˆβ–ˆβ–‹       | 67/249 [03:37<09:52,  3.25s/it]
 27%|β–ˆβ–ˆβ–‹       | 68/249 [03:40<09:47,  3.25s/it]
 28%|β–ˆβ–ˆβ–Š       | 69/249 [03:44<09:45,  3.25s/it]
 28%|β–ˆβ–ˆβ–Š       | 70/249 [03:47<09:41,  3.25s/it]
 29%|β–ˆβ–ˆβ–Š       | 71/249 [03:50<09:36,  3.24s/it]
 29%|β–ˆβ–ˆβ–‰       | 72/249 [03:53<09:33,  3.24s/it]
 29%|β–ˆβ–ˆβ–‰       | 73/249 [03:57<09:30,  3.24s/it]
 30%|β–ˆβ–ˆβ–‰       | 74/249 [04:00<09:28,  3.25s/it]
 30%|β–ˆβ–ˆβ–ˆ       | 75/249 [04:03<09:25,  3.25s/it]
 31%|β–ˆβ–ˆβ–ˆ       | 76/249 [04:06<09:23,  3.26s/it]
 31%|β–ˆβ–ˆβ–ˆ       | 77/249 [04:10<09:17,  3.24s/it]
 31%|β–ˆβ–ˆβ–ˆβ–      | 78/249 [04:13<09:13,  3.24s/it]
 32%|β–ˆβ–ˆβ–ˆβ–      | 79/249 [04:16<09:09,  3.23s/it]
 32%|β–ˆβ–ˆβ–ˆβ–      | 80/249 [04:19<09:04,  3.22s/it]
 33%|β–ˆβ–ˆβ–ˆβ–Ž      | 81/249 [04:22<09:01,  3.22s/it]
 33%|β–ˆβ–ˆβ–ˆβ–Ž      | 82/249 [04:26<08:59,  3.23s/it]
 33%|β–ˆβ–ˆβ–ˆβ–Ž      | 83/249 [04:29<08:58,  3.24s/it]
 34%|β–ˆβ–ˆβ–ˆβ–Ž      | 84/249 [04:32<08:57,  3.26s/it]
 34%|β–ˆβ–ˆβ–ˆβ–      | 85/249 [04:35<08:52,  3.25s/it]
 35%|β–ˆβ–ˆβ–ˆβ–      | 86/249 [04:39<08:49,  3.25s/it]
 35%|β–ˆβ–ˆβ–ˆβ–      | 87/249 [04:42<08:45,  3.25s/it]
 35%|β–ˆβ–ˆβ–ˆβ–Œ      | 88/249 [04:45<08:42,  3.24s/it]
 36%|β–ˆβ–ˆβ–ˆβ–Œ      | 89/249 [04:48<08:38,  3.24s/it]
 36%|β–ˆβ–ˆβ–ˆβ–Œ      | 90/249 [04:52<08:36,  3.25s/it]
 37%|β–ˆβ–ˆβ–ˆβ–‹      | 91/249 [04:55<08:33,  3.25s/it]
 37%|β–ˆβ–ˆβ–ˆβ–‹      | 92/249 [04:58<08:30,  3.25s/it]
 37%|β–ˆβ–ˆβ–ˆβ–‹      | 93/249 [05:01<08:26,  3.25s/it]
 38%|β–ˆβ–ˆβ–ˆβ–Š      | 94/249 [05:05<08:25,  3.26s/it]
 38%|β–ˆβ–ˆβ–ˆβ–Š      | 95/249 [05:08<08:21,  3.26s/it]
 39%|β–ˆβ–ˆβ–ˆβ–Š      | 96/249 [05:11<08:19,  3.26s/it]
 39%|β–ˆβ–ˆβ–ˆβ–‰      | 97/249 [05:14<08:14,  3.26s/it]
 39%|β–ˆβ–ˆβ–ˆβ–‰      | 98/249 [05:18<08:11,  3.25s/it]
 40%|β–ˆβ–ˆβ–ˆβ–‰      | 99/249 [05:21<08:07,  3.25s/it]
 40%|β–ˆβ–ˆβ–ˆβ–ˆ      | 100/249 [05:24<08:03,  3.25s/it]
 41%|β–ˆβ–ˆβ–ˆβ–ˆ      | 101/249 [05:27<08:01,  3.25s/it]
 41%|β–ˆβ–ˆβ–ˆβ–ˆ      | 102/249 [05:31<07:57,  3.25s/it]
 41%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 103/249 [05:34<07:53,  3.25s/it]
 42%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 104/249 [05:37<07:49,  3.24s/it]
 42%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 105/249 [05:40<07:44,  3.23s/it]
 43%|β–ˆβ–ˆβ–ˆβ–ˆβ–Ž     | 106/249 [05:44<07:41,  3.23s/it]
 43%|β–ˆβ–ˆβ–ˆβ–ˆβ–Ž     | 107/249 [05:47<07:37,  3.22s/it]
 43%|β–ˆβ–ˆβ–ˆβ–ˆβ–Ž     | 108/249 [05:50<07:33,  3.21s/it]
 44%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 109/249 [05:53<07:29,  3.21s/it]
 44%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 110/249 [05:56<07:27,  3.22s/it]
 45%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 111/249 [06:00<07:25,  3.23s/it]
 45%|β–ˆβ–ˆβ–ˆβ–ˆβ–     | 112/249 [06:03<07:21,  3.23s/it]
 45%|β–ˆβ–ˆβ–ˆβ–ˆβ–Œ     | 113/249 [06:06<07:19,  3.23s/it]
 46%|β–ˆβ–ˆβ–ˆβ–ˆβ–Œ     | 114/249 [06:09<07:17,  3.24s/it]
 46%|β–ˆβ–ˆβ–ˆβ–ˆβ–Œ     | 115/249 [06:13<07:15,  3.25s/it]
 47%|β–ˆβ–ˆβ–ˆβ–ˆβ–‹     | 116/249 [06:16<07:12,  3.25s/it]
 47%|β–ˆβ–ˆβ–ˆβ–ˆβ–‹     | 117/249 [06:19<07:09,  3.25s/it]
 47%|β–ˆβ–ˆβ–ˆβ–ˆβ–‹     | 118/249 [06:22<07:06,  3.26s/it]
 48%|β–ˆβ–ˆβ–ˆβ–ˆβ–Š     | 119/249 [06:26<07:03,  3.26s/it]
 48%|β–ˆβ–ˆβ–ˆβ–ˆβ–Š     | 120/249 [06:29<07:01,  3.26s/it]
 49%|β–ˆβ–ˆβ–ˆβ–ˆβ–Š     | 121/249 [06:32<06:57,  3.26s/it]
 49%|β–ˆβ–ˆβ–ˆβ–ˆβ–‰     | 122/249 [06:35<06:53,  3.25s/it]
 49%|β–ˆβ–ˆβ–ˆβ–ˆβ–‰     | 123/249 [06:39<06:47,  3.24s/it]
 50%|β–ˆβ–ˆβ–ˆβ–ˆβ–‰     | 124/249 [06:42<06:44,  3.24s/it]
 50%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     | 125/249 [06:45<06:40,  3.23s/it]
 51%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     | 126/249 [06:48<06:36,  3.22s/it]
 51%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     | 127/249 [06:52<06:32,  3.22s/it]
 51%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 128/249 [06:55<06:29,  3.22s/it]
 52%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 129/249 [06:58<06:28,  3.24s/it]
 52%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 130/249 [07:01<06:25,  3.24s/it]
 53%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž    | 131/249 [07:05<06:22,  3.24s/it]
 53%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž    | 132/249 [07:08<06:19,  3.25s/it]
 53%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž    | 133/249 [07:11<06:16,  3.24s/it]
 54%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 134/249 [07:14<06:12,  3.24s/it]
 54%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 135/249 [07:18<06:09,  3.24s/it]
 55%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–    | 136/249 [07:21<06:05,  3.24s/it]
 55%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ    | 137/249 [07:24<06:02,  3.24s/it]
 55%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ    | 138/249 [07:27<06:00,  3.25s/it]
 56%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ    | 139/249 [07:31<05:59,  3.27s/it]
 56%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ    | 140/249 [07:34<05:57,  3.28s/it]
 57%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹    | 141/249 [07:37<05:54,  3.28s/it]
 57%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹    | 142/249 [07:40<05:50,  3.28s/it]
 57%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹    | 143/249 [07:44<05:47,  3.28s/it]
 58%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š    | 144/249 [07:47<05:44,  3.28s/it]
 58%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š    | 145/249 [07:50<05:40,  3.28s/it]
 59%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š    | 146/249 [07:54<05:38,  3.28s/it]
 59%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰    | 147/249 [07:57<05:35,  3.29s/it]
 59%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰    | 148/249 [08:00<05:30,  3.28s/it]
 60%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰    | 149/249 [08:03<05:27,  3.27s/it]
 60%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ    | 150/249 [08:07<05:23,  3.27s/it]
 61%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ    | 151/249 [08:10<05:19,  3.26s/it]
 61%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ    | 152/249 [08:13<05:16,  3.26s/it]
 61%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 153/249 [08:16<05:13,  3.26s/it]
 62%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 154/249 [08:20<05:09,  3.26s/it]
 62%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 155/249 [08:23<05:06,  3.26s/it]
 63%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž   | 156/249 [08:26<05:03,  3.26s/it]
 63%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž   | 157/249 [08:29<05:00,  3.27s/it]
 63%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž   | 158/249 [08:33<04:57,  3.27s/it]
 64%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 159/249 [08:36<04:54,  3.27s/it]
 64%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 160/249 [08:39<04:49,  3.26s/it]
 65%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–   | 161/249 [08:42<04:46,  3.26s/it]
 65%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ   | 162/249 [08:46<04:42,  3.25s/it]
 65%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ   | 163/249 [08:49<04:39,  3.25s/it]
 66%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ   | 164/249 [08:52<04:36,  3.26s/it]
 66%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹   | 165/249 [08:56<04:33,  3.26s/it]
 67%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹   | 166/249 [08:59<04:31,  3.27s/it]
 67%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹   | 167/249 [09:02<04:28,  3.27s/it]
 67%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹   | 168/249 [09:05<04:25,  3.28s/it]
 68%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š   | 169/249 [09:09<04:22,  3.28s/it]
 68%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š   | 170/249 [09:12<04:18,  3.28s/it]
 69%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š   | 171/249 [09:15<04:15,  3.27s/it]
 69%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰   | 172/249 [09:18<04:11,  3.27s/it]
 69%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰   | 173/249 [09:22<04:08,  3.27s/it]
 70%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰   | 174/249 [09:25<04:04,  3.27s/it]
 70%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   | 175/249 [09:28<04:02,  3.27s/it]
 71%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   | 176/249 [09:32<03:58,  3.27s/it]
 71%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   | 177/249 [09:35<03:55,  3.27s/it]
 71%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 178/249 [09:38<03:51,  3.27s/it]
 72%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 179/249 [09:41<03:48,  3.27s/it]
 72%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 180/249 [09:45<03:44,  3.26s/it]
 73%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž  | 181/249 [09:48<03:41,  3.25s/it]
 73%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž  | 182/249 [09:51<03:37,  3.25s/it]
 73%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž  | 183/249 [09:54<03:34,  3.25s/it]
 74%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 184/249 [09:58<03:31,  3.26s/it]
 74%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 185/249 [10:01<03:29,  3.28s/it]
 75%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–  | 186/249 [10:04<03:26,  3.28s/it]
 75%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ  | 187/249 [10:07<03:22,  3.27s/it]
 76%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ  | 188/249 [10:11<03:19,  3.27s/it]
 76%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ  | 189/249 [10:14<03:15,  3.26s/it]
 76%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹  | 190/249 [10:17<03:12,  3.26s/it]
 77%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹  | 191/249 [10:20<03:08,  3.25s/it]
 77%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹  | 192/249 [10:24<03:04,  3.25s/it]
 78%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š  | 193/249 [10:27<03:01,  3.25s/it]
 78%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š  | 194/249 [10:30<02:58,  3.25s/it]
 78%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š  | 195/249 [10:33<02:55,  3.25s/it]
 79%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š  | 196/249 [10:37<02:52,  3.25s/it]
 79%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰  | 197/249 [10:40<02:48,  3.24s/it]
 80%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰  | 198/249 [10:43<02:45,  3.24s/it]
 80%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰  | 199/249 [10:46<02:41,  3.23s/it]
 80%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  | 200/249 [10:50<02:38,  3.23s/it]
 81%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  | 201/249 [10:53<02:35,  3.23s/it]
 81%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  | 202/249 [10:56<02:32,  3.23s/it]
 82%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 203/249 [10:59<02:28,  3.24s/it]
 82%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 204/249 [11:03<02:25,  3.24s/it]
 82%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 205/249 [11:06<02:22,  3.24s/it]
 83%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž | 206/249 [11:09<02:19,  3.24s/it]
 83%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž | 207/249 [11:12<02:16,  3.24s/it]
 84%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž | 208/249 [11:15<02:12,  3.24s/it]
 84%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 209/249 [11:19<02:09,  3.24s/it]
 84%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 210/249 [11:22<02:06,  3.24s/it]
 85%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ– | 211/249 [11:25<02:02,  3.24s/it]
 85%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ | 212/249 [11:28<01:59,  3.24s/it]
 86%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ | 213/249 [11:32<01:56,  3.24s/it]
 86%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ | 214/249 [11:35<01:53,  3.24s/it]
 86%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹ | 215/249 [11:38<01:50,  3.24s/it]
 87%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹ | 216/249 [11:41<01:47,  3.24s/it]
 87%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹ | 217/249 [11:45<01:43,  3.24s/it]
 88%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š | 218/249 [11:48<01:40,  3.24s/it]
 88%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š | 219/249 [11:51<01:36,  3.23s/it]
 88%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š | 220/249 [11:54<01:33,  3.24s/it]
 89%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰ | 221/249 [11:58<01:30,  3.24s/it]
 89%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰ | 222/249 [12:01<01:27,  3.24s/it]
 90%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰ | 223/249 [12:04<01:24,  3.25s/it]
 90%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰ | 224/249 [12:07<01:21,  3.24s/it]
 90%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ | 225/249 [12:11<01:17,  3.24s/it]
 91%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ | 226/249 [12:14<01:14,  3.24s/it]
 91%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ | 227/249 [12:17<01:11,  3.24s/it]
 92%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 228/249 [12:20<01:08,  3.25s/it]
 92%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 229/249 [12:24<01:04,  3.25s/it]
 92%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 230/249 [12:27<01:01,  3.25s/it]
 93%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž| 231/249 [12:30<00:58,  3.25s/it]
 93%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž| 232/249 [12:33<00:55,  3.26s/it]
 94%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Ž| 233/249 [12:37<00:52,  3.25s/it]
 94%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 234/249 [12:40<00:48,  3.24s/it]
 94%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 235/249 [12:43<00:45,  3.23s/it]
 95%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–| 236/249 [12:46<00:42,  3.23s/it]
 95%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ| 237/249 [12:49<00:38,  3.23s/it]
 96%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ| 238/249 [12:53<00:35,  3.23s/it]
 96%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œ| 239/249 [12:56<00:32,  3.23s/it]
 96%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹| 240/249 [12:59<00:29,  3.24s/it]
 97%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹| 241/249 [13:02<00:25,  3.24s/it]
 97%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‹| 242/249 [13:06<00:22,  3.24s/it]
 98%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š| 243/249 [13:09<00:19,  3.23s/it]
 98%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š| 244/249 [13:12<00:16,  3.23s/it]
 98%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Š| 245/249 [13:15<00:12,  3.22s/it]
 99%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰| 246/249 [13:19<00:09,  3.22s/it]
 99%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰| 247/249 [13:22<00:06,  3.22s/it]
100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‰| 248/249 [13:25<00:03,  3.23s/it]
100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 249/249 [13:28<00:00,  3.25s/it]
100%|β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 249/249 [13:28<00:00,  3.25s/it]

We obtain the following posterior trajectory

posterior trajectory DRUNet

Total running time of the script: (21 minutes 51.836 seconds)

Gallery generated by Sphinx-Gallery