Diffusers documentation
DDIMScheduler
DDIMScheduler
Denoising Diffusion Implicit Models (DDIM) от Jiaming Song, Chenlin Meng и Stefano Ermon.
Аннотация из статьи:
Модели вероятностного диффузионного шумоподавления (DDPM) обеспечивают генерацию изображений высокого качества без использования противоречивого обучения, однако для получения одного образца им необходимо симулировать цепь Маркова на протяжении множества шагов. Для ускорения выборки мы предлагаем модели неявного диффузионного шумоподавления (DDIM) — более эффективный класс итеративных неявных вероятностных моделей, обучаемых по той же процедуре, что и DDPM. В DDPM генеративный процесс определяется как обратный марковскому диффузионному процессу. Мы конструируем класс немарковских диффузионных процессов, которые приводят к той же целевой функции обучения, но обратный процесс которых позволяет получать выборки значительно быстрее. Эмпирически мы показываем, что DDIM способны генерировать образцы высокого качества в 10–50 раз быстрее по фактическому времени (wall-clock time) по сравнению с DDPM, позволяют выбирать баланс между вычислительными затратами и качеством образцов, а также выполняют семантически осмысленную интерполяцию изображений непосредственно в латентном пространстве.
Исходная кодовая база этой статьи доступна по адресу ermongroup/ddim, а связаться с автором можно через tsong.me.
Советы
The paper Common Diffusion Noise Schedules and Sample Steps are Flawed claims that a mismatch between the training and inference settings leads to suboptimal inference generation results for Stable Diffusion. To fix this, the authors propose:
🧪 Это экспериментальная функция!
- масштабировать расписание шума для обеспечения нулевого отношения сигнал/шум (SNR) на конечном шаге
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, rescale_betas_zero_snr=True)- train a model with
v_prediction(add the following argument to the train_text_to_image.py or train_text_to_image_lora.py scripts)
--prediction_type="v_prediction"- измените сэмплер так, чтобы он всегда начинал с последнего шага
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, timestep_spacing="trailing")- масштабирование classifier-free guidance для предотвращения переэкспозиции
image = pipe(prompt, guidance_rescale=0.7).images[0]Например:
from diffusers import DiffusionPipeline, DDIMScheduler
import torch
pipe = DiffusionPipeline.from_pretrained("ptx0/pseudo-journey-v2", dtype=torch.float16)
pipe.scheduler = DDIMScheduler.from_config(
pipe.scheduler.config, rescale_betas_zero_snr=True, timestep_spacing="trailing"
)
pipe.to("cuda") # or "mps", "xpu", "cpu"
prompt = "A lion in galaxies, spirals, nebulae, stars, smoke, iridescent, intricate detail, octane render, 8k"
image = pipe(prompt, guidance_rescale=0.7).images[0]
imageDDIMScheduler
класс diffusers.DDIMScheduler
< source >( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'trained_betas: numpy.ndarray | list[float] | None = Noneclip_sample: bool = Trueset_alpha_to_one: bool = Truesteps_offset: int = 0prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995clip_sample_range: float = 1.0sample_max_value: float = 1.0timestep_spacing: typing.Literal['leading', 'trailing', 'linspace'] = 'leading'rescale_betas_zero_snr: bool = False )
Параметры
- num_train_timesteps (
int, по умолчанию 1000) — Количество шагов диффузии для обучения модели. - beta_start (
float, по умолчанию 0.0001) — Начальное значениеbetaдля вывода. - beta_end (
float, по умолчанию 0.02) — Конечное значениеbeta. - beta_schedule (
Literal["linear", "scaled_linear", "squaredcos_cap_v2"], по умолчанию"linear") — Расписание бета, отображающее диапазон значений бета в последовательность бета для шагов модели. Должно быть одним из"linear","scaled_linear"или"squaredcos_cap_v2". - trained_betas (
np.ndarray, необязательный) — Передайте массив betas непосредственно в конструктор, чтобы обойтиbeta_startиbeta_end. - clip_sample (
bool, по умолчаниюTrue) — Обрезает предсказанную выборку для численной стабильности. - clip_sample_range (
float, по умолчанию 1.0) — Максимальная величина для обрезки выборок. Действительно только приclip_sample=True. - set_alpha_to_one (
bool, по умолчаниюTrue) — Каждый шаг диффузии использует значение произведения альф на данном шаге и на предыдущем. Для последнего шага предыдущего альфа-значения не существует. Если этот параметр установлен вTrue, произведение предыдущей альфы фиксируется в1, в противном случае используется значение альфы на шаге 0. - steps_offset (
int, по умолчанию 0) — Смещение, добавляемое к шагам инференса, как требуется некоторыми семействами моделей. - prediction_type (
Literal["epsilon", "sample", "v_prediction"], по умолчанию"epsilon") — Тип предсказания функции планировщика. Должен быть одним из"epsilon"(предсказывает шум процесса диффузии),"sample"(напрямую предсказывает зашумленный образец) или"v_prediction"(см. раздел 2.4 статьи Imagen Video). - thresholding (
bool, по умолчаниюFalse) — Использовать ли метод «динамического порогового значения». Этот метод не подходит для моделей диффузии в латентном пространстве, таких как Stable Diffusion. - dynamic_thresholding_ratio (
float, по умолчанию 0.995) — Коэффициент для метода динамического порогового значения. Действительно только приthresholding=True. - sample_max_value (
float, по умолчанию 1.0) — Пороговое значение для динамического порогового выделения. Действительно только приthresholding=True. - timestep_spacing (
Literal["leading", "trailing", "linspace"], defaults to"leading") — The way the timesteps should be scaled. Must be one of"leading","trailing", or"linspace". Refer to Table 2 of the Common Diffusion Noise Schedules and Sample Steps are Flawed for more information. - rescale_betas_zero_snr (
bool, по умолчаниюFalse) — Определяет, следует ли перемасштабировать беты для нулевого конечного SNR. Это позволяет модели генерировать очень яркие и тёмкие образцы, а не ограничиваться образцами со средней яркостью. Непосредственно связано с--offset_noise.
DDIMScheduler расширяет процедуру денойзинга, предложенную в вероятностных моделях диффузионного денойзинга (DDPM), с помощью немарковского управления.
Эта модель наследуется от SchedulerMixin и ConfigMixin. Общую документацию по методам, которые библиотека реализует для всех планировщиков (например, загрузка и сохранение), см. в документации суперкласса.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Добавьте шум к исходным образцам в соответствии с величиной шума на каждом шаге (это процесс прямой диффузии).
get_velocity
< source >( sample: Tensornoise: Tensortimesteps: IntTensor ) → torch.Tensor
Вычислите предсказание скорости из выборки и шума согласно формуле скорости.
scale_model_input
< source >( sample: Tensortimestep: int = None ) → torch.Tensor
Обеспечивает совместимость с планировщиками, которым необходимо масштабировать входную модель денуазинга в зависимости от текущего шага.
set_timesteps
< source >( num_inference_steps: intdevice: typing.Union[str, torch.device] = None )
Параметры
- num_inference_steps (
int) — Количество шагов диффузии, используемых при генерации образцов с помощью предобученной модели. - device (
str | torch.device, необязательный) — Устройство, используемое для шагов времени (timesteps).
Исключения
ValueError
ValueError— еслиnum_inference_stepsбольше, чемself.config.num_train_timesteps.
Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).
шаг
< source >( model_output: Tensortimestep: intsample: Tensoreta: float = 0.0use_clipped_model_output: bool = Falsegenerator: typing.Optional[torch.Generator] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → DDIMSchedulerOutput or tuple
Параметры
- model_output (
torch.Tensor) — Прямой вывод из обученной диффузионной модели. - timestep (
int) — Текущий дискретный шаг в цепочке диффузии. - sample (
torch.Tensor) — Текущий экземпляр сэмпла, созданный процессом диффузии. - eta (
float, необязательный, по умолчанию 0.0) — Вес шума для добавляемого шума на шаге диффузии. Значение 0 соответствует DDIM (детерминированный) а 1 соответствует DDPM (полностью стохастический). - use_clipped_model_output (
bool, необязательный, по умолчаниюFalse) — ЕслиTrue, вычисляет «скорректированный»model_outputиз обрезанного предсказанного исходного образца. Это необходимо, так как предсказанный исходный образец обрезается до [-1, 1], когдаself.config.clip_sampleравноTrue. Если обрезка не выполнялась, «скорректированный»model_outputсовпадет с переданным на вход, иuse_clipped_model_outputне оказывает влияния. - generator (
torch.Generator, необязательный) — Генератор случайных чисел для воспроизводимой выборки. - variance_noise (
torch.Tensor, необязательный) — Альтернатива генерации шума с помощьюgeneratorпутём прямого предоставления шума для дисперсии. Полезно для методов, таких какCycleDiffusion. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, возвращать ли DDIMSchedulerOutput илиtuple.
Возвращает
DDIMSchedulerOutput или tuple
If return_dict is True, DDIMSchedulerOutput is returned, otherwise a
tuple is returned where the first element is the sample tensor.
Предскажите образец из предыдущего шага времени, обращая SDE. Эта функция распространяет процесс диффузии от выходов обученной модели (чаще всего — предсказанного шума).
DDIMSchedulerOutput
класс diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput
< source >( prev_sample: Tensorpred_original_sample: typing.Optional[torch.Tensor] = None )
Параметры
- prev_sample (
torch.Tensorформы(batch_size, num_channels, height, width)для изображений) — Вычисленная выборка(x_{t-1})предыдущего шага.prev_sampleследует использовать как следующий вход модели в цикле шумоподавления. - pred_original_sample (
torch.Tensorформы(batch_size, num_channels, height, width)для изображений) — Прогнозируемый денойзированный образец(x_{0})на основе вывода модели на текущем шаге времени.pred_original_sampleможно использовать для предпросмотра прогресса или для направленного генерирования.
Класс результата для вывода функции step планировщика.