Diffusers documentation
DPMSolverSinglestepScheduler
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
< source >( 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 beepsilon(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 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_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
< 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
Параметры
- 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
< source >( num_inference_steps: int ) → list[int]
Вычисляет порядок решателя на каждом шаге времени.
index_for_timestep
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Найдите индекс для заданного шага в расписании.
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, используется стандартная стратегия равномерного распределения шагов. Если передан параметрtimesteps,num_inference_stepsдолжен бытьNone.
Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).
singlestep_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]) — Прямые выходы обученной диффузионной модели для текущего и последующих шагов. - 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
< 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]) — Прямые выходы обученной диффузионной модели для текущего и последующих шагов. - 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
< source >( 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.
шаг
< source >( 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
< source >( prev_sample: Tensor )
Базовый класс для результата функции step планировщика.