Diffusers documentation

UniPCMultistepScheduler

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

UniPCMultistepScheduler

UniPCMultistepScheduler — это фреймворк, не требующий обучения, предназначенный для быстрого сэмплирования диффузионных моделей. Он был представлен в статье UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models авторами Wenliang Zhao, Lujia Bai, Yongming Rao, Jie Zhou, Jiwen Lu.

Он состоит из корректора (UniC) и предиктора (UniP), которые имеют единую аналитическую форму и поддерживают произвольный порядок. UniPC по своей конструкции не зависит от модели, поддерживая DPM в пиксельном/латентном пространстве при безусловном/условном сэмплировании. Его также можно применять как к моделям предсказания шума, так и к моделям предсказания данных. Корректор UniC можно также применять после любых готовых решателей для повышения порядка точности.

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

Вероятностные диффузионные модели (DPM) продемонстрировали очень перспективные возможности в синтезе изображений высокого разрешения. Однако выборка из предварительно обученной DPM требует много времени из-за многократных вычислений сети удаления шума, что делает всё более важной задачу ускорения выборки в DPM. Несмотря на недавний прогресс в разработке быстрых алгоритмов выборки, существующие методы по-прежнему не способны генерировать удовлетворительные изображения во многих приложениях, где предпочтительно меньшее количество шагов (например, <10). В данной статье мы разработали универсальный корректор (UniC), который можно применять после любого существующего алгоритма выборки DPM для повышения порядка точности без дополнительных вычислений модели, а также вывели универсальный предиктор (UniP), поддерживающий произвольный порядок, как побочный результат. Сочетая UniP и UniC, мы предлагаем универсальный предиктор-корректор, названный UniPC, для быстрой выборки в DPM, который имеет единую аналитическую форму для любого порядка и может значительно улучшить качество выборки по сравнению с предыдущими методами, особенно при крайне малом количестве шагов. Мы оцениваем наши методы на основе обширных экспериментов, включающих как безусловную, так и условную выборку с использованием DPM в пиксельном и латентном пространствах. Наш UniPC достигает 3.87 FID на CIFAR10 (безусловная) и 7.51 FID на ImageNet 256×256 (условная) всего за 10 вычислений функции. Код доступен по этой ссылке.

Советы

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

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

UniPCMultistepScheduler

класс diffusers.UniPCMultistepScheduler

< >

( 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.0predict_x0: bool = Truesolver_type: typing.Literal['bh1', 'bh2'] = 'bh2'lower_order_final: bool = Truedisable_corrector: list = []solver_p: SchedulerMixin = Noneuse_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 = 0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'rescale_betas_zero_snr: bool = Falseuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential'sigma_min: float | None = Nonesigma_max: bool | None = Noneshift_terminal: bool | None = None )

Параметры

  • 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, необязательный) — Передайте массив betas непосредственно в конструктор, чтобы обойти beta_start и beta_end.
  • solver_order (int, по умолчанию 2) — Порядок UniPC, который может быть любым положительным целым числом. Эффективный порядок точности составляет solver_order + 1 благодаря UniC. Рекомендуется использовать solver_order=2 для управляемого сэмплирования и solver_order=3 для неусловного сэмплирования.
  • prediction_type ("epsilon", "sample", "v_prediction", or "flow_prediction", defaults to "epsilon", optional) — 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 и predict_x0=True.
  • predict_x0 (bool, по умолчанию True) — Использовать ли алгоритм обновления для предсказанного x0.
  • solver_type ("bh1" или "bh2", по умолчанию "bh2") — Тип солвера для UniPC. Рекомендуется использовать bh1 для безусловного сэмплирования, когда количество шагов < 10, а в остальных случаях — bh2.
  • lower_order_final (bool, по умолчанию True) — Использовать ли решатели низшего порядка на последних шагах. Действительно только для < 15 шагов инференса. Это может стабилизировать сэмплирование DPMSolver для шагов < 15, особенно для шагов <= 10.
  • disable_corrector (list, по умолчанию []) — Определяет, на каких шагах отключать корректор для смягчения рассогласования между epsilon_theta(x_t, c) и epsilon_theta(x_t^c, c), которое может влиять на сходимость при большом масштабе руководства. Как правило, корректор отключается на первых нескольких шагах.
  • solver_p (SchedulerMixin, по умолчанию None) — любой другой планировщик, при указании которого алгоритм становится solver_p + UniC.
  • 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 для определения размеров шагов в расписании шума во время процесса выборки.
  • 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) — Смещение, добавляемое к шагам инференса, как требуется некоторыми семействами моделей.
  • final_sigmas_type ("zero" или "sigma_min", по умолчанию "zero") — Значение финального sigma для расписания шума в процессе сэмплирования. Если указано "sigma_min", финальное sigma совпадает с последним sigma в расписании обучения. Если указано zero, финальное sigma устанавливается в 0.
  • rescale_betas_zero_snr (bool, по умолчанию False) — Определяет, следует ли перемасштабировать беты для нулевого конечного SNR. Это позволяет модели генерировать очень яркие и тёмкие образцы, а не ограничиваться образцами со средней яркостью. Непосредственно связано с --offset_noise.

UniPCMultistepScheduler — это фреймворк, не требующий обучения, предназначенный для быстрого сэмплирования диффузионных моделей.

Эта модель наследуется от 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

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

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

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_uni_c_bh_update

< >

( this_model_output: Tensor*argslast_sample: Tensor = Nonethis_sample: Tensor = Noneorder: int = None**kwargs ) → torch.Tensor

Параметры

  • this_model_output (torch.Tensor) — Выход модели в точке x_t.
  • this_timestep (int) — Текущий шаг t.
  • last_sample (torch.Tensor) — Сгенерированный образец перед последним предиктором x_{t-1}.
  • this_sample (torch.Tensor) — Сгенерированный образец после последнего предиктора x_{t}.
  • order (int) — Значение p для UniC-p на данном шаге. Эффективный порядок точности должен быть равен order + 1.

Возвращает

torch.Tensor

Скорректированный тензор образца на текущем шаге времени.

Один шаг для UniC (версия B(h)).

multistep_uni_p_bh_update

< >

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

Параметры

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

Возвращает

torch.Tensor

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

Один шаг для UniP (версия B(h)). В качестве альтернативы, если указано, используется self.solver_p.

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

Параметры

  • num_inference_steps (int) — Количество шагов диффузии, используемых при генерации образцов с помощью предобученной модели.
  • device (str или torch.device, необязательный) — Устройство, на которое следует переместить шаги. Если None, шаги не перемещаются.
  • sigmas (List[float], необязательный) — Пользовательские значения сигм, используемые для каждого шага диффузии. Если None, сигмы вычисляются автоматически.
  • mu (float, необязательный) — Необязательный параметр mu для динамического сдвига при использовании типа экспоненциального сдвига во времени.

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

шаг

< >

( 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. Эта функция распространяет образец с помощью многошагового UniPC.

stretch_shift_to_terminal

< >

( t: Tensor ) → torch.Tensor

Параметры

  • t (torch.Tensor) — Тензор временных шагов, которые нужно растянуть и сдвинуть.

Возвращает

torch.Tensor

Тензор скорректированных шагов, у которого последнее значение равно self.config.shift_terminal.

Растягивает и сдвигает расписание временных шагов, чтобы обеспечить его завершение на заданном значении конфигурации shift_terminal.

Справочник: https://github.com/Lightricks/LTX-Video/blob/a01a171f8fe3d99dce2728d60a73fecf4d4238ae/ltx_video/schedulers/rf.py#L51

time_shift

< >

( mu: floatsigma: floatt: Tensor ) → torch.Tensor

Параметры

  • mu (float) — Параметр mu для сдвига времени.
  • sigma (float) — Параметр sigma для сдвига времени.
  • t (torch.Tensor) — Входные временные шаги.

Возвращает

torch.Tensor

Сдвинутые по времени шаги.

Примените сдвиг по времени к сигмам.

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