Diffusers documentation

DEISMultistepScheduler

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

DEISMultistepScheduler

Diffusion Exponential Integrator Sampler (DEIS) предложен в статье Fast Sampling of Diffusion Models with Exponential Integrator авторами Qinsheng Zhang и Yongxin Chen. DEISMultistepScheduler — это быстрый решатель высокого порядка для обыкновенных дифференциальных уравнений (ОДУ) диффузии.

Эта реализация модифицирует формулу полиномиальной аппроксимации в логарифмическом пространстве t вместо исходного линейного пространства t из статьи DEIS. Благодаря модификации коэффициенты для экспоненциального многошагового обновления имеют замкнутую форму, что позволяет отказаться от использования численного решателя.

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

За последние несколько лет модели диффузии~(DM) продемонстрировали значительный успех в генерации образцов высокого качества в задачах генеративного моделирования. Основным ограничением DM является их, как известно, медленная процедура выборки, которая обычно требует сотен или тысяч шагов дискретизации по времени для достижения желаемой точности. Наша цель — разработать быстрый метод выборки для DM, требующий значительно меньшего числа шагов при сохранении высокого качества образцов. Для этого мы систематически анализируем процедуру выборки в DM и выявляем ключевые факторы, влияющие на качество образцов, среди которых метод дискретизации является наиболее важным. Тщательно изучив обученный процесс диффузии, мы предлагаем Diffusion Exponential Integrator Sampler~(DEIS). Он основан на экспоненциальном интеграторе, предназначенном для дискретизации обыкновенных дифференциальных уравнений (ODE), и использует полунеарную структуру обученного процесса диффузии для снижения ошибки дискретизации. Предложенный метод может применяться к любым DM и позволяет генерировать образцы высокого качества всего за 10 шагов. В наших экспериментах генерация 50 тыс. изображений из CIFAR10 занимает около 3 минут на одном GPU A6000. Более того, используя предобученные DM напрямую, мы достигаем наилучшего результата по качеству выборки при ограниченном числе вычислений функции оценки~(NFE), например, FID 4.17 при 10 NFE, FID 3.37 и IS 9.74 всего при 15 NFE на CIFAR10. Код доступен по этой ссылке.

Советы

Рекомендуется устанавливать solver_order в 2 или 3, при этом solver_order=1 эквивалентно DDIMScheduler.

Поддерживается динамическое пороговое срабатывание из Imagen, а для диффузионных моделей в пиксельном пространстве можно установить thresholding=True, чтобы использовать динамическое пороговое срабатывание.

DEISMultistepScheduler

класс diffusers.DEISMultistepScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = 'linear'trained_betas: numpy.ndarray | list[float] | None = Nonesolver_order: int = 2prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['deis'] = 'deis'solver_type: typing.Literal['logrho'] = 'logrho'lower_order_final: bool = Trueuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0use_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential' )

Параметры

  • 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", по умолчанию "linear") — Расписание бета, отображающее диапазон бета в последовательность значений бета для шагов модели. Выберите одно из значений: linear, scaled_linear или squaredcos_cap_v2.
  • trained_betas (np.ndarray или list[float], необязательный) — Передайте массив betas непосредственно в конструктор, чтобы обойти beta_start и beta_end.
  • solver_order (int, по умолчанию 2) — порядок DEIS, который может быть 1 или 2 или 3. Рекомендуется использовать solver_order=2 для управляемого сэмплирования и solver_order=3 для безусловного сэмплирования.
  • prediction_type ("epsilon", "sample", "v_prediction", or "flow_prediction", defaults to "epsilon") — Prediction type of the scheduler function; can be epsilon (predicts the noise of the diffusion process), sample (directly predicts the noisy sample), v_prediction(see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper), orflow_prediction`.
  • thresholding (bool, по умолчанию False) — Использовать ли метод «динамического порогового значения». Этот метод не подходит для моделей диффузии в латентном пространстве, таких как Stable Diffusion.
  • dynamic_thresholding_ratio (float, по умолчанию 0.995) — Коэффициент для метода динамического порогового значения. Действительно только при thresholding=True.
  • sample_max_value (float, по умолчанию 1.0) — Пороговое значение для динамического порогового выделения. Действительно только при thresholding=True.
  • algorithm_type ("deis", по умолчанию "deis") — Тип алгоритма для решателя.
  • solver_type ("logrho", по умолчанию "logrho") — Тип решателя для DEIS.
  • lower_order_final (bool, по умолчанию True) — Использовать ли решатели низшего порядка на последних шагах. Действительно только для < 15 шагов инференса.
  • use_karras_sigmas (bool, необязательный, по умолчанию False) — Использовать ли Karras sigmas для определения размеров шагов в расписании шума в процессе выборки. Если True, значения сигм определяются согласно последовательности уровней шума {σi}.
  • use_exponential_sigmas (bool, необязательный, по умолчанию False) — Использовать ли экспоненциальные сигмы для размеров шагов в расписании шума во время процесса выборки.
  • use_beta_sigmas (bool, optional, defaults to False) — Whether to use beta sigmas for step sizes in the noise schedule during the sampling process. Refer to Beta Sampling is All You Need for more information.
  • use_flow_sigmas (bool, необязательный, по умолчанию False) — Использовать ли flow sigmas для определения размеров шагов в расписании шума во время процесса выборки.
  • flow_shift (float, необязательный, по умолчанию 1.0) — Параметр сдвига потока для моделей на основе потока.
  • timestep_spacing ("linspace", "leading", or "trailing", defaults to "linspace") — 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) — Смещение, добавляемое к шагам инференса, как требуется некоторыми семействами моделей.
  • use_dynamic_shifting (bool, по умолчанию False) — Использовать ли динамический сдвиг для расписания шума.
  • time_shift_type ("exponential", по умолчанию "exponential") — Тип применяемого сдвига во времени.

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

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

add_noise

< >

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

Параметры

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

Возвращает

torch.Tensor

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

Добавьте шум к исходным образцам в соответствии с расписанием шума на указанных временных шагах.

convert_model_output

< >

( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor

Параметры

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

Возвращает

torch.Tensor

Вывод сконвертированной модели.

Преобразуйте выход модели в соответствующий тип, необходимый для алгоритма DEIS.

deis_first_order_update

< >

( model_output: Tensor*argssample: Tensor = None**kwargs ) → torch.Tensor

Параметры

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

Возвращает

torch.Tensor

Тензор выборки на предыдущем шаге.

Один шаг для DEIS первого порядка (эквивалентен DDIM).

index_for_timestep

< >

( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int

Параметры

  • timestep (int или torch.Tensor) — Шаг, для которого нужно найти индекс.
  • schedule_timesteps (torch.Tensor, необязательный) — Расписание временных шагов, в котором выполняется поиск. Если None, используется self.timesteps.

Возвращает

int

Индекс шага времени в расписании.

Найдите индекс для заданного шага в расписании.

multistep_deis_second_order_update

< >

( model_output_list: list*argssample: Tensor = None**kwargs ) → torch.Tensor

Параметры

  • model_output_list (list[torch.Tensor]) — Прямые выходы обученной диффузионной модели для текущего и последующих шагов.
  • sample (torch.Tensor) — Текущий экземпляр сэмпла, созданный процессом диффузии.

Возвращает

torch.Tensor

Тензор выборки на предыдущем шаге.

Один шаг метода DEIS второго порядка с несколькими шагами.

multistep_deis_third_order_update

< >

( model_output_list: list*argssample: Tensor = None**kwargs ) → torch.Tensor

Параметры

  • model_output_list (list[torch.Tensor]) — Прямые выходы обученной диффузионной модели для текущего и последующих шагов.
  • sample (torch.Tensor) — Текущий экземпляр сэмпла, созданный процессом диффузии.

Возвращает

torch.Tensor

Тензор выборки на предыдущем шаге.

Один шаг метода DEIS третьего порядка с несколькими шагами.

scale_model_input

< >

( sample: Tensor*args**kwargs ) → torch.Tensor

Параметры

  • sample (torch.Tensor) — Входной образец.

Возвращает

torch.Tensor

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

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

set_begin_index

< >

( begin_index: int = 0 )

Параметры

  • begin_index (int, по умолчанию 0) — Начальный индекс для планировщика.

Устанавливает начальный индекс для планировщика. Эта функция должна выполняться из конвейера перед инференсом.

set_timesteps

< >

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

Параметры

  • num_inference_steps (int) — Количество шагов диффузии, используемых при генерации образцов с помощью предобученной модели.
  • device (str или torch.device, необязательный) — Устройство, на которое следует переместить шаги. Если None, шаги не перемещаются.
  • mu (float, необязательный) — Параметр mu для динамического сдвига. Используется только при use_dynamic_shifting=True и time_shift_type="exponential".

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

шаг

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorreturn_dict: bool = True ) → SchedulerOutput or tuple

Параметры

  • model_output (torch.Tensor) — Прямой вывод из обученной диффузионной модели.
  • timestep (int или torch.Tensor) — Текущий дискретный шаг в цепочке диффузии.
  • sample (torch.Tensor) — Текущий экземпляр сэмпла, созданный процессом диффузии.
  • return_dict (bool, по умолчанию True) — Определяет, возвращать ли SchedulerOutput или tuple.

Возвращает

SchedulerOutput или tuple

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

Предскажите образец из предыдущего шага времени, инвертируя SDE. Эта функция распространяет образец с помощью многошагового DEIS.

SchedulerOutput

класс diffusers.schedulers.scheduling_utils.SchedulerOutput

< >

( prev_sample: Tensor )

Параметры

  • prev_sample (torch.Tensor формы (batch_size, num_channels, height, width) для изображений) — Вычисленная выборка (x_{t-1}) предыдущего шага. prev_sample следует использовать как следующий вход модели в цикле шумоподавления.

Базовый класс для результата функции step планировщика.

Update on GitHub