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 条评论
登录 后参与评论

相关文章

来自专栏数据科学学习手札

(数据科学学习手札36)tensorflow实现MLP

  我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除...

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

笔记 |《深度学习原理与TensorFlow实践》学习笔记(四)

作者 | 王清 目录 CNN应用之图像风格化实例 如何量化风格 快速风格化的两种模型训练生成风格的滤镜 生成对抗网络介绍GAN GAN的基本思想 GAN的基本框...

2707
来自专栏机器学习算法与Python学习

TensorFlow实战:CNN构建MNIST识别(Python完整源码)

在文章(TensorFlow实战:SoftMax手写体MNIST识别(Python完整源码))中,我们MNIST手写体识别数据集,使用TensorFlow构建了...

8819
来自专栏大数据挖掘DT机器学习

R语言与分类算法-神经网络

人工神经网络(ANN)从以下四个方面去模拟人的智能行为: 物理结构:人工神经元将模拟生物神经元的功能 计算模拟:人脑的神经元有局部计算和存储的功能,通...

33310
来自专栏数值分析与有限元编程

幂迭代法求矩阵特征值的Fortran程序

昨天所发布的迭代法称为正迭代法,用于求矩阵的主特征值,也就是指矩阵的所有特征值中最大的一个。其算法如下: ? 满足精度要求后停止迭代,xj是特征向量,λj是特征...

3025
来自专栏云霄雨霁

加权有向图----无环情况下的最短路径算法

1390
来自专栏林欣哲

10分钟教你深度学习的调参

深度学习的训练方法可参见我之前的文章深度学习的训练,以下则是调参的手法及典型值。 两类需要调参的参数(parameters) 优化类的参数:学习率(learni...

4308
来自专栏杨熹的专栏

Machine Learning Notes-Linear Regression-Udacity

什么是 Regression? Regression 就是想找到因变量和自变量之间的关系,用一个函数来表示,并且可用这个函数来预测任意一个新的 x 会有怎样的 ...

3374
来自专栏Java与Android技术栈

图像相似度比较和检测图像中的特定物

对普通人而言,识别任意两张图片是否相似是件很容易的事儿。但是从计算机的角度来识别的话,需要先识别出图像的特征,然后才能进行比对。在图像识别中,颜色特征是最为常见...

711
来自专栏智能算法

卷积神经网络工作原理直观解释

其实我们在做线性回归也好,分类(逻辑斯蒂回归)也好,本质上来讲,就是把数据进行映射,要么映射到一个多个离散的标签上,或者是连续的空间里面,一般简单的数据而言,我...

2979

扫码关注云+社区