Нейронные сети могут делать много разных вещей. Они могут понимать наши голоса, распознавать изображения и переводить речь, но знаете ли вы, что еще они умеют рисовать? Изображение сверху демонстрирует некоторые сгенерированные результаты применения нейронного рисования.
Сегодня я собираюсь познакомить вас с тем как это делается. Прежде всего, убедитесь, что у вас обновленная копия Ubuntu (14.04 — та, что использовал я). Вам необходимо иметь несколько гигов свободного пространства на жестком диске и в оперативной памяти, хотя бы не менее 6 GB (больше оперативки для больших выводимых разрешений). Для запуска Ubuntu как виртуальной машины, вы можете использовать Vagrant вместе с VirtualBox.
Убедитесь, что у вас установлен git. Чтобы скачать и установить git, просто откройте терминал и выполните:
$ sudo apt-get install git
Шаг 1: Установите torch7
Torch — это фреймворк для научных вычислений с широкой поддержкой алгоритмов машинного обучения. Torch является главным пакетом Torch7, где определены структуры данных для многомерных тензоров и математические операции для них. Дополнительно, он предоставляет много утилит для доступа к файлам, сериализации объектов произвольных типов и другие полезные утилиты.
Запустите эти команды в терминале (вам может понадобиться использовать для них sudo):
$ cd ~/
$ curl -s https://raw.githubusercontent.com/torch/ezinstall/master/install-deps | bash
$ git clone https://github.com/torch/distro.git ~/torch --recursive
$ cd ~/torch; ./install.sh
Теперь нам надо обновить наши переменные окружения, запустите:
$ source ~/.bashrc
Шаг 2: Установите loadcaffe
Выполните в терминале:
$ sudo apt-get install libprotobuf-dev protobuf-compiler
$ luarocks install loadcaffe
Либо, если у вас возникают проблемы, попробуйте так:
$ git clone git@github.com:szagoruyko/loadcaffe.git
$ ~/torch/install/bin/luarocks install loadcaffe/loadcaffe-1.0–0.rockspec
Шаг 3: Установите neural-style
Это torch-реализация спецификации Нейронный Алгоритм Художественного Стиля Леона А. Гатиса, Александра С. Эккера и Маттиаса Бетге. Спецификация представляет алгоритм для комбинирования контента одного изображения со стилем другого изображения, используя сверточные нейронные сети.
Сначала склонируйте neural-style с GitHub:
$ cd ~/
$ git clone https://github.com/jcjohnson/neural-style.git
Далее, скачайте модели нейронной сети:
$ cd neural-style
$ sh models/download_models.sh
Шаг 4: Запускаем
Теперь убедитесь, что у вас есть хотя бы 6 GB оперативной памяти (если вы используете виртуальную машину, убедитесь, что выделили достаточное количество памяти для нее). Затем проверьте, работает ли нейронный стиль с помощью этой команды:
$ th neural_style.lua -gpu -1 -print_iter 1
Заметьте, что вы выполняете это в режиме CPU, выполнение в режиме GPU выходит за рамки данной статьи.
Чтобы увидеть инструкции о том, как использовать нейронный стиль, запустите:
$ th neural_style.lua ?
Теперь давайте выполним тестовую команду, чтобы убедиться, что нейронные стили работают. Для начала убедитесь, что вы находитесь в директории нейронных сетей, если вы следовали всем инструкциям выше, вы должны быть в ~/neural-network, теперь запустите:
th neural_style.lua -style_image examples/inputs/starry_night.jpg -content_image examples/inputs/golden_gate.jpg -gpu -1 -image_size 256
Заметьте, я ввел меньший размер изображения, чтобы обработка закончилась быстрее. Когда команда завершится, выходной файл, со стандартным именем out.png, будет расположен в той же директории.
Результат
golden_gate.jpg
starry_night.jpg
out.png
Комментарии (14)
Samouvazhektra
15.12.2016 08:13Спасибо за статью, и так же присоединяюсь к вопросам выше. И собственно любопытно — насколько профита даёт использование gpu Пока запустила картинку… шуршит уже около часа
lleo_aha
15.12.2016 09:17Добавлю свои 5 копеек сюда.
— На CPU neuralstyle этот считать вообще бессмысленно — борода отрастёт и поседеешь пока он картинку 512х512 нарисует — оно на процессоре не параллелится на несколько ядер почему то
— Сам neural style есть с подробной инструкцией по запуску на гитхабе, но инструкцию с гита использовать нельзя (по крайней мере ту часть которая «как получить стилизованную картинку») — выдаёт какую то многозначительную ошибку про несоответствие размеров слоёв нейросети или чтото типа того
— Основная проблема — никто так и не смог повторить рисовалку как у остаграм-точка-ру (тот же neural style, но как то подкрученный — рисует красиво и достаточно быстро)
Если ктото знает за последний пункт — велком поделиться :)Captain_Sparrow
15.12.2016 17:10Есть какие-либо требования к видеопамяти или система использует оперативную в случае нехватки памяти видеокарты?
lleo_aha
15.12.2016 17:47В readme репозитория написано что нужно много (2гб+), но вот что оно делает если она заканчивается — не знаю. Я просто гонял это всё на процессоре и плакал
lenz1986
15.12.2016 11:27А можно немного технический вопрос. Будет ли работать старенькая tesla c2075?
Просто искал в инете никто путем ничего не пишет :(
И второй вопрос если я буду использовать эту теслу, какой минимальный процессор мне нужен? Прост ов данный момент времени есть шальная мысля воткнуть эту теслу в какую нибудь микро АТХ плату с селероном на борту, запихать туда гигов 8 оперативки и запустить все это дело.
Vladimir44
15.12.2016 16:04На: curl -s https://raw.githubusercontent.com/torch/ezinstall/master/install-deps | bash
Выдает: Error: An unsatisfied requirement failed this build.
Подскажите что делать? Уж с консолью не особо дружу. (osx 10.10)
Пы.Сы. Извините за дурацкий вопрос)roversochi
27.03.2017 10:51Спасибо, я даже не знал про такие драйвера. Похоже, что как раз то, что надо!
А про 3D-принтер я тоже думал, но пока решил мини-станок с ЧПУ сделать. Эти драйвера тоже пригодятся, судя по всему.
Quiensabe
Спасибо за статью! Давно хотелось попробовать, но останавливало отсутствие опыта.
Не подскажите, если я хочу один раз «извлечь стиль» из картины, а потом применить его на множество фотографий, то операция сильно ускорится? Есть вообще такая функция? Ведь по идее, большая часть времени должна уходить на формирование сети, а потом применять ее на разные изображения, должно быть проще. Или нет?
Вообще, если не разбираться с GPU, то сколько времени может занять формирование картинки хотя бы 1024*1024 px?
alex4321
Я специалист полудиванный и уж тем более — конкретно по части torch7, но если из нашей сети можно выделить сегмент, отвечающий за выделение стиля (тут бы её схематическую структуру), то:
1. воспроизводим эту часть (её структуру и веса из обученной сети)
2. скармливаем нашей урезанной сетке изображение — получим вектор/матрицу (ну или какая там размерность) стиля
3. строим «остальную» часть сети. Только построенную в п.1 часть заменяем входом соответсвующей размерности и подаём на него выделенный вектор.
Как это сделать в torch7 с минимум ручной работы — пусть скажут использовавшие его. Наверняка можно выпилить слои из предобученной сети или подгрузить веса только нужных нам слоёв.
«Ведь по идее, большая часть времени должна уходить на формирование сети, а потом применять ее на разные изображения, должно быть проще»
На обучение? Конечно.
Quiensabe
Спасибо за ответ!
По логике работы понятно, вопрос больше про практическую сторону, как бы это проще реализовать.
Посмотрел немного github neural-style — вроде как там есть необходимый функционал, но как его реализовать на практике — неясно. Увы, я не очень дружу с linux, да и с нейронными сетями тоже не приходилось сталкиваться. Но тема интересная и крайне перспективная, так что нужно разбираться.
gogolgrind
Пожалуйста гуглите fast neural style и Perceptual Losses for Real-Time Style Transfer and Super-Resolution