Diffusers documentation

DPMSolverMultistepScheduler

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

DPMSolverMultistepScheduler

DPMSolverMultistepScheduler — это многошаговый планировщик из статей DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps и DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models, авторов Cheng Lu, Yuhao Zhou, Fan Bao, Jianfei Chen, Chongxuan Li и Jun Zhu.

DPMSolver (и улучшенная версия DPMSolver++) — это быстрый специализированный решатель высокого порядка для диффузионных ОДУ с гарантией порядка сходимости. На практике сэмплирование с помощью DPMSolver всего за 20 шагов позволяет получать образцы высокого качества, а при 10 шагах качество остаётся достаточно хорошим.

Советы

Рекомендуется устанавливать solver_order в 2 для guide sampling и solver_order=3 для unconditional sampling.

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

Поддерживается также SDE-вариант DPMSolver и DPM-Solver++, но только для решателей первого и второго порядка. Это быстрый SDE-решатель для обратного диффузионного SDE. Рекомендуется использовать решатель второго порядка sde-dpmsolver++.

DPMSolverMultistepScheduler

класс diffusers.DPMSolverMultistepScheduler

< >

( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = '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['dpmsolver', 'dpmsolver++', 'sde-dpmsolver', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_lu_lambdas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'lambda_min_clipped: float = -infvariance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = Nonetimestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0rescale_betas_zero_snr: bool = Falseuse_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") — Расписание бета, отображающее диапазон значений бета в последовательность бета для шагов модели.
  • trained_betas (np.ndarray, необязательный) — Передайте массив betas непосредственно в конструктор, чтобы обойти beta_start и beta_end.
  • solver_order (int, по умолчанию 2) — порядок DPMSolver, который может быть 1 или 2 или 3. Рекомендуется использовать solver_order=2 для управляемого сэмплирования, а solver_order=3 — для безусловного сэмплирования.
  • prediction_type ("epsilon", "sample", "v_prediction" или "flow_prediction", по умолчанию "epsilon") — Тип предсказания функции планировщика. epsilon предсказывает шум диффузионного процесса, sample напрямую предсказывает зашумленный образец, v_prediction предсказывает скорость (см. раздел 2.4 статьи Imagen Video), а flow_prediction предсказывает поток.
  • thresholding (bool, по умолчанию False) — Использовать ли метод «динамического порогового значения». Этот метод не подходит для моделей диффузии в латентном пространстве, таких как Stable Diffusion.
  • dynamic_thresholding_ratio (float, по умолчанию 0.995) — Коэффициент для метода динамического порогового значения. Действительно только при thresholding=True.
  • sample_max_value (float, по умолчанию 1.0) — Пороговое значение для динамического порогового срабатывания. Действительно только при thresholding=True и algorithm_type="dpmsolver++".
  • algorithm_type ("dpmsolver", "dpmsolver++", "sde-dpmsolver" или "sde-dpmsolver++", по умолчанию "dpmsolver++") — Тип алгоритма для решателя. Тип dpmsolver реализует алгоритмы из статьи DPMSolver, а тип dpmsolver++ реализует алгоритмы из статьи DPMSolver++. Рекомендуется использовать dpmsolver++ или sde-dpmsolver++ с solver_order=2 для направленного сэмплирования, как в Stable Diffusion.
  • solver_type ("midpoint" или "heun", по умолчанию "midpoint") — Тип решателя для решателя второго порядка. Тип решателя незначительно влияет на качество выборки, особенно при малом количестве шагов. Рекомендуется использовать решатели midpoint.
  • lower_order_final (bool, по умолчанию True) — Использовать ли решатели низшего порядка на последних шагах. Действительно только для < 15 шагов инференса. Это может стабилизировать сэмплирование DPMSolver для шагов < 15, особенно для шагов <= 10.
  • euler_at_final (bool, по умолчанию False) — Использовать ли метод Эйлера на последнем шаге. Это компромисс между численной стабильностью и детализацией. Это может стабилизировать сэмплинг SDE-варианта DPMSolver при малом количестве шагов инференса, но иногда приводит к размыванию.
  • 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_lu_lambdas (bool, необязательный, по умолчанию False) — Использовать ли uniform-logSNR для шагов, предложенный в DPM-Solver Lu, в расписании шума во время процесса выборки. Если True, сигмы и временные шаги определяются согласно последовательности lambda(t).
  • use_flow_sigmas (bool, необязательный, по умолчанию False) — Использовать ли flow sigmas для определения размеров шагов в расписании шума во время процесса выборки.
  • flow_shift (float, необязательный, по умолчанию 1.0) — Значение сдвига для расписания временных шагов при flow matching.
  • final_sigmas_type ("zero" или "sigma_min", необязательный, по умолчанию "zero") — Значение конечного sigma для расписания шума в процессе выборки. Если указано "sigma_min", конечное значение sigma совпадает с последним sigma в расписании обучения. Если указано "zero", конечное значение sigma устанавливается в 0.
  • lambda_min_clipped (float, по умолчанию -inf) — Порог обрезки минимального значения lambda(t) для численной устойчивости. Это критически важно для косинусной (squaredcos_cap_v2) схемы шума.
  • variance_type ("learned" или "learned_range", необязательный) — Установите значение "learned" или "learned_range" для диффузионных моделей, которые предсказывают дисперсию. Если параметр задан, выход модели содержит предсказанную гауссову дисперсию.
  • 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) — Смещение, добавляемое к шагам инференса, как требуется некоторыми семействами моделей.
  • rescale_betas_zero_snr (bool, по умолчанию False) — Определяет, следует ли перемасштабировать беты для нулевого конечного SNR. Это позволяет модели генерировать очень яркие и тёмкие образцы, а не ограничиваться образцами со средней яркостью. Непосредственно связано с --offset_noise.
  • use_dynamic_shifting (bool, по умолчанию False) — Использовать ли динамический сдвиг для расписания шагов времени.
  • time_shift_type ("exponential", по умолчанию "exponential") — Тип сдвига времени, применяемый при использовании динамического сдвига.

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

Эта модель наследуется от 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: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

Параметры

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

Возвращает

torch.Tensor

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

Преобразуйте выход модели в соответствующий тип, необходимый для алгоритма DPMSolver/DPMSolver++. DPM-Solver предназначен для дискретизации интеграла модели предсказания шума, а DPM-Solver++ — для дискретизации интеграла модели предсказания данных.

> Алгоритм и тип модели разделены. Вы можете использовать как DPMSolver, так и DPMSolver++ для моделей, предсказывающих шум, и моделей, предсказывающих данные.

dpm_solver_first_order_update

< >

( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

Параметры

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

Возвращает

torch.Tensor

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

Один шаг для DPMSolver первого порядка (эквивалентен 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_dpm_solver_second_order_update

< >

( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

Параметры

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

Возвращает

torch.Tensor

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

Один шаг для двухшагового метода DPMSolver второго порядка.

multistep_dpm_solver_third_order_update

< >

( model_output_list: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor

Параметры

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

Возвращает

torch.Tensor

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

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

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: int = Nonedevice: typing.Union[str, torch.device] = Nonemu: float | None = Nonetimesteps: list[int] | None = None )

Параметры

  • num_inference_steps (int, необязательный) — Количество шагов диффузии, используемое при генерации образцов с помощью предобученной модели.
  • device (str или torch.device, необязательный) — Устройство, на которое следует переместить шаги. Если None, шаги не перемещаются.
  • mu (float, необязательный) — Показатель степени для динамического сдвига времени. Требует use_dynamic_shifting и значения time_shift_type, равного "exponential"; при передаче flow_shift устанавливается в exp(mu).
  • timesteps (list[int], необязательный) — Пользовательские шаги (timesteps) для поддержки произвольного расписания. Если None, шаги будут сгенерированы на основе атрибута timestep_spacing. Если передан timesteps, num_inference_steps и sigmas должны быть None, а атрибут timestep_spacing будет проигнорирован.

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

шаг

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple

Параметры

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

Возвращает

SchedulerOutput или tuple

Если return_dict равно True, возвращается SchedulerOutput, иначе возвращается кортеж, первым элементом которого является тензор выборки.

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

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