Из каких частей состоит Stable Diffusion?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Архитектура 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 Diffusion | DALL-E 2 | Midjourney |
|---|---|---|---|
| Text Encoder | CLIP | CLIP | Proprietary |
| Diffusion | Open-source | OpenAI | Proprietary |
| 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]
Выводы
Три компонента работают вместе:
- CLIP кодирует текст в вектор
- U-Net диффузионная модель постепенно генерирует изображение
- VAE декодер преобразует в полное разрешение
Вся система оптимизирована для работы в латентном пространстве, что позволяет быстро генерировать качественные изображения на потребительском железе.