使用STYLE-TRANSFER转移照片艺术风格

最近几天学习了一下如何使用 Github 上的项目“style-transfer”(https://github.com/fzliu/style-transfer)来转移照片的艺术风格。用这篇文章记录一下操作过程,即如何配置运行环境、如何使用“style-transfer”完成操作。

一、style-transfer

Github 中有一个照片风格算法的 Python 实现,就是上述的这个项目,这个算法发表在“A Neural Algorithm of Artistic Style”(http://arxiv.org/abs/1508.06576)中。先贴一下项目的 README 的 Introduction 部分:

Introduction This repository contains a pyCaffe-based implementation of “A Neural Algorithm of Artistic Style” by L. Gatys, A. Ecker, and M. Bethge, which presents a method for transferring the artistic style of one input image onto another. You can read the paper here: http://arxiv.org/abs/1508.06576. Neural net operations are handled by Caffe, while loss minimization and other miscellaneous matrix operations are performed using numpy and scipy. L-BFGS is used for minimization.

style-transfer by fzliu, https://github.com/fzliu/style-transfer

这个程序可以将一张照片的艺术风格转移到另一张照片中,我要做的也就是经典的“油画风格转移”,即将梵高的《星夜》作为输入图片,由此让其他图片获得油画风格。

先了解程序的依赖,有

  • Python >= 2.7
  • CUDA >=6.5 (版本越高越好)
  • Caffe

关于 CUDA(Compute Unified Device Architecture,统一计算架构),NVIDIA 开发的可以允许程序使用 NVIDIA 的 GPU 进行计算的技术。它可以让程序使用 GPU 进行计算,从而加快程序的运行速度。Caffe(Convolutional Architecture for Fast Feature Embedding) 是一个深度学习框架,Caffe 的 GPU 模式可以使用 CUDA 来进行计算。

另外,除了这三个需要安装的软件,还需要安装这三个软件所依赖的软件或者它们的扩展。它们分别是:

  • OpenCV(开源计算机视觉库)
  • vcForPython27(用于编译 Python 扩展的专用编译器)

Caffe 依赖 OpenCV,vcForPython27 是用于编译 Python 扩展的,如程序需要用到的 numPy 等,这些扩展中含有 C/C++ 源码,需要使用编译器来编译。

二、配置运行环境

(1)Python 2.7

首先安装 Python 2.7,在官网下载并安装即可。安装完成后将环境变量“PYTHONPATH”的值设置为 Python 的安装目录。

(2)OpenCV

可以直接将 cv2.pyd(Python Dynamic Module)文件放入 Python 安装目录的 DLLs 目录中即可,cv2.pyd 可以在这里下载。

(3)vcForPython27

安装编译 Python 扩展专用的编译器,官网下载地址点击这里,按照提示安装即可。

(4)CUDA

从官方下载后按照提示安装即可。

(5)Caffe

由于我是使用的是 Windows 10 系统,所以只记录如何在 Windows 平台安装 Caffe 了。Caffe 的 Windows 版本托管在 Github 上(https://github.com/BVLC/caffe/tree/windows),从 Github 项目的 README 说明中可以下载到已经编译好的可执行文件。将文件解压,并在“style-transfer”的 style.py 文件中的 import sys 语句下方添加这两句将 Caffe 的所在目录添加进 Python 搜索的路径中。

1
2
sys.path.append("/path/to/caffe/python")
sys.path.append("/path/to/caffe/python/caffe")

可以打开 Python 命令行输入 import sys 和上述两个语句后输入 import caffe 测试是否能够正常导入。

(6)安装 Caffe 和 style-transfer 的依赖

打开命令行,分别进入 Caffe 和 style-transfer 所在的目录,使用如下命令编译安装 Caffe 的依赖。

1
python -m pip install -r requirement.txt

在我安装过程中出现了两个错误,一个是编译时提示找不到“stdint.h”,我在网上找到了这个文件并将它放在 vcForPython27 安装目录的 include 目录中就可以正常编译了,这个文件可以在这里找到。

第二个错误是在安装 Caffe 的依赖之一—— leveldb 的时候提示“Don’t know how to compile leveldb on Windows. ”。为了解决这个问题,我将一份编译好的 leveldb.pyd 文件直接放在了 Python 安装目录的 Lib\site-packages 目录中,并将 leveldb 从 Caffe 的 requirement.txt 文件中删去,在完成剩余的依赖安装。现在这个 leveldb.pyd 文件可以在这里找到。

三、运行 style-transfer

运行环境配置完成之后就可以运行 style-transfer 来转移照片艺术风格了。先下载训练好的模型(caffemodel 文件),运行下面的命令来下载,要先安装有 bash 和 curl。

1
bash scripts/download_models.sh <model_name>

其中 是模型的名字。下载好模型后,运行以下命令来使用<model-name>模型将<style-image>图片的艺术风格转移到<content-image>指定的图片中,这个过程将使用 GPU 0(也就是设备的第一个GPU)来计算。

1
python style.py -s <style-image> -c <content-image> -m <model-name> -g 0

运行结果将会输出到程序运行结束后的提示路径中。

附上我自己的运行结果:

风格图片(style-image)梵高的《星夜》

梵高《星夜》

内容图片(content-image)《Twilight Epiphany》

《Twilight Epiphany》

输出图片(output-image)《星夜》风格的《Twilight Epiphany》

《星夜》风格的《Twilight Epiphany》

以上。


使用STYLE-TRANSFER转移照片艺术风格
https://maphical.cn/2018/01/transfer-artistic-style-using-style-transfer/
作者
MaphicalYng
发布于
2018年1月4日
许可协议