1 什么是神经风格迁移
对于一个实物图象和美术作品,神经网络会将美术作品的风格融合到实物图象中,从而生成一张新的艺术作品。这就是所谓的神经风格迁移。
2 卷积神经网络在学习什么
对第 1 层的训练通常是在寻找相对简单的特征,比如边或特别的颜色。
通过第 2 层是在检测更复杂的形状和模式,例如寻找拥有垂直线条的纹理。
从第3层到第5层,隐层会检测到的东西会越来越复杂 。
3 代价函数
代价函数由两部分组成:内容代价和风格代价。
实现:
4 内容代价函数
最小化内容代价函数的意义:
- 若选择前期的隐藏层来计算内容代价函数,那么会让你得到 一个在像素值上与你的内容图像非常接近的图像。
- 若选择非常深的隐藏层来计算内容代价函数, 那么它会确保生成的图像里包含内容图像里的目标物体。比如内容图像里面是否有一只狗,然后确保你生成的图像的某处也有一只狗。
所以在实践中,隐藏层的数目最好选择两者之间。
5 风格代价函数
5.1 风格 (Style) 的定义
如何量化风格呢?论文原文中,作者将 风格(Style) 定义为不同激活通道之间的相关系数。
为什么这能表示风格呢?
为了方便解释,我们假设红色的通道对应于红色笔迹圈出来的那些图块,它用于分辨在图像中某些位置是否有竖条纹。再假设黄色的通道对应于黄色笔迹圈出来的那些图块,它用于分辨图像中的橙色色块。如果这两个通道高度相关,那么这意味着图像中任何有竖条纹的部分,也很有可能有橙色色调。它们不相关呢? 则意味着任何有竖条纹的部分很有可能不会有橙色色调。所以相关性可以告诉你,哪一些高层特征倾向于同时或不同时出现在图像中的某个部分,相关程度则表示这些特征是否经常出现。
所以,我们使用通道间的相关性作为量化风格的方式。在生成的图像中测量第一个通道与第二个通道的相关程度,这可以告诉你在生成的图像中,竖条纹和橙色调是否经常同时出现,然后这会告诉你生成的图像的风格和输入图像的风格有多相似。
5.2 风格代价函数表达式
风格矩阵又被称为格拉姆 (Gram) 矩阵,所以用 G 来表示风格矩阵。若第
l
l
l 层的激活值共有
n
c
[
l
]
n_c^{^{[l]}}
nc[l] 个通道,那么第
l
l
l 层的风格矩阵 G 的形状为
n
c
[
l
]
∗
n
c
[
l
]
n_c^{^{[l]}} * n_c^{^{[l]}}
nc[l]∗nc[l]。
如果某两个通道不相关,那么风格矩阵
G
k
k
′
G_{kk'}
Gkk′ 可能会较小。
实际上,对于风格图像 S 和生成图像 G,都需要计算其对应的风格矩阵,以示区分,用
G
(
S
)
G^{(S)}
G(S) 和
G
(
G
)
G^{(G)}
G(G) 表示。最后,再用
G
[
l
]
(
S
)
G^{[l](S)}
G[l](S) 和
G
[
l
]
(
G
)
G^{[l](G)}
G[l](G) 来定义第
l
l
l 层的风格代价函数。
若用几个不同的层来计算风格代价矩阵,会得到看上去更好的结果。所以,总的风格代价函数可以被定义为所有不同层的风格代价函数的总和。我们需要使用一组额外的超参数
λ
\lambda
λ 给上述公式加入权重,这样就允许你控制一个神经网络中不同的层的风格代价函数。
这些层包括早期的层,用来捕捉相对简单的低层特征 比如边界的,以及一些后期的层,用来捕捉高层特征,这样可以使得在计算风格的时候,将神经网络中低层和高层的相关性都考虑到。