Note
New to DeepInverse? Get started with the basics with the 5 minute quickstart tutorial..
Patch priors for limited-angle computed tomography#
In this example we use patch priors for limited angle computed tomography. More precisely, we consider the inverse problem \(y = \mathrm{noisy}(Ax)\), where \(A\) is the discretized Radon transform with \(100\) equispace angles between 20 and 160 degrees. For the reconstruction, we minimize the variational problem
Here, the regularizer \(g\) is explicitly defined as
where \(P_i\) is the linear operator which extracts the \(i\)-th patch from the image \(x\) and \(h\) is a regularizer on the space of patches.
We consider the following two choices of \(h\):
The expected patch log-likelihood (EPLL) prior was proposed by Zoran and Weiss[1]. It sets \(h(x)=-\log(p_\theta(x))\), where \(p_\theta\) is the probability density function of a Gaussian mixture model. The parameters \(\theta\) are estimated a-priori on a (possibly small) data set of training patches using an expectation maximization algorithm. In contrast to the original paper by Zoran and Weiss, we minimize the arising variational problem by simply applying the Adam optimizer. For an example using the (approximated) half-quadratic splitting algorithm proposed by Zoran and Weiss[1], we refer to the example Expected Patch Log Likelihood (EPLL) for Denoising and Inpainting.
The patch normalizing flow regularizer (PatchNR) was proposed by AltekrΓΌger et al.[2]. It models \(h(x)=-\log(p_{\theta}(x))\) as negative log-likelihood function of a probability density function \(p_\theta={\mathcal{T}_\theta}_\#\mathcal{N}(0,I)\) which is given as the push-forward measure of a standard normal distribution under a normalizing flow (invertible neural network) \(\mathcal{T}_\theta\).
import torch
import deepinv as dinv
from torch.utils.data import DataLoader
from deepinv.datasets import PatchDataset
from deepinv import Trainer
from deepinv.physics import LogPoissonNoise, Tomography, Denoising, UniformNoise
from deepinv.optim import LogPoissonLikelihood, PatchPrior, PatchNR, EPLL
from deepinv.loss.metric import PSNR
from deepinv.utils import plot
from deepinv.utils import load_torch_url
from tqdm import tqdm
device = dinv.utils.get_device()
dtype = torch.float32
Selected GPU 0 with 28319.25 MiB free memory
Load training and test images#
Here, we use downsampled images from the βLoDoPaB-CT datasetβ. Moreover, we define the size of the used patches and generate the dataset of patches in the training images.
url = "https://huggingface.co/datasets/deepinv/LoDoPaB-CT_toy/resolve/main/LoDoPaB-CT_small.pt"
dataset = load_torch_url(url)
train_imgs = dataset["train_imgs"].to(device)
test_imgs = dataset["test_imgs"].to(device)
img_size = train_imgs.shape[-1]
patch_size = 3
verbose = True
train_dataset = PatchDataset(train_imgs, patch_size=patch_size, use_dict_output=True)
Set parameters for EPLL and PatchNR#
For PatchNR, we choose the number of hidden neurons in the subnetworks and for the training batch size and number of epochs. For EPLL, we set the number of mixture components and the maximum number of steps and batch size for fitting the EM algorithm.
patchnr_subnetsize = 128
patchnr_epochs = 5
patchnr_batch_size = 32
patchnr_learning_rate = 1e-4
epll_num_components = 20
epll_max_iter = 20
epll_batch_size = 10000
Training / EM algorithm#
If the parameter retrain is False, we just load pretrained weights. Set the parameter to True for retraining. This takes up to a couple of minutes on a GPU. After training, we define the corresponding patch priors
Note
The normalizing flow training minimizes the forward Kullback-Leibler (maximum likelihood) loss function given by
where \(\mathcal{T}_\theta\) is the normalizing flow with parameters \(\theta\), latent distribution \(P_Z\), data distribution \(P_X\) and push-forward measure \({\mathcal{T}_\theta}_\#P_Z\).
retrain = False
if retrain:
model_patchnr = PatchNR(
pretrained=None,
sub_net_size=patchnr_subnetsize,
device=device,
patch_size=patch_size,
)
patchnr_dataloader = DataLoader(
train_dataset,
batch_size=patchnr_batch_size,
shuffle=True,
drop_last=True,
)
class NFTrainer(Trainer):
def compute_loss(self, physics, x, y, train=True, epoch=None, **kwargs):
logs = {}
self.optimizer.zero_grad() # Zero the gradients
# Evaluate reconstruction network
invs, jac_inv = self.model(y)
# Compute the Kullback Leibler loss
loss_total = torch.mean(
0.5 * torch.sum(invs.view(invs.shape[0], -1) ** 2, -1)
- jac_inv.view(invs.shape[0])
)
current_log = (
self.logs_total_loss_train if train else self.logs_total_loss_eval
)
current_log.update(loss_total.item())
logs[f"TotalLoss"] = current_log.avg
if train:
loss_total.backward() # Backward the total loss
self.optimizer.step() # Optimizer step
return loss_total, invs, logs
optimizer = torch.optim.Adam(
model_patchnr.normalizing_flow.parameters(), lr=patchnr_learning_rate
)
trainer = NFTrainer(
model=model_patchnr.normalizing_flow,
physics=Denoising(UniformNoise(1.0 / 255.0)),
optimizer=optimizer,
train_dataloader=patchnr_dataloader,
device=device,
losses=[],
epochs=patchnr_epochs,
online_measurements=True,
verbose=verbose,
)
trainer.train()
model_epll = EPLL(
pretrained=None,
n_components=epll_num_components,
patch_size=patch_size,
device=device,
)
epll_dataloader = DataLoader(
train_dataset,
batch_size=epll_batch_size,
shuffle=True,
drop_last=False,
)
model_epll.GMM.fit(epll_dataloader, verbose=verbose, max_iters=epll_max_iter)
else:
model_patchnr = PatchNR(
pretrained="PatchNR_lodopab_small2",
sub_net_size=patchnr_subnetsize,
device=device,
patch_size=patch_size,
)
model_epll = EPLL(
pretrained="GMM_lodopab_small2",
n_components=epll_num_components,
patch_size=patch_size,
device=device,
)
patchnr_prior = PatchPrior(model_patchnr, patch_size=patch_size)
epll_prior = PatchPrior(model_epll.negative_log_likelihood, patch_size=patch_size)
Definition of forward operator and noise model#
The training depends only on the image domain or prior distribution. For the reconstruction, we now define forward operator and noise model. For the noise model, we use log-Poisson noise as suggested for the LoDoPaB dataset. Then, we generate an observation by applying the physics and compute the filtered backprojection.
mu = 1 / 50.0 * (362.0 / img_size)
N0 = 1024.0
num_angles = 100
noise_model = LogPoissonNoise(mu=mu, N0=N0)
data_fidelity = LogPoissonLikelihood(mu=mu, N0=N0)
angles = torch.linspace(20, 160, steps=num_angles, device=device)
physics = Tomography(
img_width=img_size,
angles=angles,
device=device,
noise_model=noise_model,
normalize=False,
adjoint_via_backprop=False,
)
observation = physics(test_imgs)
fbp = physics.A_dagger(observation)
Reconstruction loop#
We define a reconstruction loop for minimizing the variational problem using the Adam optimizer. As initialization, we choose the filtered backprojection.
optim_steps = 200
lr_variational_problem = 0.02
def minimize_variational_problem(prior, lam):
imgs = fbp.detach().clone()
imgs.requires_grad_(True)
optimizer = torch.optim.Adam([imgs], lr=lr_variational_problem)
for i in (progress_bar := tqdm(range(optim_steps))):
optimizer.zero_grad()
loss = data_fidelity(imgs, observation, physics).mean() + lam * prior(imgs)
loss.backward()
optimizer.step()
progress_bar.set_description("Step {}".format(i + 1))
return imgs.detach()
Run and plot#
Finally, we run the reconstruction loop for both priors and plot the results. The regularization parameter is roughly chosen by a grid search but not fine-tuned
lam_patchnr = 120.0
lam_epll = 120.0
recon_patchnr = minimize_variational_problem(patchnr_prior, lam_patchnr)
recon_epll = minimize_variational_problem(epll_prior, lam_epll)
psnr_fbp = PSNR()(fbp, test_imgs).item()
psnr_patchnr = PSNR()(recon_patchnr, test_imgs).item()
psnr_epll = PSNR()(recon_epll, test_imgs).item()
print("PSNRs:")
print("Filtered Backprojection: {0:.2f}".format(psnr_fbp))
print("EPLL: {0:.2f}".format(psnr_epll))
print("PatchNR: {0:.2f}".format(psnr_patchnr))
plot(
[
test_imgs,
fbp.clip(0, 1),
recon_epll.clip(0, 1),
recon_patchnr.clip(0, 1),
],
["Ground truth", "Filtered Backprojection", "EPLL", "PatchNR"],
)

0%| | 0/200 [00:00<?, ?it/s]
Step 1: 0%| | 0/200 [00:00<?, ?it/s]
Step 1: 0%| | 1/200 [00:00<03:15, 1.02it/s]
Step 2: 0%| | 1/200 [00:00<03:15, 1.02it/s]
Step 3: 0%| | 1/200 [00:00<03:15, 1.02it/s]
Step 4: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 5: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 6: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 7: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 8: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 9: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 10: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 11: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 12: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 13: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 14: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 15: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 16: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 17: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 18: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 19: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 20: 0%| | 1/200 [00:01<03:15, 1.02it/s]
Step 20: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 21: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 22: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 23: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 24: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 25: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 26: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 27: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 28: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 29: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 30: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 31: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 32: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 33: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 34: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 35: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 36: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 37: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 38: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 39: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 40: 10%|β | 20/200 [00:01<00:07, 24.90it/s]
Step 40: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 41: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 42: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 43: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 44: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 45: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 46: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 47: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 48: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 49: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 50: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 51: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 52: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 53: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 54: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 55: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 56: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 57: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 58: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 59: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 60: 20%|ββ | 40/200 [00:01<00:03, 51.56it/s]
Step 60: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 61: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 62: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 63: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 64: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 65: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 66: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 67: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 68: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 69: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 70: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 71: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 72: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 73: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 74: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 75: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 76: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 77: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 78: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 79: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 80: 30%|βββ | 60/200 [00:01<00:01, 77.98it/s]
Step 80: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 81: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 82: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 83: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 84: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 85: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 86: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 87: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 88: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 89: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 90: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 91: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 92: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 93: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 94: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 95: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 96: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 97: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 98: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 99: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 100: 40%|ββββ | 80/200 [00:01<00:01, 102.56it/s]
Step 100: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 101: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 102: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 103: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 104: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 105: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 106: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 107: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 108: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 109: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 110: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 111: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 112: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 113: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 114: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 115: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 116: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 117: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 118: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 119: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 120: 50%|βββββ | 100/200 [00:01<00:00, 124.20it/s]
Step 120: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 121: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 122: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 123: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 124: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 125: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 126: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 127: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 128: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 129: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 130: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 131: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 132: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 133: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 134: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 135: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 136: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 137: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 138: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 139: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 140: 60%|ββββββ | 120/200 [00:01<00:00, 142.24it/s]
Step 140: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 141: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 142: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 143: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 144: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 145: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 146: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 147: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 148: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 149: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 150: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 151: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 152: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 153: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 154: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 155: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 156: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 157: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 158: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 159: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 160: 70%|βββββββ | 140/200 [00:01<00:00, 157.02it/s]
Step 160: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 161: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 162: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 163: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 164: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 165: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 166: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 167: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 168: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 169: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 170: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 171: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 172: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 173: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 174: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 175: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 176: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 177: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 178: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 179: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 180: 80%|ββββββββ | 160/200 [00:01<00:00, 168.47it/s]
Step 180: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 181: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 182: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 183: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 184: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 185: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 186: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 187: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 188: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 189: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 190: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 191: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 192: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 193: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 194: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 195: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 196: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 197: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 198: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 199: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 200: 90%|βββββββββ | 180/200 [00:01<00:00, 177.19it/s]
Step 200: 100%|ββββββββββ| 200/200 [00:01<00:00, 183.64it/s]
Step 200: 100%|ββββββββββ| 200/200 [00:01<00:00, 100.37it/s]
0%| | 0/200 [00:00<?, ?it/s]
Step 1: 0%| | 0/200 [00:00<?, ?it/s]
Step 2: 0%| | 0/200 [00:00<?, ?it/s]
Step 3: 0%| | 0/200 [00:00<?, ?it/s]
Step 4: 0%| | 0/200 [00:00<?, ?it/s]
Step 5: 0%| | 0/200 [00:00<?, ?it/s]
Step 6: 0%| | 0/200 [00:00<?, ?it/s]
Step 7: 0%| | 0/200 [00:00<?, ?it/s]
Step 8: 0%| | 0/200 [00:00<?, ?it/s]
Step 9: 0%| | 0/200 [00:00<?, ?it/s]
Step 10: 0%| | 0/200 [00:00<?, ?it/s]
Step 11: 0%| | 0/200 [00:00<?, ?it/s]
Step 12: 0%| | 0/200 [00:00<?, ?it/s]
Step 13: 0%| | 0/200 [00:00<?, ?it/s]
Step 14: 0%| | 0/200 [00:00<?, ?it/s]
Step 15: 0%| | 0/200 [00:00<?, ?it/s]
Step 16: 0%| | 0/200 [00:00<?, ?it/s]
Step 17: 0%| | 0/200 [00:00<?, ?it/s]
Step 18: 0%| | 0/200 [00:00<?, ?it/s]
Step 19: 0%| | 0/200 [00:00<?, ?it/s]
Step 20: 0%| | 0/200 [00:00<?, ?it/s]
Step 21: 0%| | 0/200 [00:00<?, ?it/s]
Step 22: 0%| | 0/200 [00:00<?, ?it/s]
Step 23: 0%| | 0/200 [00:00<?, ?it/s]
Step 24: 0%| | 0/200 [00:00<?, ?it/s]
Step 25: 0%| | 0/200 [00:00<?, ?it/s]
Step 26: 0%| | 0/200 [00:00<?, ?it/s]
Step 27: 0%| | 0/200 [00:00<?, ?it/s]
Step 28: 0%| | 0/200 [00:00<?, ?it/s]
Step 29: 0%| | 0/200 [00:00<?, ?it/s]
Step 30: 0%| | 0/200 [00:00<?, ?it/s]
Step 31: 0%| | 0/200 [00:00<?, ?it/s]
Step 32: 0%| | 0/200 [00:00<?, ?it/s]
Step 33: 0%| | 0/200 [00:00<?, ?it/s]
Step 34: 0%| | 0/200 [00:00<?, ?it/s]
Step 35: 0%| | 0/200 [00:00<?, ?it/s]
Step 36: 0%| | 0/200 [00:00<?, ?it/s]
Step 37: 0%| | 0/200 [00:00<?, ?it/s]
Step 38: 0%| | 0/200 [00:00<?, ?it/s]
Step 39: 0%| | 0/200 [00:00<?, ?it/s]
Step 40: 0%| | 0/200 [00:00<?, ?it/s]
Step 41: 0%| | 0/200 [00:00<?, ?it/s]
Step 42: 0%| | 0/200 [00:00<?, ?it/s]
Step 43: 0%| | 0/200 [00:00<?, ?it/s]
Step 44: 0%| | 0/200 [00:00<?, ?it/s]
Step 45: 0%| | 0/200 [00:00<?, ?it/s]
Step 46: 0%| | 0/200 [00:00<?, ?it/s]
Step 47: 0%| | 0/200 [00:00<?, ?it/s]
Step 48: 0%| | 0/200 [00:00<?, ?it/s]
Step 49: 0%| | 0/200 [00:00<?, ?it/s]
Step 50: 0%| | 0/200 [00:00<?, ?it/s]
Step 51: 0%| | 0/200 [00:00<?, ?it/s]
Step 52: 0%| | 0/200 [00:00<?, ?it/s]
Step 53: 0%| | 0/200 [00:00<?, ?it/s]
Step 54: 0%| | 0/200 [00:00<?, ?it/s]
Step 54: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 55: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 56: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 57: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 58: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 59: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 60: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 61: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 62: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 63: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 64: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 65: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 66: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 67: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 68: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 69: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 70: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 71: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 72: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 73: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 74: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 75: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 76: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 77: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 78: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 79: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 80: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 81: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 82: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 83: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 84: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 85: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 86: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 87: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 88: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 89: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 90: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 91: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 92: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 93: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 94: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 95: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 96: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 97: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 98: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 99: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 100: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 101: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 102: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 103: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 104: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 105: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 106: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 107: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 108: 27%|βββ | 54/200 [00:00<00:00, 536.43it/s]
Step 108: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 109: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 110: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 111: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 112: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 113: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 114: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 115: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 116: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 117: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 118: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 119: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 120: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 121: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 122: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 123: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 124: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 125: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 126: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 127: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 128: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 129: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 130: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 131: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 132: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 133: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 134: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 135: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 136: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 137: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 138: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 139: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 140: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 141: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 142: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 143: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 144: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 145: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 146: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 147: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 148: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 149: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 150: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 151: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 152: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 153: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 154: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 155: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 156: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 157: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 158: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 159: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 160: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 161: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 162: 54%|ββββββ | 108/200 [00:00<00:00, 536.07it/s]
Step 162: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 163: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 164: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 165: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 166: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 167: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 168: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 169: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 170: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 171: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 172: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 173: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 174: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 175: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 176: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 177: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 178: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 179: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 180: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 181: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 182: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 183: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 184: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 185: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 186: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 187: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 188: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 189: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 190: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 191: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 192: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 193: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 194: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 195: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 196: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 197: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 198: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 199: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 200: 81%|ββββββββ | 162/200 [00:00<00:00, 535.39it/s]
Step 200: 100%|ββββββββββ| 200/200 [00:00<00:00, 535.48it/s]
PSNRs:
Filtered Backprojection: 19.92
EPLL: 31.84
PatchNR: 32.52
- References:
Total running time of the script: (0 minutes 2.821 seconds)