Генеративный 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 и текстовые эмбеддинги
  • Diffusion Models: теория
  • Fine-Tuning: SFT, LoRA, QLoRA

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
Stable Diffusion и DALL-E

0

1

Войти