Diffusers documentation
RePaintScheduler
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
< source >( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'eta: float = 0.0trained_betas: numpy.ndarray | None = Noneclip_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, необязательный) — Передайте массив betas непосредственно в конструктор, чтобы обойтиbeta_startиbeta_end. - clip_sample (
bool, по умолчаниюTrue) — Ограничивает предсказанную выборку значениями от -1 до 1 для численной стабильности.
RePaintScheduler — это планировщик для inpainting DDPM внутри заданной маски.
Эта модель наследуется от SchedulerMixin и ConfigMixin. Общую документацию по методам, которые библиотека реализует для всех планировщиков (например, загрузка и сохранение), см. в документации суперкласса.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: IntTensor )
Параметры
- original_samples (
torch.Tensor) — Исходные образцы, к которым будет добавлен шум. - noise (
torch.Tensor) — Шум, который будет добавлен к образцам. - timesteps (
torch.IntTensor) — Шаги, определяющие уровень шума для каждого примера.
Исключения
NotImplementedError
NotImplementedError— обучение RePaint следует выполнять с помощью DDPMScheduler.add_noise().
Укажите, что добавление шума для обучения RePaint не поддерживается этим планировщиком.
scale_model_input
< source >( sample: Tensortimestep: int | None = None ) → torch.Tensor
Обеспечивает совместимость с планировщиками, которым необходимо масштабировать входную модель денуазинга в зависимости от текущего шага.
set_timesteps
< source >( num_inference_steps: intjump_length: int = 10jump_n_sample: int = 10device: 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, шаги не перемещаются.
Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).
шаг
< source >( model_output: Tensortimestep: intsample: Tensororiginal_image: Tensormask: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → RePaintSchedulerOutput or tuple[torch.Tensor, torch.Tensor]
Параметры
- 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
< source >( sample: Tensortimestep: intgenerator: typing.Optional[torch.Generator] = None ) → torch.Tensor
Добавьте шум к образцу, чтобы сдвинуть его на один шаг диффузии вперёд.
RePaintSchedulerOutput
класс diffusers.schedulers.scheduling_repaint.RePaintSchedulerOutput
< source >( prev_sample: Tensorpred_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можно использовать для предпросмотра прогресса или для направленного генерирования.
Класс для вывода функции шага планировщика.