Доброго времени суток, дорогие друзья. В изобразительном искусстве, особенно в живописи, люди имеют навыки и опыт для создания уникальных картин используя свое понимание сложной связи между стилем изображения и его содержанием. Так как люди еще далеки чтобы придумать этому название, на данный момент нет алгоритмической основы описания процесса, как и не существует искусственных систем с данными возможностями. Тем не менее, в области искусственных нейронных сетей и нейровизуального восприятия, была продемонстрирована система для распознавания лиц с почти человеческой производительностью, она называется 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
Теперь можно использовать сеть для обработки наших изображений. Например:
1 |
th neural_style.lua -style_image YOURPAINTINGHERE.jpg -content_image YOURPHOTOHERE.jpg -gpu -1 |
Флаг -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 .
Заметки
- У меня нейронная сеть заработала только на ubuntu amd64.
- Обработка без GPU занимает очень много времени, на одно изображение у меня уходило по 7 часов. Топовая видеокарта от nvidia справится за несколько минут.
- Пока я обрабатывал изображения друзей, я сначала был рад результатам, но потом понял, что обработанные сетью фото не уникальны т.к. я использовал один и тот же стиль для многих изображений. Используйте разные стили)
На этом все, приятного искусственного творчества, но от реального всегда больше удовольствия)