Papers:
Image Style Transfer Using Convolutional Neural Networks
Perceptual Losses for Real-Time Style Transfer and Super-Resolution
开源项目地址:https://github.com/GitHberChen/GAN/tree/master/src/style_transfer_perceptual_loss
后续提供详细使用方法。
一、什么是图像风格迁移(Style Transfer)
所谓风格迁移,就是让一张图片具有其原本的内容 content,同时具有另一张图片(通常是艺术作品)的风格 style,如下图。
这个领域的研究与大家生活最接近的当属手机APP,Prisma了,想起多年前使用这款APP的最大感受就是:慢!烫!修改一张图具有某种风格要很长时间,并且十分耗电。而今天介绍的paper 是Li Fei-Fei 大弟子 Justin Johnson,于 2016ECCV 发表的一篇 Paper,将原先十分耗时的风格迁移计算提速了 1000x 倍,与此同时保持相同的效果。
二、如何使用CNN进行风格迁移?
一个经典的 style transfer 算法来自一篇 CVPR2016 的Paper,大家感受一下:
参考:Image Style Transfer Using Convolutional Neural Networks
看上去是不是很复杂?简单来说,这个算法流程是这样的:
1、使用一个pre-trained的VGG,将其看做一个丰富特征提取 filter 的集合;
2、使用一张图片 a 定义一个目标风格,p 为原始图片, x 为输出图片,而 x 初始化为 white noise 图片;
3、定义一个风格损失函数
4、一次又一次的迭代后, white noise x 会逐渐产生我们想要的图片:具有 p 的内容,同时具有 a 的风格。
显然,既然要一次又一次前向反向传播迭代,那耗时当然不会短。那有没有办法更快地得到结果呢?
Perceptual Losses for Real-Time Style Transfer and Super-Resolution 这篇 paper 就以 1000x 的提速,解决了这个问题。思路也很简单,回避迭代的方法,使用司空见惯的 end-to-end training的方法,训练一个DCNN模型,而这个模型输入原始图片后可以得到我们想要的具有某种特殊风格的图片,整体算法流程如下。而虽然说起来简单,但最难的地方在于如何定义loss,接下来将会介绍它是如何做到的。
速度提升对比:
三、Perceptual Loss
要想对图像进行风格迁移,首先必须要做的是定义风格是什么?
风格是什么,作为一个对世界有着丰富而敏感的人,当然可以感受得到,可要想用言语精确描述达到可以量化的程度,我想是难以做到的。于是问题就来了,如果我们无法精确地量定义风格是什么,又该如何去教机器去了解什么是风格呢?
为了解决这个问题,学者们采用了一个十分取巧的方法,那就是,既然我们无法定义风格是什么,那么不妨定义一下:风格不是什么?
那么风格不是什么