Diffusers documentation
DDPMScheduler
DDPMScheduler
Denoising Diffusion Probabilistic Models (DDPM) авторов Джонатана Хо, Аджая Джейна и Питера Аббеля предлагает модель на основе диффузии с тем же названием. В контексте библиотеки 🤗 Diffusers DDPM обозначает дискретный планировщик удаления шума из статьи, а также соответствующий пайплайн.
Аннотация из статьи:
Мы представляем результаты синтеза изображений высокого качества с использованием диффузионных вероятностных моделей, класса латентных переменных, вдохновлённого соображениями из неравновесной термодинамики. Наши лучшие результаты получены путём обучения на взвешенной вариационной границе, спроектированной на основе новой связи между диффузионными вероятностными моделями и сопоставлением скоростей сглаживания шума с динамикой Ланжевена. Наши модели естественным образом допускают схему прогрессивного сжимающего декодирования с потерями, которую можно интерпретировать как обобщение авторегрессионного декодирования. На безусловном наборе данных CIFAR10 мы получаем Inception score 9,46 и FID score 3,17, являющийся лучшим на данный момент. На LSUN 256x256 мы получаем качество образцов, сопоставимое с ProgressiveGAN. Наша реализация доступна по адресу этот URL.
DDPMScheduler
класс diffusers.DDPMScheduler
< source >( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2', 'sigmoid'] = 'linear'trained_betas: numpy.ndarray | list[float] | None = Nonevariance_type: typing.Literal['fixed_small', 'fixed_small_log', 'fixed_large', 'fixed_large_log', 'learned', 'learned_range'] = 'fixed_small'clip_sample: bool = Trueprediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995clip_sample_range: float = 1.0sample_max_value: float = 1.0timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'leading'steps_offset: int = 0rescale_betas_zero_snr: bool = False )
Параметры
- num_train_timesteps (
int, по умолчанию1000) — Количество шагов диффузии для обучения модели. - beta_start (
float, по умолчанию0.0001) — Начальное значениеbetaдля вывода. - beta_end (
float, по умолчанию0.02) — Конечное значениеbeta. - beta_schedule (
"linear","scaled_linear","squaredcos_cap_v2"или"sigmoid", по умолчанию"linear") — Расписание beta, отображающее диапазон beta в последовательность значений beta для шагов модели. - trained_betas (
np.ndarray, необязательный) — Массив бета-значений для прямой передачи в конструктор без использованияbeta_startиbeta_end. - variance_type (
"fixed_small","fixed_small_log","fixed_large","fixed_large_log","learned"или"learned_range", по умолчанию"fixed_small") — Ограничивает дисперсию при добавлении шума к денойзированному образцу. - clip_sample (
bool, по умолчаниюTrue) — Обрезает предсказанную выборку для численной стабильности. - clip_sample_range (
float, по умолчанию1.0) — Максимальная величина для обрезки выборок. Действительно только приclip_sample=True. - prediction_type (
"epsilon","sample", or"v_prediction", defaults to"epsilon") — Prediction type of the scheduler function; can beepsilon(predicts the noise of the diffusion process),sample(directly predicts the noisy sample) orv_prediction` (see section 2.4 of Imagen Video paper). - thresholding (
bool, по умолчаниюFalse) — Использовать ли метод «динамического порогового значения». Этот метод не подходит для моделей диффузии в латентном пространстве, таких как Stable Diffusion. - dynamic_thresholding_ratio (
float, по умолчанию0.995) — Коэффициент для метода динамического порогового значения. Действительно только приthresholding=True. - sample_max_value (
float, по умолчанию1.0) — Пороговое значение для динамического порогового выделения. Действительно только приthresholding=True. - timestep_spacing (
"linspace","leading", or"trailing", defaults to"leading") — The way the timesteps should be scaled. Refer to Table 2 of the Common Diffusion Noise Schedules and Sample Steps are Flawed for more information. - steps_offset (
int, по умолчанию0) — Смещение, добавляемое к шагам инференса, как требуется некоторыми семействами моделей. - rescale_betas_zero_snr (
bool, по умолчаниюFalse) — Определяет, следует ли перемасштабировать беты для нулевого конечного SNR. Это позволяет модели генерировать очень яркие и тёмкие образцы, а не ограничиваться образцами со средней яркостью. Непосредственно связано с--offset_noise.
DDPMScheduler исследует связи между сопоставлением скоров денойзинга и сэмплированием по динамике Ланжевена.
Эта модель наследуется от SchedulerMixin и ConfigMixin. Общую документацию по методам, которые библиотека реализует для всех планировщиков (например, загрузка и сохранение), см. в документации суперкласса.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Добавьте шум к исходным образцам в соответствии с величиной шума на каждом шаге (это процесс прямой диффузии).
get_velocity
< source >( sample: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Вычислите предсказание скорости из выборки и шума согласно формуле скорости.
previous_timestep
< source >( timestep: int ) → int or torch.Tensor
Вычислите предыдущий шаг временной шкалы в цепочке диффузии.
scale_model_input
< source >( sample: Tensortimestep: int | None = None ) → torch.Tensor
Обеспечивает совместимость с планировщиками, которым необходимо масштабировать входную модель денуазинга в зависимости от текущего шага.
set_timesteps
< source >( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device] = Nonetimesteps: list[int] | None = None )
Параметры
- num_inference_steps (
int, необязательный) — Количество шагов диффузии, используемое при генерации образцов с помощью предобученной модели. Если используется,timestepsдолжно бытьNone. - device (
strилиtorch.device, необязательный) — Устройство, на которое следует переместить шаги. ЕслиNone, шаги не перемещаются. - timesteps (
list[int], необязательный) — Пользовательские шаги (timesteps), используемые для поддержки произвольного интервала между ними. ЕслиNone, используется стандартная стратегия равномерного распределения шагов. Если передан параметрtimesteps,num_inference_stepsдолжен бытьNone.
Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).
шаг
< source >( model_output: Tensortimestep: intsample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → DDPMSchedulerOutput or tuple
Параметры
- model_output (
torch.Tensor) — Прямой вывод из обученной диффузионной модели. - timestep (
int) — Текущий дискретный шаг в цепочке диффузии. - sample (
torch.Tensor) — Текущий экземпляр сэмпла, созданный процессом диффузии. - generator (
torch.Generator, необязательный) — Генератор случайных чисел. - return_dict (
bool, по умолчаниюTrue) — Определяет, возвращать ли DDPMSchedulerOutput илиtuple.
Возвращает
DDPMSchedulerOutput или tuple
If return_dict is True, DDPMSchedulerOutput is returned, otherwise a
tuple is returned where the first element is the sample tensor.
Предскажите образец из предыдущего шага времени, обращая SDE. Эта функция распространяет процесс диффузии от выходов обученной модели (чаще всего — предсказанного шума).
DDPMSchedulerOutput
класс diffusers.schedulers.scheduling_ddpm.DDPMSchedulerOutput
< source >( prev_sample: Tensorpred_original_sample: typing.Optional[torch.Tensor] = None )
Параметры
- prev_sample (
torch.Tensorформы(batch_size, num_channels, height, width)для изображений) — Вычисленная выборка(x_{t-1})предыдущего шага.prev_sampleследует использовать как следующий вход модели в цикле шумоподавления. - pred_original_sample (
torch.Tensorформы(batch_size, num_channels, height, width)для изображений) — Прогнозируемый денойзированный образец(x_{0})на основе вывода модели на текущем шаге времени.pred_original_sampleможно использовать для предпросмотра прогресса или для направленного генерирования.
Класс результата для вывода функции step планировщика.