Перейти к содержанию
Публикация AiManual

Абляционный анализ StyleGAN-NADA: какие компоненты действительно нужны для текстовой адаптации генератора

Восемь конфигураций StyleGAN-NADA с одинаковыми гиперпараметрами показывают, что критичен здесь только Gradient Clipping. Разбираем, как адаптивная разморозка с

Коротко

Что будет в материале

  1. 01

    Что такое StyleGAN-NADA и зачем разбирать её по компонентам

  2. 02

    Постановка эксперимента: конфигурации, промпты и метрики

  3. 03

    Gradient Clipping: компонент, без которого адаптация не запускается

  4. 04

    Адаптивная разморозка слоёв: инструмент контроля, а не ускоритель

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

Функция потерь сравнивает направления, а не абсолютные значения. Пошагово это выглядит так:

  1. Берём текстовый эмбеддинг целевого промпта, например werewolf.
  2. Берём текстовый эмбеддинг исходного домена, то есть того, на чём обучали StyleGAN2.
  3. Считаем разницу между векторами: это направление, в котором должен сдвинуться домен.
  4. Считаем визуальный эмбеддинг сгенерированного изображения до обновления весов и после.
  5. Сопоставляем направление визуального сдвига с текстовым: косинусная близость направлений и есть то, что максимизируется.

Из этой схемы следует практическое свойство: нужен только текст, разметка и пары «картинка - описание» не требуются. Вторая особенность важнее для отладки. 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.

Подписаться на канал