Диффузионные модели через 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 работает в сжатом пространстве ради скорости.