Диффузионные модели через diffusers

Знакомимся с генерацией изображений через диффузию и библиотекой diffusers.

Диффузионная модель — генеративная модель, которая создаёт изображение, постепенно убирая шум из случайной картинки, шаг за шагом приближая её к описанию.

Идея диффузии

Представьте чистую картинку, которую много раз «зашумляли», пока она не превратилась в случайный шум. Диффузионная модель учится обращать этот процесс: из шума она шаг за шагом восстанавливает осмысленное изображение. Если направлять её текстовым описанием (промптом), на выходе получится картинка по этому описанию. Это и есть суть Stable Diffusion — связь с одноимённым курсом прямая.

шум  -->  шаг 1  -->  шаг 2  -->  ...  -->  картинка
(t=T)              убираем шум               (t=0)
           ^ на каждом шаге модель предсказывает,
             какой шум удалить (с учётом промпта)

Библиотека diffusers

В экосистеме за это отвечает diffusers. Запуск выглядит так (код требует библиотеки и GPU, не исполняется в браузере):

from diffusers import StableDiffusionPipeline
import torch

pipe = StableDiffusionPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    torch_dtype=torch.float16
).to("cuda")

image = pipe("кот-космонавт в стиле акварели").images[0]
image.save("cat.png")

Из чего состоит диффузионный pipeline

КомпонентРоль
text encoderпревращает промпт в эмбеддинги
U-Netпредсказывает шум на каждом шаге
schedulerуправляет шагами убирания шума
VAEпереводит между пикселями и латентным пространством

Как работает под капотом

Чтобы не работать с миллионами пикселей напрямую, современные модели (latent diffusion) проводят диффузию в сжатом латентном пространстве. Текст превращается в эмбеддинги, U-Net на каждом из ~20–50 шагов предсказывает шум, scheduler вычитает его, а в конце VAE «разворачивает» латент обратно в полноценную картинку. Меньше шагов — быстрее, но грубее; больше — медленнее, но детальнее.

Частые ошибки

  • Запускать без GPU и ждать скорости. На CPU генерация очень медленная.
  • Игнорировать лицензию и контент-политику. У моделей есть ограничения на использование — об этом отдельный урок.
  • Ждать одинакового результата. Без фиксированного seed каждая генерация даёт новую картинку.

Итог

  • Диффузионная модель рождает картинку, постепенно убирая шум по описанию.
  • Библиотека diffusers запускает Stable Diffusion в несколько строк.
  • Pipeline состоит из text encoder, U-Net, scheduler и VAE.
  • Latent diffusion работает в сжатом пространстве ради скорости.
Проверьте себя
1. Как диффузионная модель создаёт изображение?
AРисует попиксельно слева направо
BПостепенно убирает шум из случайной картинки по описанию
CСклеивает кусочки из базы
DПереводит текст в SVG
2. Какая библиотека Hugging Face отвечает за диффузионные модели?
Atransformers
Bdiffusers
Cdatasets
Dtokenizers
3. Зачем latent diffusion работает в латентном пространстве?
AДля совместимости с CPU
BЧтобы не обрабатывать миллионы пикселей напрямую и ускорить генерацию
CЧтобы переводить текст
DЧтобы хранить веса