基于神经网络的图像风格迁移算法

这个算法还是蛮有趣的,之前就有宣传说让电脑来学习梵高作画,虽然有些夸张,但是实际效果出来还是挺不错的。

 

接下来,我们要按照以下三个部分来进行介绍,提出,方法以及结论。

迁移学习算法流程图 迁移算法干嘛的_卷积

 

首先,什么是图像风格迁移呢?图像风格迁移,就是将一张图片的风格转移到另一张图片上去。就像图中所显示的内容,将一座吊桥显示为不同的风格。这个就是图像风格转移,直观来看,就是将一副图片的“风格”转移到另一幅图片,而保持它的内容不变。一般我们将内容保持不变的图称为内容图,content image,把含有我们想要的风格的图片,如梵高的星空,称为风格图,style image。

 

想要搞清楚此算法,我们必须弄明白两个问题:第一,什么是图像风格?第二,为什么要进行风格迁移?

迁移学习算法流程图 迁移算法干嘛的_深度学习_02

第一个问题,抱歉,目前还没有定论。我们可以直观的看到什么是风格,却很难定量描述它,印象派还是抽象派,达利还是梵高,即使没有经过专门的美术训练,一般人也能大概能搞清楚“这张和这张是一个风格的,这张和那张不是一个风格的”。第二个问题,为什么要进行风格迁移?我们知道画家作一幅画是非常耗时耗力的,如果我想要工大的抽象画,需要花费大量的金钱和精力来完成这项工作,但如果计算机可以帮助人类作出指定风格的画,则是一件非常好的事情。

本算法提出了一种基于深度神经网络的图像风格迁移方法,通过神经网络来分离和重新组合任意图像的风格和内容。我们可以使用不同的图像将某一图像进行风格化。

迁移学习算法流程图 迁移算法干嘛的_机器学习_03

接下来我们对此算法用到的VGG网络进行简单的介绍。VGG 最大的特点就是它在之前的网络模型上,通过比较彻底地采用 3x3 尺寸的小卷积核来堆叠神经网络,从而加深整个神经网络的层级。VGG16包含16层,VGG19包含19层。一系列的VGG在最后三层的全连接层上完全一样,整体结构上都包含5组卷积层,卷积层之后跟一个MaxPool。所不同的是5组卷积层中包含的级联的卷积层越来越多。这样的作法一方面可以减少参数,另一方面相当于进行了更多的非线性映射,增加了网络的拟合表达能力,以及提取深度特征的能力。

迁移学习算法流程图 迁移算法干嘛的_机器学习_04

此算法可以分为两个部分:第一部分风格重构,用深度神经网络来提取图像的风格特征,从一开始卷积到多次卷积,图像的风格逐渐清晰。第二部分则为内容重构,同样用深度神经网络提取深度的图像特征,于此同时会丢掉一些细节信息。最后再将我们提取的风格和内容进行融合,得到我们风格迁移的结果。

迁移学习算法流程图 迁移算法干嘛的_迁移学习算法流程图_05

那在我们此算法中又采用什么样的损失函数呢,同上述内容相同,损失函数也分为两个部分,首先是内容损失,具体到图像风格转移,我们的假设是,如果两张图片有相同的representation,则它们是相似的,两张图片representation的相似性就是我们关于图像内容的衡量指标。两张图片的内容损失就是两张图片在某一层输出的二范数。对于风格损失来说,我们用各个特征图之间的互相关系作为图像的风格,同时我们用某一层输出的Gram矩阵来进行表达。Gram矩阵则是用来表示不同特征图也就是我们所说的representation之间的相互关系。最后,我们将两个损失函数赋予不同权重,来计算总的损失函数。

迁移学习算法流程图 迁移算法干嘛的_机器学习_06

蓝色箭头为前向运算,红色箭头为反向运算。连接内容图像和风格图像的网络只需要运行一次前向运算获得representation。我们从一张噪声图片开始,以它作为待优化图片。待优化图片通过网络的前向运算获得特定层的representation,然后通过计算representation与风格和内容的损失,获得反传梯度,并修改原图。这就是整个算法的思路。

最后,就是此算法的结论了,此方法能够快速的进行风格转换,并且实现非常不错的效果,于此同时节省了大量的时间,金钱和人力资源。于此同时,此方法为理解人类如创造和感知艺术形象的这样的一个非定性问题算法提供了不错的思路。

迁移学习算法流程图 迁移算法干嘛的_卷积_07

谢谢。有问题请指出。

 

参考:

A Neural Algorithm of Artistic Style.

图像风格迁移