图像风格迁移

基于神经网络的图像风格迁移在2015年由Gatys et al. 在两篇论文中提出:Gatys et al., 2015a和Gatys et al., 2015b。

使用神经网络进行样式迁移的过程如下图所示。在图中我们选取一个有三个卷积层的神经网络为例,来提取特征。对于样式图片,我们选取第一和第三层输出作为样式特征。对于内容图片则选取第二层输出作为内容特征。给定一个合成图片的初始值,我们通过不断的迭代直到其与样式图片输入到同一神经网络时,第一和第三层输出能很好地匹配样式特征,并且合成图片与初始内容图片输入到神经网络时在第二层输出能匹配到内容特征。

图片

抽取特征

论文使用的 VGG 19 模型来抽取特征。VGG 使用了五个卷积块来构建网络,块之间使用最大池化层来做间隔。论文中使用每个卷积块的第一个卷积层输出来匹配样式(称之为样式层),和第四块中的最后一个卷积层来匹配内容(称之为内容层)。

样式层和内容层有多种选取方法。通常越靠近输入层越容易匹配内容和样式的细节信息,越靠近输出则越倾向于语义的内容和全局的样式。选取比较靠后的内容层的目的是避免合成图片过于保留内容图片细节。使用多个位置的样式层来匹配局部和全局样式。

损失函数

在训练时,我们需要定义如何比较合成图片和内容图片的内容层输出(内容损失函数),以及比较和样式图片的样式层输出(样式损失函数)。内容损失函数可以使用回归用的均方误差。

对于样式,我们可以简单将它看成是像素点在每个通道的统计分布。例如要匹配两张图片的样式,我们可以匹配这两张图片在 RGB 这三个通道上的直方图。更一般的,假设卷积层的输出格式是$c×h×w$,即(通道,高,宽)。那么我们可以把它变形成$c×hw$的二维数组,并将它看成是一个维度为 c 的随机变量采样到的 hw 个点。所谓的样式匹配就是使得两个 c 维随机变量统计分布一致。匹配统计分布常用的做法是冲量匹配,就是说使得他们有一样的均值,协方差,和其他高维的冲量。例如匹配二阶信息就是匹配协方差。

当使用靠近输出层的神经层输出来匹配时,经常可以观察到学到的合成图片里面有大量高频噪音,即有特别亮或者暗的颗粒像素。一种常用的降噪方法是总变差降噪(total variation denoising)。假设 $x_{i,j}$ 表示像素 $(i,j)$ 的值,总变差损失使得邻近的像素值相似:

训练中将上述三个损失函数加权求和。通过调整权重值可以控制学到的图片是否保留更多样式,更多内容,还是更加干净。此外注意到样式层里有五个神经层,我们对靠近输入的有较少的通道数的层给予比较大的权重。

训练

训练的主要不同在于我们只对输入x进行更新。此外我们将x的梯度除以了它的绝对平均值来降低对学习率的敏感度,而且每隔一定的批量我们减小一次学习率。

参考文献

[1]. 图像风格迁移(Neural Style)简史
[2]. 样式迁移

持续技术分享,您的支持将鼓励我继续创作!