Diffusers documentation
DPMSolverMultistepScheduler
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
< source >( 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 toFalse) — 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
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Добавьте шум к исходным образцам в соответствии с расписанием шума на указанных временных шагах.
convert_model_output
< source >( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor
Преобразуйте выход модели в соответствующий тип, необходимый для алгоритма DPMSolver/DPMSolver++. DPM-Solver предназначен для дискретизации интеграла модели предсказания шума, а DPM-Solver++ — для дискретизации интеграла модели предсказания данных.
> Алгоритм и тип модели разделены. Вы можете использовать как DPMSolver, так и DPMSolver++ для моделей, предсказывающих шум, и моделей, предсказывающих данные.
dpm_solver_first_order_update
< source >( model_output: Tensor*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor
Один шаг для DPMSolver первого порядка (эквивалентен DDIM).
index_for_timestep
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Найдите индекс для заданного шага в расписании.
multistep_dpm_solver_second_order_update
< source >( 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
< source >( 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
< source >( sample: Tensor*args**kwargs ) → torch.Tensor
Обеспечивает совместимость с планировщиками, которым необходимо масштабировать входную модель денуазинга в зависимости от текущего шага.
set_begin_index
< source >( begin_index: int = 0 )
Устанавливает начальный индекс для планировщика. Эта функция должна выполняться из конвейера перед инференсом.
set_timesteps
< source >( 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будет проигнорирован.
Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).
шаг
< source >( 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
< source >( prev_sample: Tensor )
Базовый класс для результата функции step планировщика.