Нейронная сеть для имитации художественного стиля на Ubuntu 14.04

Доброго времени суток, дорогие друзья. В изобразительном искусстве, особенно в живописи, люди имеют навыки и опыт для создания уникальных картин используя свое понимание сложной связи между стилем изображения и его содержанием. Так как люди еще далеки чтобы придумать этому название, на данный момент нет алгоритмической основы описания процесса, как и не существует искусственных систем с данными возможностями. Тем не менее, в области искусственных нейронных сетей и нейровизуального восприятия, была продемонстрирована система для распознавания лиц с почти человеческой производительностью, она называется Deep Neural Networks (см. Google Deep Dream). Это искусственная нейронная сеть с набором алгоритмов для глубокого машинного обучения.

Глубокое обучение (англ. Deep learning) — набор алгоритмов машинного обучения, которые пытаются моделировать высокоуровневые абстракции в данных, используя архитектуры, состоящие из множества нелинейных трансформаций.

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

Результат

Установка на Ubuntu

Для начала нам нужна Ubuntu amd64. Так как это проект с открытым исходным кодом нам нужно установить Git. Открываем терминал и устанавливаем  sudo apt-get install git .

Во первых, необходимо добавить поддержку языка Lua, установим пакет командой  sudo apt-get install lua5.2 .

Во вторых, нужно установить менеджер пакетов LuaRocks, чтобы проще установить другие пакеты/классы Lua. Для этого введите команду  sudo apt-get install luarocks .

В третьих, установим LuaJIT. Just-In-Time компилятор (см. интерпретатор языка Lua). Просто введите  sudo apt-get install luajit. .

На этом установка основных пакетов закончена.

Фреймворки

Теперь необходимо установить torch. Torch это открытая библиотека с широким набором функций для машинного обучения и научных вычислений. Установим ее используя Git  curl -s https://raw.githubusercontent.com/torch/ezinstall/master/install-all | bash . Корректность установки можно проверить командой  luajit -ltorch . Должен появится интерфейс torch.

Теперь нужно установить loadcaffe. Это загрузчик нейронных сетей из их репозитория, там  множество различных моделей. Сначала установим зависимости командой  sudo apt-get install libprotobuf-dev protobuf-compiler . Затем установим сам пакет  sudo luarocks install loadcaffe .

Теперь обновим/добавим Lua пакеты image и nn через luarocks командами  sudo luarocks install image и  luarocks install nn .

Установка модели Deep Style

Мы будем использовать neural-style. Это скрипт-обертка для использования нейронной сети. Он обеспечивает простой интерфейс. Скачиваем скрипт   sudo git clone https://github.com/jcjohnson/neural-style.git . Затем перейдем в скачанный каталог командой  cd neural-style .

Теперь, когда у нас есть весь необходимый софт и скрипт, нам необходимо скачать модель нейронной сети. Этот процесс занимает достаточно долго времени(10-20 минут). Скачивание модели начнется сразу после ввода команды  sudo sh models/download_models.sh .

Использование Deep Style

Теперь можно использовать сеть для обработки наших изображений. Например:

Флаг   -gpu -1  отключает поддержку GPU. Для включения поддержки необходимо установить CUDA и cudann.torch (инструкция). Для использования нескольких изображений, напишите их через запятую  -style_image starry_night.jpg,the_scream.jpg. .

Опции

  • -image_size : Максимальный размер изображения. По умолчанию 512.
  • -style_blend_weights : Коэффициент веса для стилей изображения. Если используются несколько изображений, то передаются занчения в виде списка чисел, разделеных запятой  -style_blend_weights 3,7 .
  • -gpu : Идентификатор GPU процессора; Для включения CPU используйте  -gpu -1 .

Опции оптимизации

  • -content_weight : Определяет вес контента. По умолчанию 5e0.
  • -style_weight : Определяет вес стиля. По умолчанию 1e2.
  • -tv_weight : Общий вес, помогает при сгладить изображение. По умолчанию 1e-3.
  • -num_iterations : Кол-во итераций. По умолчанию — 1000.
  • -init : Метод генерации генерируемого изображения  random  или  image . По умолчанию random  который использует шум для построения изображения, как на бумаге.; image  в этом случае будет использован контент.
  • -optimizer : Алгоритм оптимизации  lbfgs  или  adam ; По умолчанию  lbfgs . С L-BFGS получится более качественный вариант, но он потребляет большое кол-во оперативной памяти. Переключите на ADAM если не будет хватать оперативной памяти;
  • -learning_rate : Коэффициент обучения. Используется с оптимизатором ADAM. По умолчанию 1e1.
  • -normalize_gradients : Если этот флаг включен, то градиенты контента и стиля будут нормализованы для каждого слоя. Идея взята из andersbll/neural_artistic_style.

Опции вывода

  • -output_image : Имя выходного изображения. По умолчанию  out.png .
  • -print_iter : Показывает процесс каждые  print_iter  итераций.
  • -save_iter : Сохраняет изображение каждые  save_iter  итераций.

Опции слоев

  • -content_layers:  перечисленные через запятую названия слоев нейронной сети, которые будут использованы для реконструкции контента. По умолчанию  relu4_2 .
  • -style_layers : перечисленные через запятую названия слоев нейронной сети, которые будут использованы для реконструкции стиля.  По умолчанию  relu1_1,relu2_1,relu3_1,relu4_1,relu5_1 .

Заметки

  1. У меня нейронная сеть заработала только на ubuntu amd64.
  2. Обработка без GPU занимает очень много времени, на одно изображение у меня уходило по 7 часов. Топовая видеокарта от nvidia справится за несколько минут.
  3. Пока я обрабатывал изображения друзей, я сначала был рад результатам, но потом понял, что обработанные сетью фото не уникальны т.к. я использовал один и тот же стиль для многих изображений. Используйте разные стили)

На этом все, приятного искусственного творчества, но от реального всегда больше удовольствия)

Rate this post

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *