Vladimir

Dressing/Undressing via CycleGAN

Описание проекта

Генеративные сети (GAN's) стали очень популярны и используются в сотнях различных приложений. От шуточных вроде генерации мемов и котиков мутантов до промышленных применений - в медицине (разработка лекарств), промышленности (увеличение обучающей выборки с использованием генеративных сетей показывает интересные результат) и многое другое.

Однако, есть задача, которая, несмотря на возникающие вопросы, очень часто всплывает в data science сообществе. Еще чаще ее предлагают решить люди не из области которые что то услышали про генеративные сети. Задача это научиться раздевать людей по фотографии. При попытке ее решить возникает куча проблем, главная из которых собрать правильные данные.

 

После тысяч часов серфинга и изучения домена я наткнулся на сайт где лежит пара тысяч фотоссесий моделей и среди фотографий есть практически парные - раздет/одет. Попарсив и почистив этот датасет получилось ~1700 пар изображений. 

После этого на этих картинках я пробовал обучать разные архитектуры. Paired модели по типу pix2pix выпали, они очень плохо переносят геометрические трансформации. В итоге я остановился на CycleGAN архитектуре, она быстро начала показывать хороший результат на моих данных так что я занялся модификациями.

Прежде всего можно научиться вырезать из изображения только человека. Для этого я взял pspnet обученную на voc2012, она из коробки показала удовлетворительные результаты, так что я остановился на ней.

После этого я пробовал прокачивать CycleGAN используя фичи вроде perceptual loss, обучение с масками, нормирование положения людей, paired аугментации (когда мы берем половинку с одной картинки а вторую половинку со второй картинки). Глобально это ничего не меняло, так что я взял лучшую базовую CycleGAN архитектуру которая давала хорошие результаты.

В итоге работает как то так. Это результаты с тестовых данных, так что несмотря на то что данные похожие, конкретно этих моделей CycleGAN никогда не видел во время обучения. А еще можно использовать не только для вредительство но и что бы прятать nsfw контент. 

После этого хочется завернуть это все в сервис. Так что я сделал бота для телеграмма: @tunboxingbot. На вход нужно подавать изображегие человека в полный рост. Главая проблема в том  что картинки необходимо выравнивать, и делается это парой эвристик, который часто лажают поэтому результаты могут быть плохими. Так же имеются косяки с построцессингом.

 

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

Состав команды:

  • Vlad Gl, ml guy

Комментарии

Иван Федоров

А работает, как я понимаю, только на девушках? Позакидывал разные фотки, в том числе и котов, выдает каких-то трансгендеров :))

Vladimir

Да, собирать/размечать мужчин и тем более животных у меня руки не дошли :) но любой желающий может предложить как прокачать датасет :)

Иван Федоров

Ну датасет и так норм :)) Лучше его прокачивать, чтобы качественный результат был, а то сейчас та же Марго Робби получилась размытая :(

Иван Бондаренко

Протестировали вашего бота. Результат не очень впечатляющий.
https://vk.com/vika_kondrashuk?w=wall23967617_3777%2Fall
Может быть есть какие-то требования к изображениям?

Иван Бондаренко

Но идея очень классная! Если улучшить качество, то проект взлетит.

Vladimir

Да, нужны изображения вполный рост, вид спереди. Тогда может довольно приемлемо работать (как в примерах в комментариях ниже).

Vladimir

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

Эмиль Закиров

Датасет просто топ!
Жаль что вряд ли на него можно получить нормальное разрешение, если захотеть коммерциализировать проект

Ivan Panin

Vlad,  выглядит круто! Возможно, удастся еще улучшить качество, добавив отечественные кастинги :)

Иван Бондаренко

Очень интересная работа. Нет ли примеров, как оно работает в другом освещении/при сдвигах? Понимаю, что внутри зашиты эвристики, занимающиеся нормализацией, но даже сколько-нибудь близкий результат на "реалистичных" данных может быть интересным.

Vladimir

Можно позаливать картинки в бота - @tunboxingbot , картинки должны быть в полный рост и желательно стоять ровно

Vladimir

Пара примеров:
https://imgur.com/a/q7r0OJJ
https://imgur.com/a/MUNxuHN

Pavel Mochalov

Vlad, это просто офигенно! Ты сделал мне настроение на целый день. Запилим такую штуку в рилл-тайм на телефоне?

Denis Cera

И собираем фотки голых людей :D

Vladimir

Надо сначала качество подтянуть, и сразу в vr :)