王小新 编译整理
量子位 出品 | 公众号 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. 依赖库:
建议使用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 --style_image_path --content_seg_path --style_seg_path --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,可查看所有选项。