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

Сегодня я собираюсь познакомить вас с тем как это делается. Прежде всего, убедитесь, что у вас обновленная копия 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)


  1. Quiensabe
    15.12.2016 00:22

    Спасибо за статью! Давно хотелось попробовать, но останавливало отсутствие опыта.

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

    Вообще, если не разбираться с GPU, то сколько времени может занять формирование картинки хотя бы 1024*1024 px?


    1. alex4321
      15.12.2016 03:11

      Я специалист полудиванный и уж тем более — конкретно по части torch7, но если из нашей сети можно выделить сегмент, отвечающий за выделение стиля (тут бы её схематическую структуру), то:
      1. воспроизводим эту часть (её структуру и веса из обученной сети)
      2. скармливаем нашей урезанной сетке изображение — получим вектор/матрицу (ну или какая там размерность) стиля
      3. строим «остальную» часть сети. Только построенную в п.1 часть заменяем входом соответсвующей размерности и подаём на него выделенный вектор.

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

      «Ведь по идее, большая часть времени должна уходить на формирование сети, а потом применять ее на разные изображения, должно быть проще»
      На обучение? Конечно.


      1. Quiensabe
        15.12.2016 03:36

        Спасибо за ответ!
        По логике работы понятно, вопрос больше про практическую сторону, как бы это проще реализовать.

        Посмотрел немного github neural-style — вроде как там есть необходимый функционал, но как его реализовать на практике — неясно. Увы, я не очень дружу с linux, да и с нейронными сетями тоже не приходилось сталкиваться. Но тема интересная и крайне перспективная, так что нужно разбираться.


    1. gogolgrind
      15.12.2016 04:16
      +1

      Пожалуйста гуглите fast neural style и Perceptual Losses for Real-Time Style Transfer and Super-Resolution


  1. Spirit_Urban
    15.12.2016 08:13

    Офигеть. Уже устанавливаю!


  1. Samouvazhektra
    15.12.2016 08:13

    Спасибо за статью, и так же присоединяюсь к вопросам выше. И собственно любопытно — насколько профита даёт использование gpu Пока запустила картинку… шуршит уже около часа


    1. mephistopheies
      15.12.2016 08:44

      на порядок, лучше сразу делать на гпу


  1. lleo_aha
    15.12.2016 09:17

    Добавлю свои 5 копеек сюда.
    — На CPU neuralstyle этот считать вообще бессмысленно — борода отрастёт и поседеешь пока он картинку 512х512 нарисует — оно на процессоре не параллелится на несколько ядер почему то
    — Сам neural style есть с подробной инструкцией по запуску на гитхабе, но инструкцию с гита использовать нельзя (по крайней мере ту часть которая «как получить стилизованную картинку») — выдаёт какую то многозначительную ошибку про несоответствие размеров слоёв нейросети или чтото типа того
    — Основная проблема — никто так и не смог повторить рисовалку как у остаграм-точка-ру (тот же neural style, но как то подкрученный — рисует красиво и достаточно быстро)

    Если ктото знает за последний пункт — велком поделиться :)


    1. Captain_Sparrow
      15.12.2016 17:10

      Есть какие-либо требования к видеопамяти или система использует оперативную в случае нехватки памяти видеокарты?


      1. lleo_aha
        15.12.2016 17:47

        В readme репозитория написано что нужно много (2гб+), но вот что оно делает если она заканчивается — не знаю. Я просто гонял это всё на процессоре и плакал


  1. lenz1986
    15.12.2016 11:27

    А можно немного технический вопрос. Будет ли работать старенькая tesla c2075?
    Просто искал в инете никто путем ничего не пишет :(
    И второй вопрос если я буду использовать эту теслу, какой минимальный процессор мне нужен? Прост ов данный момент времени есть шальная мысля воткнуть эту теслу в какую нибудь микро АТХ плату с селероном на борту, запихать туда гигов 8 оперативки и запустить все это дело.


  1. 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)

    Пы.Сы. Извините за дурацкий вопрос)


    1. roversochi
      27.03.2017 10:51

      Спасибо, я даже не знал про такие драйвера. Похоже, что как раз то, что надо!
      А про 3D-принтер я тоже думал, но пока решил мини-станок с ЧПУ сделать. Эти драйвера тоже пригодятся, судя по всему.


      1. Vladimir44
        17.12.2016 00:44

        Буду пробовать, спасибо :)