Buckets:
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]]
diffusers.DEISMultistepScheduler[[diffusers.DEISMultistepScheduler]]
diffusers.DEISMultistepScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.0001, beta_end: float = 0.02, beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = 'linear', trained_betas: numpy.ndarray | list[float] | None = None, solver_order: int = 2, prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon', thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, sample_max_value: float = 1.0, algorithm_type: typing.Literal['deis'] = 'deis', solver_type: typing.Literal['logrho'] = 'logrho', lower_order_final: bool = True, use_karras_sigmas: bool = False, use_exponential_sigmas: bool = False, use_beta_sigmas: bool = False, use_flow_sigmas: bool = False, flow_shift: float = 1.0, timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace', steps_offset: int = 0, use_dynamic_shifting: bool = False, time_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], необязательный) : Передайте массив бета напрямую в конструктор, чтобы обойти 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) : Использовать ли сигмы Карраса для размеров шагов в расписании шума во время процесса выборки. Если 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_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[[diffusers.DEISMultistepScheduler.add_noise]]
add_noise(original_samples: Tensor, noise: Tensor, timesteps: IntTensor)
Параметры:
original_samples (torch.Tensor) : исходные образцы без шума.
noise (torch.Tensor) : Шум, который нужно добавить к образцам.
timesteps (torch.IntTensor) : Шаги, на которых следует добавлять шум к образцам.
Возвращает: torch.Tensor
Шумные образцы.
Добавьте шум к исходным образцам в соответствии с расписанием шума на указанных временных шагах.
convert_model_output[[diffusers.DEISMultistepScheduler.convert_model_output]]
convert_model_output(model_output: Tensor, *args, sample: Tensor = None, **kwargs)
Параметры:
model_output (torch.Tensor) : Прямой вывод из обученной диффузионной модели.
timestep (int) : Текущий дискретный шаг времени в цепочке диффузии.
sample (torch.Tensor) : Текущая инстанция сэмпла, созданная процессом диффузии.
Возвращает: torch.Tensor
Вывод сконвертированной модели.
Преобразуйте выход модели в соответствующий тип, необходимый для алгоритма DEIS.
deis_first_order_update[[diffusers.DEISMultistepScheduler.deis_first_order_update]]
deis_first_order_update(model_output: Tensor, *args, sample: Tensor = None, **kwargs)
Параметры:
model_output (torch.Tensor) : Прямой вывод из обученной диффузионной модели.
timestep (int) : Текущий дискретный шаг времени в цепочке диффузии.
prev_timestep (int) : Предыдущий дискретный шаг времени в цепочке диффузии.
sample (torch.Tensor) : Текущая инстанция сэмпла, созданная процессом диффузии.
Возвращает: torch.Tensor
Тензор выборки на предыдущем шаге.
Один шаг для DEIS первого порядка (эквивалентен DDIM).
index_for_timestep[[diffusers.DEISMultistepScheduler.index_for_timestep]]
index_for_timestep(timestep: typing.Union[int, torch.Tensor], schedule_timesteps: typing.Optional[torch.Tensor] = None)
Параметры:
timestep (int или torch.Tensor) : Шаг времени, для которого нужно найти индекс.
schedule_timesteps (torch.Tensor, необязательный) : Расписание временных шагов, в котором выполняется поиск. Если None, используется self.timesteps.
Возвращает: int
Индекс шага времени в расписании.
Найдите индекс для заданного шага в расписании.
multistep_deis_second_order_update[[diffusers.DEISMultistepScheduler.multistep_deis_second_order_update]]
multistep_deis_second_order_update(model_output_list: list[torch.Tensor], *args, sample: Tensor = None, **kwargs)
Параметры:
model_output_list (list[torch.Tensor]) : Прямые выходы обученной диффузионной модели на текущих и последующих временных шагах.
sample (torch.Tensor) : Текущая инстанция сэмпла, созданная процессом диффузии.
Возвращает: torch.Tensor
Тензор выборки на предыдущем шаге.
Один шаг метода DEIS второго порядка с несколькими шагами.
multistep_deis_third_order_update[[diffusers.DEISMultistepScheduler.multistep_deis_third_order_update]]
multistep_deis_third_order_update(model_output_list: list[torch.Tensor], *args, sample: Tensor = None, **kwargs)
Параметры:
model_output_list (list[torch.Tensor]) : Прямые выходы обученной диффузионной модели на текущих и последующих временных шагах.
sample (torch.Tensor) : Текущая инстанция сэмпла, созданная процессом диффузии.
Возвращает: torch.Tensor
Тензор выборки на предыдущем шаге.
Один шаг метода DEIS третьего порядка с несколькими шагами.
scale_model_input[[diffusers.DEISMultistepScheduler.scale_model_input]]
scale_model_input(sample: Tensor, *args, **kwargs)
Параметры:
sample (torch.Tensor) : Входной образец.
Возвращает: torch.Tensor
Масштабированный входной образец.
Обеспечивает совместимость с планировщиками, которым необходимо масштабировать входную модель денуазинга в зависимости от текущего шага.
set_begin_index[[diffusers.DEISMultistepScheduler.set_begin_index]]
set_begin_index(begin_index: int = 0)
Параметры:
begin_index (int, по умолчанию 0) : Начальный индекс для планировщика.
Устанавливает начальный индекс для планировщика. Эта функция должна выполняться из конвейера перед инференсом.
set_timesteps[[diffusers.DEISMultistepScheduler.set_timesteps]]
set_timesteps(num_inference_steps: int, device: typing.Union[str, torch.device] = None, mu: float | None = None)
Параметры:
num_inference_steps (int) : Количество шагов диффузии, используемое при генерации образцов с помощью предобученной модели.
device (str или torch.device, необязательный) : Устройство, на которое следует переместить шаги. Если None, шаги не перемещаются.
mu (float, optional) : Параметр mu для динамического сдвига. Используется только при use_dynamic_shifting=True и time_shift_type="exponential".
Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).
шаг[[diffusers.DEISMultistepScheduler.step]]
step(model_output: Tensor, timestep: typing.Union[int, torch.Tensor], sample: Tensor, return_dict: bool = True)
Параметры:
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]]
diffusers.schedulers.scheduling_utils.SchedulerOutput[[diffusers.schedulers.scheduling_utils.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 планировщика.
Xet Storage Details
- Size:
- 22.3 kB
- Xet hash:
- 3c63a23e28c7de3a1ad3b0fa8be5f44a5b29fd92ab0c768d90bdd04bcc173a8d
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.