在Python中使用Tensorflow进行神经风格迁移

翻译原文地址


在现代高科技世界中,深度学习以不同的方式用于实现特定领域的特定目标。世界各地的工程师和开发人员使用AI算法进行维护,网络安全,数学解决方案,客户服务等。

图像识别和分类并不是很困难的工作,多亏了这些世界级的算法例如Inception、ResNet等。但是在今天,我将要进行讨论的是需要更少处理器能力的算法,但却有更神奇的效果展示给你只要有好的数据集和预处理的情况。带有多种技术的Tensorflow 实现让我们有能力合成带有特殊风格的原始图片。

让我们从安装依赖开始吧。你们之中有一些人可能没有安装所有需要的依赖,因此,为了确保一切进展顺利,我将从零开始。

P.S. 我是Mac用户,所以我将会在CPU上重新训练网络

我已经使用过几次这个项目了,为了确保我演示给你的是从零开始的,我将所有的工作都放在虚拟环境里来完成(因为我的Mac早就已经安装好所有需要的依赖了)

我将要从安装pip,homebrew,tensorflow,opencv开始。但是,当我安装它们的时候,我将要展示给你安装命令以便于你可以跟着我这样做。这个非常简单,即便你是个新手。

要求

Pip: sudo easy_install pip
Brew: pip install homebrew
Tensorflow: pip install tensorflow
OpenCV: pip install opencv-python
(如果拒绝访问,请使用管理员权限命令“sudo”。例如:sudo pip install homebrew)

在安装完这些依赖以后,使用命令pip freeze来检查环境。

在Python中使用Tensorflow进行神经风格迁移_第1张图片
1.png

找一个文件夹,例如桌面,新建一个文件夹,名字就叫deepstyle。用一下命令进入文件夹:
cd Desktop/deepstyle

克隆到仓库

所有依赖都安装完成以后,并且创建了新的文件夹,让我们去githubhttps://github.com/cysmith/neural-style-tf.git下载deepstyle,使用以下命令。
git clone https://github.com/cysmith/neural-style-tf.git

在Python中使用Tensorflow进行神经风格迁移_第2张图片
2.png

如果一切进展顺利,那就万事大吉。克隆完仓库后,让我们进入它的目录:
cd neural-style-tf

预训练模型

接下来的一步就是下载预训练的模型。我们将一个图像合成到另一个图像中,正如你所知道的,两张图片对于AI的数据集来说是不够的。让我们去以下的链接:
http://www.vlfeat.org/matconvnet/pretrained/

在Python中使用Tensorflow进行神经风格迁移_第3张图片
3.png

我们应该搜索 imagenet VGG-19 预训练模型(imagenet-vgg-verydeep-19)weights.下载它,它的大小是534.9Mb,所以大概要花一小会儿。下载好后,将它移动到项目里(neural-style-tf folder)。
在Python中使用Tensorflow进行神经风格迁移_第4张图片
4.png

输入图片和风格图片

这些几乎是所有的工作。现在,我们需要两张图片,提取其中一张图片的风格,并且把这种风格融合到另外一张里面。让我们以一种浪漫的方式保持它并想象:如果Magda Eisenhardt(Quicksilver的母亲)和Henry Allen(The Flash的父亲)相遇就会怎么样。你猜它,让我们合成Flash和Quicksilver的图像。

我将使用Flash的风格,将这种风格融入到Quicksilver中。一个建议:尽可能使用面部的精确图像。 如果你正在使用CPU甚至更多,它不是那么强大,神经网络会很难合成它们。 因此,可能存在一些不准确之处。

我已经下载了一些图片,我将在下面展示给你。


在Python中使用Tensorflow进行神经风格迁移_第5张图片
5.png

将下载的图片复制到项目里面。你使用的输入图片应该拷贝到“image_input”里面

在Python中使用Tensorflow进行神经风格迁移_第6张图片
6.png

所有的风格图片应该复制到文件家“styles”里面

在Python中使用Tensorflow进行神经风格迁移_第7张图片
7.png

训练(再训练)

当这一切都准备就绪之后,让我们运行以下命令:
确定你在neural-style-tf目录下面:
bash stylize_image.sh ./image_input/quicksilver.png ./styles/theflash.png
这个命令代表的是:bash stylize_image.sh .// .//
按回车键,它会要求你安装需要的依赖,输入y,然后再按回车键确认。

在Python中使用Tensorflow进行神经风格迁移_第8张图片
8.png

之后,它会问你支持CUDA的GPU,但正如我上面提到的,我是一个mac用户,所以我会按下“n”按钮。

如果出现问题,请不要害怕。 它刚刚发生,因为你没有安装所有必需的依赖项。 就我而言,它是scipy库。
继续使用命令:pip install <库名>
在我的情况下:pip install scipy

在Python中使用Tensorflow进行神经风格迁移_第9张图片
9.png

安装所需的库后,只需使用我在上面显示的相同命令:
bash stylize_image.sh ./image_input/quicksilver.png ./styles/theflash.png
神奇的事情出现了:

在Python中使用Tensorflow进行神经风格迁移_第10张图片
10.png

这个过程不会花太长时间。 有关迭代次数和图像精度变得准确度的详细信息将在终端窗口中显示如下:

在Python中使用Tensorflow进行神经风格迁移_第11张图片
11.png

神经网络需要1000次迭代来合成图像。 等一段时间。 对于配备2.2GHz i7处理器和16GB RAM的MacBook Pro,“一段时间”约为47.62306分钟。

结果

完成此过程后,您将看到精确度详细信息和已用时间:

在Python中使用Tensorflow进行神经风格迁移_第12张图片
12.png

开始了。 让我们转到image_output目录并检查结果文件夹。 在那里,我们将看到一些文件,包括预处理的图像和元数据。

在Python中使用Tensorflow进行神经风格迁移_第13张图片
13.png

我们需要的图片就是result.png

在Python中使用Tensorflow进行神经风格迁移_第14张图片
14.png

正如我们看到的那样,flash图片的风格已经融入到输入的图片之中了。

它没有令人惊讶的准确性,但算法已经完成了它的工作:它将样式从一个图像转移到另一个图像。

您可以使用这个神经网络将世界级画家的风格转换为某些人的图像,也许是你的图像,而且它的效果非常好。

你可能感兴趣的:(在Python中使用Tensorflow进行神经风格迁移)