GitHub上大热的Deep Photo终于有TensorFlow版了!

王小新 编译整理 量子位 出品 | 公众号 QbitAI

Prisma这个应用,你可能很熟悉。这是一个能将不同的绘画风格,迁移到照片中,形成不同艺术风格的图片。

今年4月,美国康奈尔大学和Adobe的一个研究团队Fujun Luan和Sylvain Paris等人,在arvix上通过论文“Deep Photo Style Transfer”,提出了一种叫做“深度摄影风格转换”的演化技术,能将一张照片的风格,迁移到另一张照片中,下图就是原论文中给出的实际示例。

原论文的效果示例

原论文作者Fujun Luan给出了Ubuntu 14.04系统下的Torch实现,见文末的相关链接2。

但是该Torch代码实现需配置复杂的MATLAB环境,浙江大学Yang Liu同学将该Torch实现转换成了TensorFlow实现,

下面是对这个TF实现的介绍:

这份TensorFlow实现支持Adam算法和原作者使用的L-BFGS-B算法。当TensorFlow升级到更高版本时,此代码中的ScipyOptimizerInterface函数可能不兼容。

由于TensorFlow的自动转换功能,本文的TensorFlow实现似乎更为简单。此外,本文并不依赖于MATLAB软件,而是使用了另一个计算库Matting Laplacian Sparse Matrix。图2是将照片风格转移到另一张照片的示例。本实现还参考了martinbenson的代码。

风格迁移示例

环境配置

1. 依赖库:

  • Tensorflow
  • Numpy
  • Pillow
  • Scipy
  • PyCUDA(仅在CUDA 8.0上测试过平滑局部仿射的功能)

建议使用Anaconda,这样仅需再安装TensorFlow和PYCUDA即可。可选装CUDA加速库,建议安装。

2. 下载VGG-19模型权重

VGG-19模型的权重矩阵由Tensorflow版本的VGG模型微调得到,仅对类别接口进行了少量修改,VGG-19模型权重被存储为npy文件。下载后,将该权重文件复制到此目录下./project/vgg19。

VGG和VGG-19的详情见文末相关链接。

使用方法

1. 基本方法

你只需要给出目标图像路径、风格图像路径、目标图像分割(content image segmentation)路径和风格图像分割(style image segmentation)路径,即可运行命令。

python deep_photostyle.py --content_image_path <path_to_content_image> --style_image_path <path_to_style_image> --content_seg_path <path_to_content_segmentation> --style_seg_path <path_to_style_segmentation> --style_option 2

代码示例:

python deep_photostyle.py --content_image_path ./examples/input/in11.png --style_image_path ./examples/style/tar11.png --content_seg_path ./examples/segmentation/in11.png --style_seg_path ./examples/segmentation/tar11.png --style_option 2

2. 其他选项

设置style_option的值,可得到三种不同的风格迁移方式。当style_option为0时,可得到分割后的中间结果,与Torch代码中neuralstyle_seg.lua文件相似;当style_option为1时,进一步使用这个中间结果生成最终结果,与Torch代码中deepmatting_seg.lua文件相似;当style_option为2时,将这两个步骤组合为一行命令,直接生成最终结果。

运行命令python deep_photostyle.py –help,可查看所有选项。

3. 图像分割

这个库不提供图像分割脚本的代码,仅能使用Torch版本的图像分割代码。本实现使用的掩码颜色与其相同。你也可以定义独特的分割模型和掩码颜色,来定制风格迁移系统。

例子

以下是利用TensorFlow实现算法得到的一些示例(以下四列从左到右分别是输入图像、风格图像、Torch效果和TensorFlow效果)

Torch实现和TensorFlow实现效果对比

原作者信息

@misc{YangPhotoStyle2017,
  author = {Yang Liu},
  title = {deep-photo-style-transfer-tf},
  publisher = {GitHub},
  organization={Alibaba-Zhejiang University Joint Research Institute of Frontier Technologies},
  year = {2017},
  howpublished = {\url{https://github.com/LouieYang/deep-photo-styletransfer-tf}}
}

相关链接

1. 论文传送门: https://arxiv.org/abs/1703.07511

2. 原论文的Torch实现:

https://github.com/luanfujun/deep-photo-styletransfer

3. VGG模型的TensorFlow实现:

https://github.com/machrisaa/tensorflow-vgg

4. VGG-19模型下载:

https://drive.google.com/file/d/0BxvKyd83BJjYY01PYi1XQjB5R0E/view?usp=sharing

本文分享自微信公众号 - 量子位(QbitAI)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-14

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

你在数据预处理上花费的时间,是否比机器学习还要多?

Nuts-ml 是一个新的 Python 数据预处理库,专门针对视觉领域的 GPU 深度学习应用。 它以独立、可复用的单元模块的形式,提供主流数据预处理函数。...

41580
来自专栏应兆康的专栏

16. 清理贴错标签的开发集和测试集样本

18610
来自专栏ATYUN订阅号

深度学习与R语言

对于R语言用户来说,深度学习还没有生产级的解决方案(除了MXNET)。这篇文章介绍了R语言的Keras接口,以及如何使用它来执行图像分类。文章结尾会通过提供一些...

63040
来自专栏机器之心

教程 | 如何快速训练免费的文本生成神经网络

31750
来自专栏专知

【实战】最新Deep Learning with Keras图书加代码,教你从零开发一个复杂深度学习模型(附下载)

Deep Learning with Keras 这个代码库是《Deep Learning with Keras》的配套代码。它包含全书从头到尾所有所需要用到的...

61650
来自专栏CreateAMind

运动信息向量的神经网络学习 code、ppt、视频

官方代码还未开放, http://visualdynamics.csail.mit.edu/

14230
来自专栏数据小魔方

sparklines迷你图系列16——Distribution(Spread)

今天跟大家分享sparklines迷你图系列16——Distribution(Spread)。 这种图表用中文翻译是在费解,没有特别合适的叫法,但是实际上它是一...

30560
来自专栏机器之心

业界 | Facebook开源Mask R-CNN的PyTorch 1.0基准,比mmdetection更快、更省内存

项目地址:https://github.com/facebookresearch/maskrcnn-benchmark

30630
来自专栏深度学习那些事儿

浅谈深度学习中超参数调整策略

深度学习中,设计模型以及保证模型的正确性是首要需要考虑的。当模型设置完成时,理论上模型不存在问题,实现效果也通过计算可以复现出来。一切准备就绪后,那么接下来需要...

24150
来自专栏深度学习那些事儿

浅谈深度学习中超参数调整策略

深度学习中,设计模型以及保证模型的正确性是首要需要考虑的。当模型设置完成时,理论上模型不存在问题,实现效果也通过计算可以复现出来。一切准备就绪后,那么接下来需要...

391110

扫码关注云+社区

领取腾讯云代金券