fbpx
  • FUNIT: нейросеть для image-2-image трансформаций от NVIDIA

    В Nvidia, Cornell и Aalto разработали нейросеть (FUNIT), которая преобразует изображение объекта из одного класса в другой (например, меняет породу собаки на изображении) и при этом требует минимального количества данных для обучения. FUNIT достигает state-of-the-art результатов и в части случаев обходит конкурирующие архитектуры.

    Обычно нейросети для того, чтобы выдавать реалистичные результаты, требуются большие объемы данных для обучения. Сбор и разметка данных на текущий момент являются ресурсоемкими. При этом люди способны принимать решения на основе ограниченного количества данных благодаря высокой обобщающей способности. Поэтому одним из направлений в глубоком обучении является Few-Shot Learning(FSL). FSL направление фокусируется на увеличении обобщающей способности моделей. FUNIT позиционируется как few-shot модель, которой для преобразования объекта на изображении нужна всего пара примеров.

    Архитектура FUNIT

    Обучающая выборка состоит из изображений объектов, которые принадлежат к разным классам. Модель учится конвертировать объект одного класса в объект другого класса. Обученной модели необходима пара примеров изображений класса, в который хотим преобразовать, чтобы сгенерировать измененное изображение. FUNIT принимает на вход изображение, которое нужно изменить, и примеры изображений того класса, в который нужно преобразовать.

    Модель основана на GAN архитектуре. Сначала производится энкодинг входного изображения (конволюционные слои и ResBlocks), одновременно кодируются изображения примеров (конволюционные слои и Average Pooling). Они поступают в декодер. На выходе получается сгенерированное изображение.

    Визуализация структуры генеративной модели

     

    Сравнение результатов работы нейросетей

    Исследователи сравнивали работу нейросети на 4-х датасетах: Animal Faces, Birds, Flowers, Foods. Чтобы определить границы объекта на изображении исследователи использовали Faster RCNN. FUNIT сравнивали с StarGAN, MUNIT, UNIT и CycleGAN.  На отдельных примерах ниже видно, что FUNIT выдает более реалистичные результаты.

    Примеры работы FUNIT и конкурирующих архитектур. Input — входные изображения, Class image y_1 и y_2 — примеры целевого класса, остальные колонки — сгенерированные разными архитектурами изображения

    Ограничения работы

    Несмотря на реалистичность преобразований объектов похожих классов, FUNIT плохо справляется с преобразованием в класс, сильно отличающийся от начального.

    Примеры неудачных преобразований FUNIT