DeepArtist.org — это платформа обработки изображений, использующая сверточные нейронные сети для выполнения самых современных методов обработки изображений. Это программное обеспечение предназначено для любителей и цифровых художников, и поэтому этот проект сосредоточен на практических инструментах, предназначенных для создания красивых изображений. Для локального запуска вам понадобится новейший Nvidia GPU, но вы также можете запускать эти задачи на Amazon EC2.

В отличие от многих современных проектов ИИ, этот проект использует Scala, а не Python. Я попытался упростить вещи, чтобы вообще требовалось очень мало грамотности в программировании, а кривая обучения была удобной для начинающих, которые хотят экспериментировать. Одним из преимуществ такого подхода является то, что это программное обеспечение легко работает в различных системах, включая рабочие столы Windows и Mac, а также в облаке.

Как вы быстро обнаружите, эти процессы рисования имеют множество элементов управления и настроек и могут быть настроены бесчисленным количеством способов. Для получения идеального результата изображения может потребоваться немало экспериментов, и вам понадобится способ отслеживать эту работу. Кроме того, вы можете разработать новые художественные конвейеры и, возможно, захотите ими поделиться. Для поддержки этих типов рабочих процессов приложения DeepArtist выводят форматированный текст и изображения в качестве выходных данных и автоматически встраивают их в статический веб-сайт на платформе s3.

Ключевой частью DeepArtist.org являются примеры — набор стартовых приложений, которые используют платформу для демонстрации основных методов и концепций обработки изображений.

Программное обеспечение для разработки

Во-первых, есть несколько основных инструментов, необходимых для запуска этого программного обеспечения:

  1. Java — у вас, вероятно, есть какая-то версия Java, но вам нужно будет установить Java Development Kit, чтобы вы могли скомпилировать и запустить код. Существует несколько дистрибутивов JDK, многие из которых доступны бесплатно. Я использую Oracle JDK 8.
  2. Git — для Git существует несколько дружественных дистрибутивов и интерфейсных оболочек, но я предпочитаю базовую командную строку. Вы, вероятно, можете обойтись без этого, если используете плагин IntelliJ git.
  3. IntelliJ — технически вам не нужна навороченная среда разработки, но она бесплатна и стоит того места на диске. IntelliJ предоставляет версию сообщества, в которой есть практически все функции Java, которые вам понадобятся для запуска этого программного обеспечения и разработки с его помощью. Я использовал бесплатную версию для разработки почти всего этого программного обеспечения.

Гитхаб

Если вы не являетесь участником Github, я рекомендую зарегистрировать бесплатную учетную запись. Затем вы можете разветвить examples.deepartist.com, чтобы у вас была собственная копия для настройки.

Я также рекомендую вам установить и настроить плагин Intellij github: https://www.jetbrains.com/help/idea/github.html

cuDNN

Если вы хотите запускать задания локально и у вас есть хороший графический процессор NVidia, вам необходимо установить cuDNN (библиотека глубокой нейронной сети CUDA). Если вы не выполняете задания локально, инстансы Amazon Deep Learning поставляются с предустановленной библиотекой. Хотя загрузка бесплатна, к сожалению, NVidia еще не выпустила публичный выпуск этой библиотеки и требует членства разработчика NVidia. К счастью, это бесплатно для регистрации.

АМС

AWS используется (опционально) для хранения результатов, предоставления их в качестве веб-сайта и для выполнения самих заданий. Учетная запись AWS сама по себе бесплатна, и вы платите практически за то, что используете, но вы все равно можете быстро получить счет, если не будете следить за этим. Если вы хотите использовать его, вам нужно будет зарегистрировать учетную запись, установить инструменты командной строки и установить учетные данные среды.

Запуск проекта

Теперь, когда основы настроены, мы загрузим и загрузим проект примеров в вашу систему:

  1. Клонируйте репозиторий examples.deepartist.org
  2. Откройте IDE и импортируйте проект

Теперь мы готовы запустить наш первый проект. Чтобы упростить ситуацию, давайте запустим очень простой проект, в котором не используются нейронные сети. Откройте проект примеров, а затем откройте класс BasicNotebook.

  1. Откройте объект и запустите его — щелкните файл правой кнопкой мыши и выберите «Выполнить».
  2. Загрузить страницу, подтвердить настройку — Откройте браузер по адресу http://localhost:1080/. На начальной странице пользователю будет предложено отредактировать настройки задания. Вы можете редактировать отображаемый текст, размер, целевое ведро s3 и многие другие настройки в других заданиях.
  3. Обновить и загрузить изображение — при условии, что URL-адрес контента не изменился, задание (при обновлении страницы) предложит вам загрузить изображение. Загрузите один.
  4. Ожидание завершения — после завершения загрузки задание запускается. Эта работа выполняется быстро и будет завершена за считанные секунды.
  5. Изучить результаты — результаты будут сохранены в локальном каталоге /reports/, указанном в выходных журналах, а при настройке также на S3.

Расширенные возможности

Не всегда все идет по плану, и иногда хочется сделать что-то еще, кроме нажатия «Выполнить». В этом разделе описаны некоторые из этих распространенных сценариев.

Если вам по какой-либо причине нужно прервать работу, вы можете продолжить рисовать с того места, на котором остановились. Это возможно, если сохранить последнее изображение, предоставленное через http, и использовать это изображение для загрузки в качестве исходного URL-адреса холста.

Любое задание можно запускать локально или в EC2. Большинство заданий по умолчанию закодированы для локального запуска, но путем изменения или добавления нового объекта, производного от того же класса, вы можете настроить код развертывания EC2. При этом учетные данные вашей среды будут использоваться для запуска нового экземпляра AWS EC2, загрузки всего необходимого кода и удаленного запуска приложения. При запуске вы можете управлять им через http так же, как и при локальном выполнении, и, кроме того, он будет отправлять вам электронные письма в начале и в конце запуска задания. Следите за временем исполнения! Это типы инстансов глубокого обучения с большой мощностью и заметной ценой.

При первом запуске вам будет предложено ввести адрес электронной почты через стандартный ввод, а роль, используемая для запуска экземпляра, скорее всего, не будет иметь всех необходимых разрешений, например, для записи в корзину s3, в которую вы собираетесь публиковаться. Рекомендуется, чтобы во время этого первого выполнения вы вошли в консоль AWS и вручную назначили все необходимые разрешения для вновь созданной роли.

Многие важные параметры можно настроить с помощью переопределения свойств в классах заданий. Особо следует отметить:

  1. Ведро — большинство пользователей захотят настроить поле ведра так, чтобы у них был доступ для записи.
  2. Http-порт — если вы хотите использовать порт, отличный от 1080, вы можете переопределить его через поле http_port.

Другой важной конфигурацией, которую можно настроить с помощью свойства java, является используемый регион AWS. Чтобы использовать что-то другое, кроме us-east-1 по умолчанию, просто установите свойство AWS_REGION, например. добавив аргумент выполнения -DAWS_REGION=us-west-2

После запуска приложения есть несколько других страниц, которые можно запросить для получения полезной информации:

  1. /cuda/info.txt — эта конечная точка возвращает диагностический текст, возвращаемый библиотекой CuDNN.
  2. /shutdown — эта конечная точка немедленно убивает JVM, а при работе на EC2 также вызывает завершение экземпляра.
  3. /threads.json — эта конечная точка возвращает информацию обо всех трассировках стека и различную информацию о потоках из JVM. Полезно для разработки внутреннего кода.
  4. /cuda/stats.json — эта конечная точка возвращает данные профилирования, собранные во время вызовов CuDNN. Полезно для разработки внутреннего кода.

Смотрите также

Это программное обеспечение построено поверх другого программного обеспечения и технологий.

  1. CuDNN и CUDA — Nvidia публикует множество полезных библиотек для обработки чисел, которые используют возможности параллельных вычислений своих графических процессоров. CuDNN, в частности, является предпочтительной библиотекой ускорения, используемой deepartist.org.
  2. TensorFlow — группа исследователей искусственного интеллекта Google разработала Tensorflow с открытым исходным кодом, портативную среду выполнения для выражения и запуска нейронных сетей. Эту библиотеку можно использовать для импорта пайплайнов визуализации в DeepArtist.org, таких как предварительно упакованная модель Inception.
  3. Java и Scala — Java, пожалуй, самая популярная среда программирования на сегодняшний день. Scala работает в среде Java как альтернативный язык и является одним из самых выразительных доступных языков. Оба имеют множество бесплатных инструментов мирового класса.

Кроме того, методы, продемонстрированные в этом проекте, в подавляющем большинстве были основаны на некоторых хорошо известных алгоритмах обработки изображений deem:

  1. Глубокий сон — в 2015 году Google Research опубликовала исследование Глубокий сон, в котором продемонстрировано использование сверточных нейронных сетей для создания интересных визуальных эффектов.
  2. Deep Style Transfer — в 2016 году исследователи опубликовали алгоритм передачи стиля с использованием сверточных нейронных сетей, чей подход лежит в основе большинства методов обработки, используемых DeepArtist.org.

Исследования в области ИИ требуют поддающихся проверке исследований, и, чтобы помочь этому, многие статьи включают опубликованные предварительно обученные модели. Эти предварительно обученные модели можно импортировать, чтобы изученные ими скрытые закономерности можно было использовать при обработке изображений. На момент публикации DeepArtist.org имеет 3 предварительно упакованных конвейера, которые автоматически загружаются при использовании:

  1. VGG16 и VGG19 — это большие, очень простые сети, использующие ряд простых слоев свертки, объединения и активации. Как оказалось, плотная и простая структура этих сетей обеспечивает гораздо лучшее поведение при обработке изображений.
  2. Начало — образец импорта модели тензорного потока, также предоставляется предварительно обученная начальная модель. Он использует более сложную структуру, чтобы хорошо выполнять свою основную задачу, классификацию, с гораздо меньшим размером (и более высокой скоростью).

Примеры.DeepArtist.org

С deepartist.org выпущен ряд примеров, которые пытаются проиллюстрировать концепции этих методов и возможности этого программного обеспечения. Эти примеры можно бесплатно использовать в качестве отправной точки для любого из ваших художественных проектов. Каждый пример публикуется на сайте в виде полного примера отчета с деталями, кодом, ссылками и дополнительными изображениями в каждом из них.

Текстуры и основные концепции

Базовая установка для глубокого рисования заключается в том, что у вас есть холст, который может быть изменен по желанию процессом ИИ, чтобы соответствовать определенному сигналу. Эта сеть согласования сигналов состоит из фильтра, который преобразует изображение в более абстрактные данные, а затем функции потерь, которая измеряет, насколько близок этот сигнал данных к эталонному сигналу (то есть стилю). Затем эти фильтры и операторы можно масштабировать и комбинировать для создания безграничного разнообразия.

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

Вы также можете настроить операторы, которые определяют, насколько сигнал близок к цели. Эта цель может быть своего рода «мерой подобия», чтобы вычислить, насколько близко одно изображение к другому, и таких мер существует множество; они приближаются к нулю. Другие просто пытаются увеличить меру, например среднеквадратичную «мощность», используемую в DeepDream, возможно, с некоторым отсечением до бесконечности. Пример опроса из них отображает различные эффекты:

Когда начинается процесс рисования, для начала на холсте должны быть какие-то данные. Интересно, что полностью пустой холст дает плохие результаты из-за так называемого «нарушения симметрии». В deepartist.org используются три основных типа начальных чисел: Noise, Plasma или Image. Шум — это простой случайный белый шум, который можно масштабировать и компенсировать. (В этом отношении синтаксис масштабирования и смещения доступен для всех входных URL-адресов изображений). Plasma — это простая алгоритмическая текстура, напоминающая облако случайного цвета. Фактическое изображение также может быть предоставлено либо в виде загрузки, либо в виде буквального URL-адреса. В этом примере показан обзор этих типов семян при использовании для рисования с одинаковыми параметрами текстуры:

Как вы могли заметить, начало с изображения приводит к чему-то похожему на перенос стиля. Это не столько передача стиля, сколько деформация изображения контента до тех пор, пока оно не станет напоминать желаемый стиль. Помимо других отличий, он имеет тенденцию быть детерминированным — если вы запустите его 3 раза, вы получите почти те же 3 результата.

Другим важным фактором в процессе рисования является то, в каком разрешении мы его выполняем. Как известно любому, кто падал с орбиты, все выглядит по-разному в зависимости от того, как далеко вы находитесь. Это разнообразие проявляется в нашем процессе рисования по оперативному разрешению, при каком разрешении мы делаем операцию рисования. Вы можете увидеть разнообразие, вызванное одними и теми же параметрами рисования, выполняемыми в малом масштабе, в большом масштабе и с использованием прерывистых стадий в этом примере:

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

Это можно дополнительно изменить, присоединив дополнительные фильтры к слоям конвейера визуализации, например, в этих примерах:

Генерация мозаичной текстуры. Оборачивая холст вокруг себя, чтобы увеличить его, мы учимся рисовать независимо от этих границ обертывания и получаем мозаичное изображение.

Калейдоскоп (вращательная симметрия и цветовые перестановки). Слой, который отражает и вращает пространство (и цветовое пространство), может создать изображение с гарантированной симметрией. Это можно комбинировать с мозаичным слоем.

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

Передача стиля

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

Изображения контента могут быть реконструированы путем сопоставления сигналов с использованием любого уровня визуализации, таким же образом, как и сопоставление стилей. Каждый уровень выше передает меньше локальной информации, такой как цвет, и больше информации более высокого уровня, такой как узоры. Вы можете увидеть это в следующем опросе, в котором каждый слой конвейера используется для реконструкции целевого контента без каких-либо дополнительных модификаций.

Когда эти операторы содержимого объединяются с операторами стиля, мы можем продемонстрировать классическую передачу глубокого стиля, как в этом примере:

Для получения результатов высокой четкости можно использовать несколько этапов процессов передачи стиля при постепенном увеличении холста. Путем точной настройки параметров для каждого разрешения мы можем лучше контролировать результат.

Анимации

Есть изображения, есть видео, а между ними есть анимированные гифки. Анимированные GIF-файлы — одна из специализаций DeepArtist.org.

Уже было показано множество анимаций, в которых мы рассматриваем различные процедуры и объединяем их с метками в анимацию.

Другой тип анимации — это изменение диапазона параметров. Одним из приведенных примеров является перенос стиля из одного стиля в другой:

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

Это также можно комбинировать с калейдоскопическими текстурами, как показано на изображении вверху этой статьи.

Наслаждаться!

Первоначально опубликовано на https://blog.simiacryptus.com.