В этом учебнике мы реализовали базовый документ для передачи алгоритмического стиля, а именно Синтез текстуры с использованием сверточных нейронных сетей Леона А. Гатиса, Александра С. Эккера, Матиаса Бетге.
Статья посвящена созданию/синтезу текстуры из образца изображения текстуры из зашумленного изображения. По сути, это попытка получить представление о сверточной нейронной сети.
Здесь мы использовали сеть тензорного потока VGG16, в отличие от той, которую используют авторы (сеть VGG19). Ключевой концепцией здесь является то, что мы пытаемся свести к минимуму разницу в характеристиках образца изображения и изображения с шумом.
Для этого авторы использовали матрицу Грамма, которая представляет собой меру, показывающую, как элементы вектора коррелируют друг с другом. Чем выше значение матрицы грамм, тем выше корреляция между каждым ее элементом вектора.
Мы вычисляем матрицу грамм как для образца изображения, так и для зашумленного изображения для определенного слоя. Затем мы берем их квадратную разницу, чтобы сформировать следующую функцию потерь.
Аналогичным образом можно вычислить потери для нескольких слоев и выполнить взвешенную сумму, чтобы получить окончательное значение функции потерь.
Наконец, мы вычислим функцию потерь для различных конфигураций слоев, а затем попробуем минимизировать функцию потерь, чтобы создать оптимизированное зашумленное изображение.
Ниже приведены образцы, которые были созданы с использованием бумаги.
Как вы можете видеть, образцы очень похожи на образцы текстурных изображений, поскольку мы углубляемся и используем более глубокие слои для вычисления потерь и оптимизации шума.
На основе этой статьи те же авторы опубликовали другую статью, которая является первой статьей для Алгоритмической передачи стиля, которая стала большим прорывом.
Следование Jupyter Notebook проведет вас через реализацию статьи.
Использованная литература:
1. Модель тензорного потока VGG16 — https://github.com/machrisaa/tensorflow-vgg
Предварительно обученная модель тензорного потока VGG16 вместе со вспомогательными файлами. Большой респект владельцу. Кроме того, vgg16.npy можно скачать по ссылке, указанной в этом репозитории. Я изменил файл vgg16.py, чтобы облегчить объединение среднего, а не максимального объединения.