Diffusers documentation

DPMSolverSinglestepScheduler

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

DPMSolverSinglestepScheduler

DPMSolverSinglestepScheduler — это одношаговый планировщик из статей 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 шагах качество остаётся достаточно хорошим.

Оригинальная реализация доступна по адресу LuChengTHU/dpm-solver.

Советы

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

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

DPMSolverSinglestepScheduler

класс diffusers.DPMSolverSinglestepScheduler

< >

( 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['dpmsolver', 'dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: 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']] = Noneuse_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) — Порядок DPMSolver, который может быть 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="dpmsolver++".
  • algorithm_type ("dpmsolver", "dpmsolver++" или "sde-dpmsolver++", по умолчанию "dpmsolver++") — Тип алгоритма для решателя; может быть dpmsolver, dpmsolver++ или sde-dpmsolver++. Тип dpmsolver реализует алгоритмы из статьи DPMSolver, а тип dpmsolver++ реализует алгоритмы из статьи DPMSolver++. Рекомендуется использовать dpmsolver++ или sde-dpmsolver++ с solver_order=2 для направленного сэмплирования, как в Stable Diffusion.
  • solver_type ("midpoint" или "heun", по умолчанию "midpoint") — Тип решателя для решателя второго порядка; может быть midpoint или heun. Тип решателя незначительно влияет на качество выборки, особенно при малом количестве шагов. Рекомендуется использовать решатели midpoint.
  • lower_order_final (bool, по умолчанию False) — Использовать ли решатели низшего порядка на последних шагах. Действительно только для < 15 шагов инференса. Это может стабилизировать сэмплирование DPMSolver для шагов < 15, особенно для шагов <= 10.
  • 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) — Параметр сдвига потока для моделей на основе потока.
  • 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" для диффузионных моделей, которые предсказывают дисперсию. Если параметр задан, выход модели содержит предсказанную гауссову дисперсию.
  • use_dynamic_shifting (bool, по умолчанию False) — Использовать ли динамический сдвиг для расписания шума.
  • time_shift_type ("exponential", по умолчанию "exponential") — Тип применяемого сдвига во времени.

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

Эта модель наследуется от 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) — Прямой вывод из обученной диффузионной модели.
  • timestep (int) — Текущий дискретный шаг в цепочке диффузии.
  • prev_timestep (int) — Предыдущий дискретный шаг времени в цепочке диффузии.
  • sample (torch.Tensor) — Текущий экземпляр сэмпла, созданный процессом диффузии.
  • noise (torch.Tensor, необязательный) — Случайный шум, используемый стохастическими (sde-*) вариантами решателя. Обязателен, если algorithm_type установлен в одно из этих значений, и не используется в противном случае.

Возвращает

torch.Tensor

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

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

get_order_list

< >

( num_inference_steps: int ) → list[int]

Параметры

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

Возвращает

list[int]

Список порядков решателя для каждого шага по времени.

Вычисляет порядок решателя на каждом шаге времени.

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

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

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

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, используется стандартная стратегия равномерного распределения шагов. Если передан параметр timesteps, num_inference_steps должен быть None.

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

singlestep_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]) — Прямые выходы обученной диффузионной модели для текущего и последующих шагов.
  • timestep (int) — Текущий и последний дискретный шаг в цепочке диффузии.
  • prev_timestep (int) — Предыдущий дискретный шаг времени в цепочке диффузии.
  • sample (torch.Tensor) — Текущий экземпляр сэмпла, созданный процессом диффузии.
  • noise (torch.Tensor, необязательный) — Случайный шум, используемый стохастическими (sde-*) вариантами решателя. Обязателен, если algorithm_type установлен в одно из этих значений, и не используется в противном случае.

Возвращает

torch.Tensor

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

Один шаг для одношагового DPMSolver второго порядка, вычисляющего решение в момент времени prev_timestep из момента времени timestep_list[-2].

singlestep_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]) — Прямые выходы обученной диффузионной модели для текущего и последующих шагов.
  • timestep (int) — Текущий и последний дискретный шаг в цепочке диффузии.
  • prev_timestep (int) — Предыдущий дискретный шаг времени в цепочке диффузии.
  • sample (torch.Tensor) — Текущий экземпляр сэмпла, созданный процессом диффузии.
  • noise (torch.Tensor, необязательный) — Случайный шум, используемый стохастическими (sde-*) вариантами решателя. Обязателен, если algorithm_type установлен в одно из этих значений, и не используется в противном случае.

Возвращает

torch.Tensor

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

Один шаг для одношагового DPMSolver третьего порядка, вычисляющего решение в момент времени prev_timestep из момента времени timestep_list[-3].

singlestep_dpm_solver_update

< >

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

Параметры

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

Возвращает

torch.Tensor

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

Один шаг для одношагового DPMSolver.

шаг

< >

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

Параметры

  • model_output (torch.Tensor) — Прямой вывод из обученной диффузионной модели.
  • timestep (int или torch.Tensor) — Текущий дискретный шаг в цепочке диффузии.
  • sample (torch.Tensor) — Текущий экземпляр сэмпла, созданный процессом диффузии.
  • generator (torch.Generator, необязательный) — Генератор случайных чисел для стохастического отбора.
  • 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. Эта функция распространяет образец с помощью singlestep 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