mirror of
https://github.com/brycedrennan/imaginAIry
synced 2024-10-31 03:20:40 +00:00
cf8a44b317
better handles img2img (partial diffusion runs)
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from torch import Generator, Tensor, arange, device as Device
|
|
|
|
from imaginairy.vendored.refiners.foundationals.latent_diffusion.schedulers.scheduler import Scheduler
|
|
|
|
|
|
class DDPM(Scheduler):
|
|
"""
|
|
Denoising Diffusion Probabilistic Model
|
|
|
|
Only used for training Latent Diffusion models. Cannot be called.
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
num_inference_steps: int,
|
|
num_train_timesteps: int = 1_000,
|
|
initial_diffusion_rate: float = 8.5e-4,
|
|
final_diffusion_rate: float = 1.2e-2,
|
|
first_inference_step: int = 0,
|
|
device: Device | str = "cpu",
|
|
) -> None:
|
|
super().__init__(
|
|
num_inference_steps=num_inference_steps,
|
|
num_train_timesteps=num_train_timesteps,
|
|
initial_diffusion_rate=initial_diffusion_rate,
|
|
final_diffusion_rate=final_diffusion_rate,
|
|
first_inference_step=first_inference_step,
|
|
device=device,
|
|
)
|
|
|
|
def _generate_timesteps(self) -> Tensor:
|
|
step_ratio = self.num_train_timesteps // self.num_inference_steps
|
|
timesteps = arange(start=0, end=self.num_inference_steps, step=1, device=self.device) * step_ratio
|
|
return timesteps.flip(0)
|
|
|
|
def __call__(self, x: Tensor, noise: Tensor, step: int, generator: Generator | None = None) -> Tensor:
|
|
raise NotImplementedError
|