Few-shot Video-to-Video Synthesis
🔗 Ссылки
https://arxiv.org/abs/1910.12713
https://nvlabs.github.io/few-shot-vid2vid/
https://github.com/NVlabs/imaginaire/tree/master/projects/fs_vid2vid
https://github.com/NVlabs/few-shot-vid2vid
💎 Контрибьюшн
Предложен рабочий фреймворк для few-shot генерации видео: на входе семантическая driving-последовательность и небольшое кол-во примеров из нового домена (персонаж или иначе выглядящие пейзажи), а на выходе — реалистичное видео из нового домена, соответствующее семантике.
Грубо говоря, теперь можно сделать дипфейк по 1 фотографии без файнтюнинга модели. Авторы пришли к этому после того, как выяснилось, что vid2vid плохо обобщается на новые домены, и в частности не позволяет генерировать движения человека, которого не было в обучении
🛠 Задача
Задача формулируется аналогично vid2vid, но теперь для генератора добавляется дополнительная информация — K кадров из нового домена и соответствующая им семантическая информация (в таком же формате, как и для имеющихся данных):
То есть на инференсе мы хотим модель, которая по нескольким новым кадрам и семантическим driving-видео сможет сгененрировать видео из нового домена с заданными движениями. Например, можно задать движения губ с одного видео, показать модели известного политика в качестве примера, и получить видео с этим политиком и нужным липсинком
🔎 Детали
Общая схема генератора осталась прежней — для моделирования используется функция матирования:
Главным нововведением здесь является модуль генерации весов для сети h, которая генерирует области заполнения окклюженов. В supplementary авторы говорят, что этот модуль по сути является обобщением AdaIN в том смысле, что их модуль позволяет генерировать свёртку больше, чем 1x1.
Дополнительным улучшением является то, что в качестве сети для заполнения окклюженов теперь используется sota-архитектура SPADE для conditional-генерации картинок.
Представим, что у нас ровно один пример (картинка) из нового домена, K = 1. В статье предлагается следующий алгоритм:
- С помощью свёрточной сети E_F получить эмбеддинг картинки q1 (верхняя чать картинки (b))
- Послойно применить MLP E_P к эмбеддингу q1, чтобы получить параметры демодуляции для SPADE-модулей в сети H (картинка (c)). Скорее всего это делается для того, чтобы фичи были одинаково низко- или высокоуровневые на конкретных слоях:
То есть по сути происходит что-то аналогичное domain adaptation, когда обучаются только параметры BN
Attention-based Aggregation
Если примеров >1, то логично будет применить для инх механизм attention, чтобы не менять оставшуюся часть схемы с MLP. Для этого потребуются семантические карты s_ek, полученные тем же алгоритмом, что и для остальных данных.
Эмбеддер E_A генерирует фичемапы размером CxN (N = HxW), которые затем матрично умножаются на текущую семантическую карту s_t (t-й кадр из driving-видео). Это нужно для того, чтобы понять, какие из примеров наиболее релевантны s_t при генерации выходного кадра. Для объединения результатов делается линейная комбинация, которая и подаётся дальше в MLP E_P.
Авторы говорят, что попиксельный attention помогает определять, какие области из каких примеров релевантны для генерации текущего кадра видео. Например, для позы человека можно заметить, что при генерации front большая часть attention сосредоточена на примере front, и наоборот.
Обучение
Для обучения используются те же данные, что и для vid2vid, но теперь в одной обучающей выборке допускаются данные из разных доменов.
Была замечена корреляция качества генерации с количеством обучающих данных и с количеством примеров из нового домена.
🔬 Эксперименты
- YouTube Dancing videos — 1500 видео с Youtube с танцующими людьми. Во время обучения примерами были случайные кадры из синтезируемого видео. На тесте ни картинки-примеры, ни позы не были в обучающей выборке, то есть модель их не видела
- Street Scene videos — видео с регистраторов из Германии (Cityscapes), Бостона и Нью-Йорка. На тесте дополнительно брались видео из датасетов ApolloScape и CamVid
- FaceForensics — аналогично статье vid2vid; почему-то качество авторы не репортят
- Pose Error — L1 между точками gt-позы и позы, оценённой той же моделью (OpenPose) по синтезированным кадрам
- Pixel Acc — аналог для сегментации, точность попадания пикселя в gt-класс
- mIoU (mean IoU) — ещё один аналог Pose Error для меток классов на карте сегментации
- Encoder — для генерации используется декодер h и энкодер, который получает style vector (по сути — эмбеддинг) из картинки-примера
- ConcatStyle — style vector конкатенируется с семантическими картами из driving video, и полученные аугментированные картинки используются для spatial modulation внутри SPADE-модулей при генерации
- AdaIN — после каждого spatial modulation в SPADE-генераторе вставлен модуль AdaIN, параметры для которого вычисляются энкодером по картинке-примеру
- PoseWarp, MonkeyNet (предшественник FOMM от тех же авторов)