Diffusers documentation
DDIM
DDIM
Denoising Diffusion Implicit Models (DDIM) от Jiaming Song, Chenlin Meng и Stefano Ermon.
Аннотация из статьи:
Модели вероятностного диффузионного шумоподавления (DDPM) обеспечивают генерацию изображений высокого качества без использования противоречивого обучения, однако для получения одного образца им необходимо симулировать цепь Маркова на протяжении множества шагов. Для ускорения процесса выборки мы предлагаем модели неявного диффузионного шумоподавления (DDIM) — более эффективный класс итеративных неявных вероятностных моделей, использующих ту же процедуру обучения, что и DDPM. В DDPM генеративный процесс определяется как обратный процессу марковской диффузии. Мы конструируем класс немарковских процессов диффузии, которые приводят к той же целевой функции обучения, но обратный процесс которых позволяет выполнять выборку значительно быстрее. На практике мы показываем, что DDIM способны генерировать образцы высокого качества в 10–50 раз быстрее по фактическому времени выполнения по сравнению с DDPM, позволяют находить баланс между вычислительными затратами и качеством образцов, а также выполняют семантически осмысленную интерполяцию изображений непосредственно в латентном пространстве.
Исходная кодовая база доступна по адресу ermongroup/ddim.
DDIMPipeline
класс diffusers.DDIMPipeline
< source >( unet: UNet2DModelscheduler: DDIMScheduler )
Параметры
- unet (UNet2DModel) —
UNet2DModelдля удаления шума из закодированных латентов изображения. - scheduler (SchedulerMixin) —
планировщик, используемый в сочетании с
unetдля удаления шума из закодированного изображения. Может быть одним из DDPMScheduler или DDIMScheduler.
Пайплайн для генерации изображений.
Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.
__call__
< source >( batch_size: int = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneeta: float = 0.0num_inference_steps: int = 50use_clipped_model_output: bool | None = Noneoutput_type: str | None = 'pil'return_dict: bool = True ) → ImagePipelineOutput or tuple
Параметры
- batch_size (
int, необязательный, по умолчанию 1) — Количество изображений для генерации. - generator (
torch.Generator, необязательный) —torch.Generatorдля обеспечения детерминированности генерации. - eta (
float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) из статьи DDIM. Применяется только к DDIMScheduler и игнорируется другими планировщиками. Значение0соответствует DDIM, а1— DDPM. - num_inference_steps (
int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - use_clipped_model_output (
bool, необязательный, по умолчаниюNone) — ЕслиTrueилиFalse, см. документацию для DDIMScheduler.step(). ЕслиNone, ничего не передаётся вниз в планировщик (используйтеNoneдля планировщиков, которые не поддерживают этот аргумент). - output_type (
str, необязательный, по умолчанию"pil") — Формат вывода сгенерированного изображения. Выберите один из вариантов:"pil"(PIL.Image),"np"(np.array) или"pt"(torch.Tensor). - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать ImagePipelineOutput вместо обычного кортежа.
Возвращает
ImagePipelineOutput или tuple
Если return_dict равно True, возвращается ImagePipelineOutput, иначе возвращается tuple, где первый элемент — это список с сгенерированными изображениями
Функция вызова конвейера для генерации.
Пример:
>>> from diffusers import DDIMPipeline
>>> import PIL.Image
>>> import numpy as np
>>> # load model and scheduler
>>> pipe = DDIMPipeline.from_pretrained("fusing/ddim-lsun-bedroom")
>>> # run pipeline in inference (sample random noise and denoise)
>>> image = pipe(eta=0.0, num_inference_steps=50)
>>> # process image to PIL
>>> image_processed = image.cpu().permute(0, 2, 3, 1)
>>> image_processed = (image_processed + 1.0) * 127.5
>>> image_processed = image_processed.numpy().astype(np.uint8)
>>> image_pil = PIL.Image.fromarray(image_processed[0])
>>> # save image
>>> image_pil.save("test.png")ImagePipelineOutput
класс diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Класс вывода для пайплайнов обработки изображений.