Diffusers documentation

DDIMScheduler

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DDIMScheduler

Denoising Diffusion Implicit Models (DDIM) от Jiaming Song, Chenlin Meng и Stefano Ermon.

Аннотация из статьи:

Модели вероятностного диффузионного шумоподавления (DDPM) обеспечивают генерацию изображений высокого качества без использования противоречивого обучения, однако для получения одного образца им необходимо симулировать цепь Маркова на протяжении множества шагов. Для ускорения выборки мы предлагаем модели неявного диффузионного шумоподавления (DDIM) — более эффективный класс итеративных неявных вероятностных моделей, обучаемых по той же процедуре, что и DDPM. В DDPM генеративный процесс определяется как обратный марковскому диффузионному процессу. Мы конструируем класс немарковских диффузионных процессов, которые приводят к той же целевой функции обучения, но обратный процесс которых позволяет получать выборки значительно быстрее. Эмпирически мы показываем, что DDIM способны генерировать образцы высокого качества в 10–50 раз быстрее по фактическому времени (wall-clock time) по сравнению с DDPM, позволяют выбирать баланс между вычислительными затратами и качеством образцов, а также выполняют семантически осмысленную интерполяцию изображений непосредственно в латентном пространстве.

Исходная кодовая база этой статьи доступна по адресу ermongroup/ddim, а связаться с автором можно через tsong.me.

Советы

The paper Common Diffusion Noise Schedules and Sample Steps are Flawed claims that a mismatch between the training and inference settings leads to suboptimal inference generation results for Stable Diffusion. To fix this, the authors propose:

🧪 Это экспериментальная функция!

  1. масштабировать расписание шума для обеспечения нулевого отношения сигнал/шум (SNR) на конечном шаге
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, rescale_betas_zero_snr=True)
  1. train a model with v_prediction (add the following argument to the train_text_to_image.py or train_text_to_image_lora.py scripts)
--prediction_type="v_prediction"
  1. измените сэмплер так, чтобы он всегда начинал с последнего шага
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, timestep_spacing="trailing")
  1. масштабирование classifier-free guidance для предотвращения переэкспозиции
image = pipe(prompt, guidance_rescale=0.7).images[0]

Например:

from diffusers import DiffusionPipeline, DDIMScheduler
import torch

pipe = DiffusionPipeline.from_pretrained("ptx0/pseudo-journey-v2", dtype=torch.float16)
pipe.scheduler = DDIMScheduler.from_config(
    pipe.scheduler.config, rescale_betas_zero_snr=True, timestep_spacing="trailing"
)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

prompt = "A lion in galaxies, spirals, nebulae, stars, smoke, iridescent, intricate detail, octane render, 8k"
image = pipe(prompt, guidance_rescale=0.7).images[0]
image

DDIMScheduler

класс diffusers.DDIMScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'trained_betas: numpy.ndarray | list[float] | None = Noneclip_sample: bool = Trueset_alpha_to_one: bool = Truesteps_offset: int = 0prediction_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['leading', 'trailing', 'linspace'] = 'leading'rescale_betas_zero_snr: bool = False )

Параметры

  • num_train_timesteps (int, по умолчанию 1000) — Количество шагов диффузии для обучения модели.
  • beta_start (float, по умолчанию 0.0001) — Начальное значение beta для вывода.
  • beta_end (float, по умолчанию 0.02) — Конечное значение beta.
  • beta_schedule (Literal["linear", "scaled_linear", "squaredcos_cap_v2"], по умолчанию "linear") — Расписание бета, отображающее диапазон значений бета в последовательность бета для шагов модели. Должно быть одним из "linear", "scaled_linear" или "squaredcos_cap_v2".
  • trained_betas (np.ndarray, необязательный) — Передайте массив betas непосредственно в конструктор, чтобы обойти beta_start и beta_end.
  • clip_sample (bool, по умолчанию True) — Обрезает предсказанную выборку для численной стабильности.
  • clip_sample_range (float, по умолчанию 1.0) — Максимальная величина для обрезки выборок. Действительно только при clip_sample=True.
  • set_alpha_to_one (bool, по умолчанию True) — Каждый шаг диффузии использует значение произведения альф на данном шаге и на предыдущем. Для последнего шага предыдущего альфа-значения не существует. Если этот параметр установлен в True, произведение предыдущей альфы фиксируется в 1, в противном случае используется значение альфы на шаге 0.
  • steps_offset (int, по умолчанию 0) — Смещение, добавляемое к шагам инференса, как требуется некоторыми семействами моделей.
  • prediction_type (Literal["epsilon", "sample", "v_prediction"], по умолчанию "epsilon") — Тип предсказания функции планировщика. Должен быть одним из "epsilon" (предсказывает шум процесса диффузии), "sample" (напрямую предсказывает зашумленный образец) или "v_prediction" (см. раздел 2.4 статьи Imagen Video).
  • thresholding (bool, по умолчанию False) — Использовать ли метод «динамического порогового значения». Этот метод не подходит для моделей диффузии в латентном пространстве, таких как Stable Diffusion.
  • dynamic_thresholding_ratio (float, по умолчанию 0.995) — Коэффициент для метода динамического порогового значения. Действительно только при thresholding=True.
  • sample_max_value (float, по умолчанию 1.0) — Пороговое значение для динамического порогового выделения. Действительно только при thresholding=True.
  • timestep_spacing (Literal["leading", "trailing", "linspace"], defaults to "leading") — The way the timesteps should be scaled. Must be one of "leading", "trailing", or "linspace". Refer to Table 2 of the Common Diffusion Noise Schedules and Sample Steps are Flawed for more information.
  • rescale_betas_zero_snr (bool, по умолчанию False) — Определяет, следует ли перемасштабировать беты для нулевого конечного SNR. Это позволяет модели генерировать очень яркие и тёмкие образцы, а не ограничиваться образцами со средней яркостью. Непосредственно связано с --offset_noise.

DDIMScheduler расширяет процедуру денойзинга, предложенную в вероятностных моделях диффузионного денойзинга (DDPM), с помощью немарковского управления.

Эта модель наследуется от SchedulerMixin и ConfigMixin. Общую документацию по методам, которые библиотека реализует для всех планировщиков (например, загрузка и сохранение), см. в документации суперкласса.

add_noise

< >

( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor

Параметры

  • original_samples (torch.Tensor) — Исходные образцы, к которым будет добавлен шум.
  • noise (torch.Tensor) — Шум, который нужно добавить к образцам.
  • timesteps (torch.IntTensor) — Шаги, указывающие уровень шума для каждого образца.

Возвращает

torch.Tensor

Шумные образцы.

Добавьте шум к исходным образцам в соответствии с величиной шума на каждом шаге (это процесс прямой диффузии).

get_velocity

< >

( sample: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor

Параметры

  • sample (torch.Tensor) — Входной образец.
  • noise (torch.Tensor) — Тензор шума.
  • timesteps (torch.IntTensor) — Шаги для вычисления скорости.

Возвращает

torch.Tensor

Вычисленная скорость.

Вычислите предсказание скорости из выборки и шума согласно формуле скорости.

scale_model_input

< >

( sample: Tensortimestep: int = None ) → torch.Tensor

Параметры

  • sample (torch.Tensor) — Входной образец.
  • timestep (int, необязательный) — Текущий шаг в цепочке диффузии.

Возвращает

torch.Tensor

Масштабированный входной образец.

Обеспечивает совместимость с планировщиками, которым необходимо масштабировать входную модель денуазинга в зависимости от текущего шага.

set_timesteps

< >

( num_inference_steps: intdevice: typing.Union[str, torch.device] = None )

Параметры

  • num_inference_steps (int) — Количество шагов диффузии, используемых при генерации образцов с помощью предобученной модели.
  • device (str | torch.device, необязательный) — Устройство, используемое для шагов времени (timesteps).

Исключения

ValueError

  • ValueError — если num_inference_steps больше, чем self.config.num_train_timesteps.

Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).

шаг

< >

( model_output: Tensortimestep: intsample: Tensoreta: float = 0.0use_clipped_model_output: bool = Falsegenerator: typing.Optional[torch.Generator] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → DDIMSchedulerOutput or tuple

Параметры

  • model_output (torch.Tensor) — Прямой вывод из обученной диффузионной модели.
  • timestep (int) — Текущий дискретный шаг в цепочке диффузии.
  • sample (torch.Tensor) — Текущий экземпляр сэмпла, созданный процессом диффузии.
  • eta (float, необязательный, по умолчанию 0.0) — Вес шума для добавляемого шума на шаге диффузии. Значение 0 соответствует DDIM (детерминированный) а 1 соответствует DDPM (полностью стохастический).
  • use_clipped_model_output (bool, необязательный, по умолчанию False) — Если True, вычисляет «скорректированный» model_output из обрезанного предсказанного исходного образца. Это необходимо, так как предсказанный исходный образец обрезается до [-1, 1], когда self.config.clip_sample равно True. Если обрезка не выполнялась, «скорректированный» model_output совпадет с переданным на вход, и use_clipped_model_output не оказывает влияния.
  • generator (torch.Generator, необязательный) — Генератор случайных чисел для воспроизводимой выборки.
  • variance_noise (torch.Tensor, необязательный) — Альтернатива генерации шума с помощью generator путём прямого предоставления шума для дисперсии. Полезно для методов, таких как CycleDiffusion.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, возвращать ли DDIMSchedulerOutput или tuple.

Возвращает

DDIMSchedulerOutput или tuple

If return_dict is True, DDIMSchedulerOutput is returned, otherwise a tuple is returned where the first element is the sample tensor.

Предскажите образец из предыдущего шага времени, обращая SDE. Эта функция распространяет процесс диффузии от выходов обученной модели (чаще всего — предсказанного шума).

DDIMSchedulerOutput

класс diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput

< >

( 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 планировщика.

Update on GitHub