Генеративный AI
Stable Diffusion и DALL-E
Август 2022: Stability AI выпускает Stable Diffusion в открытый доступ. За неделю его скачивают миллионы. Впервые text-to-image модель работает на потребительском GPU. Что за архитектурные решения сделали это возможным?
- **Stable Diffusion:** latent diffusion + CLIP + U-Net, открытые веса
- **DALL-E 3:** T5-XXL encoder + GPT-4 prompt rewriting, закрытая модель OpenAI
- **Midjourney:** собственная архитектура, фокус на эстетике
- **Adobe Firefly:** обучен только на лицензионных данных для коммерческого использования
- **ControlNet:** сотни специализированных контроллеров от сообщества
Год, когда text-to-image стал массовым
В январе 2021 года OpenAI представила первую DALL-E - модель, рисующую изображения по текстовому описанию на основе дискретного VAE и авторегрессионного трансформера. В 2022 году DALL-E 2 перешла на диффузию и CLIP-латенты, резко подняв качество. Параллельно Google показала Imagen, доказав силу больших текстовых энкодеров. Главный сдвиг произошёл в 2022 году: Robin Rombach и коллеги из LMU Munich совместно со Stability AI опубликовали Latent Diffusion Models, а Stability AI выпустила Stable Diffusion с открытыми весами. Впервые мощная text-to-image модель работала на потребительском GPU, что породило огромную экосистему дообучений и инструментов.
Предварительные знания
- Теория диффузии: forward/reverse process, предсказание шума
- VAE и латентные представления
- Cross-attention и текстовые эмбеддинги
Latent Diffusion: диффузия в латентном пространстве
DDPM работает напрямую в пространстве пикселей - для изображения 512x512 это 786 432 размерное пространство. Диффузия там медленная и дорогая. **Latent Diffusion Models (LDM)** - идея Rombach et al. (2022): сначала сжать изображение VAE-энкодером в латентное пространство 64x64x4 (в 48 раз меньше!), а диффузию делать уже там.
VAE (variational autoencoder) обучается отдельно и замораживается. Его энкодер E переводит изображение в латент z = E(x), декодер D восстанавливает обратно x' = D(z). Диффузионная модель работает только с z - это и есть Stable Diffusion.
**Почему 4 канала в латенте?** VAE энкодирует пространственную информацию в 4-мерный вектор на каждый патч. Это не RGB - это обученные признаки: первые каналы обычно кодируют яркость и текстуру, остальные - детали цвета и формы.
Зачем в Stable Diffusion диффузия происходит в латентном пространстве, а не в пиксельном?
CLIP и text conditioning
Как передать U-Net текстовый запрос? Через **CLIP** (Contrastive Language-Image Pre-training, OpenAI 2021). CLIP обучен на 400M пар (изображение, текст) так, чтобы похожие пары были близко в общем embedding пространстве. Текстовый энкодер CLIP переводит промпт в вектор, понятный диффузионной модели.
В U-Net текстовый эмбеддинг подаётся через **cross-attention**: запросы Q - из латента изображения, ключи K и значения V - из текстового эмбеддинга. Так каждый патч изображения может «спросить» у текста, что туда нарисовать.
**Classifier-Free Guidance (CFG)** - трюк для усиления соответствия тексту. Модель прогоняется дважды: с текстом и с пустым промптом. Предсказание шума = пустой_промпт + guidance_scale * (с_текстом - пустой_промпт). При guidance_scale=7 изображение сильнее следует тексту, при 15+ - ценой разнообразия.
**DALL-E 3 vs Stable Diffusion:** OpenAI заменил CLIP на T5-XXL (text-only трансформер) как текстовый энкодер и добавил переписывание промптов через GPT-4 перед генерацией. Это резко улучшило точность следования длинным детальным промптам.
Как текстовый промпт влияет на генерацию в Stable Diffusion?
ControlNet: управляемая генерация
Текстовый промпт - неточный способ управления. Нельзя точно задать позу человека, глубину сцены или контуры объекта словами. **ControlNet** (Zhang et al., 2023) добавляет структурный контроль: на вход идёт карта глубины, контуры (Canny edges), ключевые точки позы (OpenPose) или скетч.
Архитектура ControlNet - копия энкодерной части U-Net, обученная принимать дополнительное условие. Выходы этой копии добавляются к соответствующим слоям основного U-Net через zero-convolution (свёртки, инициализированные нулями). Это позволяет дообучить только ControlNet, не трогая исходную модель.
**IP-Adapter** - похожая идея, но для изображений: добавляет кондиционирование по reference-фото через отдельный image encoder и cross-attention. Позволяет «нарисуй это же лицо/объект в другом стиле» без дообучения.
Что такое zero-convolution в архитектуре ControlNet?
img2img и inpainting
**img2img** - генерация не из чистого шума, а из зашумлённого реального изображения. Вместо старта с x_T ~ N(0,I), начинаем с x_{t_start} = зашумленный вариант входного изображения при t=t_start. Это даёт контроль: низкий t_start (маленький шум) - изображение почти не меняется, высокий t_start - сильная трансформация.
**Inpainting** - восстановление замаскированных областей. Маска указывает, какие пиксели должны быть перегенерированы. Во время denoising немаскированные области берутся из оригинала, маскированные - генерируются моделью с учётом контекста вокруг.
**Outpainting** - расширение изображения за границы кадра. Технически это тот же inpainting: оригинал помещается в центр большего холста, маска покрывает всё вокруг, модель генерирует продолжение с учётом контекста существующего изображения.
Параметр strength=0.3 в img2img означает:
Stable Diffusion и DALL-E
- Latent Diffusion: сжимаем изображение VAE в 48 раз, диффузия работает в латентном пространстве
- CLIP кодирует текст в эмбеддинги; U-Net обращается к ним через cross-attention
- CFG (Classifier-Free Guidance): двойной проход для усиления соответствия тексту
- ControlNet: структурный контроль (контуры, глубина, поза) через zero-convolution копию U-Net
- img2img: старт denoising с зашумлённого реального изображения, а не чистого шума
- Inpainting / outpainting: перегенерация маскированных областей с сохранением контекста
Связанные темы
Stable Diffusion объединяет несколько архитектур: понимание каждой даёт полную картину.
- Diffusion Models: теория — Математическая основа Stable Diffusion
- VAE: вариационные автоэнкодеры — Латентное пространство, где работает диффузия
- CLIP и мультимодальные модели — Text encoder для кондиционирования
Вопросы для размышления
- Почему Stable Diffusion выпустили с открытыми весами, а OpenAI держит DALL-E закрытым? Какие trade-off здесь?
- Как ControlNet мог бы применяться в задачах, отличных от генерации изображений?
- Какие задачи не решает диффузия даже при всех механизмах управления, описанных в уроке?
Связанные уроки
- gai-09 — Латентная диффузия напрямую применяет теорию DDPM
- gai-11 — Базовый пайплайн, который расширяет продвинутая генерация
- aie-26-image-generation — Продакшен-генерация изображений на этих системах
- cv-13 — CLIP-кондиционирование связывает представления зрения и языка
- ml-32-autoencoders — VAE сжимает изображения в латентное пространство
- dl-01