本文翻译自:《A brief introduction to Neural Style Transfer》
在图像风格迁移中,涉及两张图像,内容图像和风格(样式)图像。我们需要将风格图像的样式应用到内容图像上。
为此我们使用预训练好的模型 VGG-16n
卷积网络工作原理
有一张图像和一个卷积核(滤波器),将卷积核作用于图像,卷积核同时作用到的像素点求加权和并输出,再加一个非线性激活函数 sigmoid 、 ReLU(整流线性单元) 或 tanh(双曲正切).
上图中蓝色为原图,绿色为卷积核,输出为特征图(feature map),激活函数如下图:
卷积网络中,输入图像与多个卷积核作用,产生多个特征图;这些特征图再与多个卷积核作用产生更多特征图:
上图还有最大池化层,用于降维。池化过程中,将2x2的窗口作用于输入,窗口覆盖的最大值作为每个输出。
下图显示了不同层提取出的不同特征图,从边缘特征,到五官特征,再到面部特征
低层的特征图提取细节特征例如线条或块;当层数增加时,输出特征变复杂了。可以直观认为,低层提取出线条和块,高层会依靠这些细节来构建更复杂的特征。因此我们得出结论:卷积网络得到的是特征的分层表示,这正是风格迁移的基础。
风格迁移实现
在风格迁移中,并不需要训练神经网络,相反我们随机初始化一张图像,通过修改图像像素值来优化损失函数。在训练网络时更新的是权重和偏置,在风格迁移中保证权重和偏置不变,只修改像素值。
损失函数的定义
内容损失(Content loss)
可直观的认为,具有相似内容的图像往往在卷积网络的高层具有相似的特征表示,P^l 和F^l 分别表示表示原图和待生成的图像在第l层特征图的表示。
风格(样式)损失(Style loss)
A^l 和G^l 分别表示表示原图和待生成的图像在第l层特征图的表示,Nl 是特征图的数量,Ml 是铺平后的特征图大小,wl 是第l层的权重。
对风格而言,主要想捕捉的是图像的画风样式,所以选择低层。这里使用了gram矩阵,向量X的gram矩阵是X.X^T,使用gram是因为主要想捕捉统计信息。
总变差损失(Total Loss)
alpha 与 beta 是内容损失和风格损失的权重,损失反映了最终目标,让输出图像在内容上与内容图像接近,风格上模仿样式图像。简单梯度下降、Adam 或L-BFGS都可以优化损失函数。
迁移结果如图:
风格迁移更多使用场景详见:Style Transfer Guide