1. Введение
В творческом процессе художественной живописи люди генерируют уникальный визуальный опыт, формируя сложное взаимодействие между содержанием и стилем картины. Однако так называемый художественный стиль представляет собой абстрактное понятие, которое трудно определить. Поэтому как преобразовать стиль одного изображения в стиль другого изображения — сложная и абстрактная проблема. Особенно для машинных программ почти невозможно решить плохо определенную проблему.
До нейронной сети идея программы переноса стиля изображения заключалась в следующем: проанализировать стиль изображений, построить математическую статистическую модель для этого стиля, затем изменить передаваемое изображение, чтобы его стиль соответствовал установленной модели. Этим методом можно добиться разных эффектов, но есть большой недостаток: модель может добиться передачи только одного стиля изображения. Поэтому применение модели переноса стиля на основе традиционных методов весьма ограничено.
С развитием нейронных сетей машины приблизились к людям или даже превзошли их в некоторых ключевых областях визуального восприятия, таких как распознавание объектов и лиц. Здесь мы представляем модель машинного обучения на основе глубокой нейронной сети, сверточную нейронную сеть, которая может разделять и комбинировать стиль и содержание любого изображения для создания художественных изображений с высоким качеством восприятия. Эта статья представляет статью, опубликованную в 2015 году Gatys et al_A Neural Algorithm of Artistic Style_, в котором представлен алгоритм передачи стиля изображения с использованием сверточных нейронных сетей. По сравнению с традиционным методом переноса стилей этот метод обладает большей универсальностью.
2. Обзор
2.1 Представление контента
Одной из самых эффективных глубоких нейронных сетей для задач с изображениями являетсяСверточная нейронная сеть. Сверточная нейронная сеть — это нейронная сеть с прямой связью, состоящая из нескольких слоев сети, каждый из которых содержит множество вычислительных блоков (нейронов) для обработки визуальной информации. Вычислительный блок каждого слоя можно понимать как набор фильтров изображения, и каждый слой может извлекать различные специфические особенности изображения. Мы называем выход данного слоя какКарта объектов(Карта характеристик) — Различные отфильтрованные версии входного изображения.
Когда сверточная нейронная сеть используется для распознавания объектов, по мере того, как сетевой уровень становится все глубже и глубже, информация об объектах, генерируемая сетевым уровнем, становится все яснее и яснее. Это означает, что в сетевой иерархии выходные данные каждого сетевого уровня все больше фокусируются на фактическом содержании входного изображения, а не на его конкретных значениях пикселей. Воссоздавая карту признаков каждого сетевого слоя, мы можем визуализировать информацию, выраженную каждым слоем о входном изображении. Можно видеть, что сетевые уровни, расположенные на более высоких уровнях, способны захватывать высокоуровневое содержимое входного изображения на основе объектов и их расположения во входном изображении без конкретной информации о значении пикселя. Поэтому мы называем высокоуровневую структуру сетевой моделиПредставление контента.
2.2 Представление стиля
чтобы получить входное изображениепредставление стиля, мы используем тот, который используется для полученияособенности текстурыфункциональное пространство. Это пространство признаков содержит корреляции между различными откликами фильтров в пределах пространственного экстента карты признаков. Благодаря корреляции признаков на нескольких уровнях мы получаем статическое многомасштабное представление входного изображения, которое захватывает информацию о текстуре изображения, но не содержит глобального расположения.
Рисунок 1: Извлечение содержимого и стиля изображения с помощью сверточных нейронных сетей.
2.3 Разделение содержания и стиля
Ключевым моментом этой статьи являетсяПредставление контентаипредставление стиляВ сверточной нейронной сети естьотделимый. То есть мы можем манипулировать этими двумя представлениями независимо друг от друга, чтобы создавать новые образы восприятия. Чтобы продемонстрировать это, в документе показаны некоторые синтетические изображения, созданные путем смешивания изображений разного содержания и стиля, как показано на рисунке 2.
Эти изображения генерируются путем поиска изображения, которое соответствует как содержанию фотографии, так и соответствующему художественному стилю. Эти составные изображения наследуют различные художественные стили различных художественных изображений, сохраняя при этом общее расположение исходных фотографий. Стилевое представление представляет собой многоуровневое представление, включающее несколько уровней структуры нейронной сети. Когда представление стиля содержит лишь небольшое количество низкоуровневой структуры, стиль становится более локализованным, что приводит к различным визуальным эффектам. Когда представление стиля представлено высокоуровневой структурой сети, структура изображения соответствует стилю в большем масштабе (последний ряд на рисунке 2), что приводит к более плавному и устойчивому визуальному восприятию.
фигура 2: составное изображение, сочетающее в себе фотоконтент и различные художественные стили.
2.4 Синтез изображений
На самом деле содержание и стиль изображения не могут быть полностью разделены. Когда мы синтезируем изображения, мы часто не можем найти изображение, которое соответствует содержанию одного изображения и стилю другого изображения. В нашем процессе синтеза изображений функция потерь, которую нам нужно минимизировать, содержит содержимое и стиль, но они разделены. Поэтому нам нужно плавно масштабировать вес контента и стиля (координаты строки на рисунке 3). Когда функция потерь присваивает разные веса содержанию и стилю, эффекты изображения, создаваемые синтезом, совершенно разные. Нам нужно соответствующим образом настроить представление контента и представление стиля.соотношение весадля создания визуально привлекательных изображений. Способность найти правильное соотношение весов является ключевым фактором для получения удовлетворительного изображения.
**Рисунок 3: **Результат композиции с использованием стиля _Composition VII_
На рис. 3 координаты строки представляют весовое соотношение потери контента и потери стиля, а координаты столбца представляют количество подслоев (по возрастанию), используемых для представления стиля.
3. Эксперимент
Экспериментальные результаты в этой статье основаны насеть VGGсоздан на основе. В этом эксперименте используется пространство признаков, состоящее из 16 сверточных слоев и 5 объединяющих слоев (VGG 19). Поскольку этот эксперимент не предназначен для классификации, нам не нужно использовать полносвязные слои. Модель общедоступна, и мы можем найти ее в фреймворке Caffe и фреймворке Keras. Автор этой статьи экспериментально обнаружил, что легче получить удовлетворительные экспериментальные результаты, используя усреднение, чем при максимальном объединении.
3.1 Подготовка к эксперименту
Здесь мы ссылаемся на последующие статьи для проведения экспериментов с использованием сетевой модели VGG 16. Модель способна обучаться максимально быстро без потери точности изображения. В то же время, чтобы сохранить структурные детали исходного изображения (и чтобы синтезированное изображение соответствовало эстетике большинства людей), здесь мы используем вывод 'block2_conv2' в качестве представления содержимого изображения (исходное текст использует 'block4_conv2'). Что касается представления стиля, мы по-прежнему используем функции текстуры, описанные в статье, как представление стиля.
3.2 Потеря контента
В сверточной нейронной сети (CNN) обычно считается, что нижний уровень описывает конкретные визуальные характеристики изображения (например, текстуру, цвет и т. д.), а функции более высокого уровня представляют собой более абстрактные описания содержимого изображения. при сравнении двух изображенийсходство содержанияКогда мы сравниваем сходство функций высокого уровня в сети CNN между двумя изображениями. В этом эксперименте мы используем евклидово расстояние карт признаков соответствующих сетевых слоев изображения контента и синтетического изображения для представления потери контента.
Потеря контентаФормула расчета**:**
в и соответственно представляют составное изображение и исходное изображение вПервый этажфильтры на местезначение активации на .
Код ссылки:
def content_loss(content, combination):
return backend.sum(backend.square(combination - content))
layer_features = layers['block2_conv2']
content_image_features = layer_features[0, :, :, :]
combination_features = layer_features[2, :, :, :]
loss += content_weight * content_loss(content_image_features,
combination_features)
3.3 Потеря стиля
Чтобы сравнить сходство стиля двух изображений, нам нужно сравнить сходство их признаков более низкого уровня в сети CNN. В отличие от потери контента, мы не можем определить потерю стиля, используя только евклидово расстояние. Хотя базовые функции CNN в определенной степени содержат характеристики стиля изображения, поскольку пространственная информация карты объектов слишком очевидна, прямое вычисление евклидова расстояния приведет к большой ошибке. Следовательно, нам нужно устранить пространственную информацию, сохранив низкоуровневые визуальные особенности.Гэтис предложил очень волшебную матрицу -Матрица Грамма.
Матрица Грамма:
Потеря стиля для одного сетевого слоя:,в Матрицы граммов, представляющие составные изображения и изображения стилей соответственно.
потеря стиля:,представляет потерю массы каждого слоя.
Код ссылки:
# 定义 Gram 矩阵
def gram_matrix(x):
features = backend.batch_flatten(backend.permute_dimensions(x, (2, 0, 1)))
gram = backend.dot(features, backend.transpose(features))
return gram
# 计算总的风格损失
def style_loss(style, combination):
S = gram_matrix(style)
C = gram_matrix(combination)
channels = 3
size = height * width
return backend.sum(backend.square(S - C)) / (4. * (channels ** 2) * (size ** 2))
feature_layers = ['block1_conv2', 'block2_conv2',
'block3_conv3', 'block4_conv3',
'block5_conv3']
for layer_name in feature_layers:
layer_features = layers[layer_name]
style_features = layer_features[1, :, :, :]
combination_features = layer_features[2, :, :, :]
sl = style_loss(style_features, combination_features)
loss += (style_weight / len(feature_layers)) * sl
3.4 Полная потеря
Чтобы получить удовлетворительное синтетическое изображение, нам нужно свести к минимуму потери контента и потери стиля, определенные выше. Здесь мы определяемполная потеряфункция, соответственно
и Представляет собой фотографическое и стилистическое произведение, которое обеспечивает Контент,Представляет составное изображение.Функция общих потерь:,Представляет вес потери контента и потери стиля.
Код ссылки:
def total_variation_loss(x):
a = backend.square(x[:, :height-1, :width-1, :] - x[:, 1:, :width-1, :])
b = backend.square(x[:, :height-1, :width-1, :] - x[:, :height-1, 1:, :])
return backend.sum(backend.pow(a + b, 1.25))
loss += total_variation_weight * total_variation_loss(combination_image)
В эксперименте мы используем слой 'conv2_2' для расчета потери контента вместо слоя 'conv4_2', используемого в статье; когда мы вычисляем потерю стиля изображения, 'conv1_1', 'conv2_1', 'conv3_1', ' conv4_1', веса слоя 'conv5_1' равны
, а веса остальных слоев сети равны 0. Соотношение веса в общей потереНам нужно настроить его самостоятельно, чтобы синтезировать картинки, которые нас удовлетворяют. В этом эксперименте использовались коэффициенты потери веса содержания и веса стиля, равные 0,025 и 5,0, и можно получить относительно удовлетворительный результат, как показано на рисунке 4.3.5 Проблемы оптимизации
В этом эксперименте мы используем алгоритм L-BFGS для оптимизации функции общих потерь. Поскольку мы используем алгоритм градиентного спуска, мы вводим класс Evaluator — через две независимые функции loss и grads для вычисления потерь и градиента.
Код ссылки:
# 定义梯度
grads = backend.gradients(loss, combination_image)
# 定义类
outputs = [loss],outputs += grads
f_outputs = backend.function([combination_image], outputs)
def eval_loss_and_grads(x):
x = x.reshape((1, height, width, 3))
outs = f_outputs([x]),loss_value = outs[0]
grad_values = outs[1].flatten().astype('float64')
return loss_value, grad_values
class Evaluator(object):
def __init__(self):
self.loss_value = None,self.grads_values = None
def loss(self, x):
assert self.loss_value is None
loss_value, grad_values = eval_loss_and_grads(x)
self.loss_value = loss_value,self.grad_values = grad_values
return self.loss_value
def grads(self, x):
assert self.loss_value is not None
grad_values = np.copy(self.grad_values)
self.loss_value = None,self.grad_values = None
return grad_values
evaluator = Evaluator()
Для составного изображения мы инициализируем его случайным набором допустимых пикселей. Наконец, для минимизации функции потерь используется алгоритм L-BFGS. Из экспериментальных результатов видно, что потери уже не уменьшаются существенно при проведении итераций до 10 раз.
Код ссылки:
x = np.random.uniform(0, 255, (1, height, width, 3)) - 128.
iterations = 10
for i in range(iterations):
print('Start of iteration', i)
start_time = time.time()
x, min_val, info = fmin_l_bfgs_b(evaluator.loss, x.flatten(),
fprime=evaluator.grads, maxfun=20)
print('Current loss value:', min_val)
end_time = time.time()
print('Iteration %d completed in %ds' % (i, end_time - start_time))
Окончательный результат нашего составного изображения выглядит следующим образом:
Рисунок 4: крайнее левое — изображение содержимого, среднее — изображение стиля, а крайнее правое — изображение синтезированного эффекта.
4. Резюме и перспективы
В этой статье впервые предлагается использовать модель нейронной сети для достижения передачи стиля: использовать сверточную нейронную сеть для разделения и извлечения содержимого и стиля изображения, а также определить, как вычислить сходство содержимого и сходство стиля изображений. потеря и потеря стиля, чтобы получить удовлетворительные результаты.
По сравнению с традиционной моделью переноса стилей большое значение имеет использование сверточных нейронных сетей для извлечения содержания и стиля изображений, что делает модель более универсальной без необходимости создания математической модели для каждого стиля изображений. Однако этот метод также имеет некоторые недостатки: эффект использования евклидова расстояния карты объектов для представления потери контента не очень идеален, при использовании разницы между пикселями для расчета потери будет получена большая ошибка; в то же время , модель оптимизирует синтетическое изображение
Поэтому в 2016 году Джонсон и др. предложили более быстрый метод переноса стиля.Perceptual losses for real-time style transfer and super- resolution. Модель, используемая в этом методе,Мо платформаЕсть реализация наЦентр приложенийнайти вПередача стиляЭто приложение**. **
Адрес исходного кода проекта:https://momodel.cn/explore/5bfb634e1afd943c623dd9cf?type=app&tab=1
5. Ссылки
- бумага:A Neural Algorithm of Artistic Style
- бумага:Texture Synthesis Using Convolutional Neural Networks
- бумага:Very Deep Convolutional Networks for Large-Scale Image Recognition
- бумага:Perceptual losses for real-time style transfer and super- resolution
- Код:GitHub.com/And IL Integration/Ди…
- Блог:Художественный стилизованный алгоритм нейронной сети
- Блог:CNN добивается передачи художественного стиля
- Блог:Введение в передачу стиля в глубоком обучении
- Блог:быстрая передача стиля
- Блог:передача стиля
- Новости:Краткая история передачи стиля
о нас
Mo(URL:momodel.cn) поддерживает PythonПлатформа онлайн-моделирования искусственного интеллекта, который помогает быстро разрабатывать, обучать и развертывать модели.
Клуб искусственного интеллекта МоЭто клуб, созданный командой разработчиков и дизайнеров веб-сайта и посвященный снижению порога для разработки и использования искусственного интеллекта. Команда имеет опыт обработки и анализа больших данных, визуализации и моделирования данных, реализовывала многодисциплинарные интеллектуальные проекты и обладает полным спектром возможностей проектирования и разработки от начала до конца. Основными направлениями исследований являются анализ управления большими данными и технологии искусственного интеллекта, и их использование для продвижения научных исследований, основанных на данных.
В настоящее время клуб каждую субботу проводит офлайн-мероприятия технического салона на тему машинного обучения в Ханчжоу, а также время от времени проводит обмен документами и академические обмены. Я надеюсь собрать друзей из всех слоев общества, которые интересуются искусственным интеллектом, продолжать общаться и расти вместе, а также способствовать демократизации и популяризации искусственного интеллекта.