深度学习之风格迁移简介

风格迁移(style transfer)最近两年非常火,可谓是深度学习领域很有创意的研究成果。它主要是通过神经网络,将一幅艺术风格画(style image)和一张普通的照片(content image)巧妙地融合,形成一张非常有意思的图片。

因为新颖而有趣,自然成为了大家研究的焦点。目前已经有许多基于风格迁移的应用诞生了,如移动端风格画应用Prisma,手Q中也集成了不少的风格画滤镜:

本文将对风格迁移[1]的实现原理进行下简单介绍,然后介绍下它的快速版,即fast-style- transfer[2]。

1. 风格迁移开山之作

2015年,Gatys等人发表了文章[1]《A Neural Algorithm of Artistic Style》,首次使用深度学习进行艺术画风格学习。把风格图像Xs的绘画风格融入到内容图像Xc,得到一幅新的图像Xn。则新的图像Xn:即要保持内容图像Xc的原始图像内容(内容画是一部汽车,融合后应仍是一部汽车,不能变成摩托车),又要保持风格图像Xs的特有风格(比如纹理、色调、笔触等)。

1.1 内容损失(Content Loss)

在CNN网络中,一般认为较低层的特征描述了图像的具体视觉特征(即纹理、颜色等),较高层的特征则是较为抽象的图像内容描述。 所以要比较两幅图像的内容相似性,可以比较两幅图像在CNN网络中高层特征的相似性(欧式距离)。

1.2 风格损失(Style Loss)

而要比较两幅图像的风格相似性,则可以比较它们在CNN网络中较低层特征的相似性。不过值得注意的是,不能像内容相似性计算一样,简单的采用欧式距离度量,因为低层特征包含较多的图像局部特征(即空间信息过于显著),比如两幅风格相似但内容完全不同的图像,若直接计算它们的欧式距离,则可能会产生较大的误差,认为它们风格不相似。论文中使用了Gram矩阵,用于计算不同响应层之间的联系,即在保留低层特征的同时去除图像内容的影响,只比较风格的相似性。

那么风格的相似性计算可以用如下公式表示:

1.3 总损失(Total Loss)

这样对两幅图像进行“内容+风格”的相似度评价,可以采用如下的损失函数:

1.4 训练过程

文章使用了著名的VGG19网络[3]来进行训练(包含16个卷积层和5个池化层,但实际训练中未使用任何全连接层,并使用平均池化average- pooling替代最大池化max-pooling)。

内容层和风格层的选择:内容图像风格图像分别输入到VGG19网络中,并将网络各个层的特征图(feature map)进行可视化(重构)。

内容重构五组对比实验:

1. conv1_1 (a)
2. conv2_1 (b)
3. conv3_1 (c)
4. conv4_1 (d)
5. conv5_1 (e)

风格重构五组对比实验:

1. conv1_1 (a)
2. conv1_1 and conv2_1 (b) 
3. conv1_1, conv2_1 and conv3_1 (c)
4. conv1_1, conv2_1, conv3_1 and conv4_1 (d)
5. conv1_1, conv2_1, conv3_1, conv4_1 and conv5_1 (e)

通过实验发现:对于内容重构,(d)和(e)较好地保留了图像的高阶内容(high-level content)而丢弃了过于细节的像素信息;对于风格重构,(e)则较好地描述了艺术画的风格。如下图红色方框标记:

在实际实验中,内容层和风格层选择如下:

内容层:conv4_2

风格层:conv11, conv2_1, conv3__1_, _conv4_1, conv5_1

训练过程:以白噪声图像作为输入(x)到VGG19网络,conv4_2层的响应与原始内容图像计算出内容损失(Content Loss),“conv1_1, conv2_1, conv3_1, conv4_1, conv5_1”这5层的响应分别与风格图像计算出风格损失,然后它们相加得到总的风格损失(Style Loss),最后Content Loss + Style Loss = Total Loss得到总的损失。采用梯度下降的优化方法求解Total Loss函数的最小值,不断更新x,最终得到一幅“合成画”。

1.5 总结

  1. 每次训练迭代,更新的参数并非VGG19网络本身,而是随机初始化的输入x;
  2. 由于输入x是随机初始化的,最终得到的“合成画”会有差异;
  3. 每生成一幅“合成画”,都要重新训练一次,速度较慢,难以做到实时。

2. 快速风格迁移

2016年Johnson等人提出了一种更为快速的风格迁移方法[2]《Perceptual losses for real-time style transfer and super- resolution》。

2.1 网络结构

它们设计了一个变换网络(Image Transform Net),并用VGG16网络作为损失网络(Loss Net)。输入图像经由变换网络后,会得到一个输出,此输出与风格图像、内容图像分别输入到VGG16损失网络,类似于[1]的思路,使用VGG16不同层的响应结果计算出内容损失和风格损失,最终求得总损失。然后使用梯度下降的优化方法不断更新变换网络的参数。

内容层:relu3_3

风格层:relu12, relu2_2, relu3_3, _relu4_3

其中变换网络(Image Transform Net)的具体结构如下图所示:

2.2 跑个实验

Johnson等人将论文的代码实现在github上进行了开源,包括了论文的复现版本,以及将“Batch-Normalization ”改进为“Instance Normalization”[4]的版本。咱们可以按照他的说明,训练一个自己的风格化网络。我这里训练了一个“中国风”网络,运行效果如下:

2.3 总结

  1. 网络训练一次即可,不像Gatys等人[1]的方法需要每次重新训练网络;
  2. 可以实现实时的风格化滤镜:在Titan X GPU上处理一张512x512的图片可以达到20FPS。下图为fast-style-transfer与Gatys等人[1]方法的运行速度比较,包括了不同的图像大小,以及Gatys方法不同的迭代次数。

3. 参考资料

  1. Gatys L A, Ecker A S, Bethge M. A neural algorithm of artistic style[J]. arXiv preprint arXiv:1508.06576, 2015.
  2. Johnson J, Alahi A, Fei-Fei L. Perceptual losses for real-time style transfer and super-resolution[C]//European Conference on Computer Vision. Springer International Publishing, 2016: 694-711.
  3. Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014.
  4. Ulyanov D, Vedaldi A, Lempitsky V. Instance normalization: The missing ingredient for fast stylization[J]. arXiv preprint arXiv:1607.08022, 2016.
  5. Fast Style Transfer(快速风格转移)
  6. 图像风格迁移(Neural Style)简史

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有趣的Python

1- OpenCV+TensorFlow 入门人工智能图像处理-课程介绍

人工智能最火的两个方向,自然语言处理和计算机视觉 OpenCV的图像处理 TensorFlow的使用 ? mark 供需关系理论,有需求所以才有提供 招聘网站:...

5198
来自专栏大数据智能实战

基于tensorflow的视觉问答系统构建

视觉问答(Visual Question Answering,VQA),是多模态数据挖掘的前沿应用之一,里面涉及计算机视觉和自然语言处理的学习任务。VQA系统需...

2237
来自专栏专知

基于TensorFlow的机器学习速成课程25讲视频全集(04-06讲)

【导读】前些日子,大家都知道,Google 上线了基于 TensorFlow 的机器学习速成课程,它包含 40 多项练习、25 节课程以及 15 个小时的紧凑学...

38211
来自专栏量化投资与机器学习

【机器学习】kNN-最近邻居算法(附源码)

算法介绍: kNN (k-Nearest Neighbour) 算法是一种用于分类和回归的非参数的方法,可以用目标点周围所观察到的数据得平均值来预测出目标点 ...

1995
来自专栏真皮专栏

Matrix FactorizationMatrix Factorization

机器学习的作用就是要从一堆数据中学习到学习到某种能力,然后用这种skill来预测未来的结果。比如一个电影推荐的例子,我们手上有很多的电影数据,现在就需要训练一个...

743
来自专栏数据派THU

【资源】只需十四步:从零开始掌握Python机器学习

来源:机器之心 作者:Matthew Mayo 校对:丁楠雅 编辑:胡蝶 原文可参阅:http://suo.im/KUWgl 和 http://suo.im/9...

1906
来自专栏新智元

AI开学第一课!CMU深度学习秋季课程开课了,PPT & 视频同步

以深度神经网络为代表的“深度学习”系统越来越多地在各种AI任务中大显神威,包括语言理解、语音和图像识别、机器翻译、规划、甚至游戏和自动驾驶。因此,掌握深度学习方...

851
来自专栏专知

基于TensorFlow的机器学习速成课程25讲视频全集(10-12讲)

【导读】前些日子,大家都知道,Google 上线了基于 TensorFlow 的机器学习速成课程,它包含 40 多项练习、25 节课程以及 15 个小时的紧凑学...

3418
来自专栏YoungGy

生成对抗网络GAN

背景 结构 训练 最大似然估计 VGD取代最大似然估计 D的训练 G的训练 算法 问题 G的更新优化不一定朝着最小的方向 通过抽样估计分布 G中的目标函数 利用...

24010
来自专栏IT派

Python做机器学习之路

导语:Python 可以说是现在最流行的机器学习语言,而且你也能在网上找到大量的资源。你现在也在考虑从 Python 入门机器学习吗?本教程或许能帮你成功上手,...

3527

扫码关注云+社区