推荐:用 NSDT编辑器 快速搭建可编程3D场景
深度学习使得捕获一张图像的内容并将其与另一张图像的风格相结合成为可能。 这种技术称为神经风格迁移。 但是,神经风格迁移是如何工作的呢? 在这篇博文中,我们将研究神经风格迁移(NST)的底层机制。
1、高层次的直觉
正如我们所看到的,生成的图像具有内容图像的内容和样式图像的样式。 可见,单纯通过图像重叠并不能得到上述结果。 现在,一个重要的问题仍然存在,我们如何确保生成的图像具有内容图像的内容和风格图像的风格? 我们如何捕捉各个图像的内容和风格?
为了回答上述问题,我们来看看卷积神经网络(CNN)实际上在学习什么。
2、卷积神经网络捕获什么?
看下图。
现在,在第 1 层使用 32 个过滤器,网络可以捕获简单的模式,比如一条直线或水平线,这对我们来说可能没有意义,但对网络来说非常重要,并且慢慢地当我们向下移动到第 2 层时,其中有 64 个过滤器后,网络开始捕获越来越复杂的特征,可能是狗的脸或汽车的车轮。 这种对不同简单和复杂特征的捕获称为特征表示。
重要的是,CNN 不知道图像是什么,但它们学习对特定图像代表的内容进行编码。 卷积神经网络的这种编码性质可以帮助我们进行神经风格迁移。 让我们更深入地探讨一下。
3、如何使用卷积神经网络捕获图像的内容和风格?
VGG19 网络用于神经风格传输。 VGG-19 是一种卷积神经网络,经过 ImageNet 数据库中超过一百万张图像的训练。 该网络有 19 层深,并接受了数百万张图像的训练。 因此它能够检测图像中的高级特征。
现在,CNN 的这种“编码特性”是神经风格迁移的关键。 首先,我们初始化一个噪声图像,这将是我们的输出图像(G)。 然后我们计算该图像与网络(VGG 网络)中特定层的内容和风格图像的相似度。 由于我们希望输出图像(G)应该具有内容图像(C)的内容和样式图像(S)的风格,因此我们计算生成图像(G)相对于相应内容(C)和样式( S)图像。
有了上述直觉,让我们将内容损失和风格损失定义为随机生成的噪声图像。
3.1 内容损失
计算内容损失(Content Loss)意味着随机生成的噪声图像(G)与内容图像(C)有多相似。为了计算内容损失:
假设我们在预训练网络(VGG网络)中选择一个隐藏层(L)来计算损失。因此,令P和F分别为原始图像和生成的图像。并且,F[l]和P [l]是L层中各个图像的特征表示。现在,内容损失定义如下:
3.2 风格缺失
在计算风格损失(Style Loss)之前,我们先看看“图像风格”的含义是什么,或者我们如何捕捉图像的风格。
我们如何捕捉图像的风格?
该图像显示了特定选定层的不同通道或特征图或滤波器。现在,为了捕捉图像的风格,我们将计算这些滤波器彼此之间的“相关性”,这意味着这些特征图有多相似。但是 相关性是什么意思?
让我们通过一个例子来理解它:
让上图中的前两个通道为红色和黄色。假设,红色通道捕获一些简单的特征(例如,垂直线),如果这两个通道相关,则每当图像中存在垂直线时,检测到的垂直线 红色通道然后会有第二个通道的黄色效果。
现在,让我们看看如何(以数学方式)计算这些相关性。
为了计算不同滤波器或通道之间的相关性,我们计算两个滤波器的激活向量之间的点积。由此获得的矩阵称为 Gram 矩阵。
但我们如何知道它们是否相关呢?
如果两个滤波器的激活的点积很大,则两个通道被认为是相关的,如果它很小,则图像是不相关的。用数学的方式来说:
风格图像的Gram矩阵:
这里k和k’代表L层的不同滤波器或通道。我们称之为Gkk’[l][S]。
生成图像的Gram矩阵(G):
这里k和k’代表L层的不同滤波器或通道。我们称其为Gkk’[l][G]。
现在,我们可以定义风格损失:
样式和生成图像之间的成本函数是样式图像的格拉姆矩阵与生成图像的格拉姆矩阵之间的差的平方。
现在,让我们定义神经风格迁移的总损失。
3.3 总损失函数
总损失函数是内容和风格图像的成本之和。在数学上,它可以表示为:
你可能已经注意到上面等式中的Alpha和beta。它们分别用于权衡Content和Style成本。一般来说,它们定义了生成的输出图像中每个成本的权重。
一旦计算出损失,就可以使用反向传播来最小化这种损失,这反过来又会将我们随机生成的图像优化为有意义的艺术品。
这总结了神经风格迁移的工作原理。Tensorflow实现代码可以从这里下载。
原文链接:http://www.bimant.com/blog/neural-style-transfer-intuition/
本文暂时没有评论,来添加一个吧(●'◡'●)