首先,第一个问题,什么是图像风格化(Neural Style Transfer)?
简单来讲,图像风格化是将一张照片渲染成有艺术风格的画作。图像风格化算法的输入有二,分别是内容图和风格图,输出有一个,为风格迁移后的结果图。举个例子:
上面这张表示图像风格化算法将输入的一张长城的照片作为内容图,将富春山居图作为风格图,将长城的内容保留,风格替换成中国山水画的风格,创作出一张新的艺术作品。
图像风格化算法说白了其实就是一个图像渲染的过程。看到上面长城那张图,第一反应,图形学的一大分支——非真实感图形学,不也是干这件事的嘛。
但为啥这些基于图形学的技术没有大规模落地,出现 Prisma,Ostagram 之类风靡全球的应用呢?咱们一个一个分析一下。
而通过图像滤波的方法速度快、效果稳定,可满足工业界落地的需求(之前很火的时光相册出的“你的名字”滤镜估计就是算法工程师用这种方式不断调整出来的),但是基于图像滤波的方法能模拟出来的风格种类很有限。
风格迁移中的风格图其实可以看成是一种纹理,由此,假如我们在合成纹理图的时候去刻意保留一些语义信息,那不就是风格迁移的结果嘛。
没错,但那个年代管这个问题不叫风格迁移,而叫纹理迁移(texture transfer),换汤不换药,意思是差不多的。
但是呢,为啥纹理迁移在那会儿没有流行起来呢?因为那会儿纹理迁移是基于低层次的图像特征来做的,没有考虑语义信息,所以很多结果不那么得尽如人意。
譬如咱们说纹理建模方法(Visual Texture Modelling),主要研究如何表示一种纹理,是纹理合成技术的核心。
基于统计分布的参数化方法主要将纹理建模为 N 阶统计量,而基于 MRF 的方法一个经典套路是用 patch 相似度匹配进行逐点合成。而咱们之前提到过,风格可以看成一种纹理。
纹理建模方法的相关研究解决了图像风格化迁移的第一个大问题:如何对风格图中的风格特征进行建模和提取。
▲ Image credited to Kaijian Gao from Brown University
好了,成功把风格图中的风格抽出来后,如何和内容混合然后还原成一个相应的风格化结果呢?这就到了另一个领域——图像重建(Image Reconstruction)了。
图像重建的输入是特征表达,输出是特征表达对应的图像。他其实和咱们通常的输入图像提特征的过程相反,是把某个特征逆向重建为原来的图像(重建结果不唯一)。
那这有啥用呢?以往图像重建主要是用来理解某些特征表达的。就比如说 CNN 特征,CNN 是黑盒子,某个 CNN 特征具体包含哪些特征,这谁也不敢下定论。
下面附上我两年前在课题组讲 seminar 时候画的一张图以帮助大家理解:
而通过重建预训练的分类网络(如 VGG)中的高层特征,发现重建结果保留了_高层语义信息_而摒弃了低层的颜色等信息。
一个崭新的领域——图像风格化迁移(Neural Style Transfer)由此诞生。围绕图像风格化迁移技术,学术界和工业界风起云涌,英雄倍出。
上文主要和大家讨论了图像风格化迁移的简介、前传和起源,目的是想让大家对风格化这个领域有一个初步的认识。其中起源这一部分比较重要,这里再做一个简单回顾以及补充。
图像风格化迁移源于两个其他领域:纹理建模(Visual Texture Modelling)和图像重建。
其中纹理建模(Visual Texture Modelling)又分为两类:
(a) 基于统计分布的参数化纹理建模方法(Parametric Texture Modelling with Summary Statistics)
(b) 基于MRF的非参数化纹理建模方法(Non-parametric Texture Modelling with MRFs)
而图像重建解决的则是如何将给定的特征表达重建还原为一张图像。上篇文章中没有提到的一点是图像重建算法其实也可以分为两类:
(a) 基于在线图像优化的慢速图像重建方法(Slow Image Reconstruction based on Online Image Optimisation)
(b) 基于离线模型优化的快速图像重建方法(Fast Image Reconstruction based on Offline Model Optimisation)
由名字也可以看出这种分类方式的主要依据是图像重建的速度。第一类图像重建的方法 (a) 是在图像像素空间做梯度下降来最小化目标函数。
由于每个重建结果都需要在像素空间进行迭代优化很多次,这种方式是很耗时的(几百乘几百的图需要几分钟),尤其是当需要的重建结果是高清图的时候,占用的计算资源以及需要的时间开销很大。
下面用这张图总结一下图像风格化算法的起源和基石,本文剩下部分全是建立在这些内容之上的:
ok,下面开始这篇文章的重头戏——图像风格化迁移(Neural Style Transfer)的发展。
事实上,粗略来讲,在图像风格化这一领域大家也确实都是这么做的。下面我先给出一个现有图像风格化迁移的分类方法,大家可以和前面的图 1 放在一块看,图像风格化迁移这一领域的研究脉络和套路即可了然于胸。
下面咱们一起对每一类图像风格化算法做具体介绍和优缺点分析。为了讨论方便,涉及具体算法时直接采用上面这张图中的引用序号进行表示。
1. 基于在线图像优化的慢速图像风格化迁移算法(Slow Neural Method Based On Online Image Optimisation)
1.1. 基于统计分布的参数化慢速风格化迁移算法(Parametric Slow Neural Method with Summary Statistics)
通过名字就可以看出,这一类风格化算法是由基于在线图像优化的慢速图像重建方法和基 于统计分布的参数化纹理建模方法结合而来。
[27] 的核心思想是在图像经过预训练的 VGG 网络时的特征表达(feature map)上计算 Gram 矩阵,利用得到的 Gram 矩阵来表示一种纹理。
Gram 矩阵的计算方式是先将预训练 VGG 某一层的特征表达由reshape 成,然后用 reshape 后的特征表达和其转置矩阵相乘,最后得到的 Gram 矩阵维度为。
祖师爷发现这个 Gram 矩阵可以很好地表示大多数纹理。结合咱们在上一篇博文讨论的内容,这个 Gram 矩阵的纹理表示方法其实是利用了二阶统计量来对纹理进行建模。
这里简单解释一下,Domain Adaption 指的是当训练数据和测试数据属于不同的域时,我们通过某种手段利用源域有标签的训练数据训练得到的模型,去预测无标签的测试数据所在的目标域中的数据。
Domain Adaption 其中一个套路就是以最小化统计分布差异度量 MMD 的方式,让目标域中的数据和源域中的数据建立起一种映射转换关系。
1.2. 基于MRF的非参数化慢速风格化迁移算法(Non-parametric Slow Neural Method with MRFs)
与传统 MRF 建模方法不同之处在于,以上操作是在 CNN 特征空间中完成的。另外还需要加一个祖师爷 Gatys 提出的内容损失来保证不丢失内容图中的高层语义信息。
2. 基于离线模型优化的快速图像风格化迁移算法(Fast Neural Method Based On Offline Model Optimisation)
ok,咱们前面介绍的都是用慢速图像重建方法对风格化结果进行重建的,所以速度肯定是比较慢的,而且很吃资源,在工业界落地的成本肯定是很高的。
根据一个训练好的前向网络能够学习到多少个风格作为分类依据,我们将快速图像风格化迁移算法分为单模型单风格(PSPM)、单模型多风格(MSPM)和单模型任意风格(ASPM)的快速风格化迁移算法。
2.1. 单模型单风格的快速风格化迁移算法(Per-Style-Per-Model Fast Neural Method)
这一类算法(简称PSPM)其实可以再分成两类:(1)一类是基于统计分布的参数化快速风格化PSPM算法以及(2)基于MRF的非参数化PSPM算法。
这两个工作的思想相同,都是用一个前向网路求学一个风格。训练数据可以用 COCO 的 8 万张图,损失函数和祖师爷 Gatys 的慢速风格化算法相同,用 Gram 统计量来进行风格建模。
2.2. 单模型多风格的快速风格化迁移算法(Multiple-Style-Per-Model Fast Neural Method)
大家可以设身处地想一下这个问题,要是需要咱们自己去解决这个问题,可以怎么去想。
这下好了,我们只需要把 CIN 层中仿射变换的很少的参数与每一个风格进行绑定,每个新风格只需要去训练这些参数,其余部分保持不变就 ok 了。
2.3. 单模型任意风格的快速风格化迁移算法(Arbitrary-Style-Per-Model Fast Neural Method)