В 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 плохо справляется с преобразованием в класс, сильно отличающийся от начального.