Diffusers documentation
Многошаговый планировщик для модели латентной консистентности
Многошаговый планировщик для модели латентной консистентности
Обзор
Многошаговый и одношаговый планировщик (алгоритм 3), представленный вместе с моделями латентной согласованности в статье Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference авторов Simian Luo, Yiqin Tan, Longbo Huang, Jian Li и Hang Zhao. Этот планировщик должен уметь генерировать качественные образцы из LatentConsistencyModelPipeline за 1–8 шагов.
LCMScheduler
класс diffusers.LCMScheduler
< source >( num_train_timesteps: int = 1000beta_start: float = 0.00085beta_end: float = 0.012beta_schedule: str = 'scaled_linear'trained_betas: numpy.ndarray | list[float] | None = Noneoriginal_inference_steps: int = 50clip_sample: bool = Falseclip_sample_range: float = 1.0set_alpha_to_one: bool = Truesteps_offset: int = 0prediction_type: str = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0timestep_spacing: str = 'leading'timestep_scaling: float = 10.0rescale_betas_zero_snr: bool = False )
Параметры
- num_train_timesteps (
int, по умолчанию1000) — Количество шагов диффузии для обучения модели. - beta_start (
float, по умолчанию0.00085) — Начальное значениеbetaдля вывода. - beta_end (
float, по умолчанию0.012) — Конечное значениеbeta. - beta_schedule (
str, по умолчанию"scaled_linear") — Расписание бета, отображение диапазона бета в последовательность бета для шагов модели. Выберите одно из значений:linear,scaled_linearилиsquaredcos_cap_v2. - trained_betas (
np.ndarrayилиlist[float], необязательный) — Передайте массив betas непосредственно в конструктор, чтобы обойтиbeta_startиbeta_end. - original_inference_steps (
int, по умолчанию50) — Количество шагов инференса по умолчанию, используемое для создания линейно распределённого расписания временных шагов, из которого в итоге мы берёмnum_inference_stepsравномерно распределённых временных шагов для формирования итогового расписания. - clip_sample (
bool, по умолчаниюFalse) — Обрезает предсказанную выборку для численной стабильности. - clip_sample_range (
float, по умолчанию1.0) — Максимальная величина для обрезки выборок. Действительно только приclip_sample=True. - set_alpha_to_one (
bool, по умолчаниюTrue) — Каждый шаг диффузии использует значение произведения альф на данном шаге и на предыдущем. Для последнего шага предыдущего альфа-значения не существует. Если этот параметр установлен вTrue, произведение предыдущей альфы фиксируется в1, в противном случае используется значение альфы на шаге 0. - steps_offset (
int, по умолчанию0) — Смещение, добавляемое к шагам инференса, как требуется некоторыми семействами моделей. - prediction_type (
str, defaults to"epsilon") — Prediction type of the scheduler function; can beepsilon(predicts the noise of the diffusion process),sample(directly predicts the noisy sample) orv_prediction` (see section 2.4 of Imagen Video paper). - thresholding (
bool, по умолчаниюFalse) — Использовать ли метод «динамического порогового значения». Этот метод не подходит для моделей диффузии в латентном пространстве, таких как Stable Diffusion. - dynamic_thresholding_ratio (
float, по умолчанию0.995) — Коэффициент для метода динамического порогового значения. Действительно только приthresholding=True. - sample_max_value (
float, по умолчанию1.0) — Пороговое значение для динамического порогового выделения. Действительно только приthresholding=True. - timestep_spacing (
str, defaults to"leading") — 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. - timestep_scaling (
float, по умолчанию10.0) — коэффициент, на который умножаются шаги времени при вычислении граничных условий модели согласованностиc_skipиc_out. Увеличение этого значения снижает ошибку аппроксимации (хотя при значении по умолчанию10.0ошибка аппроксимации уже достаточно мала). - rescale_betas_zero_snr (
bool, по умолчаниюFalse) — Определяет, следует ли перемасштабировать беты для нулевого конечного SNR. Это позволяет модели генерировать очень яркие и тёмкие образцы, а не ограничиваться образцами со средней яркостью. Непосредственно связано с--offset_noise.
LCMScheduler расширяет процедуру денойзинга, предложенную в вероятностных моделях диффузионного денойзинга (DDPM), с помощью не-марковского руководства.
Эта модель наследуется от SchedulerMixin и ConfigMixin. ~ConfigMixin отвечает за сохранение всех атрибутов конфигурации, передаваемых в функцию __init__ планировщика, например num_train_timesteps. К ним можно обратиться через scheduler.config.num_train_timesteps. SchedulerMixin предоставляет общие функции загрузки и сохранения с помощью функций SchedulerMixin.save_pretrained() и from_pretrained().
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Добавьте шум к исходным образцам в соответствии с величиной шума на каждом шаге (это процесс прямой диффузии).
get_scalings_for_boundary_condition_discrete
< source >( timestep: int ) → tuple[float, float]
Вычисляет масштабы граничных условий (c_skip и c_out) для заданного дискретного шага времени, как это используется в модели Latent Consistency Model.
get_velocity
< source >( sample: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Вычислите предсказание скорости из выборки и шума согласно формуле скорости.
index_for_timestep
< source >( timestep: typing.Union[float, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Параметры
- timestep (
floatилиtorch.Tensor) — Значение шага, которое нужно найти в расписании. - schedule_timesteps (
torch.Tensor, необязательный) — Расписание временных шагов, в котором выполняется поиск. ЕслиNone, используетсяself.timesteps.
Возвращает
int
Индекс шага времени в расписании. Для самого первого шага возвращает второй индекс, если существует несколько совпадений, чтобы избежать пропуска сигмы при начале с середины расписания (например, для image-to-image).
Найдите индекс заданного шага времени в расписании шагов времени.
previous_timestep
< source >( timestep ) → int or torch.Tensor
Вычислите предыдущий шаг временной шкалы в цепочке диффузии.
scale_model_input
< source >( sample: Tensortimestep: int | None = None ) → torch.Tensor
Обеспечивает совместимость с планировщиками, которым необходимо масштабировать входную модель денуазинга в зависимости от текущего шага.
set_begin_index
< source >( begin_index: int = 0 )
Устанавливает начальный индекс для планировщика. Эта функция должна выполняться из конвейера перед инференсом.
set_timesteps
< source >( num_inference_steps: int | None = Nonedevice: typing.Union[str, torch.device, NoneType] = Noneoriginal_inference_steps: int | None = Nonetimesteps: list[int] | None = Nonestrength: float = 1.0 ) → None
Параметры
- num_inference_steps (
int, необязательный) — Количество шагов диффузии, используемое при генерации образцов с помощью предобученной модели. Если используется,timestepsдолжно бытьNone. - device (
strилиtorch.device, необязательный) — Устройство, на которое следует переместить шаги. ЕслиNone, шаги не перемещаются. - original_inference_steps (
int, необязательный) — Исходное количество шагов инференса, которое будет использовано для создания линейно распределённого расписания временных шагов (отличного от стандартной реализацииdiffusers). Затем из этого расписания будут взятыnum_inference_stepsвременных шагов, равномерно распределённых по индексам, и они будут использованы в качестве итогового расписания временных шагов. Если значение не задано, по умолчанию используется атрибутoriginal_inference_steps. - timesteps (
list[int], необязательный) — Пользовательские шаги (timesteps), используемые для поддержки произвольного интервала между ними. ЕслиNone, используется стандартная стратегия равномерного распределения шагов по расписанию обучения/дистилляции. Если переданtimesteps,num_inference_stepsдолжен бытьNone. - strength (
float, по умолчанию1.0) — Коэффициент силы, используемый для генерации частичного расписания временных шагов (например, для image-to-image). Значение1.0использует полное расписание.
Возвращает
None
Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).
шаг
< source >( model_output: Tensortimestep: intsample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → LCMSchedulerOutput or tuple
Параметры
- model_output (
torch.Tensor) — Прямой вывод из обученной диффузионной модели. - timestep (
int) — Текущий дискретный шаг в цепочке диффузии. - sample (
torch.Tensor) — Текущий экземпляр сэмпла, созданный процессом диффузии. - generator (
torch.Generator, необязательный) — Генератор случайных чисел для воспроизводимой выборки. - return_dict (
bool, по умолчаниюTrue) — Определяет, возвращать лиLCMSchedulerOutputилиtuple.
Возвращает
LCMSchedulerOutput или tuple
Если True, возвращается LCMSchedulerOutput, иначе возвращается кортеж, первым элементом которого является тензор выборки.
Предскажите образец из предыдущего шага времени, обращая SDE. Эта функция распространяет процесс диффузии от выходов обученной модели (чаще всего — предсказанного шума).