选自arxiv
作者:栾福军等
机器之心编译
参与:李泽南、微胖
康奈尔大学与 Adobe 的研究者们最近发布了一项通过卷积神经网络进行照片风格迁移的研究。随后,该技术在 Torch 中的实现也已出炉。读者可以点击「阅读原文」下载论文。
论文地址:https://arxiv.org/abs/1703.07511
项目地址:https://github.com/luanfujun/deep-photo-styletransfer
图像风格迁移的研究在人工智能领域层出不穷,作为图像处理软件的龙头,Adobe 的努力非常引人注目。最近,康奈尔大学与 Adobe 的研究者们发布了一项通过卷积神经网络进行图片风格迁移的研究。在本研究的论文中,作者宣称解决了神经网络风格迁移中参考图像风格化导致输出图像「畸变」的问题,新的模型在各种图片内容的测试中表现良好,同时忠实地再现了参考图片中风格迁移的效果。它或许可以成为下一代 Photoshop 的功能之一。
论文:Deep Photo Style Transfer
摘要:
本论文介绍了一种实现照片风格迁移的深度学习方法,这种方法可以处理很多不同种类的照片内容,同时还能如实迁移参考风格。近期,我们研究了美术风格迁移,通过研究神经网络的不同层级将风格从图片内容中分离出来,本论文就是建立在这一研究基础上。过去的办法并不适合图像现实主义风格的迁移,即使输入和参考图片都是照片,但仍然会输出畸变(distortions)的结果。我们的贡献在于将输入到输入的变换限制为空间内的精确色彩变化,并将此约束表示为可以反向传播的自定义 CNN 层。我们的实验表明,这一办法成功地抑制了图片在各种不同场景下(包括一天的各个时间段,各种天气,季节以及艺术风格编辑)的风格扭曲,照片现实主义(photorealistic)风格迁移的效果也令人满意。
图 1:(a)是参考风格,(b)是输出的图像,我们希望输出的效果能仍然和输入一样,属于照片风格,不过风格是参照图片的风格。Neural Style 算法(C)虽然可以成功迁移颜色,不过输出效果会有些扭曲,看起来更像是画作,这并是不照片风格迁移想要的结果。对比之下,我们的结果(d)不仅可以成功迁移作为参照的风格图片,还可以维持输出的照片现实主义风格。右边(e)就是上面不同效果的集合对比。
图 2:在研究中,开发者向不同的模型输入图片(a),参考图片(e),对风格迁移效果进行了比较。相比 CNNMRF 等其他研究得出的结果,新模型(d)可以防止扭曲并正确地匹配纹理。
图 7:通过手动分割,可以让系统完成多种任务,如:为香水瓶(a)加入火焰效果(c),切换不同苹果(d,e)之间的纹理颜色。
图 8:用户反馈意见显示康奈尔大学和 Adobe 的新研究实现了目前最好的效果
结论
在本论文中,研究者通过自定义卷积神经网络层中的拉普拉斯抠图矩阵(Matting Laplacian)来限制输入到输出的变化,从而改善了风格转换中色彩变化的效果。而语义分割的引入带来了更多效果绝佳的风格迁移。在各种各样的场景中,包括不同时间,天气,季节和艺术风格,都能获得令人满意且逼真风格的转换。在未来,研究者们将继续探索神经网络自动语义匹配的方法,以消除目前图像分割算法的局限性。
安装
本研究的代码基于Torch,并在Ubuntu 14.04 LTS的系统中进行了测试。
系统需求
Torch (带有matio-ffi 和 loadcaffe)
Matlab
CUDA 后端:
CUDA
cudnn
下载 VGG-19:
sh models/download_models.sh
编译 cuda_utils.cu (请在makefile中调整 PREFIX 和 NVCC_PREFIX ):
make clean && make
想使用已有数据直接生成结果 (在 examples/中) 请在Matlab中直接运行:
run('gen_laplacian/gen_laplacian.m')
随后在Python中:
python gen_all.py
输出的结果会在 examples/final_results/中。
1.给定输入图像和具有语义分割蒙版的风格图像,将其分别放入 examples/ 。它们会以如下格式被自动命名:examples/input/in<id>.png
, examples/style/tar<id>.png
和examples/segmentation/in<id>.png
, examples/segmentation/tar<id>.png;
2.在Matlab中使用 gen_laplacian/gen_laplacian.m
i来计算消光拉普拉斯矩阵,则输出矩阵的文件命名格式为: gen_laplacian/Input_Laplacian_3x3_1e-7_CSR<id>.mat
;
3.运行以下代码以获得分段的中间结果:
th neuralstyle_seg.lua -content_image <input> -style_image <style> -content_seg <inputMask>
-style_seg <styleMask> -index <id> -serial <intermediate_folder>
运行以下代码获得最终结果:
th deepmatting_seg.lua -content_image <input> -style_image <style> -content_seg <inputMask> -style_seg <styleMask>
-index <id> -init_image <intermediate_folder/out<id>_t_1000.png> -serial <final_folder>
-f_radius 15 -f_edge 0.01
注意:在论文中,我们使用源自DilatedNet的自动场景分割算法生成比较结果。手动分割可以实现更加多样化的任务,因此我们在examples / segmentation /中提供了相关代码。
该算法的示例图片(左侧为输入图,中间为风格参考图,右侧为输出):
致谢
本研究的Torch实现基于Justin Johnson的代码:https://github.com/jcjohnson/neural-style;
拉普拉斯抠图矩阵(matting Laplacian matrix)使用了Anat Levin在Matlab的代码:http://www.wisdom.weizmann.ac.il/~levina/matting.tar.gz。
本文为机器之心编译,转载请联系本公众号获得授权。
✄------------------------------------------------
加入机器之心(全职记者/实习生):hr@jiqizhixin.com
投稿或寻求报道:editor@jiqizhixin.com
广告&商务合作:bd@jiqizhixin.com