StyleGAN-NADA адаптирует предобученный StyleGAN2 к новому домену по текстовому промпту, без единого размеченного изображения. Семантику задаёт CLIP: генератор обновляет веса так, чтобы направление визуальных изменений в CLIP-пространстве совпало с направлением текстовых изменений между целевым промптом и исходным доменом.
Метод описали исследователи Tel Aviv University и NVIDIA Research в работе StyleGAN-NADA: CLIP-Guided Domain Adaptation of Image Generators. Абляционный анализ восьми конфигураций, опубликованный в разборе на Habr, даёт короткий ответ на главный вопрос: обязателен тут только Gradient Clipping. Без него Directional CLIP Loss не снижается, и генератор почти не адаптируется.
Остальные компоненты работают иначе. Адаптивная разморозка слоёв служит регулятором баланса между следованием промпту и сохранением исходной структуры лица. L2-, Patch- и LPIPS-регуляризации не улучшают целевую метрику, зато снижают артефакты. Ансамбль CLIP и мультипромпты в разборе отнесены к факторам, которые проверялись, но критическими не названы.
Что такое StyleGAN-NADA и зачем разбирать её по компонентам
Аббревиатура NADA расшифровывается как No Annotation Domain Adaptation: разметка не нужна, нужен текст. На входе есть предобученный StyleGAN2, обычно на лицах, и промпт вроде werewolf. На выходе хочется генератор, который рисует оборотней, сохраняя фотореализм и разнообразие исходной модели. Пары «изображение - текст» в этой схеме не участвуют, весь сигнал берётся из CLIP.
CLIP обучен контрастивным методом на тексте и изображениях и кладёт оба модальности в общее векторное пространство. Качество этого пространства задаёт потолок метода: если CLIP плохо разделяет «лицо» и «морду волка», сигнал будет размытым, и никакие настройки обучения это не исправят.
Как работает Directional CLIP Loss
Функция потерь сравнивает направления, а не абсолютные значения. Пошагово это выглядит так:
- Берём текстовый эмбеддинг целевого промпта, например werewolf.
- Берём текстовый эмбеддинг исходного домена, то есть того, на чём обучали StyleGAN2.
- Считаем разницу между векторами: это направление, в котором должен сдвинуться домен.
- Считаем визуальный эмбеддинг сгенерированного изображения до обновления весов и после.
- Сопоставляем направление визуального сдвига с текстовым: косинусная близость направлений и есть то, что максимизируется.
Из этой схемы следует практическое свойство: нужен только текст, разметка и пары «картинка - описание» не требуются. Вторая особенность важнее для отладки. Loss реагирует на направление, поэтому резкий шаг весов может увести генератор в сторону, где направление перестаёт читаться, и метрика просто встанет.
Почему абляция, а не просто «запустил и работает»
Движущихся частей у метода много: Gradient Clipping, адаптивная разморозка слоёв, L2-регуляризация, Patch-регуляризация, LPIPS-регуляризация, ансамбль CLIP, мультипромпты. В разборе проверены восемь конфигураций при одинаковых гиперпараметрах. Логика простая: меняем один компонент, остальное держим фиксированным, смотрим на метрики.
Без такой разбивки любая неудача выглядит одинаково: «картинка поехала». StyleGAN-NADA чувствителен к настройкам, как и любой метод на градиентном обучении, поэтому вопрос «какой компонент сломался» приходится решать экспериментом, а не догадкой.
Постановка эксперимента: конфигурации, промпты и метрики
Условия в разборе зафиксированы жёстко: 300 эпох, целевой промпт werewolf, исходный промпт human, фиксированный seed (2), одинаковые коэффициенты регуляризации и learning rate для всех восьми конфигураций. Два промпта выбраны не для красоты. Werewolf даёт сильный сдвиг домена и проверяет, способен ли метод на заметное изменение. Human близок к исходному домену лиц, и на нём видно, ломает ли обучение то, что в генераторе уже есть.
Среди конфигураций были, в частности, no_lpips (отключена LPIPS-регуляризация), no_adaptive (отключена адаптивная разморозка, обучаются все слои) и no_grad_clip (отключён Gradient Clipping). Численные значения по всем метрикам в опубликованном фрагменте разбора приведены не полностью, поэтому дальше речь о направлении изменений и о том, как их читать на своём прогоне.
Что показывает каждая метрика
| Метрика | Что измеряет | Как читать |
|---|---|---|
| Directional CLIP Loss | Совпадение визуального сдвига с текстовым | Падает - адаптация идёт; стоит на месте - генератор не двигается к промпту |
| LPIPS | Перцептивное расстояние до исходных изображений | Растёт - структура лица уходит, растёт риск потерять узнаваемость |
| Diversity | Разнообразие сэмплов | Падает - генерация схлопывается в узкий набор похожих лиц |
| Нормы градиентов по блокам | Где именно идёт обучение и где веса дрейфуют | Сравнивать блоки между собой и следить за выбросами |
Смотреть надо в связке. Низкий Directional CLIP Loss сам по себе ничего не гарантирует: LPIPS при этом может улететь вверх, а Diversity упасть. И наоборот, красивая картинка с высоким LPIPS часто означает, что от исходного домена остались только воспоминания.
Почему фиксированный seed важен для абляции
Один seed убирает вариативность инициализации и шума сэмплирования. Без этого разница между конфигурациями может оказаться случайной, и вывод «компонент X помогает» будет построен на дрожании генератора. Для первичного отсева компонентов одного seed достаточно, для финальных выводов лучше повторить на двух-трёх и сравнить разброс метрик.
Gradient Clipping: компонент, без которого адаптация не запускается
Главный результат разбора: без ограничения нормы градиента Directional CLIP Loss остаётся на высоком уровне 0.78–0.85 и не показывает устойчивого снижения, тогда как у baseline падает до 0.66–0.72. Визуально это подтверждается тем, что сгенерированные изображения остаются почти неизменными. Это не тонкая настройка на последнем проценте качества, а условие, при котором обучение вообще начинается.
Механизм выглядит так. CLIP-сигнал даёт большие градиенты, особенно на первых шагах, когда сгенерированное изображение далеко от целевого промпта. Без ограничения веса делают резкий шаг и попадают в область, где направление визуальных изменений уже не соответствует текстовому. Loss теряет опору и перестаёт падать, обучение фактически стоит на месте, хотя формально эпохи идут.
В разборе для всех восьми экспериментов строился график средних норм градиентов по блокам (Mean grad norms per block). Он показывает, где накапливаются изменения, но конкретное распределение скачков по блокам в опубликованном фрагменте не описано. Ограничение нормы держит шаг в пределах, где направление ещё осмысленно.
Как выбрать порог клиппинга
Рабочий порядок действий:
- Сделать короткий прогон без клиппинга и залогировать нормы градиентов по блокам на каждой эпохе.
- Поставить порог чуть выше типичных наблюдаемых значений, чтобы он отсекал выбросы, а не рядовые шаги.
- Проверить по динамике Directional CLIP Loss: метрика должна устойчиво снижаться, а не пилить вокруг одного уровня.
Слишком жёсткий клиппинг задушит обучение: шаги станут крошечными, и 300 эпох не хватит на заметный сдвиг. Слишком мягкий не спасёт от срыва. Конкретное число порога зависит от модели, разрешения и промпта, поэтому брать его из чужого конфига наугад бессмысленно.
Адаптивная разморозка слоёв: инструмент контроля, а не ускоритель
Второй результат разбора: конфигурация no_adaptive без адаптивного выбора слоёв показала лучший Directional CLIP Loss среди всех - ошибка падала до 0.62–0.69. То есть без разморозки текстовая адаптация выходит сильнее. Но разморозка описана в разборе как инструмент контроля: она уменьшает силу текстовой адаптации ради сохранения исходной структуры изображения, представляя компромисс между соответствием тексту и сохранением человеческой идентичности.
Логика следует из устройства StyleGAN2. Ранние блоки отвечают за грубую структуру: форму головы, позу, общие пропорции. Поздние блоки дорисовывают детали и текстуру. Если дать градиенту свободно менять ранние уровни, домен сдвигается быстро и радикально, вместе с геометрией лица. Если придержать ранние блоки и работать в основном по поздним, промпт влияет на детали, а узнаваемость сохраняется.
Отсюда два сценария. Нужен сильный сдвиг домена, например из лиц в что-то заведомо другое - ослабляем контроль разморозки и заранее принимаем искажения. Нужно сохранить узнаваемость при смене стиля - держим разморозку жёстче и миримся с тем, что следование промпту будет умеренным. Прямое сопоставление разморозки с ростом LPIPS в опубликованном фрагменте не приведено, поэтому связь «больше разморожено - выше LPIPS» стоит проверять на своём прогоне, а не принимать как измеренный факт.
Как разморозка соотносится с дрейфом весов в поздних блоках
Нормы градиентов по блокам показывают, где накапливаются изменения. Практика простая: логировать нормы по блокам на каждой эпохе, а не только итоговый loss. По такой истории видно, на каком этапе обучение перестаёт работать на промпт и начинает портить картинку.
L2-, Patch- и LPIPS-регуляризации: что они реально дают
В целевой метрике выигрыша нет: Directional CLIP Loss с регуляризациями не падает быстрее и не опускается ниже. Зато они критически важны для визуального качества: их отсутствие приводит к появлению большего количества артефактов. Это разные вещи, и путать их не стоит: регуляризации не улучшают следование промпту, они улучшают побочные свойства результата.
- L2-регуляризация штрафует величину весов и придерживает общий дрейф. Дешёвый способ не дать модели уехать далеко от исходных значений.
- Patch-регуляризация работает с локальной согласованностью фрагментов, полезна когда по картинке ползут локальные артефакты.
- LPIPS-регуляризация описана как перцептивная функция потерь для сохранения визуальной стабильности и предотвращения артефактов.
Практическая рамка такая. Максимально сильный сдвиг домена - регуляризации можно ослабить. Чистота картинки и предсказуемые веса - включать. Отдельного замера комбинаций в опубликованном фрагменте нет, поэтому складывать эффекты механически не стоит: две регуляризации вместе не дают сумму двух результатов.
Какую регуляризацию выбирать под задачу
| Задача | Что включить | Почему |
|---|---|---|
| Сохранить перцептивную близость к исходному домену | LPIPS-регуляризация | Перцептивная функция потерь для визуальной стабильности |
| Убрать локальные артефакты | Patch-регуляризация | Работает с согласованностью фрагментов |
| Придержать дрейф весов без сложной логики | L2-регуляризация | Простой штраф на величину весов |
Ансамбль CLIP и мультипромпты: что подтверждено
Мультипромпты входили в число факторов, влияние которых на процесс адаптации исследовалось в разборе. Конкретные результаты по ним в опубликованном фрагменте не развёрнуты, поэтому утверждать, что они повышают стабильность и при этом некритичны, было бы натяжкой. То же касается ансамбля CLIP: в доступном фрагменте его роль отдельно не описана.
Практический вывод осторожный: начинать стоит с Gradient Clipping, разморозки слоёв и контроля метрик. Ансамбль и переформулировки промпта - тюнинг второго порядка, эффект которого на своём домене нужно проверять отдельно, а не переносить из общих ожиданий.
Как читать результаты и когда останавливать обучение
Критерий остановки строится на связке метрик, а не на фиксированном числе эпох. Сигнал остановиться выглядит так: Directional CLIP Loss перестал падать, LPIPS продолжает расти, нормы градиентов по блокам ведут себя нестабильно. Дальше обучение добавляет артефакты и дрейф без выигрыша в следовании промпту.
300 эпох в разборе - условие эксперимента, а не универсальная рекомендация. На другом домене, разрешении или промпте плато придёт раньше или позже.
Чек-лист мониторинга по эпохам
- Directional CLIP Loss: смотреть на тренд, а не на абсолютное значение.
- LPIPS: фиксировать эпоху, после которой метрика растёт без падения CLIP Loss.
- Diversity: следить, не сузился ли набор лиц.
- Нормы градиентов по блокам: сравнивать блоки между собой и отслеживать выбросы.
- Визуальная выборка с фиксированным seed: глазами видно то, что метрики пропускают.
Практические выводы: что включать, что можно отключить
| Компонент | Статус | Роль |
|---|---|---|
| Gradient Clipping | Критично | Без него CLIP Loss не снижается, адаптация не запускается |
| Адаптивная разморозка слоёв | Контроль баланса | Регулирует соотношение между силой адаптации и сохранением структуры лица |
| L2-, Patch-, LPIPS-регуляризации | Полезно для чистоты | Не улучшают целевую метрику, снижают артефакты |
| Ансамбль CLIP, мультипромпты | Проверялись в разборе | Конкретные результаты в опубликованном фрагменте не развёрнуты |
Ограничения разбора стоит держать в голове. Это один прогон с фиксированным seed, статистики по множеству запусков нет, чувствительность к формулировке промпта остаётся, а потолок качества задаёт CLIP. Численные таблицы по Directional CLIP Loss, LPIPS, Diversity и нормам градиентов в опубликованном фрагменте приведены не полностью, поэтому часть выводов качественная: направление изменений, а не конкретные дельты. Свои значения придётся снимать самому на своём домене и своих промптах.
Метод подходит тем, кто адаптирует StyleGAN2 под собственный домен без разметки и готов возиться с мониторингом: логировать метрики по эпохам, смотреть нормы градиентов по блокам, подбирать порог клиппинга по наблюдаемым значениям. Если нужен результат «нажал кнопку и получил», StyleGAN-NADA не тот инструмент: чувствительность к настройкам здесь встроена в конструкцию.
Детали метода и полный перечень проверенных конфигураций приведены в разборе на Habr. Первоисточник - статья StyleGAN-NADA: CLIP-Guided Domain Adaptation of Image Generators от Tel Aviv University и NVIDIA Research.