What is neural style transfer?
如下图,左边是斯坦福大学校园,生成右边梵高星空的风格。 左边旧金山金门大桥,生成右边毕加索画的风格。神经风格转移允许将图片生成特定风格的新的图像。
ExampleWhat are deep ConvNets learning?
从一个例子开始,假设已经训练好了一个ConvNet,就像这样的AlexNet的网络。想用可视化的方法把不同层中的隐藏单元的当前计算内容展现出来。从第一层的隐藏单元开始,假设你浏览你的训练集,找出哪些图像或者图块对该单元的激励程度最大,换句话说,在你的神经网络中,把训练集暂停下来,弄清楚哪个图片最大程度地激活了该特定单元。
如果选择了一个隐藏层,要找出有哪九个输入图像最大程度地激励了该单元,你可能会发现如下的九个图块,看起来就像在那个特定的隐藏单元看到的图片中,它正在偏下的区域找一条边或一根线那样的东西,所以这些就是那九个图块,他们最大程度地激活了一个隐藏单元。
接下来Repeat for other units ,在第1层中挑出不同隐藏单元再做一遍类似的事情。以下是九种不同的代表性神经元,每种都对应最大程度激活它的九个图块,会发现,第一层中的训练用隐藏单元,它们通常在寻找相对简单的特征,比如边或特别的颜色。
在更深层的隐藏单元将会看到更大一部分的图像,在极端情况下,每个像素,说不定都会影响神经网络后面这些层的输出,所以后续的单元实际上看到了更大的图块
Cost Function
为了构建一个神经风格转移系统,我们为生成的图像来定义一个代价函数,之后会通过最小化这个代价函数,来生成你想要的图像。
问题的形式是,有一张内容图像C,有一张风格图像S,目标是生成一个新图像G。为了实现神经风格迁移,要做的是定义一个生成图像G的代价函数J,来衡量某个生成图像的质量有多好。用梯度下降让G的损失最小化,从而生成出想要的图像。
我们要定义这个代价函数的两个部分,第一个部分是内容代价函数,C,G是关于内容图像和生成图像的函数,它所做的是衡量生成图像的内容,与内容图像的内容之间的相似程度,并将这个结果与风格代价函数相加。风格代价函数,是一个关于风格图像与生成图像的函数,它所做的是衡量生成图像G与风格图像S的风格的相似程度。我们将按照一定的比重alpha和beta来表示内容代价与风格代价之间的相对比重。
1. 随机初始化这个新图像G,让它变成或者是或者是你想要的那个尺寸。
2. 用梯度下降来最小化这个代价函数,G用此表达式来更新,,也就是G减去代价函数关于G的导数。在这个过程当中,你相当于在更新新图像G的像素值。
下图的右边就是先随机初始化新图像G,所生成的图像就是这个充满噪点的图像,其中每个像素值都是随机选取的,在运行梯度下降时,在慢慢地通过更改G 的像素值将G的代价函数减小,然后你会得到一幅新的图像,它内容很像原本的内容,但风格更趋于原本的风格图片。
Content Cost Function
内容代价函数,假设用隐藏层l层来计算内容代价,如果l是非常小的数字,比如用隐藏层1,那么它会让你得到一个在像素值上与你的内容图像非常接近的图像,然而,若你使用一个非常深的层,那么,它会问你,比如,你的内容图像里面是否有一只狗,然后确保你生成的图像的某处有一只狗,所以,在实践中,隐藏层的数目,选择两者之间。这样,这个神经网络就既不会太浅,也不会太深,可以使用一个已经预训练过的卷积神经网络。
令和分别为前面两图像的l层激活因子,对应图像C和G,若这两个激活因子很接近,那么可以认为,这两个图像在内容上有相似性,所以我们将要做的是定义,为两个激活因子的差异程度。所以,我们将用这个元素级别的差异,作为隐藏层l层之间的差异,比较当你传入内容图像和传入生成图像之间的区别,将这个差做模的平方,并且,有没有正则化,归一化常数都可以。
Style Cost Function
风格代价函数,举个例子,如下图,如果有一张这样的图像作为输入,它们一般会通过这样的卷积神经网络,计算不同隐藏层中的特征,假设你选择了某一层L,来衡量图像的风格,我们要做的是将风格定义为层中不同激活通道之间的相关系数。
具体来说,假设你选择了激活层L,这是一个的激活阵,然后想知道不同的激活通道间的相关性有多大。假设有5个通道,前面两个红色和黄色的通道,这两个激活通道的相关性有多大,例如,在右下角,你在第一个通道和第二个通道分别有一些激活元,所以这会给你一个数组,你需要做的是遍历这个激活块中不同的位置,看这样一对一对的数,其中一个在第一个通道,也就是红色的通道,另一个在黄色的通道,也就是第二个通道,然后你就看这些成对的数,看看当你遍历所有这些位置,即所有这些的位置时,这些成对的数之间的相关性有多大。
假设红色的通道对应于这个竖条纹的神经元,黄色通道对应于分别橙色色块的神经元,如果这两个通道correlated,这意味着图像中任何有这种微妙的竖条纹的部分,那个部分也很有可能有这种橙色色调。如果它们不想管,这意味着,任何有竖条纹的部分,很有可能不会有橙色的色调。
所以相关性告诉了哪些高层的元素倾向于同时或不同时出现在图像的某一部分,相关程度提供了一种衡量这些高层特征,例如竖条纹或橙色色调或其他特征是否经常出现,以及是否经常同时出现在图像中的某一部分的方式。
如果我们使用通道间的相关性作为量化风格的方式,那么你可以做的是在生成的图像中测量第一个通道与第二个通道的相关程度,生成的图像的风格与输入的图像的风格有多相似。
用数学的语言来表达,目标是通过给定的图像计算出风格矩阵,风格矩阵会记录相关系数,所以,用来表示在隐藏层l中位于i,j,k的激活元,i表示高度,j表示宽度,k表示不同的通道。指标k会遍历例子中的5个通道。
有大小的矩阵来记录第l层每一对通道间的相关性,任意两个通道间,其实这个矩阵是对称的。。实践时可以优化一下。因此是通道k和通道k' 的激活元之间的相关性,k和k’都是从1取值到,在矩阵中位于第i行第j‘列,第k个channel和第k'个channel间的相关性,其计算公式为(这里的第二个k都是k’,不知什么原因,简书的数学公式打‘就会出现问题,所以全都写出了k,望谅解)
如果这些激活元都很大,那么Gkk’ 也会很大,而如果他们不相关,那么Gkk‘ 可能会较小。一直在用相关系数来直观的表述,但实际上计算的是为标准化的互协方差,因为我们没有将平均值减去,只是直接将对应的元素相乘。所以,上述就是计算图像的风格。
实际上,要对风格图像S和生成图像G都做同样的计算,如下图,一样的方程
下面算损失函数
网友评论