# Как нейросеть TUNIT научилась переносить стили изображений без разметки

Источник: https://www.youtube.com/watch?v=sEG8hD64c_Q
Канал: Yannic Kilcher
Опубликовано: 16.06.2020

---

В детальном разборе от известного IT-исследователя Янника Килхера (Yannic Kilcher) рассматривается революционная научная работа под названием TUNIT, которая предлагает принципиально новый взгляд на задачу неуправляемого переноса стилей изображений. Авторы исследования — Кён Джин Бэк (Kyung Jin Baik), Джун Джэ Чхве (Jun Jae Choi), Ён Джун У (Yong Jung Woo), Джа Джун Ю (Ja Joon Yoo) и Хён Джун Шин (Hyun Joon Shin) — разработали архитектуру, способную самостоятельно группировать изображения по стилям без привлечения ручной разметки. Этот подход позволяет объединить кластеризацию датасета и генерацию изображений в единый цикл взаимного обучения.

## 🖼️ Эволюция переноса стилей: от жестких пар к полной свободе
[[JUMP:01:24]]

Перенос стиля или перевод изображений из одного домена в другой (image-to-image translation) долгое время оставался вызовом для машинного обучения. Суть процесса заключается в том, чтобы изменить внешний вид («стиль») объекта на картинке, полностью сохранив его геометрическую структуру («контент»), например, позу кота на исходной фотографии. По словам Янника Килхера, механизмы такого переноса долгое время оставались для него загадкой, однако авторы TUNIT смогли элегантно решить главную проблему технологии — зависимость от размеченных данных.

Исторически эта технология прошла три ключевых этапа:

* **Парное обучение (One-to-one mapping):** На ранних этапах моделям требовались четкие пары картинок, например, эскиз обуви и фотография этой же самой обуви. На основе таких точных аннотаций сеть училась транслировать графику из одного домена в другой.
* **Групповое обучение (Set-level annotations):** Позже исследователи перешли к использованию меток для целых групп (доменов) изображений. Человеку больше не нужно было подбирать пары, но все еще требовалось вручную распределить датасет по категориям (например, домен А — «рыжие коты», домен B — «черно-белые коты»). По оценке автора видео, сбор такой разметки остается крайне дорогой задачей.
* **Полностью неуправляемое обучение (Truly Unsupervised):** Подход TUNIT полностью исключает ручные метки. На входе есть только сырой датасет $X$, в котором изначально предполагается наличие скрытых доменов.

Янник Килхер отмечает, что простая последовательная кластеризация с последующим обучением генеративно-состязательной сети (GAN) дает низкое качество. Главное открытие авторов TUNIT заключается в том, что процессы саморазметки (self-labeling) и переноса стилей необходимо запускать одновременно, чтобы они помогали друг другу в процессе оптимизации.

## 🧩 Архитектура TUNIT: Святая троица нейросетей
[[JUMP:07:08]]



Вся система TUNIT базируется на совместной работе трех основных компонентов: кодировщика (направляющей сети), генератора и дискриминатора. Генератор и дискриминатор представляют собой классическую GAN-архитектуру, но с важными модификациями.

Устройство и функции компонентов сети:

* **Кодировщик / Направляющая сеть (Guiding Network - E):** Принимает любое изображение и раскладывает его на две составляющие — псевдо-метку класса (дискретное число от $0$ до $K-1$) и непрерывный вектор стиля. Метка отправляется в дискриминатор, а вектор стиля — в генератор.
* **Генератор (Generator - G):** Берет исходное изображение (источник контента) и вектор стиля от референсного изображения. Его задача — выдать синтезированную картинку, где контент источника совмещен со стилем референса.
* **Дискриминатор (Discriminator - D):** Оценивает, является ли изображение реальным или поддельным.

Поскольку разметки изначально нет, количество классов $K$ приходится угадывать. Янник Килхер рекомендует использовать стратегию умышленного завышения (over guess). Если в реальности ожидается от 10 до 15 классов, то в параметрах модели лучше выставить $K = 20$, так как недооценка количества доменов навредит обучению сильнее.

Важная деталь архитектуры дискриминатора заключается в его условной (conditional) структуре. Вместо одной головы классификации он имеет отдельную «голову» под каждый из $K$ предполагаемых классов. Каждая такая голова обучается отличать настоящие изображения конкретного домена (например, настоящих рыжих котов) от подделок генератора. Часть слоев дискриминатора остается общей для извлечения базовых признаков, что, как считает ведущий, полезно, хотя и не критично для работы концепта. При этом псевдо-метка от кодировщика жестко фиксируется (применяется операция `argmax` и `detach`), отсекая прохождение градиента по этой ветке назад.

## 📉 Магия лосс-функций: как обучить систему без разметки
[[JUMP:14:02]]

Самая сложная и комплексная часть TUNIT — это её система функций потерь (losses). Поскольку прямого сигнала из GAN для обучения классификатора в кодировщике нет, авторы применили методы самообучения (self-supervised learning).

Для обучения кодировщика берется исходное изображение и его случайно аугментированная версия (с измененной яркостью, перевернутая или обрезанная). Модель максимизирует взаимную информацию (Mutual Information) между распределениями классов оригинальной и измененной картинки. Это уравнение включает два элемента:

1.  **Максимизация энтропии всего датасета:** Требует, чтобы модель распределяла разные картинки по разным кластерам, не сваливая весь датасет в одну категорию.
2.  **Минимизация условной энтропии:** Гарантирует, что исходный кадр и его аугментированная копия гарантированно получат одинаковую псевдо-метку.

Для вектора стиля применяется контрастивный лосс (Style Contrastive Loss). Система поддерживает динамическую очередь (очередь FIFO из прошлых изображений). Вектор стиля текущего изображения притягивается к стилю своей аугментированной копии и отталкивается от чужих стилей из очереди. По данным статьи, этот метод радикально повысил точность классификации морд животных по сравнению со старыми подходами.

Антагонистический лосс (Adversarial Loss) связывает систему воедино. Дискриминатор пытается поймать генератор на лжи, зная класс картинки от кодировщика. Генератор же пытается обмануть дискриминатор, имея на руках только исходное изображение и вектор стиля референса. Генератор намеренно лишен доступа к псевдо-метке класса. Из-за этого, как объясняет Килхер, генератор вынужден расшифровывать вектор стиля и самостоятельно связывать его с конкретным классом. В итоге градиент идет обратно в кодировщик, заставляя его упаковывать информацию о породе или цвете шерсти прямо внутрь непрерывного вектора стиля.

Чтобы генератор не начал игнорировать стиль и не выдавал случайные качественные картинки из домена, авторы ввели еще два защитных лосса:

* **Циклический контрастивный лосс стиля (Style Round-Trip):** Сгенерированное изображение снова прогоняется через кодировщик, чтобы извлечь из него стиль. Полученный на выходе стиль должен быть максимально близок к тому референсному стилю, который изначально подавался на вход генератору.
* **Лосс реконструкции изображения (Image Reconstruction):** Если подать в генератор оригинальное изображение и его собственный вектор стиля, сеть обязана в точности воссоздать исходную картинку. Это исключает рассинхронизацию пространства стилей.

## 📊 Результаты экспериментов: сила совместного обучения
[[JUMP:42:11]]



Чтобы доказать преимущество сквозного совместного обучения, авторы провели визуализацию пространства стилей с помощью алгоритма t-SNE. На графиках тестовые изображения раскрасили в соответствии с реальными классами (хотя сама модель TUNIT этих истинных меток никогда не видела). При раздельном обучении кодировщика кластеры стилей сильно размыты и пересекаются. Однако при совместном обучении с GAN на t-SNE графике отчетливо видны изолированные, плотные группы, идеально совпадающие с реальными биологическими видами животных.

Показатель качества генерации FID (Fréchet Inception Distance), где меньшее значение означает лучший результат, при совместном обучении оказался в разы ниже, чем при раздельном. Более того, благодаря непрерывности пространства стилей, даже при завышенном количестве классов ($K$) сеть способна объединять похожие сущности. Например, разные ложные кластеры, содержащие львов или гепардов, на карте стилей все равно притягиваются друг к другу.

Проводя обзор сгенерированных изображений морд животных, Янник Килхер не удержался от шуток. Демонстрируя странно деформированную генерацию лисы, он сыронизировал: «Что вообще происходит с этой лисой? Помогите ей кто-нибудь». Он также заметил, что получившийся детеныш снежного барса выглядит весьма далеким от реальности.

Ведущий обращает внимание на ограничения текущей версии TUNIT:

* Датасет состоит из жестко стандартизированных, выровненных по центру фронтальных портретов животных.
* Человеческое зрение мгновенно считывает любые артефакты и дефекты на лицах или мордах, поэтому до идеала технологии еще далеко.

Тем не менее, в более простых сценариях, таких как трансформация пейзажа «из лета в зиму», TUNIT показывает отличные результаты. Килхер прогнозирует, что в обозримом будущем подобные алгоритмы разовьются настолько, что станут частью обычных мобильных приложений на смартфонах.