用TensorFlow实现神经网络画风迁移

栏目: 数据库 · 发布时间: 6年前

内容简介:重磅干货,第一时间送达编译 | sunlei

点击上方“ Python数据科学 ”,选择“星标”公众号

重磅干货,第一时间送达

编译 | sunlei  发布 | ATYUN订阅号

用TensorFlow实现神经网络画风迁移

神经风格转换是卷积神经网络最具创造性的应用之一。神经网络通过获取内容图像和风格图像,将内容和风格图像进行重组,有效地创造出艺术图像!

这些算法非常灵活,内容和风格用无限可能的组合产生了非常有创意和独特的结果。

用TensorFlow实现神经网络画风迁移

事实上,一家公司优化了算法并发布了一个名为Prisma的移动应用程序,它使用神经风格转换将艺术风格应用于你的手机拍摄的照片上!

用TensorFlow实现神经网络画风迁移

在本文中,我们将重新创建Gatys等人提出的算法,以实现上述类似结果。请注意,我使用的是笔记本电脑,因此如果您使用的是CPU更好的台式机,结果可能略有不同。

和平时一样,如果你被卡住了,可以随时查阅完整的笔记本。

我们开始吧!

此嵌入内容来自不符合浏览器上已启用的不跟踪(DNT)设置的站点。

请注意,如果你点击并查看它,你可能会被网站托管嵌入跟踪。

第一步:加载VGG – 19

从头开始构建算法需要大量的时间和计算能力,这对每个人来说都不是能轻松获得的。

相反,我们将加载现有网络的权重以实现神经风格的传输。

将神经网络用于不同目的的过程称为转移学习。

让我们这样加载模型:

1model = load_vgg_model(“pretrained-model/imagenet-vggverydeep-19.mat”)

太棒了!现在,我将用一张卢浮宫的图片作为内容图片。

你可以加载任何你想要的图片,但要确保图片不要太大:

1content_image = scipy.misc.imread(“images/louvre.jpg”)
2imshow(content_image)

在我的例子中,输出如下:

用TensorFlow实现神经网络画风迁移

第二步:定义内容代价函数

为了使我们的算法生成优质的图像,我们需要确保生成的图像的内容与输入图像的内容匹配。

换句话说,生成的图像也应该有金字塔、周围的建筑物、云、太阳等。

因此,我们希望生成的图像和内容图像的层激活相似。因此,内容代价函数可以定义为:

用TensorFlow实现神经网络画风迁移

由上面公式可知,n_H和n_W分别是图像的高度和宽度,其中n_c是隐藏层中的通道数。

为了计算成本,将三维体积展开为二维矩阵更有效,因为这将加快计算速度。

用TensorFlow实现神经网络画风迁移 展开卷积层以计算成本

现在,我们对这个逻辑进行编码:

用TensorFlow实现神经网络画风迁移

第三步:定义样式代价函数

现在,我们需要一个样式图像。在我的例子中,我将使用莫奈的印象派作品,但可以自由使用任何其他类型的艺术:

用TensorFlow实现神经网络画风迁移 谁能告诉我这幅画的名字?

与内容代价函数相比,定义样式代价函数是一个稍微复杂一些的过程。我们把它分成几个小部分。

3.1定义Gram矩阵

样式矩阵也称为Gram矩阵,它表示一组向量的点积。

这就捕获了每个向量之间的相似性,因为如果两个向量彼此相似,那么它们的点积将很大,因此Gram矩阵也将很大。

用TensorFlow实现神经网络画风迁移

这就是Gram矩阵如何有效地测量图像的样式。

把它变成代码:

用TensorFlow实现神经网络画风迁移

3.2定义样式成本

现在,我们要确保生成的图像和样式图像的样式相似。

换句话说,我们想要最小化两个Gram矩阵之间的距离。这表示为:

用TensorFlow实现神经网络画风迁移

对逻辑进行编码:

用TensorFlow实现神经网络画风迁移

3.3指定样式权重

在前面的步骤中,我们只捕获了单层的样式成本。

将所有图层的样式成本结合起来生成更好的图像是有用的。

在数学上,样式成本变成:

用TensorFlow实现神经网络画风迁移

其中lambda是每层的权重。

因此,我们添加此代码单元:

用TensorFlow实现神经网络画风迁移

3.4把一切结合起来

现在,我们简单地将所有东西组合成一个统一样式的代价函数:

用TensorFlow实现神经网络画风迁移

第四步:定义总代价函数

既然我们有了内容和样式的代价函数,我们就可以将两者结合起来,得到一个总代价函数,该函数将被优化:

其中alpha和beta是任意权重。

用TensorFlow实现神经网络画风迁移

第五步:解决优化问题,生成图像

现在,最棒的部分来了!一切就绪,我们就可以解决优化问题,生成一个艺术形象!

 1# Reset the graph
 2tf.reset_default_graph()
 3
 4# Start interactive session
 5sess = tf.InteractiveSession()
 6
 7content_image = scipy.misc.imread("images/louvre_small
 8content_image = reshape_and_normalize_image(content_im
 9
10style_image = scipy.misc.imread("images/monet.jpg")
11style_image = reshape_and_normalize_image(style_image)
12
13model = load_vgg_model("weights/imagenet-vgg-verydeep-
14
15# Assign the content image to be the input of the VGG
16sess.run(model['input'].assign(content_image))
17
18# Select the output tensor of layer conv4_2
19out = model['conv4_2']
20
21# Set a_C to be the hidden layer activation from the l
22a_C = sess.run(out)
23
24# Set a_G to be the hidden layer activation from same
25# and isn't evaluated yet. Later in the code, we'll as
26# when we run the session, this will be the activation
27a_G = out
28
29# Compute the content cost
30J_content = compute_content_cost(a_C, a_G)
31
32# Assign the input of the model to be the "style" imag
33sess.run(model['input'].assign(style_image))
34
35# Compute the style cost
36J_style = compute_style_cost(model, STYLE_LAYERS)
37
38J = total_cost(J_content,J_style,alpha=10,beta=40)
39
40# define optimizer
41optimizer = tf.train.AdamOptimizer(2.0)
42
43# define train_step
44train_step = optimizer.minimize(J)
45
46def model_nn(sess, input_image, num_iterations = 200):
47
48# Initialize global variables (you need to run the
49sess.run(tf.global_variables_initializer())

在我的例子中,我得到了以下结果:

用TensorFlow实现神经网络画风迁移

当然,如果你用更长的时间和更快的学习速度来训练网络,你可以得到更好的结果。

恭喜你!你刚刚在TensorFlow中执行了神经风格转换!你可以使用迭代次数和学习速度尝试随时改变内容和风格形象。这就是你今天的收获,满意吗?

专注于数据科学领域的知识分享

欢迎在文章下方留言与交流

推荐阅读

越来越像 Linux 了!Windows 系统 5 月更新让 Python 开箱即用

李宏毅:1 天搞懂深度学习,我总结了 300 页 PPT(附思维导图)

数据可视化图表,你选对了吗?

干货 | 19款最好用的免费数据挖掘 工具 大汇总

Python排序傻傻分不清?一文看透sorted与sort用法

用TensorFlow实现神经网络画风迁移

觉得不错,不妨点个 好看 :heart:


以上所述就是小编给大家介绍的《用TensorFlow实现神经网络画风迁移》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Stylin' with CSS

Stylin' with CSS

Wyke-Smith, Charles / 2012-10 / $ 50.84

In this completely revised edition of his bestselling Stylin' with CSS, veteran designer and programmer Charles Wyke-Smith guides you through a comprehensive overview of designing Web pages with CSS, ......一起来看看 《Stylin' with CSS》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具