pix2pixHD: High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs
🔗 Ссылки
https://arxiv.org/abs/1711.11585
https://github.com/NVlabs/imaginaire/tree/master/projects/pix2pixhd
💎 Контрибьюшн
Эта работа положила начало conditional-генерации изображений в высоком разрешении. Она используется в основе дальнейших исследований для image-to-image translation, в первую очередь SPADE, и video-to-video translation подходы.
Для этого авторы предложили несколько доработок к оригинальному pix2pix-фреймворку:
- Coarse-to-fine генератор — общие coarse-планы картинки генерируются в низком разрешении, а затем добавляются мелкие детали и текстуры
- Multi-scale дискиминаторы — одна и та же архитектура (с разными весами) применяется к картинкам разного размера для достижения реализма на разных масштабах. Это дополнительно стабилизирует обучение
- FM-loss — форсит генератор синтезировать изображения с "реалистичной" проекцией в латентном пространстве. Это также стабилизирует обучение
- Использование instance-segmentation map'ов для разделения объектов внутри одного класса
🛠 Задача
Имея семантические карты синтезировать изображение, которое будет выглядеть реалистично и соответствовать семантическим картам.
В качестве семантических карт можно использовать (но не ограничиваться):
- Карты границ
- Карты сегментации (можно комбинировать semantic и instance)
- Карты глубины
- Карты сегментации поз человека
Математически задачу можно сформулировать в терминах равенства real- и fake-распределений, обусловленных на одни и те же семантические данные. Поэтому предлагается использовать GAN-фреймворк, в котором минимизируется расстояние между распределениями (например, JS или EM).
🔎 Детали
Coarse-to-fine генератор
Генератор состоит из нескольких частей:
- G1 — global-генератор, который по уменьшенному семантическому изображению генерирует реалистичную картинку того же мелкого разрешения (например, 1024x512)
- G[k] (k > 1) — local-генераторы, которые снабжают картинку текстурами и деталями мелкими деталями
Upscale-часть G2 (и любого G[k], k > 1) принимает на вход сумму фичемап от downscale-части и от upscale-части G[k - 1]. Этот дизайн наследует идеи ResNet и UNet — генераторы высших порядков синтезируют добавочное изображение.
Это позволяет лучше течь градиентам и стабилизировать обучение, т. к. генерация контента происходит в низком разрешении*.
Хотя авторы и допускают использование нескольких генераторов, они остановились на k = 2
* Здесь неявно утверждается, что моделирование распределения реалистичных картинок — более сложная задача, чем моделирование реалистичных текстур высокого разрешения на картинках низкого разрешения.
Multi-scale дискриминатор
Чтобы не усложнять модель дискриминатора и не оверфититься, авторы предлагают использовать одну и ту же архитектуру — PatchGAN 70x70 — для разных масштабов (уменьшение в 1x, 2x, 4x раз). Каждый дискриминатор выучивает свои веса.
Благодаря разным receptive-field дискриминаторы определяют реалистичность на разных уровнях — те, что работают на уменьшенных картинках, смотрят на более глобальную структуру.
FM-loss
Дискриминатор D можно рассматривать как feature-extractor для картинки. Тогда можно потребовать, чтобы фичемапы (по сути — разные статистики по изображению) real- и fake-изображений были близки, например, по L1:
По сути это вариант Perceptual loss'а, где в качестве сети-эмбеддера выступает дискриминатор. Для более качественных результатов можно добавить настоящий Perceptual loss с предобученной VGG, и по наблюдениям авторов это улучшает результаты:
Instance maps
Проблема instance map в том, что нельзя заранее спрогнозировать, сколько объектов каждого типа будет на изображении. Следовательно, нельзя использовать one-hot encoding — малая размерность может оказаться недостаточным, а большая ведёт к лишним бессмысленным вычислениям.
Авторы говорят, что главная информация от instance map — это границы объектов. Генератор плохо справляется с генерацией машин, когда не может отличить их друг от друга.
Для этого по instance map строится карта границ объектов и конкатенируется с картой сегментации.
Instance-level Feature Embedding
Чтобы влиять на генерируемые изображение, к картам сегментации и границ приклеивается ещё одно изображение. Оно содержит instance-averaged фичи исходной картинки.
Для этого вместе с генератором и дискриминатором обучается энкодер-декодер E, который возвращает фичемапу того же размера, что и картинка:
После обучения по латентным векторам объектов из train-сета прогоняется K-means, чтобы получить несколько векторов стиля для каждого класса. На инференсе для каждого объекта случайно выбирается один из них.
Также это даёт возможность сделать понятный интерфейс:
выбери тип дороги из вариантов {асфальт, брусчатка}
Обучение
Общий лосс состоит из LSGAN-компонент для minimax-оптимизации и FM-компоненты (+ VGG-loss) для стабилизации генератора:
На инференсе время генерации картинки 2048x1024 составляет 0.02–0.03с (скорость 33–50 FPS)
🔬 Эксперименты
Датасеты
- Cityscapes: 2975 / 500 картинок для обучения / валидации, разрешение 2048x1024
- NYU Indoor RGBD: 1200 / 249 картинок, разрешение 561x427
- ADE20K: 20210 / 2000 картинок, разрешение 512xH (все картинки разного размера, рескейлились к W=512)
- Helen Face: 2000 / 330 картинок, разрешение 1024x1024
Для сравнений приведены данные с валидационной выборки на Cityscapes.
Компетиторы
- pix2pix — базовая архитектура для conditional-генерации картинок небольшого разрешения. Обучена с нуля для разрешения 2048x1024
- CRN — сеть для conditional-генерации картинок высокого разрешения, веса публично доступны
Результаты
Оценивается Human Preference Score — как часто на SbS люди выбирают наш алгоритм. Проводилось в 2 сетапах: