Статья удалена
За последние несколько лет нейросети получили весьма широкое распространение. Они уже управляют автомобилями, обыгрывают профессиональных игроков (но с ограничениями), а также подставляют лица неугодных (или звезд) к телам порноактёров. Давайте приобщаться!
SPOILER: в статье очень много ссылок и картинок (а также немного Тодда).
Я уже давно хотел приобщиться к данной теме, но всё никак не мог собраться с мыслями и преодолеть лень. И так получилось, что одни из самых активных подписчиков подсайта также интересуются данной темой. Спасибо Денису Ширяеву за наводку.
Статья рассчитана на новичков, так как мы будем учиться запускать уже написанную и обученную нейросеть. К непосредственному созданию мы перейдём в последующих статьях (если тема будет востребована).
Это вольная адаптация представленной по ссылке инструкции.
Мы будем запускать нейросеть на графическом адаптере Nvidia. Запуск на CPU также возможен, но мы его здесь рассматривать не будем, так как скорость работы оставляет желать лучшего.
Требования
- Windows 7 и выше (лично я запускал на «десятке»).
- Python 3 и выше.
Если есть другие версии, то лучше их удалить. После установки 64-битной версии, у меня по умолчанию продолжала использоваться 32-битная версии 3.7.0. Поэтому сначала я через Apps & Features в панели управления Windows удалил старую версию, а затем уже установил новую.
- CUDA 9 и выше.
Я использовал 10. При установке CUDA рекомедует установить Visual Studio, но я этого не делал, всё прекрасно работает.
После первого запуска я получил ошибку такого вида:
Проблема заключалась в том, что установка CUDA Toolkit каким-то образом повредила драйверы видеокарты. Переустановка драйверов помогла решить эту проблему. Ссылка на установку CUDA.
- Графический адаптер NVIDIA с поддержкой CUDA (в моём случае — это Quadro M1200).
Краткое введение
PyTorch — это библиотека машинного обучения для Python, являющаяся в настоящий момент одной из самых популярных (наряду с Tensorflow)
ESRGAN (Enhanced SRGAN) — это представитель GAN-нейросетей (генеративно-состязательная сеть). Основной принцип заключается в том, что она состоит из комбинации двух нейросетей, одна из которых генерирует образцы, а другая — старается отличить правильные от неправильных.
Основная задача ESRGAN — это «дорисовка» изображения для увеличения его разрешения. Умельцы же быстро поняли, что это довольно дешёвый и простой способ улучшить картинку старых игр, просто вытаскивая текстуры и «прогоняя» через сеть. К слову, результат выходит более чем достойный. Не удивлюсь, если Sony начнёт таким образом «ремастерить» картинку для PS Classic.
Установка PyTorch
Чтобы установить PyTorch, достаточно выполнить несколько простых команд, описанных на официальном сайте:
Далее нам необходимо скачать исходники сети ESRGAN:
Я просто склонировал репозиторий, так как у меня был под рукой git-клиент (ноутбук-то рабочий), но можно просто скачать zip-архив и распаковать куда-нибудь.
Помимо нейросети опционально можно скачать стандартные предобученные модели, доступные тут.
Если совсем примитивно, то модель — это результат обучения. В рамках данной вводной статьи мы не будем говорить о методах обучения или тренировать нейросеть. Мы только запускаем то, что сделали за нас умные люди.
Обязательно скачайте модель Manga 109 — тут. Изначально её делали на датасете для дорисовки «манги», но в последствии оказалось, что она неплохо дорисовывает рисунки в целом.
И модель, которой поделился пользователь Reddit – Falcoon.
Falcoon основана на Manga и заточена для игр в стиле файтингов, в нашем случае модель Manga оказалась более подходящей, но если вы возьметесь за старенький Street Fighter, эта модель подойдёт лучше.
Далее кладём их в директорию models, картинки в png- или jpg-формате — в директорию LR.
Мы наконец-то всё настроили и установили. Можно запускать.
Разбор полётов
Итак. Первоначально тесты я проводил на текстурах из Warcraft 3 (в качестве бонуса — свой аватар). Также эмпирическим путём было получено ограничение на исходный размер картинки — в моём случае это 600х600 пикселей.
Данная задача очень сильно зависит от количества видеопамяти (4 Гб у меня). Теоретически, ограничение можно преодолеть, уменьшив размер пачки в исходниках нейросети, но это материал для более продвинутых статей. Помните? Мы собирались пока только запустить и посмотреть.
Другой путь — это запуск на CPU с использованием оперативной памяти (её, как правило, больше, чем видеопамяти). Но в таком случае неизбежно возникнут проблемы с производительностью. ЦП, к сожалению, плохо приспособлены к таким задачам, поэтому выполнение займёт ощутимо большее время, чем даже слабенькая видеокарта из сегмента «вставил лишь бы была».
Оригиналы.
Результаты Manga.
Результаты Falcoon.
Результаты ESRGAN.
Результаты PSNR.
Прочие картинки
Библиотека для тестов собрана из скриншотов — это грубый способ тестировать нейронку, так как в идеале нужно экспортировать текстуры из игры, улучшать и зашивать их обратно. Статические же по сути скриншоты всегда будут содержать глитчи и артефакты.
UPD: Вот отдельный альбом на imgur где еще больше примеров работы нейронки. Возможно, в посте не всем заметна разница
Заключение
В конце хотелось бы сказать, что первое знакомство с нейросетями вызывает неподдельный восторг и чувство, будто ты прикоснулся к чему-то магическому и прекрасному.
Это всего лишь робкие шаги без вникания в суть, копания в исходных кодах и так далее и тому подобное. Но эта статья, на мой взгляд, показывает, насколько просто вступить в этот клуб, насколько низок порог вхождения.
Спасибо за внимание.
P.S. Делитесь своими результатами upscale (именно так называется то, что мы сделали) в подсайте «Наука» или в комментариях к этому посту.