← Назад к вопросам

Из каких частей состоит Stable Diffusion?

2.2 Middle🔥 161 комментариев
#Глубокое обучение#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Архитектура Stable Diffusion

Stable Diffusion — это генеративная модель для создания изображений из текстового описания. Она состоит из трёх основных компонентов, которые работают в синергии для преобразования текста в изображение.

1. Text Encoder (Текстовый энкодер)

Назначение: преобразует текстовый промпт в векторное представление (embedding).

Технические детали:

  • Использует CLIP (Contrastive Language-Image Pre-training) от OpenAI
  • Преобразует текст в вектор размерности 768-1024
  • Это векторное представление содержит семантическую информацию о тексте
  • Работает один раз, быстро и не требует GPU
# Концептуально
text_prompt = "красивый закат над морем"
text_embedding = text_encoder(text_prompt)  # shape: (1, 77, 768)

2. Diffusion Model (Диффузионная модель)

Назначение: основной движок, генерирующий изображение пошагово.

Принцип работы:

  • Начинается со случайного шума (random noise)
  • Итеративно удаляет шум за 50-100 шагов
  • На каждом шаге использует текстовое представление для управления процессом
  • Архитектура: U-Net с attention слоями для работы с текстовым контекстом
# Концептуально
latent = torch.randn(1, 4, 64, 64)  # случайный шум
for t in range(1000, 0, -1):
    latent = diffusion_model(latent, t, text_embedding)
# На выходе: латентное представление изображения

Ключевые параметры:

  • Timesteps: количество шагов денойзинга (обычно 20-100)
  • Guidance scale: сила влияния текста на изображение (7.5 по умолчанию)

3. VAE Decoder (Вариационный автокодировщик)

Назначение: преобразует латентное представление обратно в полноразмерное изображение.

Детали:

  • VAE (Variational AutoEncoder) предварительно обучен на ImageNet
  • Декодирует латентный код размерности 4x64x64 в изображение 512x512
  • Сжатие в 8 раз в каждом измерении (512 / 64 = 8)
  • Быстрая операция, так как работает в латентном пространстве, а не в пиксельном
# Концептуально
latent_representation = diffusion_model(...)  # shape: (1, 4, 64, 64)
image = vae_decoder(latent_representation)    # shape: (1, 3, 512, 512)

Полный конвейер

Текст (prompt)
    ↓
[1] Text Encoder (CLIP)
    ↓ (text embedding: 768D вектор)
    ↓
[2] Diffusion Model (U-Net)
    ├─ Начинает со случайного шума
    ├─ 50-100 итераций денойзинга
    └─ На каждом шаге использует text embedding
    ↓ (латентный код: 4x64x64)
    ↓
[3] VAE Decoder
    ↓ (декодирование 8x в разрешении)
    ↓
Изображение (512x512 пиксели)

Важные оптимизации

Latent Space

Стабильность работает в латентном пространстве, а не в пиксельном:

  • VAE сжимает изображение в 64 раза по числу пикселей
  • Диффузия происходит в этом сжатом пространстве (быстрее)
  • Декодирование только один раз в конце

Guidance (CLIP Guidance)

  • Classifier-free guidance: сравнивает прогноз с текстом и без текста
  • Позволяет управлять силой влияния промпта

Сравнение с другими моделями

КомпонентStable DiffusionDALL-E 2Midjourney
Text EncoderCLIPCLIPProprietary
DiffusionOpen-sourceOpenAIProprietary
VAEПредобученВстроенВстроен

Практическое использование

from diffusers import StableDiffusionPipeline

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

image = pipe(
    prompt="красивый закат, масло, высокое качество",
    num_inference_steps=50,      # Количество шагов
    guidance_scale=7.5           # Сила влияния текста
).images[0]

Выводы

Три компонента работают вместе:

  1. CLIP кодирует текст в вектор
  2. U-Net диффузионная модель постепенно генерирует изображение
  3. VAE декодер преобразует в полное разрешение

Вся система оптимизирована для работы в латентном пространстве, что позволяет быстро генерировать качественные изображения на потребительском железе.