Deep Photo Styletransfer的一种纯Tensorflow实现,教你如何转换图片风格
通过深度学习,一秒钟让你的照片高大上,这是康奈尔大学和 Adobe 的工程师合作的一个新项目,通过卷积神经网络把图片进行风格迁移。项目已开源,名字叫「Deep Photo Style Transfer」。
本文这个项目将介绍Deep Photo Styletransfer的一种纯Tensorflow实现,如果你想找到torch实现的话,地址:https://github.com/luanfujun/deep-photo-styletransfer。
这个实现支持L-BFGS-B(这是原作者所使用的)和Adam算法,以防当Tensorflow升级到更高版本时,Scipy优化器接口不兼容。
由于Tensorflow的自动微分(automatic differentiation),这一实现可能会变得更简单一些。此外,由于另一种存储库(repository)计算方法——Matting Laplacian稀疏矩阵,实现也没有对MATLAB存在依赖。
下面是将照片风格转移成另一张照片的例子。
图片出处:见水印
免责声明:
本软件仅供学术和非商业用途使用。
设置
依赖关系
- Tensorflow
- Numpy
- Pillow
- Scipy
- PyCUDA (用于平滑的局部仿射(local affine),在CUDA 8.0上进行测试)
建议使用Anaconda Python,因为你只需要手动安装Tensorflow和PyCUDA。CUDA你可以选择性的安装,但它确实是值得推荐的。
下载VGG-19模型权重
在VGG Tensorflow中采用了Tensorflow的VGG-19模型,在类接口上几乎没有修改。VGG-19模型权重存储为.npy文件,可以在这里下载。下载后,将weight file复制到./project/vgg19目录。
使用
基本用法
你需要指定内容图像的路径,样式图像,内容图像分割,样式图像分割,然后运行命令。
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
其它选项
–style_option指定了三种不同的样式传输方式。–style_option 0是生成分段的中间结果,就像是torch中的neuralstyle_seg.lua文件。–style_option 1使用这个中间结果来生成最后的结果,比如torch中的deepmatting_seg.lua文件。–style_option 2将这两个步骤组合为一个行命令来直接生成最终结果。
运行python deep_photostyle.py –help来查看所有选项的列表。
图像分割
这个存储库(repository)不提供图像分割脚本,只使用来自torch版本的分割图像。使用的Mask颜色也和它们一样。你可以指定分割模型和Mask颜色来定制你自己的图像风格转变。
例子
这些都是Tensorflow算法的结果(从左到右是输入、风格、torch结果和Tensorflow结果)。
- 我们的Tensorflow实现基本上遵循了torch代码。
- 我们使用martinbenson的python代码来计算Matting Laplacian。
引用
如果你发现这段代码对你的研究有用,请引用:
@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}}
}
此文为编译作品,作者LouieYang,出处GitHub。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 前端构建 DevOps - Gitlab Api
- 重要性抽样方法实例分享
- K8S 生态周报| Helm v3.3.4 发布
- 项目实战|缓存处理
- 前端构建 DevOps - 搭建 DevOps 基础平台(上)
- 线剪裁算法简介
- 使用OpenCV和Python生成电影条形码
- 前端构建 DevOps - 搭建 DevOps 基础平台(中)
- 从 0 到 1 node 项目管理系统:搭建基础平台(下)
- Fiddler是个问题少女,又作又可招人爱
- devOps:构建篇-Jenkins
- H5 基础脚手架:极速构建项目
- 从 0 到 1 的项目管理系统:脚手架篇 - H5 基础脚手架
- Codeforces Round #612 (Div. 2) A. Angry Students
- 项目实战-埋点系统初探