Нейронная сеть для имитации художественного стиля на 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. Пока я обрабатывал изображения друзей, я сначала был рад результатам, но потом понял, что обработанные сетью фото не уникальны т.к. я использовал один и тот же стиль для многих изображений. Используйте разные стили)

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

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

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