Image Style Transfer Using Convolutional Neural Network(理论篇)

今天这篇是关于neual art的,也就是style transfer算法; 文章来源: A Neural Algorithm of Artistic Style, CVPR2015 Image Style Transfer Using Convolutional Neural Networks, CVPR2016

前一段时间有一个比较火的APP叫prisma,可以把自己上传的一张图进行风格化,内部原理就是今天说的neural art或者叫style transfer

上面两篇文章的内容差不多,下面一篇可以看作是上面一篇的扩展,增加了一些其他的实验,我们说的就是这篇

介绍

其实没什么说的,就是如何学习到一张图的style或者叫风格吧;比如现在有一张梵高的星空图,一张你自己拍的风景图,如何将梵高星空图的style添加到风景图之中呢??? 大概就是像下面这样:

将一张图的style加到另外一张图的content上,这个就是style transfer

结构

其实算法的思想很简单,就是使用CNN进行特征提取,然后使用这些提取到的特征进行reconstruct.我们知道不同的CNN的conv layer提取到特征是不一样的,低层次的偏向于点 线等特征,高层次的更加偏向于texture信息. 所以算法的intuition,就是下图显示的:

所以作者使用VGG19的网络结构来做feature extractor,其最终是将conv2_2作为content layer,将conv1_1,conv2_1,conv3_1,conv4_1conv5_1作为style layer

具体实现

算法使用随机的一个白噪声图(white noise image)作为输入,定义与内容图的content loss和风格图的`style loss’,之后使用标准的BP算法更新weight,调整输入的图像(白噪声图)

注意这里是调整输入的图,目的就是对于某个特定的输入图像x,其loss(包含content loss和style losss)达到最小

content loss

A layer with Nl distinct filters has Nl feature maps each of size Ml , where Ml is the height times the width of the feature map. So the responses in a layer l can be stored in a matrix

where

is the activation of the ith filter at position j in layer l.

假设px分别代表原始的图像和生成的图像,l代表layer,在某层的responce,则他们之间的content loss定义为:

style loss

feature correlations are given by the Gram matrix Gl ∈ RNl ×Nl , where

is the inner product between the vectorised feature maps i and j in layer l:

特征之间的相关性可以表示原始图像在layer中的多尺度表达,也就是表示了纹理信息

Let a and x be the original image and the image that is generated, and Al and Gl their respective style representation in layer l. The contribution of layer l to the total loss is then:

总的loss就是content lossstyle loss的线性组合:

架构

总体的结构如下图所示:

补充

style和content的比重

也就是a/b的比重,效果如下图:

可以看出,比值越小合成的图风格化越明显

不同的layer对结果的影响

使用不同的layer作为content feature extraxtor或者style feature extractor效果是不一样的.

We find that matching the style representations up to higher layers in the network preserves local images structures an increasingly large scale, leading to a smoother and more continuous visual experience.

所以据此选择了conv(1-5)_1作为style layer

下图显示不同的conv layer作为content layer的不同影响:

不同的初始化方法

实验中我们是使用random white noise image作为input,但是也可以直接使用content image或者style image作为input,作者的结论是:

the different initialisations do not seem to have a strong effect on the outcome of the synthesis procedure

但是:

only initialising with noise allows to generate an arbitrary number of new images. Initialising with a fixed image always deterministically leads to the same outcome (up to stochasticity in the gradient descent procedure)

后记

我自己做了实验,对一张140*480的图,迭代300次,在titan x上用时30s左右,时间确实非常久

原文也给出了结论:

  • The dimensionality of the optimisation problem as well as the number of units in the Convolutional Neural Network grow linearly with the number of pixels.
  • The images presented in this paper were synthesised in a resolution of about 512 × 512 pixels and the synthesis procedure could take up to an hour on a Nvidia K40 GPU (depending on the exact image size and the stopping criteria for the gradientdescent).

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技大本营的专栏

深度学习目标检测指南:如何过滤不感兴趣的分类及添加新分类?

AI 科技大本营按:本文编译自 Adrian Rosebrock 发表在 PyImageSearch 上的一篇博文。该博文缘起于一位网友向原作者请教的两个关于目...

872
来自专栏人工智能

卷积神经网络学习笔记

1.卷积神经网络的图像识别原理: 通过过滤函数 来描绘出图像的边界: 过滤函数和图像相同区域的数值进行相乘,得到新的图像, 新图像则只剩下边图像。 cros...

20910
来自专栏人工智能LeadAI

学懂GAN的数学原理,让它不再神秘

知乎上有个讨论,说学数学的看不起搞深度学习的。曲直对错不论,他们看不起搞深度学习的原因很简单,因为从数学的角度看,深度学习仅仅是一个最优化问题而已。比如,被炒的...

3565
来自专栏机器之心

教程 | 在Keras上实现GAN:构建消除图片模糊的应用

选自Sicara Blog 作者:Raphaël Meudec 机器之心编译 参与:陈韵竹、李泽南 2014 年,Ian Goodfellow 提出了生成对抗网...

3673
来自专栏人工智能LeadAI

keras学习笔记-黑白照片自动着色的神经网络-Beta版

Alpha版本不能很好地给未经训练的图像着色。接下来,我们将在Beta版本中做到这一点——将上面的将神经网络泛化。 以下是使用Beta版本对测试图像着色的结果。...

3366
来自专栏AI科技大本营的专栏

经典重读 | 深度学习方法:卷积神经网络结构变化——Spatial Transformer Networks

作者 | 大饼博士X 本文具体介绍Google DeepMind在15年提出的Spatial Transformer Networks,相当于在传统的一层Co...

35311
来自专栏目标检测和深度学习

教程 | 在Keras上实现GAN:构建消除图片模糊的应用

选自Sicara Blog 作者:Raphaël Meudec 机器之心编译 参与:陈韵竹、李泽南 2014 年,Ian Goodfellow 提出了生成对抗网...

5706
来自专栏技术随笔

[译] Instance Normalization: The Missing Ingredient for Fast Stylization

3508
来自专栏机器之心

增加检测类别?这是一份目标检测的基础指南

1255
来自专栏ATYUN订阅号

Python中的统计假设检验速查表

本文是一个机器学习项目中最流行的统计假设检验的速查表,包含使用Python接口的示例。

1406

扫码关注云+社区