Как обучать text-to-image модель с нуля: рецепт от Photoroom 2026 | AiManual
AiManual Logo Ai / Manual.
03 Фев 2026 Гайд

Текст в картинку с нуля: абляции, рецепт и код, который не сломается

Полный гайд по тренировке тексто-изображение моделей с нуля. Абляции, рецепт обучения, PRX, код. Объясняем, почему всё работает.

Зачем это читать, если Stable Diffusion уже есть?

Потому что fine-tuning - это костыль. Вы берете модель, которая уже знает английский, котиков и аниме, и пытаетесь заставить ее рисовать что-то специфическое. Получается криво. Модель путает ваши объекты с тем, что уже знает. Нужно учить с чистого листа.

Photoroom в феврале 2026 выкатила детальное исследование. Они не просто обучили модель - они провели 127 абляций, чтобы понять, что на самом деле влияет на качество. И выложили код. Это редкий случай, когда компания показывает не маркетинговые картинки, а кишки процесса.

Абляция (ablation study) - это когда вы убираете один компонент системы и смотрите, насколько хуже становится. Если не становится - значит компонент бесполезен. Самый честный способ оптимизировать архитектуру.

Что сломалось в классическом подходе?

Возьмем стандартный рецепт обучения тексто-изображение моделей на 2025 год. U-Net архитектура, CLIP текстовый энкодер, диффузия. Обучаем на LAION-5B. Ждем месяц. Получаем модель, которая рисует... примерно то же, что и Stable Diffusion, но с артефактами.

Проблема в трех местах:

  • Текстовый энкодер замораживают - он никогда не учится понимать ваши данные
  • Оптимизатор AdamW с дефолтными параметрами - сходится медленно и к субоптимуму
  • Нет контроля над распределением скрытых переменных - модель генерирует однообразно

Photoroom убрала эти ограничения. Их модель (PRX) показывает FID 8.3 на COCO против 12.1 у базового Stable Diffusion 3.5. Разница видна невооруженным глазом.

Рецепт, который работает: PRX от Photoroom

PRX - это не революционная архитектура. Это грамотная сборка известных компонентов плюс три ключевые модификации.

1Текстовый энкодер учится вместе со всем

Самая очевидная и самая игнорируемая идея. CLIP тренировали на интернет-картинках с подписями. Ваш датасет другой. Если энкодер заморожен - он будет неправильно кодировать ваши описания.

В PRX текстовый трансформер инициализируется весами от CLIP-ViT-L/14, но дальше обучается. Learning rate в 10 раз меньше, чем у U-Net, но он учится.

💡
Абляция показала: размороженный энкодер улучшает FID на 23%. Модель лучше понимает редкие слова и специфические термины из вашего датасета.

2PRX-регуляризация вместо стандартного шума

В диффузионных моделях добавляют гауссовский шум на каждом шаге. PRX добавляет еще один компонент - регуляризацию по распределению скрытых переменных.

Формула простая, но эффект огромный:

# Упрощенная версия PRX регуляризации
def prx_regularization(z_t, z_0, t):
    # z_t - латент на шаге t
    # z_0 - исходный латент
    # t - шаг диффузии
    
    # Контроль дисперсии
    var_loss = torch.abs(z_t.var() - target_var)
    
    # Контроль корреляций между каналами
    z_flat = z_t.flatten(start_dim=1)
    corr_matrix = torch.corrcoef(z_flat.T)
    corr_loss = torch.norm(corr_matrix - torch.eye(corr_matrix.size(0)))
    
    return var_loss + 0.1 * corr_loss

Эту регуляризацию добавляют к основному loss. Вес - 0.01 от основного. Кажется мелочью, но без нее модель генерирует изображения с артефактами в 37% случаев.

3Адаптивный планировщик learning rate

Не Cosine, не Linear. Photoroom использует комбинацию:

  • Первые 10% шагов: warmup от 1e-6 до 1e-4
  • Следующие 60%: постоянный 1e-4
  • Последние 30%: экспоненциальный спад до 1e-6

Почему так? Абляции показали, что Cosine annealing слишком агрессивно снижает LR в середине обучения. Модель перестает учиться новым концепциям, только полирует уже выученное.

Пошаговый план: от данных до инференса

Теперь соберем все вместе. Если хотите повторить - готовьте 4-8 A100 на месяц или 4090 на три месяца.

Шаг 0: Подготовка данных

Не используйте LAION целиком. Возьмите подмножество с высоким CLIP score. Photoroom фильтровала так:

# Фильтрация датасета по качеству
def filter_dataset(dataset, clip_threshold=0.25):
    filtered = []
    for image, caption in dataset:
        # Вычисляем CLIP score между изображением и текстом
        clip_score = compute_clip_score(image, caption)
        
        # Убираем мемы, скриншоты, низкокачественный контент
        if clip_score > clip_threshold:
            filtered.append((image, caption))
    
    return filtered

Идеальный размер датасета - 50-100 миллионов пар. Меньше - модель не выучит разнообразие. Больше - обучение слишком долгое без существенного прироста качества.

Важно: если собираете датасет для специфической задачи (например, медицинские изображения), начинайте с 1-2 миллионов пар. Полный рецепт с нуля требует общего датасета. Для тонкой настройки лучше использовать техники создания LoRA датасетов.

Шаг 1: Архитектура

Берем U-Net с cross-attention слоями для текста. Размеры:

  • Input: 256x256 или 512x512 (больше - в 4 раза дольше обучение)
  • Channels: 320 в bottleneck
  • Attention heads: 8
  • Dropout: 0.1 (не 0.0, это важно)

Текстовый энкодер: ViT-L/14 с дообучением.

Шаг 2: Инициализация

Не инициализируйте веса случайно. Возьмите предобученные:

  • U-Net: из Stable Diffusion 3.5
  • Text encoder: из CLIP-ViT-L/14
  • VAE: заморозить, не обучать

Это сокращает обучение с 1 месяца до 2-3 недель.

Шаг 3: Тренировка

Конфиг для PyTorch:

# Основные гиперпараметры PRX
config = {
    'batch_size': 2048,  # эффективный, через gradient accumulation
    'actual_batch': 32,  # на GPU
    'accumulation_steps': 64,
    
    'lr_unet': 1e-4,
    'lr_text': 1e-5,  # в 10 раз меньше
    
    'optimizer': 'AdamW',
    'betas': (0.9, 0.999),
    'weight_decay': 0.01,
    
    'prx_weight': 0.01,  # вес регуляризации
    'target_var': 1.0,   # целевая дисперсия латентов
    
    'warmup_steps': 10000,
    'total_steps': 500000,
    
    'mixed_precision': 'bf16',  # не fp16!
}

Следите за loss. Должен падать плавно, без скачков. Если скачки - уменьшите LR или увеличьте вес регуляризации.

Шаг 4: Валидация

Не ждите конца обучения. Каждые 5000 шагов:

  • Генерируйте 1000 изображений по фиксированным промптам
  • Считайте FID с COCO validation
  • Считайте CLIP score
  • Визуально оценивайте 20 случайных генераций

Если FID перестал улучшаться 3 проверки подряд - скорее всего, обучение сошлось.

Ошибки, которые сломают вашу модель

Из абляций Photoroom: что НЕ делать.

ОшибкаЭффектКак исправить
Замораживание текстового энкодераМодель не понимает специфичные промптыРазморозить, LR = 1e-5
Dropout = 0.0Переобучение, артефакты на краяхПоставить 0.1-0.2
Слишком большой LRLoss скачет, модель не сходитсяНачать с 1e-6, warmup до 1e-4
Нет регуляризации латентовОднообразные генерацииДобавить PRX или KL дивергенцию
fp16 вместо bf16Потеря точности, NaNИспользовать bf16 на Ampere+

Самая коварная ошибка: обучение на неотфильтрованном датасете. Модель выучит мемы, водяные знаки, скриншоты интерфейсов. Потом будет генерировать это в случайных местах.

💡
Если нет ресурсов фильтровать 100M изображений, начните с готовых чистых датасетов. Или используйте автоматическую разметку для быстрой очистки.

А если хочется быстрее и дешевле?

Полное обучение с нуля - для research или больших компаний. На практике чаще нужно:

  1. Дообучить на специфичных данных - используйте LoRA или Dreambooth. Меньше ресурсов, быстрее результат.
  2. Сменить текстовый энкодер - если модель плохо понимает ваш домен, замените CLIP на что-то специализированное.
  3. Использовать distillation - обучите маленькую модель повторять выход большой.

Для большинства задач хватит fine-tuning существующей модели. Например, локальные аналоги DALL-E уже достаточно хороши.

Но если нужно качество уровня коммерческих продуктов - учите с нуля. Разница в FID 8.3 vs 12.1 - это разница между "похоже" и "неотличимо от реальности".

Код и что с ним делать

Photoroom выложила код на GitHub. Не просто скрипты, а полный пайплайн:

  • Подготовка данных с фильтрацией
  • Тренировка с PRX регуляризацией
  • Валидация и метрики
  • Экспорт в Diffusers формат

Код написан на PyTorch 2.4 (актуально на февраль 2026). Работает на GPU от 24GB VRAM. Для полного датасета нужно 4-8 карт.

Самое ценное в коде - не архитектура, а конфиги. Точные гиперпараметры, которые прошли 127 абляций. Можно взять и использовать для своей модели.

Внимание: код требует глубокого понимания диффузионных моделей. Если только начинаете - лучше сначала разберитесь с обучением LLM. Принципы похожи, но LLM проще для старта.

Что будет дальше?

PRX - не конечная точка. На горизонте:

  • Мультимодальные энкодеры - вместо отдельного текстового и визуального
  • Квантование во время обучения - чтобы сразу получать эффективные модели
  • Самовосстанавливающиеся архитектуры - когда модель детектирует артефакты и исправляет их

Но фундамент уже есть. Рецепт от Photoroom показывает: чтобы обучить хорошую тексто-изображение модель, нужны не супер-архитектуры, а внимание к деталям. Разморозить энкодер. Добавить регуляризацию. Настроить LR schedule.

Кажется простым. Пока не попробуешь и не увидишь, насколько каждый из этих пунктов влияет на результат.

И последнее: если решитесь на полное обучение - настройте мониторинг. Loss, FID, генерации. Каждые 5000 шагов. Иначе потратите месяцы вычислений и получите модель, которая рисует хуже, чем Stable Diffusion 2019 года. Такое уже бывало.