{"id":8743,"title":"Windows 11 \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432","url":"\/redirect?component=advertising&id=8743&url=https:\/\/vc.ru\/promo\/321661-windows-11-krupneyshee-obnovlenie-os-za-poslednie-gody-vot-sem-glavnyh-izmeneniy-dlya-razrabotchikov&placeBit=1&hash=d495e1d882b51d6292fe6890650d751b0e17946139a3969ed4a20428c6a17cc8","isPaidAndBannersEnabled":false}

Как сделать бота, который превращает фото в комикс: пошаговая инструкция для чайников

Часть первая

Котаны, привет.

Я Саша и я балуюсь нейронками.

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

Инструкций о том, как с нуля обучить и задеплоить свою нейросеть, заодно подружив ее с телеграм ботом.

Инструкций для чайников, вроде меня.

photo2comicsbot

Сегодня мы выберем архитектуру нашей нейросети, проверим ее и соберем свой первый набор данных для обучения.

Выбор архитектуры

После относительно успешного запуска selfie2anime бота (использующего готовую модель UGATIT), мне захотелось сделать то же самое, но свое. Например, модель, превращающую ваши фото в комиксы.

Вот несколько примеров из моего photo2comicsbot, и мы с вами сделаем нечто подобное.

Поскольку модель UGATIT была слишком тяжела для моей видеокарты, я обратил внимание на более старую, но менее прожорливую аналогию - CycleGAN

В данной реализации есть несколько архитектур моделей и удобное визуальное отображение процесса обучения в браузере.

Коротко об архитектуре CycleGAN: это пара Generative Adversarial Networks, первая из которых преобразует изображение из категории А (например, фото) в категорию Б (например, комикс), а вторая - обратно, из категории Б в категорию А.


Каждая пара состоит из Генератора и Критика. Генератор преобразует изображение, например, из фото в комикс, а критик сравнивает полученный “фейковый” с настоящим комиксом. Задача Генератора - обмануть Критика, и наоборот. В процессе обучения Генератор учится создавать комиксы, все больше похожие на настоящие, а Критик учится лучше их различать.

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

Установка и проверка модели

Нам понадобятся:

  • Видеокарта с поддержкой CUDA и 8гб RAM (4 гб тоже может подойти, не проверял)
  • ОС Linux (на Windows тоже будет работать, но медленнее, как минимум в 1,5-2 раза)
  • Miniconda/Anaconda (можно, конечно, и просто Python 3.5+, но мы же в 2019, господа)

Miniconda можно взять здесь: https://docs.conda.io/en/latest/miniconda.html

Инструкции по установке: https://conda.io/projects/conda/en/latest/user-guide/install/index.html

После установки Anaconda/Miniconda (далее - conda), откроем терминал (или Anaconda Prompt из меню Пуск), создадим новую среду для наших экспериментов и активируем ее:

conda create --name cyclegan conda activate cyclegan

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

Далее просто следуем инструкциям README.MD из дистрибутива:

Сохраним себе дистрибутив CycleGAN:

git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix cd pytorch-CycleGAN-and-pix2pix

(или же просто скачаем архив с GitHub)

Установим нужные пакеты:

conda install numpy pyyaml mkl mkl-include setuptools cmake cffi typing conda install pytorch torchvision -c pytorch conda install visdom dominate -c conda-forge

Скачаем готовый датасет и соответствующую модель:

bash ./datasets/download_cyclegan_dataset.sh horse2zebra bash ./scripts/download_cyclegan_model.sh horse2zebra

Обратите внимание на то, какие фотографии есть в скачанном датасете, в чем разница и что между ними общего.

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

Наконец, протестируем модель на скачанном наборе данных:

python test.py --dataroot datasets/horse2zebra/testA --name horse2zebra_pretrained --model test --no_dropout

Результаты будут сохранены в папке /results/horse2zebra_pretrained/

Что ж, пора собрать свой датасет!

Создание обучающей выборки

Не менее важным этапом после выбора архитектуры будущей модели (и поиска готовой реализации на github ;) является составление dataset’a, или набора данных, на которых мы будем обучать и проверять нашу модель.

От того, какие данные мы будем использовать, зависит практически все. Например, UGATIT для selfie2anime бота была натренирована на женских селфи и женских лицах из аниме. Поэтому с мужскими фото она ведет себя как минимум забавно, заменяя брутальных бородатых мужчин на маленьких девочек с высоким воротником.

Ваш покорный слуга после того, как узнал, что смотрит аниме. selfie2animebot

Поэтому стоит отбирать те фото\комиксы, которые вы хотите использовать на входе и получить на выходе. Планируете обрабатывать селфи - добавляйте селфи и крупные планы лиц из комиксов, фото зданий - добавляйте фото зданий и страницы из комиксов со зданиями.

В качестве образцов фотографий я использовал DIV2K и Urban100, приправленные фотками звезд из гугла для пущего разнообразия.

Комиксы я взял из Marvel, страницы целиком, выкинув рекламу и анонсы, где рисовка не похожа на комикс. Ссылку приложить не могу по понятным причинам, но по запросу Marvel Comics вы легко найдете отсканированные варианты на любимых сайтах ;)

Список остальных публичных датасетов вы найдете тут.

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

​Terry Crews photo2comicsbot​

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

Структура папок в нашем датасете должна быть следующей:

selfie2comics ├── trainA ├── trainB ├── testA └── testB

trainA - наши исходные фото (порядка 1000шт)

testA - несколько фото для тестов модели (30шт. будет достаточно)

trainB - наши комиксы (порядка 1000шт.)

testB - комиксы для тестов (30шт.)

Бережно раскладываем свежескачанные DIV2K и Urban100 в папки trainA, testA, и отправляемся на охоту за любимыми сериями комиксов, которые аккуратно положим в папки trainB и testB.

Датасет желательно разместить на SSD, если есть такая возможность.

На сегодня это все, в следующем выпуске мы начнем обучать модель и получим первые результаты!

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

0
4 комментария
Популярные
По порядку

Очень интересная статья, спасибо!

5

А зачем нужно тренировать сеть которая преобразует комикс в реальное фото?

1

Спасибо за интересный вопрос! 
В этом состоит основное отличие архитектуры CycleGAN. 

При обучении обычных моделей (без обучаемого критика) или GAN на наборах данных с парными изображениями используются пары "исходное изображение"-"конечное изображение", которые мы подготовили сами - взяли "исходное изображение", перерисовали его в комикс самостоятельно (например, с помощью экшенов в фотошопе) и получили парное "конечное изображение". 
В таком случае функция потери (loss function) легко сравнит "предсказанное" (сгенерированное моделью) изображение с "конечным" (ground truth), потому что они парные, на них присутствуют одни и те же элементы и образы. 

В нашем случае у нас нет парных изображений.

Поэтому, если мы будем использовать только показания Критика, задача которого получить изображение, неотличимое от комикса, то мы можем получить на выходе нечто, что похоже на комикс, но совершенно непохоже на исходное изображение. Наша задача же получить исходное изображение, стилистически перерисованное в комикс. 

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

Надеюсь, стало понятнее =) ред.

1

Спасибо, теперь понятно)

0
Читать все 4 комментария
Завод по производству идей. Как работают акселераторы, зачем они нужны стартапам и куда идти с идеей прямо сейчас

По данным Startup Genome, 9 из 10 стартапов терпят неудачу. Возможных причин «смерти» много: недостаточно протестированная гипотеза, неподтвержденная юнит-экономика, неверная стратегия или просто неудача в подходе к продажам.

Опыт возврата денег за обучение дизайну у Yakovlevv.com. Тварь я дрожащая или право имею?

В данной статье приведен мой личный опыт покупки данных курсов, мои оценочные суждения, а также сухие факты, в виде скриншотов и аудиозаписей из моей личной переписки с владельцем этих самых курсов, на тот момент исполняющего услуги как ИП Яковлев Виталий Борисович ( ОГРНИП: 319784700156839 ), сейчас же, работающего от лица ФОП Торб'як Тетяна…

Что Tele2 предлагает клиентам в «черную пятницу»

На главной распродаже года клиентов компании ждут сразу несколько интересных предложений: скидки на смартфоны, пакеты SMS и безлимитный трафик на YouTube, Яндекс.Карты, Яндекс.Навигатор.

Мы сделали бот, который печатает и отправляет ваши фото маме. В 2 клика
Катя со свежими фотками для родителей

Мы запустили Kind Bot — доброго бота, которому в 2 клика можно скинуть свои фотки. Он их напечатает и отправит по почте вашей маме. Или другому близкому человеку.

ТОП-17 ошибок, которые съедают конверсию лендинга на завтрак
Новый пролетариат

Очень давно один из классиков написал ёмкую по тогдашним временам фразу «пролетариату нечего терять, кроме своих цепей» Сейчас сложно понять её суть, но тогда она была понятна всем. Рабочий обладал только своими «руками» и это было единственное, чем он владел, абсолютное большинство жило от зарплаты до заплаты в арендованном жилье и не обладала…

Возник по просьбе бразильских банкиров и стал любимым напитком солдат во время Второй мировой: история Nescafe Статьи редакции

В 2021 году Nescafe — крупнейшее подразделение Nestle и бренд, который оценивается больше чем в $20 млрд. По собственным данным компании, в мире каждую секунду выпивают более 5000 чашек напитка.

Дегустация Nescafe National Museum
Бизнес — как ребенок: как мамы совмещают свое дело с заботой о детях

Как совмещать бизнес и семью? Ко Дню матери своими историями поделились бизнесвумен, которые работают c ЮKassa и занимаются детьми. Читайте, как им удается сохранять жизненный баланс и добиваться успеха.

МТС не удалила привязанные к номеру персональные данные владельца после перехода номера к другому человеку

Какое-то время я пользовалась телефонным номером МТС, годах в 2015-18х. Номер юзался только для мессенджеров, симку в поездке вынула и куда-то задевала, в итоге номер перешел другому человеку. На звонки номер не отвечал, абонент был не абонент. В 2019 узнавала в салоне, можно ли его выкупить, сказали - увы, уже 2х владельцев сменил. Ну нет и нет.…

Как у меня украли 600 тысяч с карты, а «Тинькофф» нарушает федеральный закон

Спойлер: я не вводил никуда код, не переходил по ссылкам и не сообщал данные карты.

Хочу кухню как у подруги: зачем в Циан сделали поиск квартир по фото

Рассказывает Юлия Зыкова, руководитель команды «Аудитория» в Циан.

null