Buckets:

mishig's picture
|
download
raw
13.8 kB

RePaintScheduler

RePaintScheduler — это планировщик инпейнтинга на основе DDPM для инпейнтинга без обучения с экстремальными масками. Он предназначен для использования с RePaintPipeline и основан на статье RePaint: Inpainting using Denoising Diffusion Probabilistic Models Андреаса Лугмайра и соавторов.

Аннотация из статьи:

Свободное инпейнтинг (восстановление изображений) — это задача добавления нового содержимого на изображение в областях, заданных произвольной бинарной маской. Большинство существующих подходов обучаются на определённом распределении масок, что ограничивает их способность к обобщению на невиденные типы масок. Кроме того, обучение с использованием поэлементных и перцептивных потерь часто приводит к простому текстуальному расширению в сторону отсутствующих областей, а не к семантически осмысленной генерации. В данной работе мы предлагаем RePaint: подход к инпейнтингу на основе вероятностной модели диффузионного шумоподавления (DDPM), применимый даже к экстремальным маскам. Мы используем предобученную безусловную DDPM в качестве генеративного априорного распределения. Для обусловливания процесса генерации мы изменяем только итерации обратной диффузии, сэмплируя немаскированные области с использованием информации из данного изображения. Поскольку эта техника не модифицирует и не обусловливает саму исходную сеть DDPM, модель генерирует изображения высокого качества и разнообразия для любой формы инпейнтинга. Мы проверяем наш метод как для лиц, так и для общего инпейнтинга изображений, используя стандартные и экстремальные маски. RePaint превосходит передовые авто регрессионные и GAN-подходы как минимум для пяти из шести распределений масок. Репозиторий на GitHub: этот http URL.

Оригинальная реализация доступна по адресу andreas128/RePaint.

RePaintScheduler[[diffusers.RePaintScheduler]]

diffusers.RePaintScheduler[[diffusers.RePaintScheduler]]

diffusers.RePaintScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.0001, beta_end: float = 0.02, beta_schedule: str = 'linear', eta: float = 0.0, trained_betas: numpy.ndarray | None = None, clip_sample: bool = True)

Источник

Параметры:

num_train_timesteps (int, по умолчанию 1000) : Количество шагов диффузии для обучения модели.

beta_start (float, по умолчанию 0.0001) : начальное значение beta для инференса.

beta_end (float, по умолчанию 0.02) : Итоговое значение beta.

beta_schedule (str, по умолчанию "linear") : Расписание бета, отображающее диапазон значений бета в последовательность бета для шагов модели. Выберите одно из значений: linear, scaled_linear, squaredcos_cap_v2 или sigmoid.

eta (float, по умолчанию 0.0) : Вес шума, добавляемого на шаге диффузии. Значение 0.0 соответствует DDIM, а значение 1.0 — DDPM.

trained_betas (np.ndarray, необязательный) : Передайте массив бета непосредственно в конструктор, чтобы обойти beta_start и beta_end.

clip_sample (bool, по умолчанию True) : Ограничивает предсказанную выборку значениями от -1 до 1 для численной стабильности.

RePaintScheduler — это планировщик для inpainting DDPM внутри заданной маски.

Эта модель наследуется от SchedulerMixin и ConfigMixin. Общие методы, которые библиотека реализует для всех планировщиков, такие как загрузка и сохранение, описаны в документации суперкласса.

add_noise[[diffusers.RePaintScheduler.add_noise]]

add_noise(original_samples: Tensor, noise: Tensor, timesteps: IntTensor)

Источник

Параметры:

original_samples (torch.Tensor) : исходные образцы, к которым будет добавлен шум.

noise (torch.Tensor) : Шум, который будет добавлен к выборкам.

timesteps (torch.IntTensor) : Шаги, определяющие уровень шума для каждого примера.

Исключения: NotImplementedError

  • NotImplementedError -- Обучение RePaint следует использовать DDPMScheduler.add_noise() вместо этого.

Укажите, что добавление шума для обучения RePaint не поддерживается этим планировщиком.

scale_model_input[[diffusers.RePaintScheduler.scale_model_input]]

scale_model_input(sample: Tensor, timestep: int | None = None)

Источник

Параметры:

sample (torch.Tensor) : Входной образец.

timestep (int, необязательный) : Текущий шаг в цепочке диффузии.

Возвращает: torch.Tensor

Масштабированный входной образец.

Обеспечивает совместимость с планировщиками, которым необходимо масштабировать входную модель денуазинга в зависимости от текущего шага.

set_timesteps[[diffusers.RePaintScheduler.set_timesteps]]

set_timesteps(num_inference_steps: int, jump_length: int = 10, jump_n_sample: int = 10, device: typing.Union[str, torch.device, NoneType] = None)

Источник

Параметры:

num_inference_steps (int) : Количество шагов диффузии, используемое при генерации образцов с помощью предобученной модели.

jump_length (int, по умолчанию 10) : Количество шагов, выполняемых вперёд во времени перед откатом назад для одного прыжка («j» в статье RePaint). См. рисунки 9 и 10 в статье.

jump_n_sample (int, по умолчанию 10) : Количество раз, когда выполняется скачок во времени вперёд для выбранного временного сэмпла. См. рисунки 9 и 10 в статье.

device (str или torch.device, необязательный) : Устройство, на которое следует переместить шаги. Если None, шаги не перемещаются.

Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).

шаг[[diffusers.RePaintScheduler.step]]

step(model_output: Tensor, timestep: int, sample: Tensor, original_image: Tensor, mask: Tensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)

Источник

Параметры:

model_output (torch.Tensor) : Прямой вывод из обученной диффузионной модели.

timestep (int) : Текущий дискретный шаг времени в цепочке диффузии.

sample (torch.Tensor) : Текущая инстанция сэмпла, созданная процессом диффузии.

original_image (torch.Tensor) : Исходное изображение, на котором выполняется инпейнт.

mask (torch.Tensor) : маска, в которой значение 0.0 указывает, какую часть исходного изображения необходимо восстановить.

generator (torch.Generator, необязательный) : генератор случайных чисел.

return_dict (bool, по умолчанию True) : Возвращать ли RePaintSchedulerOutput вместо кортежа.

Возвращает: RePaintSchedulerOutput или tuple[torch.Tensor, torch.Tensor]

If return_dict is True, RePaintSchedulerOutput is returned, otherwise a tuple is returned where the first element is the previous sample and the second is the predicted original sample.

Предскажите образец из предыдущего шага времени, обращая SDE. Эта функция распространяет процесс диффузии от выходов обученной модели (чаще всего — предсказанного шума).

undo_step[[diffusers.RePaintScheduler.undo_step]]

undo_step(sample: Tensor, timestep: int, generator: typing.Optional[torch.Generator] = None)

Источник

Параметры:

sample (torch.Tensor) : Образец, к которому добавляется шум.

timestep (int) : Текущий дискретный шаг времени в цепочке диффузии.

generator (torch.Generator, необязательный) : генератор случайных чисел.

Возвращает: torch.Tensor

Образец на следующем шаге времени в цепочке диффузии.

Добавьте шум к образцу, чтобы сдвинуть его на один шаг диффузии вперёд.

RePaintSchedulerOutput[[diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput]]

diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput[[diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput]]

diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput(prev_sample: Tensor, pred_original_sample: Tensor)

Источник

Параметры:

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 можно использовать для предпросмотра прогресса или для направленного генерирования.

Класс для вывода функции шага планировщика.

Xet Storage Details

Size:
13.8 kB
·
Xet hash:
6337b7254246bcf3ac9b3f97eac1824b52430bd0be4dad91a28f157548b8e929

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.