Комментарии (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 декодер преобразует в полное разрешение
Вся система оптимизирована для работы в латентном пространстве, что позволяет быстро генерировать качественные изображения на потребительском железе.
Похожие вопросы
- Как бороться с градиентным взрывом?
- Какие типы моделей для детекции знаете?
- Как из текстов получить эмбеддинги для трансформера?
- Какие знаешь детекторы и архитектуры в компьютерном зрении?
- Какие любимые алгоритмы кластеризации?
- Что такое data drift и concept drift?
- Что такое data leakage и как его избежать?
- В чем разница между BERT и RuBERT?
- Что такое рекомендательные системы?
- Какие знаешь способы заполнения пропусков?
- Какие ошибки выборки существуют и как их минимизировать?
- Что такое оконная функция?
- Приведите пример распределения, которое не является ни нормальным, ни логнормальным
- BatchNorm vs LayerNorm: как работают, преимущества и недостатки
- Как устроен бустинг?
- Что такое смещение?
- Как подобрать гиперпараметры к градиентному бустингу?
- Что такое CTE (Common Table Expression) в SQL?
- Метрики бинарной классификации: плюсы и минусы каждой
- Как идет обучение линейной модели?