denoising-diffusion-pytorch 2.3.1__tar.gz → 2.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/PKG-INFO +2 -2
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/classifier_free_guidance.py +26 -8
- denoising_diffusion_pytorch-2.3.2/denoising_diffusion_pytorch/version.py +1 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/xm.py +9 -0
- denoising_diffusion_pytorch-2.3.1/denoising_diffusion_pytorch/version.py +0 -1
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/.gitignore +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/LICENSE +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/README.md +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/__init__.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/attend.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/continuous_time_gaussian_diffusion.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/denoising_diffusion_pytorch.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/denoising_diffusion_pytorch_1d.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/elucidated_diffusion.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/fid_evaluation.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/guided_diffusion.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/karras_unet.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/karras_unet_1d.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/karras_unet_3d.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/learned_gaussian_diffusion.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/repaint.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/simple_diffusion.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/v_param_continuous_time_gaussian_diffusion.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/denoising_diffusion_pytorch/weighted_objective_gaussian_diffusion.py +0 -0
- {denoising_diffusion_pytorch-2.3.1 → denoising_diffusion_pytorch-2.3.2}/pyproject.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: denoising-diffusion-pytorch
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.2
|
|
4
4
|
Summary: Denoising Diffusion Probabilistic Models - Pytorch
|
|
5
5
|
Project-URL: Homepage, https://github.com/lucidrains/denoising-diffusion-pytorch
|
|
6
6
|
Project-URL: Repository, https://github.com/lucidrains/denoising-diffusion-pytorch
|
|
@@ -411,7 +411,8 @@ class Unet(nn.Module):
|
|
|
411
411
|
x,
|
|
412
412
|
time,
|
|
413
413
|
classes,
|
|
414
|
-
cond_drop_prob = None
|
|
414
|
+
cond_drop_prob = None,
|
|
415
|
+
cond_keep_mask = None
|
|
415
416
|
):
|
|
416
417
|
batch, device = x.shape[0], x.device
|
|
417
418
|
|
|
@@ -421,8 +422,10 @@ class Unet(nn.Module):
|
|
|
421
422
|
|
|
422
423
|
classes_emb = self.classes_emb(classes)
|
|
423
424
|
|
|
424
|
-
if cond_drop_prob > 0:
|
|
425
|
-
keep_mask = prob_mask_like((batch,), 1 - cond_drop_prob, device = device)
|
|
425
|
+
if cond_drop_prob > 0 or exists(cond_keep_mask):
|
|
426
|
+
keep_mask = default(cond_keep_mask, lambda: prob_mask_like((batch,), 1 - cond_drop_prob, device = device))
|
|
427
|
+
assert keep_mask.shape == (batch,)
|
|
428
|
+
keep_mask = keep_mask.to(device = device, dtype = torch.bool)
|
|
426
429
|
null_classes_emb = repeat(self.null_classes_emb, 'd -> b d', b = batch)
|
|
427
430
|
|
|
428
431
|
classes_emb = torch.where(
|
|
@@ -606,6 +609,20 @@ class GaussianDiffusion(nn.Module):
|
|
|
606
609
|
def device(self):
|
|
607
610
|
return self.betas.device
|
|
608
611
|
|
|
612
|
+
def random_times(self, batch_size):
|
|
613
|
+
return torch.randint(0, self.num_timesteps, (batch_size,), device = self.device).long()
|
|
614
|
+
|
|
615
|
+
def random_cond_keep_mask(self, batch_size):
|
|
616
|
+
keep_prob = 1. - self.model.cond_drop_prob
|
|
617
|
+
return prob_mask_like((batch_size,), keep_prob, device = self.device)
|
|
618
|
+
|
|
619
|
+
def xm_shared_random_kwargs(self, batch_size):
|
|
620
|
+
# condition dropping is shared across Forward XM candidates
|
|
621
|
+
|
|
622
|
+
return dict(
|
|
623
|
+
cond_keep_mask = self.random_cond_keep_mask(batch_size)
|
|
624
|
+
)
|
|
625
|
+
|
|
609
626
|
def predict_start_from_noise(self, x_t, t, noise):
|
|
610
627
|
return (
|
|
611
628
|
extract(self.sqrt_recip_alphas_cumprod, t, x_t.shape) * x_t -
|
|
@@ -774,7 +791,7 @@ class GaussianDiffusion(nn.Module):
|
|
|
774
791
|
extract(self.sqrt_one_minus_alphas_cumprod, t, x_start.shape) * noise
|
|
775
792
|
)
|
|
776
793
|
|
|
777
|
-
def p_losses(self, x_start, t, *, classes, noise = None, loss_reduction = 'mean'):
|
|
794
|
+
def p_losses(self, x_start, t, *, classes, noise = None, cond_keep_mask = None, loss_reduction = 'mean'):
|
|
778
795
|
b, c, h, w = x_start.shape
|
|
779
796
|
noise = default(noise, lambda: torch.randn_like(x_start))
|
|
780
797
|
|
|
@@ -784,7 +801,8 @@ class GaussianDiffusion(nn.Module):
|
|
|
784
801
|
|
|
785
802
|
# predict and take gradient step
|
|
786
803
|
|
|
787
|
-
|
|
804
|
+
model_kwargs = dict(cond_keep_mask = cond_keep_mask) if exists(cond_keep_mask) else dict()
|
|
805
|
+
model_out = self.model(x, t, classes, **model_kwargs)
|
|
788
806
|
|
|
789
807
|
if self.objective == 'pred_noise':
|
|
790
808
|
target = noise
|
|
@@ -806,13 +824,13 @@ class GaussianDiffusion(nn.Module):
|
|
|
806
824
|
|
|
807
825
|
return loss.mean()
|
|
808
826
|
|
|
809
|
-
def forward(self, img, *args, loss_reduction = 'mean', **kwargs):
|
|
827
|
+
def forward(self, img, *args, times = None, cond_keep_mask = None, loss_reduction = 'mean', **kwargs):
|
|
810
828
|
b, c, h, w, device, img_size, = *img.shape, img.device, self.image_size
|
|
811
829
|
assert h == img_size and w == img_size, f'height and width of image must be {img_size}'
|
|
812
|
-
|
|
830
|
+
times = default(times, lambda: self.random_times(b))
|
|
813
831
|
|
|
814
832
|
img = normalize_to_neg_one_to_one(img)
|
|
815
|
-
return self.p_losses(img,
|
|
833
|
+
return self.p_losses(img, times, *args, cond_keep_mask = cond_keep_mask, loss_reduction = loss_reduction, **kwargs)
|
|
816
834
|
|
|
817
835
|
# example
|
|
818
836
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.3.2'
|
|
@@ -77,6 +77,15 @@ class XMWrapper(Module):
|
|
|
77
77
|
first_tensor = next(t for t in leaves if is_tensor(t))
|
|
78
78
|
batch = first_tensor.shape[0]
|
|
79
79
|
|
|
80
|
+
# sample anything that must be shared before expanding candidates
|
|
81
|
+
|
|
82
|
+
if hasattr(self.flow_model, 'xm_shared_random_kwargs'):
|
|
83
|
+
random_kwargs = self.flow_model.xm_shared_random_kwargs(batch)
|
|
84
|
+
|
|
85
|
+
for key, value in random_kwargs.items():
|
|
86
|
+
if key not in kwargs:
|
|
87
|
+
kwargs[key] = value
|
|
88
|
+
|
|
80
89
|
if self.random_time_kwarg not in kwargs:
|
|
81
90
|
assert hasattr(self.flow_model, self.random_time_method), f'flow_model must have a {self.random_time_method} method'
|
|
82
91
|
fn = getattr(self.flow_model, self.random_time_method)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '2.3.1'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|